From 32d73ec5bd45cda23694d7f771d22c36b2f15566 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Fri, 25 Mar 2011 21:57:21 -0700 Subject: [PATCH 001/253] Initial commit. --- protocols/rdp/AUTHORS | 1 + protocols/rdp/ChangeLog | 1 + protocols/rdp/LICENSE | 470 ++++++++++++++++++++++++++++++++++++++++ protocols/rdp/README | 75 +++++++ 4 files changed, 547 insertions(+) create mode 100644 protocols/rdp/AUTHORS create mode 100644 protocols/rdp/ChangeLog create mode 100644 protocols/rdp/LICENSE create mode 100644 protocols/rdp/README diff --git a/protocols/rdp/AUTHORS b/protocols/rdp/AUTHORS new file mode 100644 index 00000000..517d7a79 --- /dev/null +++ b/protocols/rdp/AUTHORS @@ -0,0 +1 @@ +Michael Jumper diff --git a/protocols/rdp/ChangeLog b/protocols/rdp/ChangeLog new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/protocols/rdp/ChangeLog @@ -0,0 +1 @@ + diff --git a/protocols/rdp/LICENSE b/protocols/rdp/LICENSE new file mode 100644 index 00000000..7714141d --- /dev/null +++ b/protocols/rdp/LICENSE @@ -0,0 +1,470 @@ + MOZILLA PUBLIC LICENSE + Version 1.1 + + --------------- + +1. Definitions. + + 1.0.1. "Commercial Use" means distribution or otherwise making the + Covered Code available to a third party. + + 1.1. "Contributor" means each entity that creates or contributes to + the creation of Modifications. + + 1.2. "Contributor Version" means the combination of the Original + Code, prior Modifications used by a Contributor, and the Modifications + made by that particular Contributor. + + 1.3. "Covered Code" means the Original Code or Modifications or the + combination of the Original Code and Modifications, in each case + including portions thereof. + + 1.4. "Electronic Distribution Mechanism" means a mechanism generally + accepted in the software development community for the electronic + transfer of data. + + 1.5. "Executable" means Covered Code in any form other than Source + Code. + + 1.6. "Initial Developer" means the individual or entity identified + as the Initial Developer in the Source Code notice required by Exhibit + A. + + 1.7. "Larger Work" means a work which combines Covered Code or + portions thereof with code not governed by the terms of this License. + + 1.8. "License" means this document. + + 1.8.1. "Licensable" means having the right to grant, to the maximum + extent possible, whether at the time of the initial grant or + subsequently acquired, any and all of the rights conveyed herein. + + 1.9. "Modifications" means any addition to or deletion from the + substance or structure of either the Original Code or any previous + Modifications. When Covered Code is released as a series of files, a + Modification is: + A. Any addition to or deletion from the contents of a file + containing Original Code or previous Modifications. + + B. Any new file that contains any part of the Original Code or + previous Modifications. + + 1.10. "Original Code" means Source Code of computer software code + which is described in the Source Code notice required by Exhibit A as + Original Code, and which, at the time of its release under this + License is not already Covered Code governed by this License. + + 1.10.1. "Patent Claims" means any patent claim(s), now owned or + hereafter acquired, including without limitation, method, process, + and apparatus claims, in any patent Licensable by grantor. + + 1.11. "Source Code" means the preferred form of the Covered Code for + making modifications to it, including all modules it contains, plus + any associated interface definition files, scripts used to control + compilation and installation of an Executable, or source code + differential comparisons against either the Original Code or another + well known, available Covered Code of the Contributor's choice. The + Source Code can be in a compressed or archival form, provided the + appropriate decompression or de-archiving software is widely available + for no charge. + + 1.12. "You" (or "Your") means an individual or a legal entity + exercising rights under, and complying with all of the terms of, this + License or a future version of this License issued under Section 6.1. + For legal entities, "You" includes any entity which controls, is + controlled by, or is under common control with You. For purposes of + this definition, "control" means (a) the power, direct or indirect, + to cause the direction or management of such entity, whether by + contract or otherwise, or (b) ownership of more than fifty percent + (50%) of the outstanding shares or beneficial ownership of such + entity. + +2. Source Code License. + + 2.1. The Initial Developer Grant. + The Initial Developer hereby grants You a world-wide, royalty-free, + non-exclusive license, subject to third party intellectual property + claims: + (a) under intellectual property rights (other than patent or + trademark) Licensable by Initial Developer to use, reproduce, + modify, display, perform, sublicense and distribute the Original + Code (or portions thereof) with or without Modifications, and/or + as part of a Larger Work; and + + (b) under Patents Claims infringed by the making, using or + selling of Original Code, to make, have made, use, practice, + sell, and offer for sale, and/or otherwise dispose of the + Original Code (or portions thereof). + + (c) the licenses granted in this Section 2.1(a) and (b) are + effective on the date Initial Developer first distributes + Original Code under the terms of this License. + + (d) Notwithstanding Section 2.1(b) above, no patent license is + granted: 1) for code that You delete from the Original Code; 2) + separate from the Original Code; or 3) for infringements caused + by: i) the modification of the Original Code or ii) the + combination of the Original Code with other software or devices. + + 2.2. Contributor Grant. + Subject to third party intellectual property claims, each Contributor + hereby grants You a world-wide, royalty-free, non-exclusive license + + (a) under intellectual property rights (other than patent or + trademark) Licensable by Contributor, to use, reproduce, modify, + display, perform, sublicense and distribute the Modifications + created by such Contributor (or portions thereof) either on an + unmodified basis, with other Modifications, as Covered Code + and/or as part of a Larger Work; and + + (b) under Patent Claims infringed by the making, using, or + selling of Modifications made by that Contributor either alone + and/or in combination with its Contributor Version (or portions + of such combination), to make, use, sell, offer for sale, have + made, and/or otherwise dispose of: 1) Modifications made by that + Contributor (or portions thereof); and 2) the combination of + Modifications made by that Contributor with its Contributor + Version (or portions of such combination). + + (c) the licenses granted in Sections 2.2(a) and 2.2(b) are + effective on the date Contributor first makes Commercial Use of + the Covered Code. + + (d) Notwithstanding Section 2.2(b) above, no patent license is + granted: 1) for any code that Contributor has deleted from the + Contributor Version; 2) separate from the Contributor Version; + 3) for infringements caused by: i) third party modifications of + Contributor Version or ii) the combination of Modifications made + by that Contributor with other software (except as part of the + Contributor Version) or other devices; or 4) under Patent Claims + infringed by Covered Code in the absence of Modifications made by + that Contributor. + +3. Distribution Obligations. + + 3.1. Application of License. + The Modifications which You create or to which You contribute are + governed by the terms of this License, including without limitation + Section 2.2. The Source Code version of Covered Code may be + distributed only under the terms of this License or a future version + of this License released under Section 6.1, and You must include a + copy of this License with every copy of the Source Code You + distribute. You may not offer or impose any terms on any Source Code + version that alters or restricts the applicable version of this + License or the recipients' rights hereunder. However, You may include + an additional document offering the additional rights described in + Section 3.5. + + 3.2. Availability of Source Code. + Any Modification which You create or to which You contribute must be + made available in Source Code form under the terms of this License + either on the same media as an Executable version or via an accepted + Electronic Distribution Mechanism to anyone to whom you made an + Executable version available; and if made available via Electronic + Distribution Mechanism, must remain available for at least twelve (12) + months after the date it initially became available, or at least six + (6) months after a subsequent version of that particular Modification + has been made available to such recipients. You are responsible for + ensuring that the Source Code version remains available even if the + Electronic Distribution Mechanism is maintained by a third party. + + 3.3. Description of Modifications. + You must cause all Covered Code to which You contribute to contain a + file documenting the changes You made to create that Covered Code and + the date of any change. You must include a prominent statement that + the Modification is derived, directly or indirectly, from Original + Code provided by the Initial Developer and including the name of the + Initial Developer in (a) the Source Code, and (b) in any notice in an + Executable version or related documentation in which You describe the + origin or ownership of the Covered Code. + + 3.4. Intellectual Property Matters + (a) Third Party Claims. + If Contributor has knowledge that a license under a third party's + intellectual property rights is required to exercise the rights + granted by such Contributor under Sections 2.1 or 2.2, + Contributor must include a text file with the Source Code + distribution titled "LEGAL" which describes the claim and the + party making the claim in sufficient detail that a recipient will + know whom to contact. If Contributor obtains such knowledge after + the Modification is made available as described in Section 3.2, + Contributor shall promptly modify the LEGAL file in all copies + Contributor makes available thereafter and shall take other steps + (such as notifying appropriate mailing lists or newsgroups) + reasonably calculated to inform those who received the Covered + Code that new knowledge has been obtained. + + (b) Contributor APIs. + If Contributor's Modifications include an application programming + interface and Contributor has knowledge of patent licenses which + are reasonably necessary to implement that API, Contributor must + also include this information in the LEGAL file. + + (c) Representations. + Contributor represents that, except as disclosed pursuant to + Section 3.4(a) above, Contributor believes that Contributor's + Modifications are Contributor's original creation(s) and/or + Contributor has sufficient rights to grant the rights conveyed by + this License. + + 3.5. Required Notices. + You must duplicate the notice in Exhibit A in each file of the Source + Code. If it is not possible to put such notice in a particular Source + Code file due to its structure, then You must include such notice in a + location (such as a relevant directory) where a user would be likely + to look for such a notice. If You created one or more Modification(s) + You may add your name as a Contributor to the notice described in + Exhibit A. You must also duplicate this License in any documentation + for the Source Code where You describe recipients' rights or ownership + rights relating to Covered Code. You may choose to offer, and to + charge a fee for, warranty, support, indemnity or liability + obligations to one or more recipients of Covered Code. However, You + may do so only on Your own behalf, and not on behalf of the Initial + Developer or any Contributor. You must make it absolutely clear than + any such warranty, support, indemnity or liability obligation is + offered by You alone, and You hereby agree to indemnify the Initial + Developer and every Contributor for any liability incurred by the + Initial Developer or such Contributor as a result of warranty, + support, indemnity or liability terms You offer. + + 3.6. Distribution of Executable Versions. + You may distribute Covered Code in Executable form only if the + requirements of Section 3.1-3.5 have been met for that Covered Code, + and if You include a notice stating that the Source Code version of + the Covered Code is available under the terms of this License, + including a description of how and where You have fulfilled the + obligations of Section 3.2. The notice must be conspicuously included + in any notice in an Executable version, related documentation or + collateral in which You describe recipients' rights relating to the + Covered Code. You may distribute the Executable version of Covered + Code or ownership rights under a license of Your choice, which may + contain terms different from this License, provided that You are in + compliance with the terms of this License and that the license for the + Executable version does not attempt to limit or alter the recipient's + rights in the Source Code version from the rights set forth in this + License. If You distribute the Executable version under a different + license You must make it absolutely clear that any terms which differ + from this License are offered by You alone, not by the Initial + Developer or any Contributor. You hereby agree to indemnify the + Initial Developer and every Contributor for any liability incurred by + the Initial Developer or such Contributor as a result of any such + terms You offer. + + 3.7. Larger Works. + You may create a Larger Work by combining Covered Code with other code + not governed by the terms of this License and distribute the Larger + Work as a single product. In such a case, You must make sure the + requirements of this License are fulfilled for the Covered Code. + +4. Inability to Comply Due to Statute or Regulation. + + If it is impossible for You to comply with any of the terms of this + License with respect to some or all of the Covered Code due to + statute, judicial order, or regulation then You must: (a) comply with + the terms of this License to the maximum extent possible; and (b) + describe the limitations and the code they affect. Such description + must be included in the LEGAL file described in Section 3.4 and must + be included with all distributions of the Source Code. Except to the + extent prohibited by statute or regulation, such description must be + sufficiently detailed for a recipient of ordinary skill to be able to + understand it. + +5. Application of this License. + + This License applies to code to which the Initial Developer has + attached the notice in Exhibit A and to related Covered Code. + +6. Versions of the License. + + 6.1. New Versions. + Netscape Communications Corporation ("Netscape") may publish revised + and/or new versions of the License from time to time. Each version + will be given a distinguishing version number. + + 6.2. Effect of New Versions. + Once Covered Code has been published under a particular version of the + License, You may always continue to use it under the terms of that + version. You may also choose to use such Covered Code under the terms + of any subsequent version of the License published by Netscape. No one + other than Netscape has the right to modify the terms applicable to + Covered Code created under this License. + + 6.3. Derivative Works. + If You create or use a modified version of this License (which you may + only do in order to apply it to code which is not already Covered Code + governed by this License), You must (a) rename Your license so that + the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape", + "MPL", "NPL" or any confusingly similar phrase do not appear in your + license (except to note that your license differs from this License) + and (b) otherwise make it clear that Your version of the license + contains terms which differ from the Mozilla Public License and + Netscape Public License. (Filling in the name of the Initial + Developer, Original Code or Contributor in the notice described in + Exhibit A shall not of themselves be deemed to be modifications of + this License.) + +7. DISCLAIMER OF WARRANTY. + + COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF + DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. + THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE + IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, + YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE + COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER + OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF + ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER. + +8. TERMINATION. + + 8.1. This License and the rights granted hereunder will terminate + automatically if You fail to comply with terms herein and fail to cure + such breach within 30 days of becoming aware of the breach. All + sublicenses to the Covered Code which are properly granted shall + survive any termination of this License. Provisions which, by their + nature, must remain in effect beyond the termination of this License + shall survive. + + 8.2. If You initiate litigation by asserting a patent infringement + claim (excluding declatory judgment actions) against Initial Developer + or a Contributor (the Initial Developer or Contributor against whom + You file such action is referred to as "Participant") alleging that: + + (a) such Participant's Contributor Version directly or indirectly + infringes any patent, then any and all rights granted by such + Participant to You under Sections 2.1 and/or 2.2 of this License + shall, upon 60 days notice from Participant terminate prospectively, + unless if within 60 days after receipt of notice You either: (i) + agree in writing to pay Participant a mutually agreeable reasonable + royalty for Your past and future use of Modifications made by such + Participant, or (ii) withdraw Your litigation claim with respect to + the Contributor Version against such Participant. If within 60 days + of notice, a reasonable royalty and payment arrangement are not + mutually agreed upon in writing by the parties or the litigation claim + is not withdrawn, the rights granted by Participant to You under + Sections 2.1 and/or 2.2 automatically terminate at the expiration of + the 60 day notice period specified above. + + (b) any software, hardware, or device, other than such Participant's + Contributor Version, directly or indirectly infringes any patent, then + any rights granted to You by such Participant under Sections 2.1(b) + and 2.2(b) are revoked effective as of the date You first made, used, + sold, distributed, or had made, Modifications made by that + Participant. + + 8.3. If You assert a patent infringement claim against Participant + alleging that such Participant's Contributor Version directly or + indirectly infringes any patent where such claim is resolved (such as + by license or settlement) prior to the initiation of patent + infringement litigation, then the reasonable value of the licenses + granted by such Participant under Sections 2.1 or 2.2 shall be taken + into account in determining the amount or value of any payment or + license. + + 8.4. In the event of termination under Sections 8.1 or 8.2 above, + all end user license agreements (excluding distributors and resellers) + which have been validly granted by You or any distributor hereunder + prior to termination shall survive termination. + +9. LIMITATION OF LIABILITY. + + UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT + (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL + DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE, + OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR + ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY + CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, + WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER + COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN + INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF + LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY + RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW + PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE + EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO + THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU. + +10. U.S. GOVERNMENT END USERS. + + The Covered Code is a "commercial item," as that term is defined in + 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer + software" and "commercial computer software documentation," as such + terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 + C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), + all U.S. Government End Users acquire Covered Code with only those + rights set forth herein. + +11. MISCELLANEOUS. + + This License represents the complete agreement concerning subject + matter hereof. If any provision of this License is held to be + unenforceable, such provision shall be reformed only to the extent + necessary to make it enforceable. This License shall be governed by + California law provisions (except to the extent applicable law, if + any, provides otherwise), excluding its conflict-of-law provisions. + With respect to disputes in which at least one party is a citizen of, + or an entity chartered or registered to do business in the United + States of America, any litigation relating to this License shall be + subject to the jurisdiction of the Federal Courts of the Northern + District of California, with venue lying in Santa Clara County, + California, with the losing party responsible for costs, including + without limitation, court costs and reasonable attorneys' fees and + expenses. The application of the United Nations Convention on + Contracts for the International Sale of Goods is expressly excluded. + Any law or regulation which provides that the language of a contract + shall be construed against the drafter shall not apply to this + License. + +12. RESPONSIBILITY FOR CLAIMS. + + As between Initial Developer and the Contributors, each party is + responsible for claims and damages arising, directly or indirectly, + out of its utilization of rights under this License and You agree to + work with Initial Developer and Contributors to distribute such + responsibility on an equitable basis. Nothing herein is intended or + shall be deemed to constitute any admission of liability. + +13. MULTIPLE-LICENSED CODE. + + Initial Developer may designate portions of the Covered Code as + "Multiple-Licensed". "Multiple-Licensed" means that the Initial + Developer permits you to utilize portions of the Covered Code under + Your choice of the NPL or the alternative licenses, if any, specified + by the Initial Developer in the file described in Exhibit A. + +EXHIBIT A -Mozilla Public License. + + ``The contents of this file are subject to the Mozilla Public License + Version 1.1 (the "License"); you may not use this file except in + compliance with the License. You may obtain a copy of the License at + http://www.mozilla.org/MPL/ + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the + License for the specific language governing rights and limitations + under the License. + + The Original Code is ______________________________________. + + The Initial Developer of the Original Code is ________________________. + Portions created by ______________________ are Copyright (C) ______ + _______________________. All Rights Reserved. + + Contributor(s): ______________________________________. + + Alternatively, the contents of this file may be used under the terms + of the _____ license (the "[___] License"), in which case the + provisions of [______] License are applicable instead of those + above. If you wish to allow use of your version of this file only + under the terms of the [____] License and not to allow others to use + your version of this file under the MPL, indicate your decision by + deleting the provisions above and replace them with the notice and + other provisions required by the [___] License. If you do not delete + the provisions above, a recipient may use your version of this file + under either the MPL or the [___] License." + + [NOTE: The text of this Exhibit A may differ slightly from the text of + the notices in the Source Code files of the Original Code. You should + use the text of this Exhibit A rather than the text found in the + Original Code Source Code for Your Modifications.] + diff --git a/protocols/rdp/README b/protocols/rdp/README new file mode 100644 index 00000000..5674dc50 --- /dev/null +++ b/protocols/rdp/README @@ -0,0 +1,75 @@ + +------------------------------------------------------------ + About this README +------------------------------------------------------------ + +This README is intended to provide quick and to-the-point documentation for +technical users intending to compile parts of Guacamole themselves. + +Distribution-specific packages are available from the files section of the main +project page: + + http://sourceforge.net/projects/guacamole/files/ + +Distribution-specific documentation is provided on the Guacamole wiki: + + http://guac-dev.org/ + + +------------------------------------------------------------ + What is libguac-client-rdp? +------------------------------------------------------------ + +libguac-client-rdp is a protocol support plugin for the Guacamole proxy (guacd) +which provides support for RDP, the proprietary remote desktop protocol used +by Windows Remote Deskop / Terminal Services, via the libfreerdp library. + + +------------------------------------------------------------ + Compiling and installing libguac-client-rdp +------------------------------------------------------------ + +Please note that distribution-specific pre-compiled packages are available from +the files section of the main project site: + + http://sourceforge.net/projects/guacamole/files/ + +libguac-client-rdp is built using the popular GNU Automake, and thus provides +the standard configure script. + +1) Run configure + + $ ./configure + + Assuming all dependencies have been installed, this should succeed without + errors. + +2) Run make + + $ make + + libguac-client-rdp will now compile. + +3) Install (as root) + + # make install + + libguac-client-rdp will install to your /usr/local/lib directory by default. + You can change the install location by using the --prefix option for + configure. + + You will need to run ldconfig (as root) so that guacd can find the library + when needed: + + # ldconfig + + +------------------------------------------------------------ + Reporting problems +------------------------------------------------------------ + +Please report any bugs encountered by opening a new ticket at the Trac system +hosted at: + + http://sourceforge.net/apps/trac/guacamole/ + From fb953b0892ee20d4656169f7361b6cd2177e003a Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Fri, 25 Mar 2011 21:58:46 -0700 Subject: [PATCH 002/253] Stub code and build files. --- protocols/rdp/.gitignore | 35 ++++++++++++++++++++ protocols/rdp/Makefile.am | 47 +++++++++++++++++++++++++++ protocols/rdp/configure.in | 57 ++++++++++++++++++++++++++++++++ protocols/rdp/src/rdp_client.c | 59 ++++++++++++++++++++++++++++++++++ 4 files changed, 198 insertions(+) create mode 100644 protocols/rdp/.gitignore create mode 100644 protocols/rdp/Makefile.am create mode 100644 protocols/rdp/configure.in create mode 100644 protocols/rdp/src/rdp_client.c diff --git a/protocols/rdp/.gitignore b/protocols/rdp/.gitignore new file mode 100644 index 00000000..e37f9166 --- /dev/null +++ b/protocols/rdp/.gitignore @@ -0,0 +1,35 @@ + +# Object code +*.o +*.so +*.lo +*.la + +# Backup files +*~ + +# Release files +*.tar.gz + +# Files currently being edited by vim or vi +*.swp + +# automake/autoconf +.deps/ +.libs/ +Makefile +Makefile.in +aclocal.m4 +autom4te.cache/ +m4/ +config.guess +config.log +config.status +config.sub +configure +depcomp +install-sh +libtool +ltmain.sh +missing + diff --git a/protocols/rdp/Makefile.am b/protocols/rdp/Makefile.am new file mode 100644 index 00000000..317ca26e --- /dev/null +++ b/protocols/rdp/Makefile.am @@ -0,0 +1,47 @@ +# ***** BEGIN LICENSE BLOCK ***** +# Version: MPL 1.1/GPL 2.0/LGPL 2.1 +# +# The contents of this file are subject to the Mozilla Public License Version +# 1.1 (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# http://www.mozilla.org/MPL/ +# +# Software distributed under the License is distributed on an "AS IS" basis, +# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +# for the specific language governing rights and limitations under the +# License. +# +# The Original Code is libguac-client-rdp. +# +# The Initial Developer of the Original Code is +# Michael Jumper. +# Portions created by the Initial Developer are Copyright (C) 2011 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# +# Alternatively, the contents of this file may be used under the terms of +# either the GNU General Public License Version 2 or later (the "GPL"), or +# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), +# in which case the provisions of the GPL or the LGPL are applicable instead +# of those above. If you wish to allow use of your version of this file only +# under the terms of either the GPL or the LGPL, and not to allow others to +# use your version of this file under the terms of the MPL, indicate your +# decision by deleting the provisions above and replace them with the notice +# and other provisions required by the GPL or the LGPL. If you do not delete +# the provisions above, a recipient may use your version of this file under +# the terms of any one of the MPL, the GPL or the LGPL. +# +# ***** END LICENSE BLOCK ***** + +AUTOMAKE_OPTIONS = foreign + +ACLOCAL_AMFLAGS = -I m4 +AM_CFLAGS = -Werror -Wall -pedantic + +lib_LTLIBRARIES = libguac-client-rdp.la + +libguac_client_rdp_la_SOURCES = src/rdp_client.c + +libguac_client_rdp_la_LDFLAGS = -version-info 0:0:0 + diff --git a/protocols/rdp/configure.in b/protocols/rdp/configure.in new file mode 100644 index 00000000..3c71c218 --- /dev/null +++ b/protocols/rdp/configure.in @@ -0,0 +1,57 @@ +# ***** BEGIN LICENSE BLOCK ***** +# Version: MPL 1.1/GPL 2.0/LGPL 2.1 +# +# The contents of this file are subject to the Mozilla Public License Version +# 1.1 (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# http://www.mozilla.org/MPL/ +# +# Software distributed under the License is distributed on an "AS IS" basis, +# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +# for the specific language governing rights and limitations under the +# License. +# +# The Original Code is libguac-client-rdp. +# +# The Initial Developer of the Original Code is +# Michael Jumper. +# Portions created by the Initial Developer are Copyright (C) 2011 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# +# Alternatively, the contents of this file may be used under the terms of +# either the GNU General Public License Version 2 or later (the "GPL"), or +# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), +# in which case the provisions of the GPL or the LGPL are applicable instead +# of those above. If you wish to allow use of your version of this file only +# under the terms of either the GPL or the LGPL, and not to allow others to +# use your version of this file under the terms of the MPL, indicate your +# decision by deleting the provisions above and replace them with the notice +# and other provisions required by the GPL or the LGPL. If you do not delete +# the provisions above, a recipient may use your version of this file under +# the terms of any one of the MPL, the GPL or the LGPL. +# +# ***** END LICENSE BLOCK ***** + +AC_INIT(src/rdp_client.c) +AM_INIT_AUTOMAKE([libguac-client-rdp], 0.4.0) +AC_CONFIG_MACRO_DIR([m4]) + +# Checks for programs. +AC_PROG_CC +AC_PROG_LIBTOOL + +# Checks for libraries. +AC_CHECK_LIB([guac], [guac_get_client],, AC_MSG_ERROR("libguac is required for communication via the guacamole protocol")) +AC_CHECK_LIB([png], [png_write_png],, AC_MSG_ERROR("libpng is required for writing png messages")) +AC_CHECK_LIB([freerdp], [freerdp_new],, AC_MSG_ERROR("libfreerdp is required")) + +# Checks for header files. +AC_CHECK_HEADERS([guacamole/client.h guacamole/guacio.h guacamole/protocol.h]) + +# Checks for library functions. +AC_FUNC_MALLOC + +AC_CONFIG_FILES([Makefile]) +AC_OUTPUT diff --git a/protocols/rdp/src/rdp_client.c b/protocols/rdp/src/rdp_client.c new file mode 100644 index 00000000..a2246494 --- /dev/null +++ b/protocols/rdp/src/rdp_client.c @@ -0,0 +1,59 @@ + +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is libguac-client-rdp. + * + * The Initial Developer of the Original Code is + * Michael Jumper. + * Portions created by the Initial Developer are Copyright (C) 2011 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + + +#include +#include +#include +#include + +/* Client plugin arguments */ +const char* GUAC_CLIENT_ARGS[] = { + "hostname", + "port", + NULL +}; + +int guac_client_init(guac_client* client, int argc, char** argv) { + + /* STUB */ + guac_send_error(client->io, "STUB"); + + return -1; + +} + From ff6d6fc404d1de64b1726ee157480f0b15139dab Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Fri, 25 Mar 2011 22:49:48 -0700 Subject: [PATCH 003/253] Actual calls to freerdp functions --- protocols/rdp/configure.in | 1 + protocols/rdp/src/rdp_client.c | 78 +++++++++++++++++++++++++++++++++- 2 files changed, 77 insertions(+), 2 deletions(-) diff --git a/protocols/rdp/configure.in b/protocols/rdp/configure.in index 3c71c218..4939ce6d 100644 --- a/protocols/rdp/configure.in +++ b/protocols/rdp/configure.in @@ -46,6 +46,7 @@ AC_PROG_LIBTOOL AC_CHECK_LIB([guac], [guac_get_client],, AC_MSG_ERROR("libguac is required for communication via the guacamole protocol")) AC_CHECK_LIB([png], [png_write_png],, AC_MSG_ERROR("libpng is required for writing png messages")) AC_CHECK_LIB([freerdp], [freerdp_new],, AC_MSG_ERROR("libfreerdp is required")) +AC_CHECK_LIB([freerdpchanman], [freerdp_chanman_new],, AC_MSG_ERROR("libfreerdp is required")) # Checks for header files. AC_CHECK_HEADERS([guacamole/client.h guacamole/guacio.h guacamole/protocol.h]) diff --git a/protocols/rdp/src/rdp_client.c b/protocols/rdp/src/rdp_client.c index a2246494..476b540f 100644 --- a/protocols/rdp/src/rdp_client.c +++ b/protocols/rdp/src/rdp_client.c @@ -35,12 +35,19 @@ * * ***** END LICENSE BLOCK ***** */ +#include +#include + +#include +#include #include #include #include #include +#define RDP_DEFAULT_PORT 3389 + /* Client plugin arguments */ const char* GUAC_CLIENT_ARGS[] = { "hostname", @@ -50,10 +57,77 @@ const char* GUAC_CLIENT_ARGS[] = { int guac_client_init(guac_client* client, int argc, char** argv) { + rdpInst* rdp_inst; + rdpChanMan* chanman; + rdpSet* settings; + + char* hostname; + int port = RDP_DEFAULT_PORT; + + if (argc < 2) { + guac_send_error(client->io, "Wrong argument count received."); + guac_flush(client->io); + return 1; + } + + /* If port specified, use it */ + if (argv[1][0] != '\0') + port = atoi(argv[1]); + + hostname = argv[0]; + + /* Get channel manager */ + chanman = freerdp_chanman_new(); + + /* INIT SETTINGS */ + settings = malloc(sizeof(rdpSet)); + memset(settings, 0, sizeof(rdpSet)); + + /* Set hostname */ + strncpy(settings->hostname, hostname, sizeof(settings->hostname) - 1); + + /* Default size */ + settings->width = 1024; + settings->height = 768; + + strncpy(settings->server, hostname, sizeof(settings->server)); + strcpy(settings->username, "guest"); + + settings->tcp_port_rdp = port; + settings->encryption = 1; + settings->server_depth = 16; + settings->bitmap_cache = 1; + settings->bitmap_compression = 1; + settings->desktop_save = 0; + settings->rdp5_performanceflags = + RDP5_NO_WALLPAPER | RDP5_NO_FULLWINDOWDRAG | RDP5_NO_MENUANIMATIONS; + settings->off_screen_bitmaps = 1; + settings->triblt = 0; + settings->new_cursors = 1; + settings->rdp_version = 5; + + /* Init chanman here? */ + + /* Init client */ + rdp_inst = freerdp_new(settings); + if (rdp_inst == NULL) { + guac_send_error(client->io, "Error initializing RDP client"); + guac_flush(client->io); + return 1; + } + + /* freerdp_chanman_pre_connect ? */ + /* rdp_inst->rdp_connect(rdp_inst) */ + /* rdp_inst->rdp_disconnect(rdp_inst) */ + /* freerdp_chanman_post_connect ? */ + + freerdp_free(rdp_inst); + freerdp_chanman_free(chanman); + free(settings); + /* STUB */ guac_send_error(client->io, "STUB"); - - return -1; + return 1; } From 5f6188ee254250bbcace2abe937744f25c20a43d Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Fri, 25 Mar 2011 22:59:39 -0700 Subject: [PATCH 004/253] Client data and free handler. --- protocols/rdp/src/rdp_client.c | 37 +++++++++++++++++++++++++++++++--- 1 file changed, 34 insertions(+), 3 deletions(-) diff --git a/protocols/rdp/src/rdp_client.c b/protocols/rdp/src/rdp_client.c index 476b540f..9b8930cf 100644 --- a/protocols/rdp/src/rdp_client.c +++ b/protocols/rdp/src/rdp_client.c @@ -55,8 +55,34 @@ const char* GUAC_CLIENT_ARGS[] = { NULL }; +typedef struct rdp_guac_client_data { + + rdpInst* rdp_inst; + rdpChanMan* chanman; + rdpSet* settings; + +} rdp_guac_client_data; + +int rdp_guac_client_free_handler(guac_client* client) { + + rdp_guac_client_data* guac_client_data = (rdp_guac_client_data*) client->data; + + /* Free RDP client */ + freerdp_free(guac_client_data->rdp_inst); + freerdp_chanman_free(guac_client_data->chanman); + free(guac_client_data->settings); + + /* Free guac client data */ + free(guac_client_data); + + return 0; + +} + int guac_client_init(guac_client* client, int argc, char** argv) { + rdp_guac_client_data* guac_client_data; + rdpInst* rdp_inst; rdpChanMan* chanman; rdpSet* settings; @@ -121,9 +147,14 @@ int guac_client_init(guac_client* client, int argc, char** argv) { /* rdp_inst->rdp_disconnect(rdp_inst) */ /* freerdp_chanman_post_connect ? */ - freerdp_free(rdp_inst); - freerdp_chanman_free(chanman); - free(settings); + /* Init client data */ + guac_client_data = malloc(sizeof(rdp_guac_client_data)); + guac_client_data->settings = settings; + guac_client_data->chanman = chanman; + guac_client_data->rdp_inst = rdp_inst; + + /* Client handlers */ + client->free_handler = rdp_guac_client_free_handler; /* STUB */ guac_send_error(client->io, "STUB"); From c4734b6c231c644e914f15865b0692d1f755ab00 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Fri, 25 Mar 2011 23:48:39 -0700 Subject: [PATCH 005/253] Error handler, actual connection --- protocols/rdp/src/rdp_client.c | 58 +++++++++++++++++++++++++++------- 1 file changed, 46 insertions(+), 12 deletions(-) diff --git a/protocols/rdp/src/rdp_client.c b/protocols/rdp/src/rdp_client.c index 9b8930cf..8ce83246 100644 --- a/protocols/rdp/src/rdp_client.c +++ b/protocols/rdp/src/rdp_client.c @@ -67,6 +67,9 @@ int rdp_guac_client_free_handler(guac_client* client) { rdp_guac_client_data* guac_client_data = (rdp_guac_client_data*) client->data; + /* Disconnect client */ + guac_client_data->rdp_inst->rdp_disconnect(guac_client_data->rdp_inst); + /* Free RDP client */ freerdp_free(guac_client_data->rdp_inst); freerdp_chanman_free(guac_client_data->chanman); @@ -79,6 +82,16 @@ int rdp_guac_client_free_handler(guac_client* client) { } +void guac_rdp_ui_error(rdpInst* inst, char* text) { + + guac_client* client = (guac_client*) inst->param1; + GUACIO* io = client->io; + + guac_send_error(io, text); + guac_flush(io); + +} + int guac_client_init(guac_client* client, int argc, char** argv) { rdp_guac_client_data* guac_client_data; @@ -102,12 +115,17 @@ int guac_client_init(guac_client* client, int argc, char** argv) { hostname = argv[0]; + /* Allocate client data */ + guac_client_data = malloc(sizeof(rdp_guac_client_data)); + /* Get channel manager */ chanman = freerdp_chanman_new(); + guac_client_data->chanman = chanman; /* INIT SETTINGS */ settings = malloc(sizeof(rdpSet)); memset(settings, 0, sizeof(rdpSet)); + guac_client_data->settings = settings; /* Set hostname */ strncpy(settings->hostname, hostname, sizeof(settings->hostname) - 1); @@ -132,8 +150,6 @@ int guac_client_init(guac_client* client, int argc, char** argv) { settings->new_cursors = 1; settings->rdp_version = 5; - /* Init chanman here? */ - /* Init client */ rdp_inst = freerdp_new(settings); if (rdp_inst == NULL) { @@ -141,18 +157,36 @@ int guac_client_init(guac_client* client, int argc, char** argv) { guac_flush(client->io); return 1; } - - /* freerdp_chanman_pre_connect ? */ - /* rdp_inst->rdp_connect(rdp_inst) */ - /* rdp_inst->rdp_disconnect(rdp_inst) */ - /* freerdp_chanman_post_connect ? */ - - /* Init client data */ - guac_client_data = malloc(sizeof(rdp_guac_client_data)); - guac_client_data->settings = settings; - guac_client_data->chanman = chanman; guac_client_data->rdp_inst = rdp_inst; + /* Store client data */ + rdp_inst->param1 = client; + client->data = guac_client_data; + + /* RDP handlers */ + rdp_inst->ui_error = guac_rdp_ui_error; + + /* Init chanman (pre-connect) */ + if (freerdp_chanman_pre_connect(chanman, rdp_inst)) { + guac_send_error(client->io, "Error initializing RDP client channel manager"); + guac_flush(client->io); + return 1; + } + + /* Connect to RDP server */ + if (rdp_inst->rdp_connect(rdp_inst)) { + guac_send_error(client->io, "Error connection to RDP server"); + guac_flush(client->io); + return 1; + } + + /* Init chanman (post-connect) */ + if (freerdp_chanman_post_connect(chanman, rdp_inst)) { + guac_send_error(client->io, "Error initializing RDP client channel manager"); + guac_flush(client->io); + return 1; + } + /* Client handlers */ client->free_handler = rdp_guac_client_free_handler; From 9f49741013001cbcbbfb9bdd154736dd510780ab Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Sat, 26 Mar 2011 19:14:39 -0700 Subject: [PATCH 006/253] Handler placeholders --- protocols/rdp/src/rdp_client.c | 48 +++++++++++++++++++++++++++++++++- 1 file changed, 47 insertions(+), 1 deletion(-) diff --git a/protocols/rdp/src/rdp_client.c b/protocols/rdp/src/rdp_client.c index 8ce83246..4ff405cf 100644 --- a/protocols/rdp/src/rdp_client.c +++ b/protocols/rdp/src/rdp_client.c @@ -82,6 +82,10 @@ int rdp_guac_client_free_handler(guac_client* client) { } +int guac_rdp_ui_select(rdpInst* inst, int socket) { + return 1; +} + void guac_rdp_ui_error(rdpInst* inst, char* text) { guac_client* client = (guac_client*) inst->param1; @@ -165,6 +169,48 @@ int guac_client_init(guac_client* client, int argc, char** argv) { /* RDP handlers */ rdp_inst->ui_error = guac_rdp_ui_error; + /* rdp_inst->ui_warning = PLACEHOLDER */ + /* rdp_inst->ui_unimpl = PLACEHOLDER */ + /* rdp_inst->ui_begin_update = PLACEHOLDER */ + /* rdp_inst->ui_end_update = PLACEHOLDER */ + /* rdp_inst->ui_desktop_save = PLACEHOLDER */ + /* rdp_inst->ui_desktop_restore = PLACEHOLDER */ + /* rdp_inst->ui_create_bitmap = PLACEHOLDER */ + /* rdp_inst->ui_paint_bitmap = PLACEHOLDER */ + /* rdp_inst->ui_destroy_bitmap = PLACEHOLDER */ + /* rdp_inst->ui_line = PLACEHOLDER */ + /* rdp_inst->ui_rect = PLACEHOLDER */ + /* rdp_inst->ui_polygon = PLACEHOLDER */ + /* rdp_inst->ui_polyline = PLACEHOLDER */ + /* rdp_inst->ui_ellipse = PLACEHOLDER */ + /* rdp_inst->ui_start_draw_glyphs = PLACEHOLDER */ + /* rdp_inst->ui_draw_glyph = PLACEHOLDER */ + /* rdp_inst->ui_end_draw_glyphs = PLACEHOLDER */ + /* rdp_inst->ui_get_toggle_keys_state = PLACEHOLDER */ + /* rdp_inst->ui_bell = PLACEHOLDER */ + /* rdp_inst->ui_destblt = PLACEHOLDER */ + /* rdp_inst->ui_patblt = PLACEHOLDER */ + /* rdp_inst->ui_screenblt = PLACEHOLDER */ + /* rdp_inst->ui_memblt = PLACEHOLDER */ + /* rdp_inst->ui_triblt = PLACEHOLDER */ + /* rdp_inst->ui_create_glyph = PLACEHOLDER */ + /* rdp_inst->ui_destroy_glyph = PLACEHOLDER */ + rdp_inst->ui_select = guac_rdp_ui_select; + /* rdp_inst->ui_set_clip = PLACEHOLDER */ + /* rdp_inst->ui_reset_clip = PLACEHOLDER */ + /* rdp_inst->ui_resize_window = PLACEHOLDER */ + /* rdp_inst->ui_set_cursor = PLACEHOLDER */ + /* rdp_inst->ui_destroy_cursor = PLACEHOLDER */ + /* rdp_inst->ui_create_cursor = PLACEHOLDER */ + /* rdp_inst->ui_set_null_cursor = PLACEHOLDER */ + /* rdp_inst->ui_set_default_cursor = PLACEHOLDER */ + /* rdp_inst->ui_create_colourmap = PLACEHOLDER */ + /* rdp_inst->ui_move_pointer = PLACEHOLDER */ + /* rdp_inst->ui_set_colourmap = PLACEHOLDER */ + /* rdp_inst->ui_create_surface = PLACEHOLDER */ + /* rdp_inst->ui_set_surface = PLACEHOLDER */ + /* rdp_inst->ui_destroy_surface = PLACEHOLDER */ + /* rdp_inst->ui_channel_data = PLACEHOLDER */ /* Init chanman (pre-connect) */ if (freerdp_chanman_pre_connect(chanman, rdp_inst)) { @@ -175,7 +221,7 @@ int guac_client_init(guac_client* client, int argc, char** argv) { /* Connect to RDP server */ if (rdp_inst->rdp_connect(rdp_inst)) { - guac_send_error(client->io, "Error connection to RDP server"); + guac_send_error(client->io, "Error connecting to RDP server"); guac_flush(client->io); return 1; } From f3da13556bce3b141e786e6015c7f9900ed32625 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Sat, 26 Mar 2011 21:37:32 -0700 Subject: [PATCH 007/253] RDP handler stubs --- protocols/rdp/Makefile.am | 2 +- protocols/rdp/src/rdp_client.c | 98 ++++++------- protocols/rdp/src/rdp_handlers.c | 232 +++++++++++++++++++++++++++++++ protocols/rdp/src/rdp_handlers.h | 88 ++++++++++++ 4 files changed, 364 insertions(+), 56 deletions(-) create mode 100644 protocols/rdp/src/rdp_handlers.c create mode 100644 protocols/rdp/src/rdp_handlers.h diff --git a/protocols/rdp/Makefile.am b/protocols/rdp/Makefile.am index 317ca26e..7b42844c 100644 --- a/protocols/rdp/Makefile.am +++ b/protocols/rdp/Makefile.am @@ -41,7 +41,7 @@ AM_CFLAGS = -Werror -Wall -pedantic lib_LTLIBRARIES = libguac-client-rdp.la -libguac_client_rdp_la_SOURCES = src/rdp_client.c +libguac_client_rdp_la_SOURCES = src/rdp_client.c src/rdp_handlers.c libguac_client_rdp_la_LDFLAGS = -version-info 0:0:0 diff --git a/protocols/rdp/src/rdp_client.c b/protocols/rdp/src/rdp_client.c index 4ff405cf..0159d516 100644 --- a/protocols/rdp/src/rdp_client.c +++ b/protocols/rdp/src/rdp_client.c @@ -46,6 +46,8 @@ #include #include +#include "rdp_handlers.h" + #define RDP_DEFAULT_PORT 3389 /* Client plugin arguments */ @@ -82,20 +84,6 @@ int rdp_guac_client_free_handler(guac_client* client) { } -int guac_rdp_ui_select(rdpInst* inst, int socket) { - return 1; -} - -void guac_rdp_ui_error(rdpInst* inst, char* text) { - - guac_client* client = (guac_client*) inst->param1; - GUACIO* io = client->io; - - guac_send_error(io, text); - guac_flush(io); - -} - int guac_client_init(guac_client* client, int argc, char** argv) { rdp_guac_client_data* guac_client_data; @@ -169,48 +157,48 @@ int guac_client_init(guac_client* client, int argc, char** argv) { /* RDP handlers */ rdp_inst->ui_error = guac_rdp_ui_error; - /* rdp_inst->ui_warning = PLACEHOLDER */ - /* rdp_inst->ui_unimpl = PLACEHOLDER */ - /* rdp_inst->ui_begin_update = PLACEHOLDER */ - /* rdp_inst->ui_end_update = PLACEHOLDER */ - /* rdp_inst->ui_desktop_save = PLACEHOLDER */ - /* rdp_inst->ui_desktop_restore = PLACEHOLDER */ - /* rdp_inst->ui_create_bitmap = PLACEHOLDER */ - /* rdp_inst->ui_paint_bitmap = PLACEHOLDER */ - /* rdp_inst->ui_destroy_bitmap = PLACEHOLDER */ - /* rdp_inst->ui_line = PLACEHOLDER */ - /* rdp_inst->ui_rect = PLACEHOLDER */ - /* rdp_inst->ui_polygon = PLACEHOLDER */ - /* rdp_inst->ui_polyline = PLACEHOLDER */ - /* rdp_inst->ui_ellipse = PLACEHOLDER */ - /* rdp_inst->ui_start_draw_glyphs = PLACEHOLDER */ - /* rdp_inst->ui_draw_glyph = PLACEHOLDER */ - /* rdp_inst->ui_end_draw_glyphs = PLACEHOLDER */ - /* rdp_inst->ui_get_toggle_keys_state = PLACEHOLDER */ - /* rdp_inst->ui_bell = PLACEHOLDER */ - /* rdp_inst->ui_destblt = PLACEHOLDER */ - /* rdp_inst->ui_patblt = PLACEHOLDER */ - /* rdp_inst->ui_screenblt = PLACEHOLDER */ - /* rdp_inst->ui_memblt = PLACEHOLDER */ - /* rdp_inst->ui_triblt = PLACEHOLDER */ - /* rdp_inst->ui_create_glyph = PLACEHOLDER */ - /* rdp_inst->ui_destroy_glyph = PLACEHOLDER */ + rdp_inst->ui_warning = guac_rdp_ui_warning; + rdp_inst->ui_unimpl = guac_rdp_ui_unimpl; + rdp_inst->ui_begin_update = guac_rdp_ui_begin_update; + rdp_inst->ui_end_update = guac_rdp_ui_end_update; + rdp_inst->ui_desktop_save = guac_rdp_ui_desktop_save; + rdp_inst->ui_desktop_restore = guac_rdp_ui_desktop_restore; + rdp_inst->ui_create_bitmap = guac_rdp_ui_create_bitmap; + rdp_inst->ui_paint_bitmap = guac_rdp_ui_paint_bitmap; + rdp_inst->ui_destroy_bitmap = guac_rdp_ui_destroy_bitmap; + rdp_inst->ui_line = guac_rdp_ui_line; + rdp_inst->ui_rect = guac_rdp_ui_rect; + rdp_inst->ui_polygon = guac_rdp_ui_polygon; + rdp_inst->ui_polyline = guac_rdp_ui_polyline; + rdp_inst->ui_ellipse = guac_rdp_ui_ellipse; + rdp_inst->ui_start_draw_glyphs = guac_rdp_ui_start_draw_glyphs; + rdp_inst->ui_draw_glyph = guac_rdp_ui_draw_glyph; + rdp_inst->ui_end_draw_glyphs = guac_rdp_ui_end_draw_glyphs; + rdp_inst->ui_get_toggle_keys_state = guac_rdp_ui_get_toggle_keys_state; + rdp_inst->ui_bell = guac_rdp_ui_bell; + rdp_inst->ui_destblt = guac_rdp_ui_destblt; + rdp_inst->ui_patblt = guac_rdp_ui_patblt; + rdp_inst->ui_screenblt = guac_rdp_ui_screenblt; + rdp_inst->ui_memblt = guac_rdp_ui_memblt; + rdp_inst->ui_triblt = guac_rdp_ui_triblt; + rdp_inst->ui_create_glyph = guac_rdp_ui_create_glyph; + rdp_inst->ui_destroy_glyph = guac_rdp_ui_destroy_glyph; rdp_inst->ui_select = guac_rdp_ui_select; - /* rdp_inst->ui_set_clip = PLACEHOLDER */ - /* rdp_inst->ui_reset_clip = PLACEHOLDER */ - /* rdp_inst->ui_resize_window = PLACEHOLDER */ - /* rdp_inst->ui_set_cursor = PLACEHOLDER */ - /* rdp_inst->ui_destroy_cursor = PLACEHOLDER */ - /* rdp_inst->ui_create_cursor = PLACEHOLDER */ - /* rdp_inst->ui_set_null_cursor = PLACEHOLDER */ - /* rdp_inst->ui_set_default_cursor = PLACEHOLDER */ - /* rdp_inst->ui_create_colourmap = PLACEHOLDER */ - /* rdp_inst->ui_move_pointer = PLACEHOLDER */ - /* rdp_inst->ui_set_colourmap = PLACEHOLDER */ - /* rdp_inst->ui_create_surface = PLACEHOLDER */ - /* rdp_inst->ui_set_surface = PLACEHOLDER */ - /* rdp_inst->ui_destroy_surface = PLACEHOLDER */ - /* rdp_inst->ui_channel_data = PLACEHOLDER */ + rdp_inst->ui_set_clip = guac_rdp_ui_set_clip; + rdp_inst->ui_reset_clip = guac_rdp_ui_reset_clip; + rdp_inst->ui_resize_window = guac_rdp_ui_resize_window; + rdp_inst->ui_set_cursor = guac_rdp_ui_set_cursor; + rdp_inst->ui_destroy_cursor = guac_rdp_ui_destroy_cursor; + rdp_inst->ui_create_cursor = guac_rdp_ui_create_cursor; + rdp_inst->ui_set_null_cursor = guac_rdp_ui_set_null_cursor; + rdp_inst->ui_set_default_cursor = guac_rdp_ui_set_default_cursor; + rdp_inst->ui_create_colourmap = guac_rdp_ui_create_colourmap; + rdp_inst->ui_move_pointer = guac_rdp_ui_move_pointer; + rdp_inst->ui_set_colourmap = guac_rdp_ui_set_colourmap; + rdp_inst->ui_create_surface = guac_rdp_ui_create_surface; + rdp_inst->ui_set_surface = guac_rdp_ui_set_surface; + rdp_inst->ui_destroy_surface = guac_rdp_ui_destroy_surface; + rdp_inst->ui_channel_data = guac_rdp_ui_channel_data; /* Init chanman (pre-connect) */ if (freerdp_chanman_pre_connect(chanman, rdp_inst)) { diff --git a/protocols/rdp/src/rdp_handlers.c b/protocols/rdp/src/rdp_handlers.c new file mode 100644 index 00000000..1f82173e --- /dev/null +++ b/protocols/rdp/src/rdp_handlers.c @@ -0,0 +1,232 @@ + +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is libguac-client-rdp. + * + * The Initial Developer of the Original Code is + * Michael Jumper. + * Portions created by the Initial Developer are Copyright (C) 2011 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#include + +#include + +#include +#include +#include + +#include "rdp_handlers.h" + +void guac_rdp_ui_error(rdpInst* inst, char* text) { + + guac_client* client = (guac_client*) inst->param1; + GUACIO* io = client->io; + + guac_send_error(io, text); + guac_flush(io); + +} + +void guac_rdp_ui_warning(rdpInst* inst, char* text) { + fprintf(stderr, "guac_rdp_ui_warning: STUB\n"); +} + +void guac_rdp_ui_unimpl(rdpInst* inst, char* text) { + fprintf(stderr, "guac_rdp_ui_unimpl: STUB\n"); +} + +void guac_rdp_ui_begin_update(rdpInst* inst) { + fprintf(stderr, "guac_rdp_ui_begin_update: STUB\n"); +} + +void guac_rdp_ui_end_update(rdpInst* inst) { + fprintf(stderr, "guac_rdp_ui_end_update: STUB\n"); +} + +void guac_rdp_ui_desktop_save(rdpInst* inst, int offset, int x, int y, int cx, int cy) { + fprintf(stderr, "guac_rdp_ui_desktop_save: STUB\n"); +} + +void guac_rdp_ui_desktop_restore(rdpInst* inst, int offset, int x, int y, int cx, int cy) { + fprintf(stderr, "guac_rdp_ui_desktop_restore: STUB\n"); +} + +RD_HBITMAP guac_rdp_ui_create_bitmap(rdpInst* inst, int width, int height, uint8* data) { + fprintf(stderr, "guac_rdp_ui_create_bitmap: STUB\n"); + return NULL; +} + +void guac_rdp_ui_paint_bitmap(rdpInst* inst, int x, int y, int cx, int cy, int width, int height, uint8* data) { + fprintf(stderr, "guac_rdp_ui_paint_bitmap: STUB\n"); +} + +void guac_rdp_ui_destroy_bitmap(rdpInst* inst, RD_HBITMAP bmp) { + fprintf(stderr, "guac_rdp_ui_destroy_bitmap: STUB\n"); +} + +void guac_rdp_ui_line(rdpInst* inst, uint8 opcode, int startx, int starty, int endx, int endy, RD_PEN* pen) { + fprintf(stderr, "guac_rdp_ui_line: STUB\n"); +} + +void guac_rdp_ui_rect(rdpInst* inst, int x, int y, int cx, int cy, int colour) { + fprintf(stderr, "guac_rdp_ui_rect: STUB\n"); +} + +void guac_rdp_ui_polygon(rdpInst* inst, uint8 opcode, uint8 fillmode, RD_POINT* point, int npoints, RD_BRUSH* brush, int bgcolour, int fgcolour) { + fprintf(stderr, "guac_rdp_ui_polygon: STUB\n"); +} + +void guac_rdp_ui_polyline(rdpInst* inst, uint8 opcode, RD_POINT* points, int npoints, RD_PEN* pen) { + fprintf(stderr, "guac_rdp_ui_polyline: STUB\n"); +} + +void guac_rdp_ui_ellipse(rdpInst* inst, uint8 opcode, uint8 fillmode, int x, int y, int cx, int cy, RD_BRUSH* brush, int bgcolour, int fgcolour) { + fprintf(stderr, "guac_rdp_ui_ellipse: STUB\n"); +} + +void guac_rdp_ui_start_draw_glyphs(rdpInst* inst, int bgcolour, int fgcolour) { + fprintf(stderr, "guac_rdp_ui_start_draw_glyphs: STUB\n"); +} + +void guac_rdp_ui_draw_glyph(rdpInst* inst, int x, int y, int cx, int cy, RD_HGLYPH glyph) { + fprintf(stderr, "guac_rdp_ui_draw_glyph: STUB\n"); +} + +void guac_rdp_ui_end_draw_glyphs(rdpInst* inst, int x, int y, int cx, int cy) { + fprintf(stderr, "guac_rdp_ui_end_draw_glyphs: STUB\n"); +} + +uint32 guac_rdp_ui_get_toggle_keys_state(rdpInst* inst) { + fprintf(stderr, "guac_rdp_ui_get_toggle_keys_state: STUB\n"); + return 0; +} + +void guac_rdp_ui_bell(rdpInst* inst) { + fprintf(stderr, "guac_rdp_ui_bell: STUB\n"); +} + +void guac_rdp_ui_destblt(rdpInst* inst, uint8 opcode, int x, int y, int cx, int cy) { + fprintf(stderr, "guac_rdp_ui_destblt: STUB\n"); +} + +void guac_rdp_ui_patblt(rdpInst* inst, uint8 opcode, int x, int y, int cx, int cy, RD_BRUSH* brush, int bgcolour, int fgcolour) { + fprintf(stderr, "guac_rdp_ui_patblt: STUB\n"); +} + +void guac_rdp_ui_screenblt(rdpInst* inst, uint8 opcode, int x, int y, int cx, int cy, int srcx, int srcy) { + fprintf(stderr, "guac_rdp_ui_screenblt: STUB\n"); +} + +void guac_rdp_ui_memblt(rdpInst* inst, uint8 opcode, int x, int y, int cx, int cy, RD_HBITMAP src, int srcx, int srcy) { + fprintf(stderr, "guac_rdp_ui_memblt: STUB\n"); +} + +void guac_rdp_ui_triblt(rdpInst* inst, uint8 opcode, int x, int y, int cx, int cy, RD_HBITMAP src, int srcx, int srcy, RD_BRUSH* brush, int bgcolour, int fgcolour) { + fprintf(stderr, "guac_rdp_ui_triblt: STUB\n"); +} + +RD_HGLYPH guac_rdp_ui_create_glyph(rdpInst* inst, int width, int height, uint8* data) { + fprintf(stderr, "guac_rdp_ui_create_glyph: STUB\n"); + return NULL; +} + +void guac_rdp_ui_destroy_glyph(rdpInst* inst, RD_HGLYPH glyph) { + fprintf(stderr, "guac_rdp_ui_destroy_glyph: STUB\n"); +} + +int guac_rdp_ui_select(rdpInst* inst, int rdp_socket) { + return 1; +} + +void guac_rdp_ui_set_clip(rdpInst* inst, int x, int y, int cx, int cy) { + fprintf(stderr, "guac_rdp_ui_set_clip: STUB\n"); +} + +void guac_rdp_ui_reset_clip(rdpInst* inst) { + fprintf(stderr, "guac_rdp_ui_reset_clip: STUB\n"); +} + +void guac_rdp_ui_resize_window(rdpInst* inst) { + fprintf(stderr, "guac_rdp_ui_resize_window: STUB\n"); +} + +void guac_rdp_ui_set_cursor(rdpInst* inst, RD_HCURSOR cursor) { + fprintf(stderr, "guac_rdp_ui_set_cursor: STUB\n"); +} + +void guac_rdp_ui_destroy_cursor(rdpInst* inst, RD_HCURSOR cursor) { + fprintf(stderr, "guac_rdp_ui_destroy_cursor: STUB\n"); +} + +RD_HCURSOR guac_rdp_ui_create_cursor(rdpInst* inst, unsigned int x, unsigned int y, int width, int height, uint8* andmask, uint8* xormask, int bpp) { + fprintf(stderr, "guac_rdp_ui_create_cursor: STUB\n"); + return NULL; +} + +void guac_rdp_ui_set_null_cursor(rdpInst* inst) { + fprintf(stderr, "guac_rdp_ui_set_null_cursor: STUB\n"); +} + +void guac_rdp_ui_set_default_cursor(rdpInst* inst) { + fprintf(stderr, "guac_rdp_ui_set_default_cursor: STUB\n"); +} + +RD_HCOLOURMAP guac_rdp_ui_create_colourmap(rdpInst* inst, RD_COLOURMAP* colours) { + fprintf(stderr, "guac_rdp_ui_create_colourmap: STUB\n"); + return NULL; +} + +void guac_rdp_ui_move_pointer(rdpInst* inst, int x, int y) { + fprintf(stderr, "guac_rdp_ui_move_pointer: STUB\n"); +} + +void guac_rdp_ui_set_colourmap(rdpInst* inst, RD_HCOLOURMAP map) { + fprintf(stderr, "guac_rdp_ui_set_colourmap: STUB\n"); +} + +RD_HBITMAP guac_rdp_ui_create_surface(rdpInst* inst, int width, int height, RD_HBITMAP old) { + fprintf(stderr, "guac_rdp_ui_create_surface: STUB\n"); + return NULL; +} + +void guac_rdp_ui_set_surface(rdpInst* inst, RD_HBITMAP surface) { + fprintf(stderr, "guac_rdp_ui_set_surface: STUB\n"); +} + +void guac_rdp_ui_destroy_surface(rdpInst* inst, RD_HBITMAP surface) { + fprintf(stderr, "guac_rdp_ui_destroy_surface: STUB\n"); +} + +void guac_rdp_ui_channel_data(rdpInst* inst, int chan_id, char* data, int data_size, int flags, int total_size) { + fprintf(stderr, "guac_rdp_ui_channel_data: STUB\n"); +} + + diff --git a/protocols/rdp/src/rdp_handlers.h b/protocols/rdp/src/rdp_handlers.h new file mode 100644 index 00000000..eeda95f9 --- /dev/null +++ b/protocols/rdp/src/rdp_handlers.h @@ -0,0 +1,88 @@ + +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is libguac-client-rdp. + * + * The Initial Developer of the Original Code is + * Michael Jumper. + * Portions created by the Initial Developer are Copyright (C) 2011 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#ifndef _GUAC_CLIENT_RDP_HANDLERS +#define _GUAC_CLIENT_RDP_HANDLERS + +#include + +void guac_rdp_ui_error(rdpInst* inst, char* text); +void guac_rdp_ui_warning(rdpInst* inst, char* text); +void guac_rdp_ui_unimpl(rdpInst* inst, char* text); +void guac_rdp_ui_begin_update(rdpInst* inst); +void guac_rdp_ui_end_update(rdpInst* inst); +void guac_rdp_ui_desktop_save(rdpInst* inst, int offset, int x, int y, int cx, int cy); +void guac_rdp_ui_desktop_restore(rdpInst* inst, int offset, int x, int y, int cx, int cy); +RD_HBITMAP guac_rdp_ui_create_bitmap(rdpInst* inst, int width, int height, uint8* data); +void guac_rdp_ui_paint_bitmap(rdpInst* inst, int x, int y, int cx, int cy, int width, int height, uint8* data); +void guac_rdp_ui_destroy_bitmap(rdpInst* inst, RD_HBITMAP bmp); +void guac_rdp_ui_line(rdpInst* inst, uint8 opcode, int startx, int starty, int endx, int endy, RD_PEN* pen); +void guac_rdp_ui_rect(rdpInst* inst, int x, int y, int cx, int cy, int colour); +void guac_rdp_ui_polygon(rdpInst* inst, uint8 opcode, uint8 fillmode, RD_POINT* point, int npoints, RD_BRUSH* brush, int bgcolour, int fgcolour); +void guac_rdp_ui_polyline(rdpInst* inst, uint8 opcode, RD_POINT* points, int npoints, RD_PEN* pen); +void guac_rdp_ui_ellipse(rdpInst* inst, uint8 opcode, uint8 fillmode, int x, int y, int cx, int cy, RD_BRUSH* brush, int bgcolour, int fgcolour); +void guac_rdp_ui_start_draw_glyphs(rdpInst* inst, int bgcolour, int fgcolour); +void guac_rdp_ui_draw_glyph(rdpInst* inst, int x, int y, int cx, int cy, RD_HGLYPH glyph); +void guac_rdp_ui_end_draw_glyphs(rdpInst* inst, int x, int y, int cx, int cy); +uint32 guac_rdp_ui_get_toggle_keys_state(rdpInst* inst); +void guac_rdp_ui_bell(rdpInst* inst); +void guac_rdp_ui_destblt(rdpInst* inst, uint8 opcode, int x, int y, int cx, int cy); +void guac_rdp_ui_patblt(rdpInst* inst, uint8 opcode, int x, int y, int cx, int cy, RD_BRUSH* brush, int bgcolour, int fgcolour); +void guac_rdp_ui_screenblt(rdpInst* inst, uint8 opcode, int x, int y, int cx, int cy, int srcx, int srcy); +void guac_rdp_ui_memblt(rdpInst* inst, uint8 opcode, int x, int y, int cx, int cy, RD_HBITMAP src, int srcx, int srcy); +void guac_rdp_ui_triblt(rdpInst* inst, uint8 opcode, int x, int y, int cx, int cy, RD_HBITMAP src, int srcx, int srcy, RD_BRUSH* brush, int bgcolour, int fgcolour); +RD_HGLYPH guac_rdp_ui_create_glyph(rdpInst* inst, int width, int height, uint8* data); +void guac_rdp_ui_destroy_glyph(rdpInst* inst, RD_HGLYPH glyph); +int guac_rdp_ui_select(rdpInst* inst, int rdp_socket); +void guac_rdp_ui_set_clip(rdpInst* inst, int x, int y, int cx, int cy); +void guac_rdp_ui_reset_clip(rdpInst* inst); +void guac_rdp_ui_resize_window(rdpInst* inst); +void guac_rdp_ui_set_cursor(rdpInst* inst, RD_HCURSOR cursor); +void guac_rdp_ui_destroy_cursor(rdpInst* inst, RD_HCURSOR cursor); +RD_HCURSOR guac_rdp_ui_create_cursor(rdpInst* inst, unsigned int x, unsigned int y, int width, int height, uint8* andmask, uint8* xormask, int bpp); +void guac_rdp_ui_set_null_cursor(rdpInst* inst); +void guac_rdp_ui_set_default_cursor(rdpInst* inst); +RD_HCOLOURMAP guac_rdp_ui_create_colourmap(rdpInst* inst, RD_COLOURMAP* colours); +void guac_rdp_ui_move_pointer(rdpInst* inst, int x, int y); +void guac_rdp_ui_set_colourmap(rdpInst* inst, RD_HCOLOURMAP map); +RD_HBITMAP guac_rdp_ui_create_surface(rdpInst* inst, int width, int height, RD_HBITMAP old); +void guac_rdp_ui_set_surface(rdpInst* inst, RD_HBITMAP surface); +void guac_rdp_ui_destroy_surface(rdpInst* inst, RD_HBITMAP surface); +void guac_rdp_ui_channel_data(rdpInst* inst, int chan_id, char* data, int data_size, int flags, int total_size); + +#endif + From e79d34f974942b63e503edf661e736ebd86d96fb Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Sun, 27 Mar 2011 19:04:05 -0700 Subject: [PATCH 008/253] Using cairo instead of libpng (as required by libguac), now handling RDP messages. --- protocols/rdp/configure.in | 2 +- protocols/rdp/src/rdp_client.c | 91 ++++++++++++++++++++++++++++++++-- 2 files changed, 89 insertions(+), 4 deletions(-) diff --git a/protocols/rdp/configure.in b/protocols/rdp/configure.in index 4939ce6d..968cd7cd 100644 --- a/protocols/rdp/configure.in +++ b/protocols/rdp/configure.in @@ -44,7 +44,7 @@ AC_PROG_LIBTOOL # Checks for libraries. AC_CHECK_LIB([guac], [guac_get_client],, AC_MSG_ERROR("libguac is required for communication via the guacamole protocol")) -AC_CHECK_LIB([png], [png_write_png],, AC_MSG_ERROR("libpng is required for writing png messages")) +AC_CHECK_LIB([cairo], [cairo_create],, AC_MSG_ERROR("cairo is required for drawing instructions")) AC_CHECK_LIB([freerdp], [freerdp_new],, AC_MSG_ERROR("libfreerdp is required")) AC_CHECK_LIB([freerdpchanman], [freerdp_chanman_new],, AC_MSG_ERROR("libfreerdp is required")) diff --git a/protocols/rdp/src/rdp_client.c b/protocols/rdp/src/rdp_client.c index 0159d516..f67b4409 100644 --- a/protocols/rdp/src/rdp_client.c +++ b/protocols/rdp/src/rdp_client.c @@ -38,6 +38,9 @@ #include #include +#include +#include + #include #include @@ -84,6 +87,88 @@ int rdp_guac_client_free_handler(guac_client* client) { } +int rdp_guac_client_handle_messages(guac_client* client) { + + rdp_guac_client_data* guac_client_data = (rdp_guac_client_data*) client->data; + rdpInst* rdp_inst = guac_client_data->rdp_inst; + rdpChanMan* chanman = guac_client_data->chanman; + + int index; + int max_fd, fd; + void* read_fds[32]; + void* write_fds[32]; + int read_count = 0; + int write_count = 0; + + fd_set rfds, wfds; + + /* get rdp fds */ + if (rdp_inst->rdp_get_fds(rdp_inst, read_fds, &read_count, write_fds, &write_count) != 0) { + guac_log_error("Unable to read RDP file descriptors."); + return 1; + } + + /* get channel fds */ + if (freerdp_chanman_get_fds(chanman, rdp_inst, read_fds, &read_count, write_fds, &write_count) != 0) { + guac_log_error("Unable to read RDP channel file descriptors."); + return 1; + } + + /* Construct read fd_set */ + max_fd = 0; + FD_ZERO(&rfds); + for (index = 0; index < read_count; index++) { + fd = (int)(long) (read_fds[index]); + if (fd > max_fd) + max_fd = fd; + FD_SET(fd, &rfds); + } + + /* Construct write fd_set */ + FD_ZERO(&wfds); + for (index = 0; index < write_count; index++) { + fd = (int)(long) (write_fds[index]); + if (fd > max_fd) + max_fd = fd; + FD_SET(fd, &wfds); + } + + /* If no file descriptors, error */ + if (max_fd == 0) { + guac_log_error("No file descriptors"); + return 1; + } + + /* Otherwise, wait for file descriptors given */ + if (select(max_fd + 1, &rfds, &wfds, NULL, NULL) == -1) { + /* these are not really errors */ + if (!((errno == EAGAIN) || + (errno == EWOULDBLOCK) || + (errno == EINPROGRESS) || + (errno == EINTR))) /* signal occurred */ + { + guac_log_error("Error waiting for file descriptor."); + return 1; + } + } + + /* check the libfreerdp fds */ + if (rdp_inst->rdp_check_fds(rdp_inst) != 0) { + guac_log_error("Error handling RDP file descriptors."); + return 1; + } + + /* check channel fds */ + if (freerdp_chanman_check_fds(chanman, rdp_inst) != 0) { + guac_log_error("Error handling RDP channel file descriptors."); + return 1; + } + + /* Success */ + return 0; + +} + int guac_client_init(guac_client* client, int argc, char** argv) { rdp_guac_client_data* guac_client_data; @@ -223,10 +308,10 @@ int guac_client_init(guac_client* client, int argc, char** argv) { /* Client handlers */ client->free_handler = rdp_guac_client_free_handler; + client->handle_messages = rdp_guac_client_handle_messages; - /* STUB */ - guac_send_error(client->io, "STUB"); - return 1; + /* Success */ + return 0; } From a636a073f02c7223707a304f91accf12c233a19b Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Sun, 27 Mar 2011 20:56:14 -0700 Subject: [PATCH 009/253] Moved struct, etc. into own header. --- protocols/rdp/src/rdp_client.c | 11 +----- protocols/rdp/src/rdp_client.h | 61 ++++++++++++++++++++++++++++++++ protocols/rdp/src/rdp_handlers.c | 2 +- 3 files changed, 63 insertions(+), 11 deletions(-) create mode 100644 protocols/rdp/src/rdp_client.h diff --git a/protocols/rdp/src/rdp_client.c b/protocols/rdp/src/rdp_client.c index f67b4409..5a09a5b7 100644 --- a/protocols/rdp/src/rdp_client.c +++ b/protocols/rdp/src/rdp_client.c @@ -50,8 +50,7 @@ #include #include "rdp_handlers.h" - -#define RDP_DEFAULT_PORT 3389 +#include "rdp_client.h" /* Client plugin arguments */ const char* GUAC_CLIENT_ARGS[] = { @@ -60,14 +59,6 @@ const char* GUAC_CLIENT_ARGS[] = { NULL }; -typedef struct rdp_guac_client_data { - - rdpInst* rdp_inst; - rdpChanMan* chanman; - rdpSet* settings; - -} rdp_guac_client_data; - int rdp_guac_client_free_handler(guac_client* client) { rdp_guac_client_data* guac_client_data = (rdp_guac_client_data*) client->data; diff --git a/protocols/rdp/src/rdp_client.h b/protocols/rdp/src/rdp_client.h new file mode 100644 index 00000000..dae60652 --- /dev/null +++ b/protocols/rdp/src/rdp_client.h @@ -0,0 +1,61 @@ + +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is libguac-client-rdp. + * + * The Initial Developer of the Original Code is + * Michael Jumper. + * Portions created by the Initial Developer are Copyright (C) 2011 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#ifndef _GUAC_CLIENT_RDP_CLIENT +#define _GUAC_CLIENT_RDP_CLIENT + +#include +#include + +#include + + +#define RDP_DEFAULT_PORT 3389 + +typedef struct rdp_guac_client_data { + + rdpInst* rdp_inst; + rdpChanMan* chanman; + rdpSet* settings; + +} rdp_guac_client_data; + +int rdp_guac_client_free_handler(guac_client* client); +int rdp_guac_client_handle_messages(guac_client* client); + +#endif + diff --git a/protocols/rdp/src/rdp_handlers.c b/protocols/rdp/src/rdp_handlers.c index 1f82173e..2b1ad19b 100644 --- a/protocols/rdp/src/rdp_handlers.c +++ b/protocols/rdp/src/rdp_handlers.c @@ -218,7 +218,7 @@ RD_HBITMAP guac_rdp_ui_create_surface(rdpInst* inst, int width, int height, RD_H } void guac_rdp_ui_set_surface(rdpInst* inst, RD_HBITMAP surface) { - fprintf(stderr, "guac_rdp_ui_set_surface: STUB\n"); + fprintf(stderr, "guac_rdp_ui_set_surface: STUB (surface=%p)\n", surface); } void guac_rdp_ui_destroy_surface(rdpInst* inst, RD_HBITMAP surface) { From 8f6ad5039b9084a046fc3288b15025ce41ea5045 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Sun, 27 Mar 2011 20:58:01 -0700 Subject: [PATCH 010/253] Moved headers into own dir. --- protocols/rdp/Makefile.am | 2 +- protocols/rdp/{src => include}/rdp_client.h | 0 protocols/rdp/{src => include}/rdp_handlers.h | 0 3 files changed, 1 insertion(+), 1 deletion(-) rename protocols/rdp/{src => include}/rdp_client.h (100%) rename protocols/rdp/{src => include}/rdp_handlers.h (100%) diff --git a/protocols/rdp/Makefile.am b/protocols/rdp/Makefile.am index 7b42844c..9903d6cd 100644 --- a/protocols/rdp/Makefile.am +++ b/protocols/rdp/Makefile.am @@ -37,7 +37,7 @@ AUTOMAKE_OPTIONS = foreign ACLOCAL_AMFLAGS = -I m4 -AM_CFLAGS = -Werror -Wall -pedantic +AM_CFLAGS = -Werror -Wall -pedantic -Iinclude lib_LTLIBRARIES = libguac-client-rdp.la diff --git a/protocols/rdp/src/rdp_client.h b/protocols/rdp/include/rdp_client.h similarity index 100% rename from protocols/rdp/src/rdp_client.h rename to protocols/rdp/include/rdp_client.h diff --git a/protocols/rdp/src/rdp_handlers.h b/protocols/rdp/include/rdp_handlers.h similarity index 100% rename from protocols/rdp/src/rdp_handlers.h rename to protocols/rdp/include/rdp_handlers.h From b4fb6d9198bcfe55fbe8ff7685c9bb37eca59843 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Wed, 20 Jul 2011 08:44:14 -0700 Subject: [PATCH 011/253] Updated to latest freerdp, using guac_log_info for stubs, de-stubbed some handlers, now simulating allocation of bitmaps/glyphs/etc. --- protocols/rdp/include/rdp_handlers.h | 10 +-- protocols/rdp/src/rdp_client.c | 10 ++- protocols/rdp/src/rdp_handlers.c | 121 +++++++++++++++------------ 3 files changed, 80 insertions(+), 61 deletions(-) diff --git a/protocols/rdp/include/rdp_handlers.h b/protocols/rdp/include/rdp_handlers.h index eeda95f9..5d43e044 100644 --- a/protocols/rdp/include/rdp_handlers.h +++ b/protocols/rdp/include/rdp_handlers.h @@ -40,9 +40,9 @@ #include -void guac_rdp_ui_error(rdpInst* inst, char* text); -void guac_rdp_ui_warning(rdpInst* inst, char* text); -void guac_rdp_ui_unimpl(rdpInst* inst, char* text); +void guac_rdp_ui_error(rdpInst* inst, const char* text); +void guac_rdp_ui_warning(rdpInst* inst, const char* text); +void guac_rdp_ui_unimpl(rdpInst* inst, const char* text); void guac_rdp_ui_begin_update(rdpInst* inst); void guac_rdp_ui_end_update(rdpInst* inst); void guac_rdp_ui_desktop_save(rdpInst* inst, int offset, int x, int y, int cx, int cy); @@ -76,9 +76,9 @@ void guac_rdp_ui_destroy_cursor(rdpInst* inst, RD_HCURSOR cursor); RD_HCURSOR guac_rdp_ui_create_cursor(rdpInst* inst, unsigned int x, unsigned int y, int width, int height, uint8* andmask, uint8* xormask, int bpp); void guac_rdp_ui_set_null_cursor(rdpInst* inst); void guac_rdp_ui_set_default_cursor(rdpInst* inst); -RD_HCOLOURMAP guac_rdp_ui_create_colourmap(rdpInst* inst, RD_COLOURMAP* colours); +RD_HPALETTE guac_rdp_ui_create_colormap(rdpInst* inst, RD_PALETTE* colours); void guac_rdp_ui_move_pointer(rdpInst* inst, int x, int y); -void guac_rdp_ui_set_colourmap(rdpInst* inst, RD_HCOLOURMAP map); +void guac_rdp_ui_set_colormap(rdpInst* inst, RD_HPALETTE map); RD_HBITMAP guac_rdp_ui_create_surface(rdpInst* inst, int width, int height, RD_HBITMAP old); void guac_rdp_ui_set_surface(rdpInst* inst, RD_HBITMAP surface); void guac_rdp_ui_destroy_surface(rdpInst* inst, RD_HBITMAP surface); diff --git a/protocols/rdp/src/rdp_client.c b/protocols/rdp/src/rdp_client.c index 5a09a5b7..a0b1d8b1 100644 --- a/protocols/rdp/src/rdp_client.c +++ b/protocols/rdp/src/rdp_client.c @@ -211,8 +211,10 @@ int guac_client_init(guac_client* client, int argc, char** argv) { settings->bitmap_cache = 1; settings->bitmap_compression = 1; settings->desktop_save = 0; - settings->rdp5_performanceflags = - RDP5_NO_WALLPAPER | RDP5_NO_FULLWINDOWDRAG | RDP5_NO_MENUANIMATIONS; + settings->performanceflags = + PERF_DISABLE_WALLPAPER + | PERF_DISABLE_FULLWINDOWDRAG + | PERF_DISABLE_MENUANIMATIONS; settings->off_screen_bitmaps = 1; settings->triblt = 0; settings->new_cursors = 1; @@ -268,9 +270,9 @@ int guac_client_init(guac_client* client, int argc, char** argv) { rdp_inst->ui_create_cursor = guac_rdp_ui_create_cursor; rdp_inst->ui_set_null_cursor = guac_rdp_ui_set_null_cursor; rdp_inst->ui_set_default_cursor = guac_rdp_ui_set_default_cursor; - rdp_inst->ui_create_colourmap = guac_rdp_ui_create_colourmap; + rdp_inst->ui_create_colormap = guac_rdp_ui_create_colormap; rdp_inst->ui_move_pointer = guac_rdp_ui_move_pointer; - rdp_inst->ui_set_colourmap = guac_rdp_ui_set_colourmap; + rdp_inst->ui_set_colormap = guac_rdp_ui_set_colormap; rdp_inst->ui_create_surface = guac_rdp_ui_create_surface; rdp_inst->ui_set_surface = guac_rdp_ui_set_surface; rdp_inst->ui_destroy_surface = guac_rdp_ui_destroy_surface; diff --git a/protocols/rdp/src/rdp_handlers.c b/protocols/rdp/src/rdp_handlers.c index 2b1ad19b..17093348 100644 --- a/protocols/rdp/src/rdp_handlers.c +++ b/protocols/rdp/src/rdp_handlers.c @@ -37,15 +37,20 @@ #include -#include - +#include +#include #include #include -#include + +#include #include "rdp_handlers.h" -void guac_rdp_ui_error(rdpInst* inst, char* text) { +long surface = 1; +long bitmap = 1; +long glyph = 1; + +void guac_rdp_ui_error(rdpInst* inst, const char* text) { guac_client* client = (guac_client*) inst->param1; GUACIO* io = client->io; @@ -55,111 +60,109 @@ void guac_rdp_ui_error(rdpInst* inst, char* text) { } -void guac_rdp_ui_warning(rdpInst* inst, char* text) { - fprintf(stderr, "guac_rdp_ui_warning: STUB\n"); +void guac_rdp_ui_warning(rdpInst* inst, const char* text) { + guac_log_info("guac_rdp_ui_warning: %s\n", text); } -void guac_rdp_ui_unimpl(rdpInst* inst, char* text) { - fprintf(stderr, "guac_rdp_ui_unimpl: STUB\n"); +void guac_rdp_ui_unimpl(rdpInst* inst, const char* text) { + guac_log_info("guac_rdp_ui_unimpl: %s\n", text); } void guac_rdp_ui_begin_update(rdpInst* inst) { - fprintf(stderr, "guac_rdp_ui_begin_update: STUB\n"); } void guac_rdp_ui_end_update(rdpInst* inst) { - fprintf(stderr, "guac_rdp_ui_end_update: STUB\n"); } void guac_rdp_ui_desktop_save(rdpInst* inst, int offset, int x, int y, int cx, int cy) { - fprintf(stderr, "guac_rdp_ui_desktop_save: STUB\n"); + guac_log_info("guac_rdp_ui_desktop_save: STUB\n"); } void guac_rdp_ui_desktop_restore(rdpInst* inst, int offset, int x, int y, int cx, int cy) { - fprintf(stderr, "guac_rdp_ui_desktop_restore: STUB\n"); + guac_log_info("guac_rdp_ui_desktop_restore: STUB\n"); } RD_HBITMAP guac_rdp_ui_create_bitmap(rdpInst* inst, int width, int height, uint8* data) { - fprintf(stderr, "guac_rdp_ui_create_bitmap: STUB\n"); - return NULL; + guac_log_info("guac_rdp_ui_create_bitmap: %ix%i, bpp=%i\n", width, height, inst->settings->server_depth); + return (RD_HBITMAP) bitmap++; } void guac_rdp_ui_paint_bitmap(rdpInst* inst, int x, int y, int cx, int cy, int width, int height, uint8* data) { - fprintf(stderr, "guac_rdp_ui_paint_bitmap: STUB\n"); + guac_log_info("guac_rdp_ui_paint_bitmap: STUB\n"); } void guac_rdp_ui_destroy_bitmap(rdpInst* inst, RD_HBITMAP bmp) { - fprintf(stderr, "guac_rdp_ui_destroy_bitmap: STUB\n"); + guac_log_info("guac_rdp_ui_destroy_bitmap: STUB\n"); } void guac_rdp_ui_line(rdpInst* inst, uint8 opcode, int startx, int starty, int endx, int endy, RD_PEN* pen) { - fprintf(stderr, "guac_rdp_ui_line: STUB\n"); + guac_log_info("guac_rdp_ui_line: STUB\n"); } void guac_rdp_ui_rect(rdpInst* inst, int x, int y, int cx, int cy, int colour) { - fprintf(stderr, "guac_rdp_ui_rect: STUB\n"); + guac_log_info("guac_rdp_ui_rect: STUB\n"); } void guac_rdp_ui_polygon(rdpInst* inst, uint8 opcode, uint8 fillmode, RD_POINT* point, int npoints, RD_BRUSH* brush, int bgcolour, int fgcolour) { - fprintf(stderr, "guac_rdp_ui_polygon: STUB\n"); + guac_log_info("guac_rdp_ui_polygon: STUB\n"); } void guac_rdp_ui_polyline(rdpInst* inst, uint8 opcode, RD_POINT* points, int npoints, RD_PEN* pen) { - fprintf(stderr, "guac_rdp_ui_polyline: STUB\n"); + guac_log_info("guac_rdp_ui_polyline: STUB\n"); } void guac_rdp_ui_ellipse(rdpInst* inst, uint8 opcode, uint8 fillmode, int x, int y, int cx, int cy, RD_BRUSH* brush, int bgcolour, int fgcolour) { - fprintf(stderr, "guac_rdp_ui_ellipse: STUB\n"); + guac_log_info("guac_rdp_ui_ellipse: STUB\n"); } void guac_rdp_ui_start_draw_glyphs(rdpInst* inst, int bgcolour, int fgcolour) { - fprintf(stderr, "guac_rdp_ui_start_draw_glyphs: STUB\n"); + guac_log_info("guac_rdp_ui_start_draw_glyphs: STUB\n"); } void guac_rdp_ui_draw_glyph(rdpInst* inst, int x, int y, int cx, int cy, RD_HGLYPH glyph) { - fprintf(stderr, "guac_rdp_ui_draw_glyph: STUB\n"); + guac_log_info("guac_rdp_ui_draw_glyph: STUB\n"); } void guac_rdp_ui_end_draw_glyphs(rdpInst* inst, int x, int y, int cx, int cy) { - fprintf(stderr, "guac_rdp_ui_end_draw_glyphs: STUB\n"); + guac_log_info("guac_rdp_ui_end_draw_glyphs: STUB\n"); } uint32 guac_rdp_ui_get_toggle_keys_state(rdpInst* inst) { - fprintf(stderr, "guac_rdp_ui_get_toggle_keys_state: STUB\n"); + guac_log_info("guac_rdp_ui_get_toggle_keys_state: STUB\n"); return 0; } void guac_rdp_ui_bell(rdpInst* inst) { - fprintf(stderr, "guac_rdp_ui_bell: STUB\n"); + guac_log_info("guac_rdp_ui_bell: STUB\n"); } void guac_rdp_ui_destblt(rdpInst* inst, uint8 opcode, int x, int y, int cx, int cy) { - fprintf(stderr, "guac_rdp_ui_destblt: STUB\n"); + guac_log_info("guac_rdp_ui_destblt: STUB\n"); } void guac_rdp_ui_patblt(rdpInst* inst, uint8 opcode, int x, int y, int cx, int cy, RD_BRUSH* brush, int bgcolour, int fgcolour) { - fprintf(stderr, "guac_rdp_ui_patblt: STUB\n"); + guac_log_info("guac_rdp_ui_patblt: STUB\n"); } void guac_rdp_ui_screenblt(rdpInst* inst, uint8 opcode, int x, int y, int cx, int cy, int srcx, int srcy) { - fprintf(stderr, "guac_rdp_ui_screenblt: STUB\n"); + guac_log_info("guac_rdp_ui_screenblt: STUB\n"); } void guac_rdp_ui_memblt(rdpInst* inst, uint8 opcode, int x, int y, int cx, int cy, RD_HBITMAP src, int srcx, int srcy) { - fprintf(stderr, "guac_rdp_ui_memblt: STUB\n"); + guac_log_info("guac_rdp_ui_memblt: STUB\n"); } void guac_rdp_ui_triblt(rdpInst* inst, uint8 opcode, int x, int y, int cx, int cy, RD_HBITMAP src, int srcx, int srcy, RD_BRUSH* brush, int bgcolour, int fgcolour) { - fprintf(stderr, "guac_rdp_ui_triblt: STUB\n"); + guac_log_info("guac_rdp_ui_triblt: STUB\n"); } RD_HGLYPH guac_rdp_ui_create_glyph(rdpInst* inst, int width, int height, uint8* data) { - fprintf(stderr, "guac_rdp_ui_create_glyph: STUB\n"); - return NULL; + guac_log_info("guac_rdp_ui_create_glyph: STUB\n"); + return (RD_HGLYPH) glyph++; } void guac_rdp_ui_destroy_glyph(rdpInst* inst, RD_HGLYPH glyph) { - fprintf(stderr, "guac_rdp_ui_destroy_glyph: STUB\n"); + guac_log_info("guac_rdp_ui_destroy_glyph: STUB\n"); } int guac_rdp_ui_select(rdpInst* inst, int rdp_socket) { @@ -167,66 +170,80 @@ int guac_rdp_ui_select(rdpInst* inst, int rdp_socket) { } void guac_rdp_ui_set_clip(rdpInst* inst, int x, int y, int cx, int cy) { - fprintf(stderr, "guac_rdp_ui_set_clip: STUB\n"); + guac_log_info("guac_rdp_ui_set_clip: STUB\n"); } void guac_rdp_ui_reset_clip(rdpInst* inst) { - fprintf(stderr, "guac_rdp_ui_reset_clip: STUB\n"); + guac_log_info("guac_rdp_ui_reset_clip: STUB\n"); } void guac_rdp_ui_resize_window(rdpInst* inst) { - fprintf(stderr, "guac_rdp_ui_resize_window: STUB\n"); + guac_log_info("guac_rdp_ui_resize_window: %ix%i\n", inst->settings->width, inst->settings->height); } void guac_rdp_ui_set_cursor(rdpInst* inst, RD_HCURSOR cursor) { - fprintf(stderr, "guac_rdp_ui_set_cursor: STUB\n"); + guac_log_info("guac_rdp_ui_set_cursor: STUB\n"); } void guac_rdp_ui_destroy_cursor(rdpInst* inst, RD_HCURSOR cursor) { - fprintf(stderr, "guac_rdp_ui_destroy_cursor: STUB\n"); + guac_log_info("guac_rdp_ui_destroy_cursor: STUB\n"); } RD_HCURSOR guac_rdp_ui_create_cursor(rdpInst* inst, unsigned int x, unsigned int y, int width, int height, uint8* andmask, uint8* xormask, int bpp) { - fprintf(stderr, "guac_rdp_ui_create_cursor: STUB\n"); + guac_log_info("guac_rdp_ui_create_cursor: STUB\n"); return NULL; } void guac_rdp_ui_set_null_cursor(rdpInst* inst) { - fprintf(stderr, "guac_rdp_ui_set_null_cursor: STUB\n"); + guac_log_info("guac_rdp_ui_set_null_cursor: STUB\n"); } void guac_rdp_ui_set_default_cursor(rdpInst* inst) { - fprintf(stderr, "guac_rdp_ui_set_default_cursor: STUB\n"); + guac_log_info("guac_rdp_ui_set_default_cursor: STUB\n"); } -RD_HCOLOURMAP guac_rdp_ui_create_colourmap(rdpInst* inst, RD_COLOURMAP* colours) { - fprintf(stderr, "guac_rdp_ui_create_colourmap: STUB\n"); +RD_HPALETTE guac_rdp_ui_create_colormap(rdpInst* inst, RD_PALETTE* colours) { + guac_log_info("guac_rdp_ui_create_colormap: STUB\n"); return NULL; } void guac_rdp_ui_move_pointer(rdpInst* inst, int x, int y) { - fprintf(stderr, "guac_rdp_ui_move_pointer: STUB\n"); + guac_log_info("guac_rdp_ui_move_pointer: STUB\n"); } -void guac_rdp_ui_set_colourmap(rdpInst* inst, RD_HCOLOURMAP map) { - fprintf(stderr, "guac_rdp_ui_set_colourmap: STUB\n"); +void guac_rdp_ui_set_colormap(rdpInst* inst, RD_HPALETTE map) { + guac_log_info("guac_rdp_ui_set_colormap: STUB\n"); } RD_HBITMAP guac_rdp_ui_create_surface(rdpInst* inst, int width, int height, RD_HBITMAP old) { - fprintf(stderr, "guac_rdp_ui_create_surface: STUB\n"); - return NULL; + guac_log_info("guac_rdp_ui_create_surface: %ix%i\n", width, height); + return (RD_HBITMAP) surface++; } void guac_rdp_ui_set_surface(rdpInst* inst, RD_HBITMAP surface) { - fprintf(stderr, "guac_rdp_ui_set_surface: STUB (surface=%p)\n", surface); + + guac_client* client = (guac_client*) inst->param1; + GUACIO* io = client->io; + + /* Init desktop */ + if (surface == NULL) { + + guac_send_name(io, inst->settings->server); + guac_send_size(io, inst->settings->width, inst->settings->height); + guac_flush(io); + + } + else + guac_log_info("guac_rdp_ui_set_surface: STUB (surface=%p) ... %ix%i\n", surface, inst->settings->width, inst->settings->height); + } void guac_rdp_ui_destroy_surface(rdpInst* inst, RD_HBITMAP surface) { - fprintf(stderr, "guac_rdp_ui_destroy_surface: STUB\n"); + guac_log_info("guac_rdp_ui_destroy_surface: STUB\n"); } void guac_rdp_ui_channel_data(rdpInst* inst, int chan_id, char* data, int data_size, int flags, int total_size) { - fprintf(stderr, "guac_rdp_ui_channel_data: STUB\n"); + guac_log_info("guac_rdp_ui_channel_data: STUB\n"); } From 90323579658e0417ddd03d2fc35fb4bc34c86a01 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Wed, 20 Jul 2011 12:48:11 -0700 Subject: [PATCH 012/253] Using new layer/buffer alloc/free for bitmap/glyph/surface create/destroy. --- protocols/rdp/src/rdp_handlers.c | 48 ++++++++++++++++++++++++-------- 1 file changed, 36 insertions(+), 12 deletions(-) diff --git a/protocols/rdp/src/rdp_handlers.c b/protocols/rdp/src/rdp_handlers.c index 17093348..caedcc32 100644 --- a/protocols/rdp/src/rdp_handlers.c +++ b/protocols/rdp/src/rdp_handlers.c @@ -46,10 +46,6 @@ #include "rdp_handlers.h" -long surface = 1; -long bitmap = 1; -long glyph = 1; - void guac_rdp_ui_error(rdpInst* inst, const char* text) { guac_client* client = (guac_client*) inst->param1; @@ -69,9 +65,11 @@ void guac_rdp_ui_unimpl(rdpInst* inst, const char* text) { } void guac_rdp_ui_begin_update(rdpInst* inst) { + /* UNUSED */ } void guac_rdp_ui_end_update(rdpInst* inst) { + /* UNUSED */ } void guac_rdp_ui_desktop_save(rdpInst* inst, int offset, int x, int y, int cx, int cy) { @@ -83,8 +81,15 @@ void guac_rdp_ui_desktop_restore(rdpInst* inst, int offset, int x, int y, int cx } RD_HBITMAP guac_rdp_ui_create_bitmap(rdpInst* inst, int width, int height, uint8* data) { - guac_log_info("guac_rdp_ui_create_bitmap: %ix%i, bpp=%i\n", width, height, inst->settings->server_depth); - return (RD_HBITMAP) bitmap++; + + /* Allocate and return buffer */ + guac_client* client = (guac_client*) inst->param1; + guac_layer* buffer = guac_client_alloc_buffer(client); + + guac_log_info("guac_rdp_ui_create_bitmap: STUB %ix%i, bpp=%i (got buffer %i)\n", width, height, inst->settings->server_depth, buffer->index); + + return (RD_HBITMAP) buffer; + } void guac_rdp_ui_paint_bitmap(rdpInst* inst, int x, int y, int cx, int cy, int width, int height, uint8* data) { @@ -92,7 +97,11 @@ void guac_rdp_ui_paint_bitmap(rdpInst* inst, int x, int y, int cx, int cy, int w } void guac_rdp_ui_destroy_bitmap(rdpInst* inst, RD_HBITMAP bmp) { - guac_log_info("guac_rdp_ui_destroy_bitmap: STUB\n"); + + /* Free buffer */ + guac_client* client = (guac_client*) inst->param1; + guac_client_free_buffer(client, (guac_layer*) bmp); + } void guac_rdp_ui_line(rdpInst* inst, uint8 opcode, int startx, int starty, int endx, int endy, RD_PEN* pen) { @@ -157,12 +166,20 @@ void guac_rdp_ui_triblt(rdpInst* inst, uint8 opcode, int x, int y, int cx, int c } RD_HGLYPH guac_rdp_ui_create_glyph(rdpInst* inst, int width, int height, uint8* data) { + + /* Allocate and return buffer */ + guac_client* client = (guac_client*) inst->param1; guac_log_info("guac_rdp_ui_create_glyph: STUB\n"); - return (RD_HGLYPH) glyph++; + return (RD_HGLYPH) guac_client_alloc_buffer(client); + } void guac_rdp_ui_destroy_glyph(rdpInst* inst, RD_HGLYPH glyph) { - guac_log_info("guac_rdp_ui_destroy_glyph: STUB\n"); + + /* Free buffer */ + guac_client* client = (guac_client*) inst->param1; + guac_client_free_buffer(client, (guac_layer*) glyph); + } int guac_rdp_ui_select(rdpInst* inst, int rdp_socket) { @@ -216,8 +233,11 @@ void guac_rdp_ui_set_colormap(rdpInst* inst, RD_HPALETTE map) { } RD_HBITMAP guac_rdp_ui_create_surface(rdpInst* inst, int width, int height, RD_HBITMAP old) { - guac_log_info("guac_rdp_ui_create_surface: %ix%i\n", width, height); - return (RD_HBITMAP) surface++; + + /* Allocate and return buffer */ + guac_client* client = (guac_client*) inst->param1; + return (RD_HBITMAP) guac_client_alloc_buffer(client); + } void guac_rdp_ui_set_surface(rdpInst* inst, RD_HBITMAP surface) { @@ -239,7 +259,11 @@ void guac_rdp_ui_set_surface(rdpInst* inst, RD_HBITMAP surface) { } void guac_rdp_ui_destroy_surface(rdpInst* inst, RD_HBITMAP surface) { - guac_log_info("guac_rdp_ui_destroy_surface: STUB\n"); + + /* Free buffer */ + guac_client* client = (guac_client*) inst->param1; + guac_client_free_buffer(client, (guac_layer*) surface); + } void guac_rdp_ui_channel_data(rdpInst* inst, int chan_id, char* data, int data_size, int flags, int total_size) { From 9b05cf5f67372fcb6f1bb8444996270bda3a7eb0 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Wed, 20 Jul 2011 16:15:32 -0700 Subject: [PATCH 013/253] Initial working drawing support for rect and bitmap --- protocols/rdp/include/rdp_handlers.h | 2 +- protocols/rdp/src/rdp_handlers.c | 145 ++++++++++++++++++++++++--- 2 files changed, 131 insertions(+), 16 deletions(-) diff --git a/protocols/rdp/include/rdp_handlers.h b/protocols/rdp/include/rdp_handlers.h index 5d43e044..cd06344e 100644 --- a/protocols/rdp/include/rdp_handlers.h +++ b/protocols/rdp/include/rdp_handlers.h @@ -63,7 +63,7 @@ void guac_rdp_ui_bell(rdpInst* inst); void guac_rdp_ui_destblt(rdpInst* inst, uint8 opcode, int x, int y, int cx, int cy); void guac_rdp_ui_patblt(rdpInst* inst, uint8 opcode, int x, int y, int cx, int cy, RD_BRUSH* brush, int bgcolour, int fgcolour); void guac_rdp_ui_screenblt(rdpInst* inst, uint8 opcode, int x, int y, int cx, int cy, int srcx, int srcy); -void guac_rdp_ui_memblt(rdpInst* inst, uint8 opcode, int x, int y, int cx, int cy, RD_HBITMAP src, int srcx, int srcy); +void guac_rdp_ui_memblt(rdpInst* inst, uint8 opcode, int x, int y, int width, int height, RD_HBITMAP src, int srcx, int srcy); void guac_rdp_ui_triblt(rdpInst* inst, uint8 opcode, int x, int y, int cx, int cy, RD_HBITMAP src, int srcx, int srcy, RD_BRUSH* brush, int bgcolour, int fgcolour); RD_HGLYPH guac_rdp_ui_create_glyph(rdpInst* inst, int width, int height, uint8* data); void guac_rdp_ui_destroy_glyph(rdpInst* inst, RD_HGLYPH glyph); diff --git a/protocols/rdp/src/rdp_handlers.c b/protocols/rdp/src/rdp_handlers.c index caedcc32..01ba5ded 100644 --- a/protocols/rdp/src/rdp_handlers.c +++ b/protocols/rdp/src/rdp_handlers.c @@ -36,6 +36,9 @@ * ***** END LICENSE BLOCK ***** */ #include +#include + +#include #include #include @@ -69,7 +72,9 @@ void guac_rdp_ui_begin_update(rdpInst* inst) { } void guac_rdp_ui_end_update(rdpInst* inst) { - /* UNUSED */ + guac_client* client = (guac_client*) inst->param1; + GUACIO* io = client->io; + guac_flush(io); } void guac_rdp_ui_desktop_save(rdpInst* inst, int offset, int x, int y, int cx, int cy) { @@ -80,13 +85,75 @@ void guac_rdp_ui_desktop_restore(rdpInst* inst, int offset, int x, int y, int cx guac_log_info("guac_rdp_ui_desktop_restore: STUB\n"); } + RD_HBITMAP guac_rdp_ui_create_bitmap(rdpInst* inst, int width, int height, uint8* data) { - /* Allocate and return buffer */ + /* Allocate buffer */ guac_client* client = (guac_client*) inst->param1; + GUACIO* io = client->io; guac_layer* buffer = guac_client_alloc_buffer(client); - guac_log_info("guac_rdp_ui_create_bitmap: STUB %ix%i, bpp=%i (got buffer %i)\n", width, height, inst->settings->server_depth, buffer->index); + int x, y; + int stride; + int bpp = inst->settings->server_depth / 8; + unsigned char* image_buffer; + unsigned char* image_buffer_row; + + cairo_surface_t* surface; + + /* Init Cairo buffer */ + stride = cairo_format_stride_for_width(CAIRO_FORMAT_RGB24, width); + image_buffer = malloc(height*stride); + image_buffer_row = image_buffer; + + /* Copy image data from image data to buffer */ + for (y = 0; y> 8) & 0xF8) | ((v >> 13) & 0x07); + green = ((v >> 3) & 0xFC) | ((v >> 9) & 0x03); + blue = ((v << 3) & 0xF8) | ((v >> 2) & 0x07); + break; + + default: /* The Magenta of Failure */ + red = 0xFF; + green = 0x00; + blue = 0xFF; + } + + /* Output RGB */ + *(image_buffer_current++) = (red << 16) | (green << 8) | blue; + + } + } + + surface = cairo_image_surface_create_for_data(image_buffer, CAIRO_FORMAT_RGB24, width, height, stride); + guac_send_png(io, GUAC_COMP_OVER, buffer, 0, 0, surface); + + /* Free surface */ + cairo_surface_destroy(surface); + free(image_buffer); return (RD_HBITMAP) buffer; @@ -108,11 +175,49 @@ void guac_rdp_ui_line(rdpInst* inst, uint8 opcode, int startx, int starty, int e guac_log_info("guac_rdp_ui_line: STUB\n"); } -void guac_rdp_ui_rect(rdpInst* inst, int x, int y, int cx, int cy, int colour) { - guac_log_info("guac_rdp_ui_rect: STUB\n"); +void guac_rdp_ui_rect(rdpInst* inst, int x, int y, int cx, int cy, int color) { + + guac_client* client = (guac_client*) inst->param1; + GUACIO* io = client->io; + + unsigned char red, green, blue; + + /* Create surface */ + cairo_surface_t* surface = cairo_image_surface_create(CAIRO_FORMAT_RGB24, cx, cy); + cairo_t* cairo = cairo_create(surface); + + switch (inst->settings->server_depth) { + case 24: + red = (color >> 16) & 0xFF; + green = (color >> 8) & 0xFF; + blue = (color ) & 0xFF; + break; + + case 16: + red = ((color >> 8) & 0xF8) | ((color >> 13) & 0x07); + green = ((color >> 3) & 0xFC) | ((color >> 9) & 0x03); + blue = ((color << 3) & 0xF8) | ((color >> 2) & 0x07); + break; + + default: /* The Magenta of Failure */ + red = 0xFF; + green = 0x00; + blue = 0xFF; + } + + /* Render rectangle */ + cairo_set_source_rgb(cairo, red, green, blue); + cairo_rectangle(cairo, 0, 0, cx, cy); + cairo_fill(cairo); + + /* Send background */ + cairo_destroy(cairo); + guac_send_png(io, GUAC_COMP_OVER, GUAC_DEFAULT_LAYER, x, y, surface); + cairo_surface_destroy(surface); + } -void guac_rdp_ui_polygon(rdpInst* inst, uint8 opcode, uint8 fillmode, RD_POINT* point, int npoints, RD_BRUSH* brush, int bgcolour, int fgcolour) { +void guac_rdp_ui_polygon(rdpInst* inst, uint8 opcode, uint8 fillmode, RD_POINT* point, int npoints, RD_BRUSH* brush, int bgcolor, int fgcolor) { guac_log_info("guac_rdp_ui_polygon: STUB\n"); } @@ -120,12 +225,12 @@ void guac_rdp_ui_polyline(rdpInst* inst, uint8 opcode, RD_POINT* points, int npo guac_log_info("guac_rdp_ui_polyline: STUB\n"); } -void guac_rdp_ui_ellipse(rdpInst* inst, uint8 opcode, uint8 fillmode, int x, int y, int cx, int cy, RD_BRUSH* brush, int bgcolour, int fgcolour) { +void guac_rdp_ui_ellipse(rdpInst* inst, uint8 opcode, uint8 fillmode, int x, int y, int cx, int cy, RD_BRUSH* brush, int bgcolor, int fgcolor) { guac_log_info("guac_rdp_ui_ellipse: STUB\n"); } -void guac_rdp_ui_start_draw_glyphs(rdpInst* inst, int bgcolour, int fgcolour) { - guac_log_info("guac_rdp_ui_start_draw_glyphs: STUB\n"); +void guac_rdp_ui_start_draw_glyphs(rdpInst* inst, int bgcolor, int fgcolor) { + /* UNUSED */ } void guac_rdp_ui_draw_glyph(rdpInst* inst, int x, int y, int cx, int cy, RD_HGLYPH glyph) { @@ -133,7 +238,7 @@ void guac_rdp_ui_draw_glyph(rdpInst* inst, int x, int y, int cx, int cy, RD_HGLY } void guac_rdp_ui_end_draw_glyphs(rdpInst* inst, int x, int y, int cx, int cy) { - guac_log_info("guac_rdp_ui_end_draw_glyphs: STUB\n"); + /* UNUSED */ } uint32 guac_rdp_ui_get_toggle_keys_state(rdpInst* inst) { @@ -149,7 +254,7 @@ void guac_rdp_ui_destblt(rdpInst* inst, uint8 opcode, int x, int y, int cx, int guac_log_info("guac_rdp_ui_destblt: STUB\n"); } -void guac_rdp_ui_patblt(rdpInst* inst, uint8 opcode, int x, int y, int cx, int cy, RD_BRUSH* brush, int bgcolour, int fgcolour) { +void guac_rdp_ui_patblt(rdpInst* inst, uint8 opcode, int x, int y, int cx, int cy, RD_BRUSH* brush, int bgcolor, int fgcolor) { guac_log_info("guac_rdp_ui_patblt: STUB\n"); } @@ -157,11 +262,21 @@ void guac_rdp_ui_screenblt(rdpInst* inst, uint8 opcode, int x, int y, int cx, in guac_log_info("guac_rdp_ui_screenblt: STUB\n"); } -void guac_rdp_ui_memblt(rdpInst* inst, uint8 opcode, int x, int y, int cx, int cy, RD_HBITMAP src, int srcx, int srcy) { - guac_log_info("guac_rdp_ui_memblt: STUB\n"); +void guac_rdp_ui_memblt(rdpInst* inst, uint8 opcode, int x, int y, int width, int height, RD_HBITMAP src, int srcx, int srcy) { + + guac_client* client = (guac_client*) inst->param1; + GUACIO* io = client->io; + + guac_log_info("guac_rdp_ui_memblt: opcode=%i, index=%i\n", opcode, + ((guac_layer*) src)->index); + + guac_send_copy(io, + (guac_layer*) src, srcx, srcy, width, height, + GUAC_COMP_OVER, GUAC_DEFAULT_LAYER, x, y); + } -void guac_rdp_ui_triblt(rdpInst* inst, uint8 opcode, int x, int y, int cx, int cy, RD_HBITMAP src, int srcx, int srcy, RD_BRUSH* brush, int bgcolour, int fgcolour) { +void guac_rdp_ui_triblt(rdpInst* inst, uint8 opcode, int x, int y, int cx, int cy, RD_HBITMAP src, int srcx, int srcy, RD_BRUSH* brush, int bgcolor, int fgcolor) { guac_log_info("guac_rdp_ui_triblt: STUB\n"); } @@ -219,7 +334,7 @@ void guac_rdp_ui_set_default_cursor(rdpInst* inst) { guac_log_info("guac_rdp_ui_set_default_cursor: STUB\n"); } -RD_HPALETTE guac_rdp_ui_create_colormap(rdpInst* inst, RD_PALETTE* colours) { +RD_HPALETTE guac_rdp_ui_create_colormap(rdpInst* inst, RD_PALETTE* colors) { guac_log_info("guac_rdp_ui_create_colormap: STUB\n"); return NULL; } From b9727f9d56f347039f91c65c1efb34a2ecadc5f1 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Thu, 21 Jul 2011 00:28:35 -0700 Subject: [PATCH 014/253] Using rect instruction, initial partial-stub for glyphs and rendering --- protocols/rdp/src/rdp_handlers.c | 89 +++++++++++++++++++++++++------- 1 file changed, 70 insertions(+), 19 deletions(-) diff --git a/protocols/rdp/src/rdp_handlers.c b/protocols/rdp/src/rdp_handlers.c index 01ba5ded..2335318a 100644 --- a/protocols/rdp/src/rdp_handlers.c +++ b/protocols/rdp/src/rdp_handlers.c @@ -182,10 +182,6 @@ void guac_rdp_ui_rect(rdpInst* inst, int x, int y, int cx, int cy, int color) { unsigned char red, green, blue; - /* Create surface */ - cairo_surface_t* surface = cairo_image_surface_create(CAIRO_FORMAT_RGB24, cx, cy); - cairo_t* cairo = cairo_create(surface); - switch (inst->settings->server_depth) { case 24: red = (color >> 16) & 0xFF; @@ -205,15 +201,10 @@ void guac_rdp_ui_rect(rdpInst* inst, int x, int y, int cx, int cy, int color) { blue = 0xFF; } - /* Render rectangle */ - cairo_set_source_rgb(cairo, red, green, blue); - cairo_rectangle(cairo, 0, 0, cx, cy); - cairo_fill(cairo); - - /* Send background */ - cairo_destroy(cairo); - guac_send_png(io, GUAC_COMP_OVER, GUAC_DEFAULT_LAYER, x, y, surface); - cairo_surface_destroy(surface); + /* Send rectangle */ + guac_send_rect(io, GUAC_COMP_OVER, GUAC_DEFAULT_LAYER, + x, y, cx, cy, + red, green, blue, 0xFF); } @@ -230,11 +221,18 @@ void guac_rdp_ui_ellipse(rdpInst* inst, uint8 opcode, uint8 fillmode, int x, int } void guac_rdp_ui_start_draw_glyphs(rdpInst* inst, int bgcolor, int fgcolor) { - /* UNUSED */ + /* UNUSED ... for now */ } -void guac_rdp_ui_draw_glyph(rdpInst* inst, int x, int y, int cx, int cy, RD_HGLYPH glyph) { - guac_log_info("guac_rdp_ui_draw_glyph: STUB\n"); +void guac_rdp_ui_draw_glyph(rdpInst* inst, int x, int y, int width, int height, RD_HGLYPH glyph) { + + guac_client* client = (guac_client*) inst->param1; + GUACIO* io = client->io; + + guac_send_copy(io, + (guac_layer*) glyph, 0, 0, width, height, + GUAC_COMP_OVER, GUAC_DEFAULT_LAYER, x, y); + } void guac_rdp_ui_end_draw_glyphs(rdpInst* inst, int x, int y, int cx, int cy) { @@ -282,10 +280,63 @@ void guac_rdp_ui_triblt(rdpInst* inst, uint8 opcode, int x, int y, int cx, int c RD_HGLYPH guac_rdp_ui_create_glyph(rdpInst* inst, int width, int height, uint8* data) { - /* Allocate and return buffer */ + /* Allocate buffer */ guac_client* client = (guac_client*) inst->param1; - guac_log_info("guac_rdp_ui_create_glyph: STUB\n"); - return (RD_HGLYPH) guac_client_alloc_buffer(client); + GUACIO* io = client->io; + guac_layer* glyph = guac_client_alloc_buffer(client); + + int x, y, i; + int stride; + unsigned char* image_buffer; + unsigned char* image_buffer_row; + + cairo_surface_t* surface; + + /* Init Cairo buffer */ + stride = cairo_format_stride_for_width(CAIRO_FORMAT_RGB24, width); + image_buffer = malloc(height*stride); + image_buffer_row = image_buffer; + + /* Copy image data from image data to buffer */ + for (y = 0; y Date: Thu, 21 Jul 2011 01:16:55 -0700 Subject: [PATCH 015/253] Transparent glyphs. --- protocols/rdp/src/rdp_handlers.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/protocols/rdp/src/rdp_handlers.c b/protocols/rdp/src/rdp_handlers.c index 2335318a..22fbd689 100644 --- a/protocols/rdp/src/rdp_handlers.c +++ b/protocols/rdp/src/rdp_handlers.c @@ -293,7 +293,7 @@ RD_HGLYPH guac_rdp_ui_create_glyph(rdpInst* inst, int width, int height, uint8* cairo_surface_t* surface; /* Init Cairo buffer */ - stride = cairo_format_stride_for_width(CAIRO_FORMAT_RGB24, width); + stride = cairo_format_stride_for_width(CAIRO_FORMAT_ARGB32, width); image_buffer = malloc(height*stride); image_buffer_row = image_buffer; @@ -316,9 +316,9 @@ RD_HGLYPH guac_rdp_ui_create_glyph(rdpInst* inst, int width, int height, uint8* /* Output RGB */ if (v & 0x80) - *(image_buffer_current++) = 0x000000; + *(image_buffer_current++) = 0xFF000000; else - *(image_buffer_current++) = 0xFFFFFF; + *(image_buffer_current++) = 0x00000000; /* Next bit */ v <<= 1; @@ -328,7 +328,7 @@ RD_HGLYPH guac_rdp_ui_create_glyph(rdpInst* inst, int width, int height, uint8* } } - surface = cairo_image_surface_create_for_data(image_buffer, CAIRO_FORMAT_RGB24, width, height, stride); + surface = cairo_image_surface_create_for_data(image_buffer, CAIRO_FORMAT_ARGB32, width, height, stride); guac_send_png(io, GUAC_COMP_OVER, glyph, 0, 0, surface); /* Free surface */ From d4fb4b0a32dc0b02461b4df7fb43dd20d9955931 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Thu, 21 Jul 2011 01:40:44 -0700 Subject: [PATCH 016/253] Using composite operations to set foreground/background of glyph. --- protocols/rdp/src/rdp_handlers.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/protocols/rdp/src/rdp_handlers.c b/protocols/rdp/src/rdp_handlers.c index 22fbd689..01e5acef 100644 --- a/protocols/rdp/src/rdp_handlers.c +++ b/protocols/rdp/src/rdp_handlers.c @@ -229,9 +229,20 @@ void guac_rdp_ui_draw_glyph(rdpInst* inst, int x, int y, int width, int height, guac_client* client = (guac_client*) inst->param1; GUACIO* io = client->io; + /* Stencil */ guac_send_copy(io, (guac_layer*) glyph, 0, 0, width, height, - GUAC_COMP_OVER, GUAC_DEFAULT_LAYER, x, y); + GUAC_COMP_SRC, GUAC_DEFAULT_LAYER, x, y); + + /* Foreground */ + guac_send_rect(io, GUAC_COMP_ATOP, GUAC_DEFAULT_LAYER, + x, y, width, height, + 0, 255, 0, 255); + + /* Background */ + guac_send_rect(io, GUAC_COMP_RATOP, GUAC_DEFAULT_LAYER, + x, y, width, height, + 255, 0, 0, 255); } @@ -329,7 +340,7 @@ RD_HGLYPH guac_rdp_ui_create_glyph(rdpInst* inst, int width, int height, uint8* } surface = cairo_image_surface_create_for_data(image_buffer, CAIRO_FORMAT_ARGB32, width, height, stride); - guac_send_png(io, GUAC_COMP_OVER, glyph, 0, 0, surface); + guac_send_png(io, GUAC_COMP_SRC, glyph, 0, 0, surface); /* Free surface */ cairo_surface_destroy(surface); From ca34e0c5368038b3b8b1db07bf8c6ac931330f88 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Thu, 21 Jul 2011 15:17:16 -0700 Subject: [PATCH 017/253] Fixed stub, added rudimentary mouse support, support for clip, coloring of text. --- protocols/rdp/include/rdp_client.h | 12 ++++ protocols/rdp/src/rdp_client.c | 27 +++++++++ protocols/rdp/src/rdp_handlers.c | 89 +++++++++++++++++++++++++----- 3 files changed, 115 insertions(+), 13 deletions(-) diff --git a/protocols/rdp/include/rdp_client.h b/protocols/rdp/include/rdp_client.h index dae60652..10e6a78b 100644 --- a/protocols/rdp/include/rdp_client.h +++ b/protocols/rdp/include/rdp_client.h @@ -46,16 +46,28 @@ #define RDP_DEFAULT_PORT 3389 +typedef struct guac_rdp_color { + int red; + int green; + int blue; +} guac_rdp_color; + typedef struct rdp_guac_client_data { rdpInst* rdp_inst; rdpChanMan* chanman; rdpSet* settings; + int mouse_button_mask; + + guac_rdp_color foreground; + guac_rdp_color background; + } rdp_guac_client_data; int rdp_guac_client_free_handler(guac_client* client); int rdp_guac_client_handle_messages(guac_client* client); +int rdp_guac_client_mouse_handler(guac_client* client, int x, int y, int mask); #endif diff --git a/protocols/rdp/src/rdp_client.c b/protocols/rdp/src/rdp_client.c index a0b1d8b1..6861c941 100644 --- a/protocols/rdp/src/rdp_client.c +++ b/protocols/rdp/src/rdp_client.c @@ -43,6 +43,7 @@ #include #include +#include #include #include @@ -228,6 +229,7 @@ int guac_client_init(guac_client* client, int argc, char** argv) { return 1; } guac_client_data->rdp_inst = rdp_inst; + guac_client_data->mouse_button_mask = 0; /* Store client data */ rdp_inst->param1 = client; @@ -302,9 +304,34 @@ int guac_client_init(guac_client* client, int argc, char** argv) { /* Client handlers */ client->free_handler = rdp_guac_client_free_handler; client->handle_messages = rdp_guac_client_handle_messages; + client->mouse_handler = rdp_guac_client_mouse_handler; /* Success */ return 0; } +int rdp_guac_client_mouse_handler(guac_client* client, int x, int y, int mask) { + + rdp_guac_client_data* guac_client_data = (rdp_guac_client_data*) client->data; + rdpInst* rdp_inst = guac_client_data->rdp_inst; + + /* If no buttons pressed */ + if (mask == 0) { + + /* Send mouse move event if no buttons pressed before */ + if (guac_client_data->mouse_button_mask == 0) + rdp_inst->rdp_send_input(rdp_inst, RDP_INPUT_MOUSE, PTRFLAGS_MOVE, x, y); + + /* Otherwise, send mouse up event, releasing any old buttons */ + else + rdp_inst->rdp_send_input(rdp_inst, RDP_INPUT_MOUSE, PTRFLAGS_BUTTON1, x, y); + } + + /* Otherwise, send mouse down event */ + else + rdp_inst->rdp_send_input(rdp_inst, RDP_INPUT_MOUSE, PTRFLAGS_DOWN | PTRFLAGS_BUTTON1, x, y); + + guac_client_data->mouse_button_mask = mask; + return 0; +} diff --git a/protocols/rdp/src/rdp_handlers.c b/protocols/rdp/src/rdp_handlers.c index 01e5acef..9e5e7670 100644 --- a/protocols/rdp/src/rdp_handlers.c +++ b/protocols/rdp/src/rdp_handlers.c @@ -48,6 +48,32 @@ #include #include "rdp_handlers.h" +#include "rdp_client.h" + + +void guac_rdp_convert_color(int depth, int color, guac_rdp_color* comp) { + + switch (depth) { + + case 24: + comp->red = (color >> 16) & 0xFF; + comp->green = (color >> 8) & 0xFF; + comp->blue = (color ) & 0xFF; + break; + + case 16: + comp->red = ((color >> 8) & 0xF8) | ((color >> 13) & 0x07); + comp->green = ((color >> 3) & 0xFC) | ((color >> 9) & 0x03); + comp->blue = ((color << 3) & 0xF8) | ((color >> 2) & 0x07); + break; + + default: /* The Magenta of Failure */ + comp->red = 0xFF; + comp->green = 0x00; + comp->blue = 0xFF; + } + +} void guac_rdp_ui_error(rdpInst* inst, const char* text) { @@ -221,28 +247,51 @@ void guac_rdp_ui_ellipse(rdpInst* inst, uint8 opcode, uint8 fillmode, int x, int } void guac_rdp_ui_start_draw_glyphs(rdpInst* inst, int bgcolor, int fgcolor) { - /* UNUSED ... for now */ + + guac_client* client = (guac_client*) inst->param1; + rdp_guac_client_data* guac_client_data = (rdp_guac_client_data*) client->data; + + guac_rdp_convert_color( + inst->settings->server_depth, + bgcolor, + &(guac_client_data->background)); + + guac_rdp_convert_color( + inst->settings->server_depth, + fgcolor, + &(guac_client_data->foreground)); + } void guac_rdp_ui_draw_glyph(rdpInst* inst, int x, int y, int width, int height, RD_HGLYPH glyph) { guac_client* client = (guac_client*) inst->param1; + rdp_guac_client_data* guac_client_data = (rdp_guac_client_data*) client->data; GUACIO* io = client->io; + /* NOTE: Originally: Stencil=SRC, FG=ATOP, BG=RATOP */ + /* Temporarily removed BG drawing... */ + /* Stencil */ guac_send_copy(io, (guac_layer*) glyph, 0, 0, width, height, - GUAC_COMP_SRC, GUAC_DEFAULT_LAYER, x, y); + GUAC_COMP_ROUT, GUAC_DEFAULT_LAYER, x, y); /* Foreground */ - guac_send_rect(io, GUAC_COMP_ATOP, GUAC_DEFAULT_LAYER, - x, y, width, height, - 0, 255, 0, 255); - - /* Background */ guac_send_rect(io, GUAC_COMP_RATOP, GUAC_DEFAULT_LAYER, x, y, width, height, - 255, 0, 0, 255); + guac_client_data->foreground.red, + guac_client_data->foreground.green, + guac_client_data->foreground.blue, + 255); + + /* Background */ + /*guac_send_rect(io, GUAC_COMP_RATOP, GUAC_DEFAULT_LAYER, + x, y, width, height, + guac_client_data->background.red, + guac_client_data->background.green, + guac_client_data->background.blue, + 255);*/ } @@ -276,8 +325,9 @@ void guac_rdp_ui_memblt(rdpInst* inst, uint8 opcode, int x, int y, int width, in guac_client* client = (guac_client*) inst->param1; GUACIO* io = client->io; - guac_log_info("guac_rdp_ui_memblt: opcode=%i, index=%i\n", opcode, - ((guac_layer*) src)->index); + if (opcode != 204) + guac_log_info("guac_rdp_ui_memblt: opcode=%i, index=%i\n", opcode, + ((guac_layer*) src)->index); guac_send_copy(io, (guac_layer*) src, srcx, srcy, width, height, @@ -364,11 +414,21 @@ int guac_rdp_ui_select(rdpInst* inst, int rdp_socket) { } void guac_rdp_ui_set_clip(rdpInst* inst, int x, int y, int cx, int cy) { - guac_log_info("guac_rdp_ui_set_clip: STUB\n"); + + guac_client* client = (guac_client*) inst->param1; + GUACIO* io = client->io; + + guac_send_clip(io, GUAC_DEFAULT_LAYER, x, y, cx, cy); + } void guac_rdp_ui_reset_clip(rdpInst* inst) { - guac_log_info("guac_rdp_ui_reset_clip: STUB\n"); + + guac_client* client = (guac_client*) inst->param1; + GUACIO* io = client->io; + + guac_send_clip(io, GUAC_DEFAULT_LAYER, 0, 0, inst->settings->width, inst->settings->height); + } void guac_rdp_ui_resize_window(rdpInst* inst) { @@ -384,8 +444,11 @@ void guac_rdp_ui_destroy_cursor(rdpInst* inst, RD_HCURSOR cursor) { } RD_HCURSOR guac_rdp_ui_create_cursor(rdpInst* inst, unsigned int x, unsigned int y, int width, int height, uint8* andmask, uint8* xormask, int bpp) { + + guac_client* client = (guac_client*) inst->param1; guac_log_info("guac_rdp_ui_create_cursor: STUB\n"); - return NULL; + return guac_client_alloc_buffer(client); + } void guac_rdp_ui_set_null_cursor(rdpInst* inst) { From bd8c2f596f46452bbff9725c9f7b55f7d0f01d8c Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Sun, 24 Jul 2011 00:47:38 -0700 Subject: [PATCH 018/253] Added handling for keyboard events --- protocols/rdp/Makefile.am | 2 +- protocols/rdp/include/rdp_client.h | 3 + protocols/rdp/include/rdp_handlers.h | 2 + protocols/rdp/include/rdp_keymap.h | 44 + protocols/rdp/src/rdp_client.c | 29 + protocols/rdp/src/rdp_handlers.c | 138 +- protocols/rdp/src/rdp_keymap.c | 5436 ++++++++++++++++++++++++++ 7 files changed, 5633 insertions(+), 21 deletions(-) create mode 100644 protocols/rdp/include/rdp_keymap.h create mode 100644 protocols/rdp/src/rdp_keymap.c diff --git a/protocols/rdp/Makefile.am b/protocols/rdp/Makefile.am index 9903d6cd..109d801c 100644 --- a/protocols/rdp/Makefile.am +++ b/protocols/rdp/Makefile.am @@ -41,7 +41,7 @@ AM_CFLAGS = -Werror -Wall -pedantic -Iinclude lib_LTLIBRARIES = libguac-client-rdp.la -libguac_client_rdp_la_SOURCES = src/rdp_client.c src/rdp_handlers.c +libguac_client_rdp_la_SOURCES = src/rdp_client.c src/rdp_handlers.c src/rdp_keymap.c libguac_client_rdp_la_LDFLAGS = -version-info 0:0:0 diff --git a/protocols/rdp/include/rdp_client.h b/protocols/rdp/include/rdp_client.h index 10e6a78b..be0dc8d2 100644 --- a/protocols/rdp/include/rdp_client.h +++ b/protocols/rdp/include/rdp_client.h @@ -63,11 +63,14 @@ typedef struct rdp_guac_client_data { guac_rdp_color foreground; guac_rdp_color background; + const guac_layer* current_surface; + } rdp_guac_client_data; int rdp_guac_client_free_handler(guac_client* client); int rdp_guac_client_handle_messages(guac_client* client); int rdp_guac_client_mouse_handler(guac_client* client, int x, int y, int mask); +int rdp_guac_client_key_handler(guac_client* client, int keysym, int pressed); #endif diff --git a/protocols/rdp/include/rdp_handlers.h b/protocols/rdp/include/rdp_handlers.h index cd06344e..4a50b511 100644 --- a/protocols/rdp/include/rdp_handlers.h +++ b/protocols/rdp/include/rdp_handlers.h @@ -84,5 +84,7 @@ void guac_rdp_ui_set_surface(rdpInst* inst, RD_HBITMAP surface); void guac_rdp_ui_destroy_surface(rdpInst* inst, RD_HBITMAP surface); void guac_rdp_ui_channel_data(rdpInst* inst, int chan_id, char* data, int data_size, int flags, int total_size); +extern const int guac_rdp_letter_scancodes[]; + #endif diff --git a/protocols/rdp/include/rdp_keymap.h b/protocols/rdp/include/rdp_keymap.h new file mode 100644 index 00000000..73ddc32e --- /dev/null +++ b/protocols/rdp/include/rdp_keymap.h @@ -0,0 +1,44 @@ + +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is libguac-client-rdp. + * + * The Initial Developer of the Original Code is + * Michael Jumper. + * Portions created by the Initial Developer are Copyright (C) 2011 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#ifndef _GUAC_CLIENT_RDP_KEYMAP +#define _GUAC_CLIENT_RDP_KEYMAP + +extern const int guac_rdp_keysym_scancode[256][256]; + +#endif + diff --git a/protocols/rdp/src/rdp_client.c b/protocols/rdp/src/rdp_client.c index 6861c941..18fa10c1 100644 --- a/protocols/rdp/src/rdp_client.c +++ b/protocols/rdp/src/rdp_client.c @@ -52,6 +52,7 @@ #include "rdp_handlers.h" #include "rdp_client.h" +#include "rdp_keymap.h" /* Client plugin arguments */ const char* GUAC_CLIENT_ARGS[] = { @@ -230,6 +231,7 @@ int guac_client_init(guac_client* client, int argc, char** argv) { } guac_client_data->rdp_inst = rdp_inst; guac_client_data->mouse_button_mask = 0; + guac_client_data->current_surface = GUAC_DEFAULT_LAYER; /* Store client data */ rdp_inst->param1 = client; @@ -305,6 +307,7 @@ int guac_client_init(guac_client* client, int argc, char** argv) { client->free_handler = rdp_guac_client_free_handler; client->handle_messages = rdp_guac_client_handle_messages; client->mouse_handler = rdp_guac_client_mouse_handler; + client->key_handler = rdp_guac_client_key_handler; /* Success */ return 0; @@ -335,3 +338,29 @@ int rdp_guac_client_mouse_handler(guac_client* client, int x, int y, int mask) { guac_client_data->mouse_button_mask = mask; return 0; } + +int rdp_guac_client_key_handler(guac_client* client, int keysym, int pressed) { + + rdp_guac_client_data* guac_client_data = (rdp_guac_client_data*) client->data; + rdpInst* rdp_inst = guac_client_data->rdp_inst; + + /* If keysym can be in lookup table */ + if (keysym <= 0xFFFF) { + + /* Look up scancode */ + int scancode = + guac_rdp_keysym_scancode[(keysym & 0xFF00) >> 8][keysym & 0xFF]; + + /* If defined, send event */ + if (scancode != 0) + rdp_inst->rdp_send_input( + rdp_inst, RDP_INPUT_SCANCODE, + pressed ? RDP_KEYPRESS : RDP_KEYRELEASE, + scancode, + 0); + + } + + return 0; +} + diff --git a/protocols/rdp/src/rdp_handlers.c b/protocols/rdp/src/rdp_handlers.c index 9e5e7670..9347c26a 100644 --- a/protocols/rdp/src/rdp_handlers.c +++ b/protocols/rdp/src/rdp_handlers.c @@ -50,7 +50,6 @@ #include "rdp_handlers.h" #include "rdp_client.h" - void guac_rdp_convert_color(int depth, int color, guac_rdp_color* comp) { switch (depth) { @@ -176,6 +175,7 @@ RD_HBITMAP guac_rdp_ui_create_bitmap(rdpInst* inst, int width, int height, uint8 surface = cairo_image_surface_create_for_data(image_buffer, CAIRO_FORMAT_RGB24, width, height, stride); guac_send_png(io, GUAC_COMP_OVER, buffer, 0, 0, surface); + guac_flush(io); /* Free surface */ cairo_surface_destroy(surface); @@ -186,7 +186,75 @@ RD_HBITMAP guac_rdp_ui_create_bitmap(rdpInst* inst, int width, int height, uint8 } void guac_rdp_ui_paint_bitmap(rdpInst* inst, int x, int y, int cx, int cy, int width, int height, uint8* data) { - guac_log_info("guac_rdp_ui_paint_bitmap: STUB\n"); + + guac_client* client = (guac_client*) inst->param1; + rdp_guac_client_data* guac_client_data = (rdp_guac_client_data*) client->data; + const guac_layer* current_surface = guac_client_data->current_surface; + GUACIO* io = client->io; + + int dx, dy; + int stride; + int bpp = inst->settings->server_depth / 8; + unsigned char* image_buffer; + unsigned char* image_buffer_row; + + cairo_surface_t* surface; + + /* Init Cairo buffer */ + stride = cairo_format_stride_for_width(CAIRO_FORMAT_RGB24, width); + image_buffer = malloc(height*stride); + image_buffer_row = image_buffer; + + /* Copy image data from image data to buffer */ + for (dy = 0; dy> 8) & 0xF8) | ((v >> 13) & 0x07); + green = ((v >> 3) & 0xFC) | ((v >> 9) & 0x03); + blue = ((v << 3) & 0xF8) | ((v >> 2) & 0x07); + break; + + default: /* The Magenta of Failure */ + red = 0xFF; + green = 0x00; + blue = 0xFF; + } + + /* Output RGB */ + *(image_buffer_current++) = (red << 16) | (green << 8) | blue; + + } + } + + surface = cairo_image_surface_create_for_data(image_buffer, CAIRO_FORMAT_RGB24, width, height, stride); + guac_send_png(io, GUAC_COMP_OVER, current_surface, x, y, surface); + guac_flush(io); + + /* Free surface */ + cairo_surface_destroy(surface); + free(image_buffer); + } void guac_rdp_ui_destroy_bitmap(rdpInst* inst, RD_HBITMAP bmp) { @@ -204,6 +272,8 @@ void guac_rdp_ui_line(rdpInst* inst, uint8 opcode, int startx, int starty, int e void guac_rdp_ui_rect(rdpInst* inst, int x, int y, int cx, int cy, int color) { guac_client* client = (guac_client*) inst->param1; + rdp_guac_client_data* guac_client_data = (rdp_guac_client_data*) client->data; + const guac_layer* current_surface = guac_client_data->current_surface; GUACIO* io = client->io; unsigned char red, green, blue; @@ -228,7 +298,7 @@ void guac_rdp_ui_rect(rdpInst* inst, int x, int y, int cx, int cy, int color) { } /* Send rectangle */ - guac_send_rect(io, GUAC_COMP_OVER, GUAC_DEFAULT_LAYER, + guac_send_rect(io, GUAC_COMP_OVER, current_surface, x, y, cx, cy, red, green, blue, 0xFF); @@ -267,26 +337,27 @@ void guac_rdp_ui_draw_glyph(rdpInst* inst, int x, int y, int width, int height, guac_client* client = (guac_client*) inst->param1; rdp_guac_client_data* guac_client_data = (rdp_guac_client_data*) client->data; + const guac_layer* current_surface = guac_client_data->current_surface; GUACIO* io = client->io; /* NOTE: Originally: Stencil=SRC, FG=ATOP, BG=RATOP */ /* Temporarily removed BG drawing... */ - /* Stencil */ - guac_send_copy(io, - (guac_layer*) glyph, 0, 0, width, height, - GUAC_COMP_ROUT, GUAC_DEFAULT_LAYER, x, y); - /* Foreground */ - guac_send_rect(io, GUAC_COMP_RATOP, GUAC_DEFAULT_LAYER, - x, y, width, height, + guac_send_rect(io, GUAC_COMP_ATOP, glyph, + 0, 0, width, height, guac_client_data->foreground.red, guac_client_data->foreground.green, guac_client_data->foreground.blue, 255); + /* Stencil */ + guac_send_copy(io, + (guac_layer*) glyph, 0, 0, width, height, + GUAC_COMP_OVER, current_surface, x, y); + /* Background */ - /*guac_send_rect(io, GUAC_COMP_RATOP, GUAC_DEFAULT_LAYER, + /*guac_send_rect(io, GUAC_COMP_RATOP, current_surface, x, y, width, height, guac_client_data->background.red, guac_client_data->background.green, @@ -317,12 +388,23 @@ void guac_rdp_ui_patblt(rdpInst* inst, uint8 opcode, int x, int y, int cx, int c } void guac_rdp_ui_screenblt(rdpInst* inst, uint8 opcode, int x, int y, int cx, int cy, int srcx, int srcy) { - guac_log_info("guac_rdp_ui_screenblt: STUB\n"); + + guac_client* client = (guac_client*) inst->param1; + rdp_guac_client_data* guac_client_data = (rdp_guac_client_data*) client->data; + const guac_layer* current_surface = guac_client_data->current_surface; + GUACIO* io = client->io; + + guac_send_copy(io, + (guac_layer*) current_surface, srcx, srcy, cx, cy, + GUAC_COMP_OVER, current_surface, x, y); + } void guac_rdp_ui_memblt(rdpInst* inst, uint8 opcode, int x, int y, int width, int height, RD_HBITMAP src, int srcx, int srcy) { guac_client* client = (guac_client*) inst->param1; + rdp_guac_client_data* guac_client_data = (rdp_guac_client_data*) client->data; + const guac_layer* current_surface = guac_client_data->current_surface; GUACIO* io = client->io; if (opcode != 204) @@ -331,7 +413,7 @@ void guac_rdp_ui_memblt(rdpInst* inst, uint8 opcode, int x, int y, int width, in guac_send_copy(io, (guac_layer*) src, srcx, srcy, width, height, - GUAC_COMP_OVER, GUAC_DEFAULT_LAYER, x, y); + GUAC_COMP_OVER, current_surface, x, y); } @@ -391,6 +473,7 @@ RD_HGLYPH guac_rdp_ui_create_glyph(rdpInst* inst, int width, int height, uint8* surface = cairo_image_surface_create_for_data(image_buffer, CAIRO_FORMAT_ARGB32, width, height, stride); guac_send_png(io, GUAC_COMP_SRC, glyph, 0, 0, surface); + guac_flush(io); /* Free surface */ cairo_surface_destroy(surface); @@ -416,18 +499,22 @@ int guac_rdp_ui_select(rdpInst* inst, int rdp_socket) { void guac_rdp_ui_set_clip(rdpInst* inst, int x, int y, int cx, int cy) { guac_client* client = (guac_client*) inst->param1; + rdp_guac_client_data* guac_client_data = (rdp_guac_client_data*) client->data; + const guac_layer* current_surface = guac_client_data->current_surface; GUACIO* io = client->io; - guac_send_clip(io, GUAC_DEFAULT_LAYER, x, y, cx, cy); + guac_send_clip(io, current_surface, x, y, cx, cy); } void guac_rdp_ui_reset_clip(rdpInst* inst) { guac_client* client = (guac_client*) inst->param1; + rdp_guac_client_data* guac_client_data = (rdp_guac_client_data*) client->data; + const guac_layer* current_surface = guac_client_data->current_surface; GUACIO* io = client->io; - guac_send_clip(io, GUAC_DEFAULT_LAYER, 0, 0, inst->settings->width, inst->settings->height); + guac_send_clip(io, current_surface, 0, 0, inst->settings->width, inst->settings->height); } @@ -474,17 +561,26 @@ void guac_rdp_ui_set_colormap(rdpInst* inst, RD_HPALETTE map) { RD_HBITMAP guac_rdp_ui_create_surface(rdpInst* inst, int width, int height, RD_HBITMAP old) { - /* Allocate and return buffer */ - guac_client* client = (guac_client*) inst->param1; - return (RD_HBITMAP) guac_client_alloc_buffer(client); + /* If old provided, just return that one ... */ + if (old != NULL) + return old; + + /* Otherwise allocate and return new buffer */ + else { + guac_client* client = (guac_client*) inst->param1; + return (RD_HBITMAP) guac_client_alloc_buffer(client); + } } void guac_rdp_ui_set_surface(rdpInst* inst, RD_HBITMAP surface) { guac_client* client = (guac_client*) inst->param1; + rdp_guac_client_data* guac_client_data = (rdp_guac_client_data*) client->data; GUACIO* io = client->io; + guac_log_info("guac_rdp_ui_set_surface: %p (index=%i)\n", surface, surface != NULL ? ((guac_layer*) surface)->index : 0); + /* Init desktop */ if (surface == NULL) { @@ -492,9 +588,11 @@ void guac_rdp_ui_set_surface(rdpInst* inst, RD_HBITMAP surface) { guac_send_size(io, inst->settings->width, inst->settings->height); guac_flush(io); + guac_client_data->current_surface = GUAC_DEFAULT_LAYER; + } + else { + guac_client_data->current_surface = surface; } - else - guac_log_info("guac_rdp_ui_set_surface: STUB (surface=%p) ... %ix%i\n", surface, inst->settings->width, inst->settings->height); } diff --git a/protocols/rdp/src/rdp_keymap.c b/protocols/rdp/src/rdp_keymap.c new file mode 100644 index 00000000..4aaa3992 --- /dev/null +++ b/protocols/rdp/src/rdp_keymap.c @@ -0,0 +1,5436 @@ + +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is libguac-client-rdp. + * + * The Initial Developer of the Original Code is + * Michael Jumper. + * Portions created by the Initial Developer are Copyright (C) 2011 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +const int guac_rdp_keysym_scancode[256][256] = { + { /* 0x00?? */ + 0x00, /* 0x0000 */ + 0x00, /* 0x0001 */ + 0x00, /* 0x0002 */ + 0x00, /* 0x0003 */ + 0x00, /* 0x0004 */ + 0x00, /* 0x0005 */ + 0x00, /* 0x0006 */ + 0x00, /* 0x0007 */ + 0x00, /* 0x0008 */ + 0x00, /* 0x0009 */ + 0x00, /* 0x000a */ + 0x00, /* 0x000b */ + 0x00, /* 0x000c */ + 0x00, /* 0x000d */ + 0x00, /* 0x000e */ + 0x00, /* 0x000f */ + 0x00, /* 0x0010 */ + 0x00, /* 0x0011 */ + 0x00, /* 0x0012 */ + 0x00, /* 0x0013 */ + 0x00, /* 0x0014 */ + 0x00, /* 0x0015 */ + 0x00, /* 0x0016 */ + 0x00, /* 0x0017 */ + 0x00, /* 0x0018 */ + 0x00, /* 0x0019 */ + 0x00, /* 0x001a */ + 0x00, /* 0x001b */ + 0x00, /* 0x001c */ + 0x00, /* 0x001d */ + 0x00, /* 0x001e */ + 0x00, /* 0x001f */ + 0x00, /* 0x0020 (space) */ + 0x00, /* 0x0021 (exclam) */ + 0x00, /* 0x0022 (quotedbl) */ + 0x00, /* 0x0023 (numbersign) */ + 0x00, /* 0x0024 (dollar) */ + 0x00, /* 0x0025 (percent) */ + 0x00, /* 0x0026 (ampersand) */ + 0x00, /* 0x0027 (quoteright) */ + 0x00, /* 0x0028 (parenleft) */ + 0x00, /* 0x0029 (parenright) */ + 0x00, /* 0x002a (asterisk) */ + 0x00, /* 0x002b (plus) */ + 0x00, /* 0x002c (comma) */ + 0x00, /* 0x002d (minus) */ + 0x00, /* 0x002e (period) */ + 0x00, /* 0x002f (slash) */ + 0x00, /* 0x0030 */ + 0x00, /* 0x0031 (1) */ + 0x00, /* 0x0032 (2) */ + 0x00, /* 0x0033 (3) */ + 0x00, /* 0x0034 (4) */ + 0x00, /* 0x0035 (5) */ + 0x00, /* 0x0036 (6) */ + 0x00, /* 0x0037 (7) */ + 0x00, /* 0x0038 (8) */ + 0x00, /* 0x0039 (9) */ + 0x00, /* 0x003a (colon) */ + 0x00, /* 0x003b (semicolon) */ + 0x00, /* 0x003c (less) */ + 0x00, /* 0x003d (equal) */ + 0x00, /* 0x003e (greater) */ + 0x00, /* 0x003f (question) */ + 0x00, /* 0x0040 (at) */ + 0x1E, /* 0x0041 (A) */ + 0x30, /* 0x0042 (B) */ + 0x2E, /* 0x0043 (C) */ + 0x20, /* 0x0044 (D) */ + 0x12, /* 0x0045 (E) */ + 0x21, /* 0x0046 (F) */ + 0x22, /* 0x0047 (G) */ + 0x23, /* 0x0048 (H) */ + 0x17, /* 0x0049 (I) */ + 0x24, /* 0x004a (J) */ + 0x25, /* 0x004b (K) */ + 0x26, /* 0x004c (L) */ + 0x32, /* 0x004d (M) */ + 0x31, /* 0x004e (N) */ + 0x18, /* 0x004f (O) */ + 0x19, /* 0x0050 (P) */ + 0x10, /* 0x0051 (Q) */ + 0x13, /* 0x0052 (R) */ + 0x1F, /* 0x0053 (S) */ + 0x14, /* 0x0054 (T) */ + 0x16, /* 0x0055 (U) */ + 0x2F, /* 0x0056 (V) */ + 0x11, /* 0x0057 (W) */ + 0x2D, /* 0x0058 (X) */ + 0x15, /* 0x0059 (Y) */ + 0x2C, /* 0x005a (Z) */ + 0x00, /* 0x005b (bracketleft) */ + 0x00, /* 0x005c (backslash) */ + 0x00, /* 0x005d (bracketright) */ + 0x00, /* 0x005e (asciicircum) */ + 0x00, /* 0x005f (underscore) */ + 0x00, /* 0x0060 (quoteleft) */ + 0x1E, /* 0x0061 (a) */ + 0x30, /* 0x0062 (b) */ + 0x2E, /* 0x0063 (c) */ + 0x20, /* 0x0064 (d) */ + 0x12, /* 0x0065 (e) */ + 0x21, /* 0x0066 (f) */ + 0x22, /* 0x0067 (g) */ + 0x23, /* 0x0068 (h) */ + 0x17, /* 0x0069 (i) */ + 0x24, /* 0x006a (j) */ + 0x25, /* 0x006b (k) */ + 0x26, /* 0x006c (l) */ + 0x32, /* 0x006d (m) */ + 0x31, /* 0x006e (n) */ + 0x18, /* 0x006f (o) */ + 0x19, /* 0x0070 (p) */ + 0x10, /* 0x0071 (q) */ + 0x13, /* 0x0072 (r) */ + 0x1F, /* 0x0073 (s) */ + 0x14, /* 0x0074 (t) */ + 0x16, /* 0x0075 (u) */ + 0x2F, /* 0x0076 (v) */ + 0x11, /* 0x0077 (w) */ + 0x2D, /* 0x0078 (x) */ + 0x15, /* 0x0079 (y) */ + 0x2C, /* 0x007a (z) */ + 0x00, /* 0x007b (braceleft) */ + 0x00, /* 0x007c (bar) */ + 0x00, /* 0x007d (braceright) */ + 0x00, /* 0x007e (asciitilde) */ + 0x00, /* 0x007f */ + 0x00, /* 0x0080 */ + 0x00, /* 0x0081 */ + 0x00, /* 0x0082 */ + 0x00, /* 0x0083 */ + 0x00, /* 0x0084 */ + 0x00, /* 0x0085 */ + 0x00, /* 0x0086 */ + 0x00, /* 0x0087 */ + 0x00, /* 0x0088 */ + 0x00, /* 0x0089 */ + 0x00, /* 0x008a */ + 0x00, /* 0x008b */ + 0x00, /* 0x008c */ + 0x00, /* 0x008d */ + 0x00, /* 0x008e */ + 0x00, /* 0x008f */ + 0x00, /* 0x0090 */ + 0x00, /* 0x0091 */ + 0x00, /* 0x0092 */ + 0x00, /* 0x0093 */ + 0x00, /* 0x0094 */ + 0x00, /* 0x0095 */ + 0x00, /* 0x0096 */ + 0x00, /* 0x0097 */ + 0x00, /* 0x0098 */ + 0x00, /* 0x0099 */ + 0x00, /* 0x009a */ + 0x00, /* 0x009b */ + 0x00, /* 0x009c */ + 0x00, /* 0x009d */ + 0x00, /* 0x009e */ + 0x00, /* 0x009f */ + 0x00, /* 0x00a0 (nobreakspace) */ + 0x00, /* 0x00a1 (exclamdown) */ + 0x00, /* 0x00a2 (cent) */ + 0x00, /* 0x00a3 (sterling) */ + 0x00, /* 0x00a4 (currency) */ + 0x00, /* 0x00a5 (yen) */ + 0x00, /* 0x00a6 (brokenbar) */ + 0x00, /* 0x00a7 (section) */ + 0x00, /* 0x00a8 (diaeresis) */ + 0x00, /* 0x00a9 (copyright) */ + 0x00, /* 0x00aa (ordfeminine) */ + 0x00, /* 0x00ab (guillemotleft) */ + 0x00, /* 0x00ac (notsign) */ + 0x00, /* 0x00ad (hyphen) */ + 0x00, /* 0x00ae (registered) */ + 0x00, /* 0x00af (macron) */ + 0x00, /* 0x00b0 (degree) */ + 0x00, /* 0x00b1 (plusminus) */ + 0x00, /* 0x00b2 (twosuperior) */ + 0x00, /* 0x00b3 (threesuperior) */ + 0x00, /* 0x00b4 (acute) */ + 0x00, /* 0x00b5 (mu) */ + 0x00, /* 0x00b6 (paragraph) */ + 0x00, /* 0x00b7 (periodcentered) */ + 0x00, /* 0x00b8 (cedilla) */ + 0x00, /* 0x00b9 (onesuperior) */ + 0x00, /* 0x00ba (masculine) */ + 0x00, /* 0x00bb (guillemotright) */ + 0x00, /* 0x00bc (onequarter) */ + 0x00, /* 0x00bd (onehalf) */ + 0x00, /* 0x00be (threequarters) */ + 0x00, /* 0x00bf (questiondown) */ + 0x00, /* 0x00c0 (Agrave) */ + 0x00, /* 0x00c1 (Aacute) */ + 0x00, /* 0x00c2 (Acircumflex) */ + 0x00, /* 0x00c3 (Atilde) */ + 0x00, /* 0x00c4 (Adiaeresis) */ + 0x00, /* 0x00c5 (Aring) */ + 0x00, /* 0x00c6 (AE) */ + 0x00, /* 0x00c7 (Ccedilla) */ + 0x00, /* 0x00c8 (Egrave) */ + 0x00, /* 0x00c9 (Eacute) */ + 0x00, /* 0x00ca (Ecircumflex) */ + 0x00, /* 0x00cb (Ediaeresis) */ + 0x00, /* 0x00cc (Igrave) */ + 0x00, /* 0x00cd (Iacute) */ + 0x00, /* 0x00ce (Icircumflex) */ + 0x00, /* 0x00cf (Idiaeresis) */ + 0x00, /* 0x00d0 (Eth) */ + 0x00, /* 0x00d1 (Ntilde) */ + 0x00, /* 0x00d2 (Ograve) */ + 0x00, /* 0x00d3 (Oacute) */ + 0x00, /* 0x00d4 (Ocircumflex) */ + 0x00, /* 0x00d5 (Otilde) */ + 0x00, /* 0x00d6 (Odiaeresis) */ + 0x00, /* 0x00d7 (multiply) */ + 0x00, /* 0x00d8 (Ooblique) */ + 0x00, /* 0x00d9 (Ugrave) */ + 0x00, /* 0x00da (Uacute) */ + 0x00, /* 0x00db (Ucircumflex) */ + 0x00, /* 0x00dc (Udiaeresis) */ + 0x00, /* 0x00dd (Yacute) */ + 0x00, /* 0x00de (Thorn) */ + 0x00, /* 0x00df (ssharp) */ + 0x00, /* 0x00e0 (agrave) */ + 0x00, /* 0x00e1 (aacute) */ + 0x00, /* 0x00e2 (acircumflex) */ + 0x00, /* 0x00e3 (atilde) */ + 0x00, /* 0x00e4 (adiaeresis) */ + 0x00, /* 0x00e5 (aring) */ + 0x00, /* 0x00e6 (ae) */ + 0x00, /* 0x00e7 (ccedilla) */ + 0x00, /* 0x00e8 (egrave) */ + 0x00, /* 0x00e9 (eacute) */ + 0x00, /* 0x00ea (ecircumflex) */ + 0x00, /* 0x00eb (ediaeresis) */ + 0x00, /* 0x00ec (igrave) */ + 0x00, /* 0x00ed (iacute) */ + 0x00, /* 0x00ee (icircumflex) */ + 0x00, /* 0x00ef (idiaeresis) */ + 0x00, /* 0x00f0 (eth) */ + 0x00, /* 0x00f1 (ntilde) */ + 0x00, /* 0x00f2 (ograve) */ + 0x00, /* 0x00f3 (oacute) */ + 0x00, /* 0x00f4 (ocircumflex) */ + 0x00, /* 0x00f5 (otilde) */ + 0x00, /* 0x00f6 (odiaeresis) */ + 0x00, /* 0x00f7 (division) */ + 0x00, /* 0x00f8 (ooblique) */ + 0x00, /* 0x00f9 (ugrave) */ + 0x00, /* 0x00fa (uacute) */ + 0x00, /* 0x00fb (ucircumflex) */ + 0x00, /* 0x00fc (udiaeresis) */ + 0x00, /* 0x00fd (yacute) */ + 0x00, /* 0x00fe (thorn) */ + 0x00, /* 0x00ff (ydiaeresis) */ + }, + { /* 0x01?? */ + 0x00, /* 0x0100 */ + 0x00, /* 0x0101 */ + 0x00, /* 0x0102 */ + 0x00, /* 0x0103 */ + 0x00, /* 0x0104 */ + 0x00, /* 0x0105 */ + 0x00, /* 0x0106 */ + 0x00, /* 0x0107 */ + 0x00, /* 0x0108 */ + 0x00, /* 0x0109 */ + 0x00, /* 0x010a */ + 0x00, /* 0x010b */ + 0x00, /* 0x010c */ + 0x00, /* 0x010d */ + 0x00, /* 0x010e */ + 0x00, /* 0x010f */ + 0x00, /* 0x0110 */ + 0x00, /* 0x0111 */ + 0x00, /* 0x0112 */ + 0x00, /* 0x0113 */ + 0x00, /* 0x0114 */ + 0x00, /* 0x0115 */ + 0x00, /* 0x0116 */ + 0x00, /* 0x0117 */ + 0x00, /* 0x0118 */ + 0x00, /* 0x0119 */ + 0x00, /* 0x011a */ + 0x00, /* 0x011b */ + 0x00, /* 0x011c */ + 0x00, /* 0x011d */ + 0x00, /* 0x011e */ + 0x00, /* 0x011f */ + 0x00, /* 0x0120 */ + 0x00, /* 0x0121 */ + 0x00, /* 0x0122 */ + 0x00, /* 0x0123 */ + 0x00, /* 0x0124 */ + 0x00, /* 0x0125 */ + 0x00, /* 0x0126 */ + 0x00, /* 0x0127 */ + 0x00, /* 0x0128 */ + 0x00, /* 0x0129 */ + 0x00, /* 0x012a */ + 0x00, /* 0x012b */ + 0x00, /* 0x012c */ + 0x00, /* 0x012d */ + 0x00, /* 0x012e */ + 0x00, /* 0x012f */ + 0x00, /* 0x0130 */ + 0x00, /* 0x0131 */ + 0x00, /* 0x0132 */ + 0x00, /* 0x0133 */ + 0x00, /* 0x0134 */ + 0x00, /* 0x0135 */ + 0x00, /* 0x0136 */ + 0x00, /* 0x0137 */ + 0x00, /* 0x0138 */ + 0x00, /* 0x0139 */ + 0x00, /* 0x013a */ + 0x00, /* 0x013b */ + 0x00, /* 0x013c */ + 0x00, /* 0x013d */ + 0x00, /* 0x013e */ + 0x00, /* 0x013f */ + 0x00, /* 0x0140 */ + 0x00, /* 0x0141 */ + 0x00, /* 0x0142 */ + 0x00, /* 0x0143 */ + 0x00, /* 0x0144 */ + 0x00, /* 0x0145 */ + 0x00, /* 0x0146 */ + 0x00, /* 0x0147 */ + 0x00, /* 0x0148 */ + 0x00, /* 0x0149 */ + 0x00, /* 0x014a */ + 0x00, /* 0x014b */ + 0x00, /* 0x014c */ + 0x00, /* 0x014d */ + 0x00, /* 0x014e */ + 0x00, /* 0x014f */ + 0x00, /* 0x0150 */ + 0x00, /* 0x0151 */ + 0x00, /* 0x0152 */ + 0x00, /* 0x0153 */ + 0x00, /* 0x0154 */ + 0x00, /* 0x0155 */ + 0x00, /* 0x0156 */ + 0x00, /* 0x0157 */ + 0x00, /* 0x0158 */ + 0x00, /* 0x0159 */ + 0x00, /* 0x015a */ + 0x00, /* 0x015b */ + 0x00, /* 0x015c */ + 0x00, /* 0x015d */ + 0x00, /* 0x015e */ + 0x00, /* 0x015f */ + 0x00, /* 0x0160 */ + 0x00, /* 0x0161 */ + 0x00, /* 0x0162 */ + 0x00, /* 0x0163 */ + 0x00, /* 0x0164 */ + 0x00, /* 0x0165 */ + 0x00, /* 0x0166 */ + 0x00, /* 0x0167 */ + 0x00, /* 0x0168 */ + 0x00, /* 0x0169 */ + 0x00, /* 0x016a */ + 0x00, /* 0x016b */ + 0x00, /* 0x016c */ + 0x00, /* 0x016d */ + 0x00, /* 0x016e */ + 0x00, /* 0x016f */ + 0x00, /* 0x0170 */ + 0x00, /* 0x0171 */ + 0x00, /* 0x0172 */ + 0x00, /* 0x0173 */ + 0x00, /* 0x0174 */ + 0x00, /* 0x0175 */ + 0x00, /* 0x0176 */ + 0x00, /* 0x0177 */ + 0x00, /* 0x0178 */ + 0x00, /* 0x0179 */ + 0x00, /* 0x017a */ + 0x00, /* 0x017b */ + 0x00, /* 0x017c */ + 0x00, /* 0x017d */ + 0x00, /* 0x017e */ + 0x00, /* 0x017f */ + 0x00, /* 0x0180 */ + 0x00, /* 0x0181 */ + 0x00, /* 0x0182 */ + 0x00, /* 0x0183 */ + 0x00, /* 0x0184 */ + 0x00, /* 0x0185 */ + 0x00, /* 0x0186 */ + 0x00, /* 0x0187 */ + 0x00, /* 0x0188 */ + 0x00, /* 0x0189 */ + 0x00, /* 0x018a */ + 0x00, /* 0x018b */ + 0x00, /* 0x018c */ + 0x00, /* 0x018d */ + 0x00, /* 0x018e */ + 0x00, /* 0x018f */ + 0x00, /* 0x0190 */ + 0x00, /* 0x0191 */ + 0x00, /* 0x0192 */ + 0x00, /* 0x0193 */ + 0x00, /* 0x0194 */ + 0x00, /* 0x0195 */ + 0x00, /* 0x0196 */ + 0x00, /* 0x0197 */ + 0x00, /* 0x0198 */ + 0x00, /* 0x0199 */ + 0x00, /* 0x019a */ + 0x00, /* 0x019b */ + 0x00, /* 0x019c */ + 0x00, /* 0x019d */ + 0x00, /* 0x019e */ + 0x00, /* 0x019f */ + 0x00, /* 0x01a0 */ + 0x00, /* 0x01a1 (Aogonek) */ + 0x00, /* 0x01a2 (breve) */ + 0x00, /* 0x01a3 (Lstroke) */ + 0x00, /* 0x01a4 */ + 0x00, /* 0x01a5 (Lcaron) */ + 0x00, /* 0x01a6 (Sacute) */ + 0x00, /* 0x01a7 */ + 0x00, /* 0x01a8 */ + 0x00, /* 0x01a9 (Scaron) */ + 0x00, /* 0x01aa (Scedilla) */ + 0x00, /* 0x01ab (Tcaron) */ + 0x00, /* 0x01ac (Zacute) */ + 0x00, /* 0x01ad */ + 0x00, /* 0x01ae (Zcaron) */ + 0x00, /* 0x01af (Zabovedot) */ + 0x00, /* 0x01b0 */ + 0x00, /* 0x01b1 (aogonek) */ + 0x00, /* 0x01b2 (ogonek) */ + 0x00, /* 0x01b3 (lstroke) */ + 0x00, /* 0x01b4 */ + 0x00, /* 0x01b5 (lcaron) */ + 0x00, /* 0x01b6 (sacute) */ + 0x00, /* 0x01b7 (caron) */ + 0x00, /* 0x01b8 */ + 0x00, /* 0x01b9 (scaron) */ + 0x00, /* 0x01ba (scedilla) */ + 0x00, /* 0x01bb (tcaron) */ + 0x00, /* 0x01bc (zacute) */ + 0x00, /* 0x01bd (doubleacute) */ + 0x00, /* 0x01be (zcaron) */ + 0x00, /* 0x01bf (zabovedot) */ + 0x00, /* 0x01c0 (Racute) */ + 0x00, /* 0x01c1 */ + 0x00, /* 0x01c2 */ + 0x00, /* 0x01c3 (Abreve) */ + 0x00, /* 0x01c4 */ + 0x00, /* 0x01c5 (Lacute) */ + 0x00, /* 0x01c6 (Cacute) */ + 0x00, /* 0x01c7 */ + 0x00, /* 0x01c8 (Ccaron) */ + 0x00, /* 0x01c9 */ + 0x00, /* 0x01ca (Eogonek) */ + 0x00, /* 0x01cb */ + 0x00, /* 0x01cc (Ecaron) */ + 0x00, /* 0x01cd */ + 0x00, /* 0x01ce */ + 0x00, /* 0x01cf (Dcaron) */ + 0x00, /* 0x01d0 (Dstroke) */ + 0x00, /* 0x01d1 (Nacute) */ + 0x00, /* 0x01d2 (Ncaron) */ + 0x00, /* 0x01d3 */ + 0x00, /* 0x01d4 */ + 0x00, /* 0x01d5 (Odoubleacute) */ + 0x00, /* 0x01d6 */ + 0x00, /* 0x01d7 */ + 0x00, /* 0x01d8 (Rcaron) */ + 0x00, /* 0x01d9 (Uring) */ + 0x00, /* 0x01da */ + 0x00, /* 0x01db (Udoubleacute) */ + 0x00, /* 0x01dc */ + 0x00, /* 0x01dd */ + 0x00, /* 0x01de (Tcedilla) */ + 0x00, /* 0x01df */ + 0x00, /* 0x01e0 (racute) */ + 0x00, /* 0x01e1 */ + 0x00, /* 0x01e2 */ + 0x00, /* 0x01e3 (abreve) */ + 0x00, /* 0x01e4 */ + 0x00, /* 0x01e5 (lacute) */ + 0x00, /* 0x01e6 (cacute) */ + 0x00, /* 0x01e7 */ + 0x00, /* 0x01e8 (ccaron) */ + 0x00, /* 0x01e9 */ + 0x00, /* 0x01ea (eogonek) */ + 0x00, /* 0x01eb */ + 0x00, /* 0x01ec (ecaron) */ + 0x00, /* 0x01ed */ + 0x00, /* 0x01ee */ + 0x00, /* 0x01ef (dcaron) */ + 0x00, /* 0x01f0 (dstroke) */ + 0x00, /* 0x01f1 (nacute) */ + 0x00, /* 0x01f2 (ncaron) */ + 0x00, /* 0x01f3 */ + 0x00, /* 0x01f4 */ + 0x00, /* 0x01f5 (odoubleacute) */ + 0x00, /* 0x01f6 */ + 0x00, /* 0x01f7 */ + 0x00, /* 0x01f8 (rcaron) */ + 0x00, /* 0x01f9 (uring) */ + 0x00, /* 0x01fa */ + 0x00, /* 0x01fb (udoubleacute) */ + 0x00, /* 0x01fc */ + 0x00, /* 0x01fd */ + 0x00, /* 0x01fe (tcedilla) */ + 0x00, /* 0x01ff (abovedot) */ + }, + { /* 0x02?? */ + 0x00, /* 0x0200 */ + 0x00, /* 0x0201 */ + 0x00, /* 0x0202 */ + 0x00, /* 0x0203 */ + 0x00, /* 0x0204 */ + 0x00, /* 0x0205 */ + 0x00, /* 0x0206 */ + 0x00, /* 0x0207 */ + 0x00, /* 0x0208 */ + 0x00, /* 0x0209 */ + 0x00, /* 0x020a */ + 0x00, /* 0x020b */ + 0x00, /* 0x020c */ + 0x00, /* 0x020d */ + 0x00, /* 0x020e */ + 0x00, /* 0x020f */ + 0x00, /* 0x0210 */ + 0x00, /* 0x0211 */ + 0x00, /* 0x0212 */ + 0x00, /* 0x0213 */ + 0x00, /* 0x0214 */ + 0x00, /* 0x0215 */ + 0x00, /* 0x0216 */ + 0x00, /* 0x0217 */ + 0x00, /* 0x0218 */ + 0x00, /* 0x0219 */ + 0x00, /* 0x021a */ + 0x00, /* 0x021b */ + 0x00, /* 0x021c */ + 0x00, /* 0x021d */ + 0x00, /* 0x021e */ + 0x00, /* 0x021f */ + 0x00, /* 0x0220 */ + 0x00, /* 0x0221 */ + 0x00, /* 0x0222 */ + 0x00, /* 0x0223 */ + 0x00, /* 0x0224 */ + 0x00, /* 0x0225 */ + 0x00, /* 0x0226 */ + 0x00, /* 0x0227 */ + 0x00, /* 0x0228 */ + 0x00, /* 0x0229 */ + 0x00, /* 0x022a */ + 0x00, /* 0x022b */ + 0x00, /* 0x022c */ + 0x00, /* 0x022d */ + 0x00, /* 0x022e */ + 0x00, /* 0x022f */ + 0x00, /* 0x0230 */ + 0x00, /* 0x0231 */ + 0x00, /* 0x0232 */ + 0x00, /* 0x0233 */ + 0x00, /* 0x0234 */ + 0x00, /* 0x0235 */ + 0x00, /* 0x0236 */ + 0x00, /* 0x0237 */ + 0x00, /* 0x0238 */ + 0x00, /* 0x0239 */ + 0x00, /* 0x023a */ + 0x00, /* 0x023b */ + 0x00, /* 0x023c */ + 0x00, /* 0x023d */ + 0x00, /* 0x023e */ + 0x00, /* 0x023f */ + 0x00, /* 0x0240 */ + 0x00, /* 0x0241 */ + 0x00, /* 0x0242 */ + 0x00, /* 0x0243 */ + 0x00, /* 0x0244 */ + 0x00, /* 0x0245 */ + 0x00, /* 0x0246 */ + 0x00, /* 0x0247 */ + 0x00, /* 0x0248 */ + 0x00, /* 0x0249 */ + 0x00, /* 0x024a */ + 0x00, /* 0x024b */ + 0x00, /* 0x024c */ + 0x00, /* 0x024d */ + 0x00, /* 0x024e */ + 0x00, /* 0x024f */ + 0x00, /* 0x0250 */ + 0x00, /* 0x0251 */ + 0x00, /* 0x0252 */ + 0x00, /* 0x0253 */ + 0x00, /* 0x0254 */ + 0x00, /* 0x0255 */ + 0x00, /* 0x0256 */ + 0x00, /* 0x0257 */ + 0x00, /* 0x0258 */ + 0x00, /* 0x0259 */ + 0x00, /* 0x025a */ + 0x00, /* 0x025b */ + 0x00, /* 0x025c */ + 0x00, /* 0x025d */ + 0x00, /* 0x025e */ + 0x00, /* 0x025f */ + 0x00, /* 0x0260 */ + 0x00, /* 0x0261 */ + 0x00, /* 0x0262 */ + 0x00, /* 0x0263 */ + 0x00, /* 0x0264 */ + 0x00, /* 0x0265 */ + 0x00, /* 0x0266 */ + 0x00, /* 0x0267 */ + 0x00, /* 0x0268 */ + 0x00, /* 0x0269 */ + 0x00, /* 0x026a */ + 0x00, /* 0x026b */ + 0x00, /* 0x026c */ + 0x00, /* 0x026d */ + 0x00, /* 0x026e */ + 0x00, /* 0x026f */ + 0x00, /* 0x0270 */ + 0x00, /* 0x0271 */ + 0x00, /* 0x0272 */ + 0x00, /* 0x0273 */ + 0x00, /* 0x0274 */ + 0x00, /* 0x0275 */ + 0x00, /* 0x0276 */ + 0x00, /* 0x0277 */ + 0x00, /* 0x0278 */ + 0x00, /* 0x0279 */ + 0x00, /* 0x027a */ + 0x00, /* 0x027b */ + 0x00, /* 0x027c */ + 0x00, /* 0x027d */ + 0x00, /* 0x027e */ + 0x00, /* 0x027f */ + 0x00, /* 0x0280 */ + 0x00, /* 0x0281 */ + 0x00, /* 0x0282 */ + 0x00, /* 0x0283 */ + 0x00, /* 0x0284 */ + 0x00, /* 0x0285 */ + 0x00, /* 0x0286 */ + 0x00, /* 0x0287 */ + 0x00, /* 0x0288 */ + 0x00, /* 0x0289 */ + 0x00, /* 0x028a */ + 0x00, /* 0x028b */ + 0x00, /* 0x028c */ + 0x00, /* 0x028d */ + 0x00, /* 0x028e */ + 0x00, /* 0x028f */ + 0x00, /* 0x0290 */ + 0x00, /* 0x0291 */ + 0x00, /* 0x0292 */ + 0x00, /* 0x0293 */ + 0x00, /* 0x0294 */ + 0x00, /* 0x0295 */ + 0x00, /* 0x0296 */ + 0x00, /* 0x0297 */ + 0x00, /* 0x0298 */ + 0x00, /* 0x0299 */ + 0x00, /* 0x029a */ + 0x00, /* 0x029b */ + 0x00, /* 0x029c */ + 0x00, /* 0x029d */ + 0x00, /* 0x029e */ + 0x00, /* 0x029f */ + 0x00, /* 0x02a0 */ + 0x00, /* 0x02a1 (Hstroke) */ + 0x00, /* 0x02a2 */ + 0x00, /* 0x02a3 */ + 0x00, /* 0x02a4 */ + 0x00, /* 0x02a5 */ + 0x00, /* 0x02a6 (Hcircumflex) */ + 0x00, /* 0x02a7 */ + 0x00, /* 0x02a8 */ + 0x00, /* 0x02a9 (Iabovedot) */ + 0x00, /* 0x02aa */ + 0x00, /* 0x02ab (Gbreve) */ + 0x00, /* 0x02ac (Jcircumflex) */ + 0x00, /* 0x02ad */ + 0x00, /* 0x02ae */ + 0x00, /* 0x02af */ + 0x00, /* 0x02b0 */ + 0x00, /* 0x02b1 (hstroke) */ + 0x00, /* 0x02b2 */ + 0x00, /* 0x02b3 */ + 0x00, /* 0x02b4 */ + 0x00, /* 0x02b5 */ + 0x00, /* 0x02b6 (hcircumflex) */ + 0x00, /* 0x02b7 */ + 0x00, /* 0x02b8 */ + 0x00, /* 0x02b9 (idotless) */ + 0x00, /* 0x02ba */ + 0x00, /* 0x02bb (gbreve) */ + 0x00, /* 0x02bc (jcircumflex) */ + 0x00, /* 0x02bd */ + 0x00, /* 0x02be */ + 0x00, /* 0x02bf */ + 0x00, /* 0x02c0 */ + 0x00, /* 0x02c1 */ + 0x00, /* 0x02c2 */ + 0x00, /* 0x02c3 */ + 0x00, /* 0x02c4 */ + 0x00, /* 0x02c5 (Cabovedot) */ + 0x00, /* 0x02c6 (Ccircumflex) */ + 0x00, /* 0x02c7 */ + 0x00, /* 0x02c8 */ + 0x00, /* 0x02c9 */ + 0x00, /* 0x02ca */ + 0x00, /* 0x02cb */ + 0x00, /* 0x02cc */ + 0x00, /* 0x02cd */ + 0x00, /* 0x02ce */ + 0x00, /* 0x02cf */ + 0x00, /* 0x02d0 */ + 0x00, /* 0x02d1 */ + 0x00, /* 0x02d2 */ + 0x00, /* 0x02d3 */ + 0x00, /* 0x02d4 */ + 0x00, /* 0x02d5 (Gabovedot) */ + 0x00, /* 0x02d6 */ + 0x00, /* 0x02d7 */ + 0x00, /* 0x02d8 (Gcircumflex) */ + 0x00, /* 0x02d9 */ + 0x00, /* 0x02da */ + 0x00, /* 0x02db */ + 0x00, /* 0x02dc */ + 0x00, /* 0x02dd (Ubreve) */ + 0x00, /* 0x02de (Scircumflex) */ + 0x00, /* 0x02df */ + 0x00, /* 0x02e0 */ + 0x00, /* 0x02e1 */ + 0x00, /* 0x02e2 */ + 0x00, /* 0x02e3 */ + 0x00, /* 0x02e4 */ + 0x00, /* 0x02e5 (cabovedot) */ + 0x00, /* 0x02e6 (ccircumflex) */ + 0x00, /* 0x02e7 */ + 0x00, /* 0x02e8 */ + 0x00, /* 0x02e9 */ + 0x00, /* 0x02ea */ + 0x00, /* 0x02eb */ + 0x00, /* 0x02ec */ + 0x00, /* 0x02ed */ + 0x00, /* 0x02ee */ + 0x00, /* 0x02ef */ + 0x00, /* 0x02f0 */ + 0x00, /* 0x02f1 */ + 0x00, /* 0x02f2 */ + 0x00, /* 0x02f3 */ + 0x00, /* 0x02f4 */ + 0x00, /* 0x02f5 (gabovedot) */ + 0x00, /* 0x02f6 */ + 0x00, /* 0x02f7 */ + 0x00, /* 0x02f8 (gcircumflex) */ + 0x00, /* 0x02f9 */ + 0x00, /* 0x02fa */ + 0x00, /* 0x02fb */ + 0x00, /* 0x02fc */ + 0x00, /* 0x02fd (ubreve) */ + 0x00, /* 0x02fe (scircumflex) */ + 0x00, /* 0x02ff */ + }, + { /* 0x03?? */ + 0x00, /* 0x0300 */ + 0x00, /* 0x0301 */ + 0x00, /* 0x0302 */ + 0x00, /* 0x0303 */ + 0x00, /* 0x0304 */ + 0x00, /* 0x0305 */ + 0x00, /* 0x0306 */ + 0x00, /* 0x0307 */ + 0x00, /* 0x0308 */ + 0x00, /* 0x0309 */ + 0x00, /* 0x030a */ + 0x00, /* 0x030b */ + 0x00, /* 0x030c */ + 0x00, /* 0x030d */ + 0x00, /* 0x030e */ + 0x00, /* 0x030f */ + 0x00, /* 0x0310 */ + 0x00, /* 0x0311 */ + 0x00, /* 0x0312 */ + 0x00, /* 0x0313 */ + 0x00, /* 0x0314 */ + 0x00, /* 0x0315 */ + 0x00, /* 0x0316 */ + 0x00, /* 0x0317 */ + 0x00, /* 0x0318 */ + 0x00, /* 0x0319 */ + 0x00, /* 0x031a */ + 0x00, /* 0x031b */ + 0x00, /* 0x031c */ + 0x00, /* 0x031d */ + 0x00, /* 0x031e */ + 0x00, /* 0x031f */ + 0x00, /* 0x0320 */ + 0x00, /* 0x0321 */ + 0x00, /* 0x0322 */ + 0x00, /* 0x0323 */ + 0x00, /* 0x0324 */ + 0x00, /* 0x0325 */ + 0x00, /* 0x0326 */ + 0x00, /* 0x0327 */ + 0x00, /* 0x0328 */ + 0x00, /* 0x0329 */ + 0x00, /* 0x032a */ + 0x00, /* 0x032b */ + 0x00, /* 0x032c */ + 0x00, /* 0x032d */ + 0x00, /* 0x032e */ + 0x00, /* 0x032f */ + 0x00, /* 0x0330 */ + 0x00, /* 0x0331 */ + 0x00, /* 0x0332 */ + 0x00, /* 0x0333 */ + 0x00, /* 0x0334 */ + 0x00, /* 0x0335 */ + 0x00, /* 0x0336 */ + 0x00, /* 0x0337 */ + 0x00, /* 0x0338 */ + 0x00, /* 0x0339 */ + 0x00, /* 0x033a */ + 0x00, /* 0x033b */ + 0x00, /* 0x033c */ + 0x00, /* 0x033d */ + 0x00, /* 0x033e */ + 0x00, /* 0x033f */ + 0x00, /* 0x0340 */ + 0x00, /* 0x0341 */ + 0x00, /* 0x0342 */ + 0x00, /* 0x0343 */ + 0x00, /* 0x0344 */ + 0x00, /* 0x0345 */ + 0x00, /* 0x0346 */ + 0x00, /* 0x0347 */ + 0x00, /* 0x0348 */ + 0x00, /* 0x0349 */ + 0x00, /* 0x034a */ + 0x00, /* 0x034b */ + 0x00, /* 0x034c */ + 0x00, /* 0x034d */ + 0x00, /* 0x034e */ + 0x00, /* 0x034f */ + 0x00, /* 0x0350 */ + 0x00, /* 0x0351 */ + 0x00, /* 0x0352 */ + 0x00, /* 0x0353 */ + 0x00, /* 0x0354 */ + 0x00, /* 0x0355 */ + 0x00, /* 0x0356 */ + 0x00, /* 0x0357 */ + 0x00, /* 0x0358 */ + 0x00, /* 0x0359 */ + 0x00, /* 0x035a */ + 0x00, /* 0x035b */ + 0x00, /* 0x035c */ + 0x00, /* 0x035d */ + 0x00, /* 0x035e */ + 0x00, /* 0x035f */ + 0x00, /* 0x0360 */ + 0x00, /* 0x0361 */ + 0x00, /* 0x0362 */ + 0x00, /* 0x0363 */ + 0x00, /* 0x0364 */ + 0x00, /* 0x0365 */ + 0x00, /* 0x0366 */ + 0x00, /* 0x0367 */ + 0x00, /* 0x0368 */ + 0x00, /* 0x0369 */ + 0x00, /* 0x036a */ + 0x00, /* 0x036b */ + 0x00, /* 0x036c */ + 0x00, /* 0x036d */ + 0x00, /* 0x036e */ + 0x00, /* 0x036f */ + 0x00, /* 0x0370 */ + 0x00, /* 0x0371 */ + 0x00, /* 0x0372 */ + 0x00, /* 0x0373 */ + 0x00, /* 0x0374 */ + 0x00, /* 0x0375 */ + 0x00, /* 0x0376 */ + 0x00, /* 0x0377 */ + 0x00, /* 0x0378 */ + 0x00, /* 0x0379 */ + 0x00, /* 0x037a */ + 0x00, /* 0x037b */ + 0x00, /* 0x037c */ + 0x00, /* 0x037d */ + 0x00, /* 0x037e */ + 0x00, /* 0x037f */ + 0x00, /* 0x0380 */ + 0x00, /* 0x0381 */ + 0x00, /* 0x0382 */ + 0x00, /* 0x0383 */ + 0x00, /* 0x0384 */ + 0x00, /* 0x0385 */ + 0x00, /* 0x0386 */ + 0x00, /* 0x0387 */ + 0x00, /* 0x0388 */ + 0x00, /* 0x0389 */ + 0x00, /* 0x038a */ + 0x00, /* 0x038b */ + 0x00, /* 0x038c */ + 0x00, /* 0x038d */ + 0x00, /* 0x038e */ + 0x00, /* 0x038f */ + 0x00, /* 0x0390 */ + 0x00, /* 0x0391 */ + 0x00, /* 0x0392 */ + 0x00, /* 0x0393 */ + 0x00, /* 0x0394 */ + 0x00, /* 0x0395 */ + 0x00, /* 0x0396 */ + 0x00, /* 0x0397 */ + 0x00, /* 0x0398 */ + 0x00, /* 0x0399 */ + 0x00, /* 0x039a */ + 0x00, /* 0x039b */ + 0x00, /* 0x039c */ + 0x00, /* 0x039d */ + 0x00, /* 0x039e */ + 0x00, /* 0x039f */ + 0x00, /* 0x03a0 */ + 0x00, /* 0x03a1 */ + 0x00, /* 0x03a2 (kappa) */ + 0x00, /* 0x03a3 (Rcedilla) */ + 0x00, /* 0x03a4 */ + 0x00, /* 0x03a5 (Itilde) */ + 0x00, /* 0x03a6 (Lcedilla) */ + 0x00, /* 0x03a7 */ + 0x00, /* 0x03a8 */ + 0x00, /* 0x03a9 */ + 0x00, /* 0x03aa (Emacron) */ + 0x00, /* 0x03ab (Gcedilla) */ + 0x00, /* 0x03ac (Tslash) */ + 0x00, /* 0x03ad */ + 0x00, /* 0x03ae */ + 0x00, /* 0x03af */ + 0x00, /* 0x03b0 */ + 0x00, /* 0x03b1 */ + 0x00, /* 0x03b2 */ + 0x00, /* 0x03b3 (rcedilla) */ + 0x00, /* 0x03b4 */ + 0x00, /* 0x03b5 (itilde) */ + 0x00, /* 0x03b6 (lcedilla) */ + 0x00, /* 0x03b7 */ + 0x00, /* 0x03b8 */ + 0x00, /* 0x03b9 */ + 0x00, /* 0x03ba (emacron) */ + 0x00, /* 0x03bb (gcedilla) */ + 0x00, /* 0x03bc (tslash) */ + 0x00, /* 0x03bd (ENG) */ + 0x00, /* 0x03be */ + 0x00, /* 0x03bf (eng) */ + 0x00, /* 0x03c0 (Amacron) */ + 0x00, /* 0x03c1 */ + 0x00, /* 0x03c2 */ + 0x00, /* 0x03c3 */ + 0x00, /* 0x03c4 */ + 0x00, /* 0x03c5 */ + 0x00, /* 0x03c6 */ + 0x00, /* 0x03c7 (Iogonek) */ + 0x00, /* 0x03c8 */ + 0x00, /* 0x03c9 */ + 0x00, /* 0x03ca */ + 0x00, /* 0x03cb */ + 0x00, /* 0x03cc (Eabovedot) */ + 0x00, /* 0x03cd */ + 0x00, /* 0x03ce */ + 0x00, /* 0x03cf (Imacron) */ + 0x00, /* 0x03d0 */ + 0x00, /* 0x03d1 (Ncedilla) */ + 0x00, /* 0x03d2 (Omacron) */ + 0x00, /* 0x03d3 (Kcedilla) */ + 0x00, /* 0x03d4 */ + 0x00, /* 0x03d5 */ + 0x00, /* 0x03d6 */ + 0x00, /* 0x03d7 */ + 0x00, /* 0x03d8 */ + 0x00, /* 0x03d9 (Uogonek) */ + 0x00, /* 0x03da */ + 0x00, /* 0x03db */ + 0x00, /* 0x03dc */ + 0x00, /* 0x03dd (Utilde) */ + 0x00, /* 0x03de (Umacron) */ + 0x00, /* 0x03df */ + 0x00, /* 0x03e0 (amacron) */ + 0x00, /* 0x03e1 */ + 0x00, /* 0x03e2 */ + 0x00, /* 0x03e3 */ + 0x00, /* 0x03e4 */ + 0x00, /* 0x03e5 */ + 0x00, /* 0x03e6 */ + 0x00, /* 0x03e7 (iogonek) */ + 0x00, /* 0x03e8 */ + 0x00, /* 0x03e9 */ + 0x00, /* 0x03ea */ + 0x00, /* 0x03eb */ + 0x00, /* 0x03ec (eabovedot) */ + 0x00, /* 0x03ed */ + 0x00, /* 0x03ee */ + 0x00, /* 0x03ef (imacron) */ + 0x00, /* 0x03f0 */ + 0x00, /* 0x03f1 (ncedilla) */ + 0x00, /* 0x03f2 (omacron) */ + 0x00, /* 0x03f3 (kcedilla) */ + 0x00, /* 0x03f4 */ + 0x00, /* 0x03f5 */ + 0x00, /* 0x03f6 */ + 0x00, /* 0x03f7 */ + 0x00, /* 0x03f8 */ + 0x00, /* 0x03f9 (uogonek) */ + 0x00, /* 0x03fa */ + 0x00, /* 0x03fb */ + 0x00, /* 0x03fc */ + 0x00, /* 0x03fd (utilde) */ + 0x00, /* 0x03fe (umacron) */ + 0x00, /* 0x03ff */ + }, + { /* 0x04?? */ + 0x00, /* 0x0400 */ + 0x00, /* 0x0401 */ + 0x00, /* 0x0402 */ + 0x00, /* 0x0403 */ + 0x00, /* 0x0404 */ + 0x00, /* 0x0405 */ + 0x00, /* 0x0406 */ + 0x00, /* 0x0407 */ + 0x00, /* 0x0408 */ + 0x00, /* 0x0409 */ + 0x00, /* 0x040a */ + 0x00, /* 0x040b */ + 0x00, /* 0x040c */ + 0x00, /* 0x040d */ + 0x00, /* 0x040e */ + 0x00, /* 0x040f */ + 0x00, /* 0x0410 */ + 0x00, /* 0x0411 */ + 0x00, /* 0x0412 */ + 0x00, /* 0x0413 */ + 0x00, /* 0x0414 */ + 0x00, /* 0x0415 */ + 0x00, /* 0x0416 */ + 0x00, /* 0x0417 */ + 0x00, /* 0x0418 */ + 0x00, /* 0x0419 */ + 0x00, /* 0x041a */ + 0x00, /* 0x041b */ + 0x00, /* 0x041c */ + 0x00, /* 0x041d */ + 0x00, /* 0x041e */ + 0x00, /* 0x041f */ + 0x00, /* 0x0420 */ + 0x00, /* 0x0421 */ + 0x00, /* 0x0422 */ + 0x00, /* 0x0423 */ + 0x00, /* 0x0424 */ + 0x00, /* 0x0425 */ + 0x00, /* 0x0426 */ + 0x00, /* 0x0427 */ + 0x00, /* 0x0428 */ + 0x00, /* 0x0429 */ + 0x00, /* 0x042a */ + 0x00, /* 0x042b */ + 0x00, /* 0x042c */ + 0x00, /* 0x042d */ + 0x00, /* 0x042e */ + 0x00, /* 0x042f */ + 0x00, /* 0x0430 */ + 0x00, /* 0x0431 */ + 0x00, /* 0x0432 */ + 0x00, /* 0x0433 */ + 0x00, /* 0x0434 */ + 0x00, /* 0x0435 */ + 0x00, /* 0x0436 */ + 0x00, /* 0x0437 */ + 0x00, /* 0x0438 */ + 0x00, /* 0x0439 */ + 0x00, /* 0x043a */ + 0x00, /* 0x043b */ + 0x00, /* 0x043c */ + 0x00, /* 0x043d */ + 0x00, /* 0x043e */ + 0x00, /* 0x043f */ + 0x00, /* 0x0440 */ + 0x00, /* 0x0441 */ + 0x00, /* 0x0442 */ + 0x00, /* 0x0443 */ + 0x00, /* 0x0444 */ + 0x00, /* 0x0445 */ + 0x00, /* 0x0446 */ + 0x00, /* 0x0447 */ + 0x00, /* 0x0448 */ + 0x00, /* 0x0449 */ + 0x00, /* 0x044a */ + 0x00, /* 0x044b */ + 0x00, /* 0x044c */ + 0x00, /* 0x044d */ + 0x00, /* 0x044e */ + 0x00, /* 0x044f */ + 0x00, /* 0x0450 */ + 0x00, /* 0x0451 */ + 0x00, /* 0x0452 */ + 0x00, /* 0x0453 */ + 0x00, /* 0x0454 */ + 0x00, /* 0x0455 */ + 0x00, /* 0x0456 */ + 0x00, /* 0x0457 */ + 0x00, /* 0x0458 */ + 0x00, /* 0x0459 */ + 0x00, /* 0x045a */ + 0x00, /* 0x045b */ + 0x00, /* 0x045c */ + 0x00, /* 0x045d */ + 0x00, /* 0x045e */ + 0x00, /* 0x045f */ + 0x00, /* 0x0460 */ + 0x00, /* 0x0461 */ + 0x00, /* 0x0462 */ + 0x00, /* 0x0463 */ + 0x00, /* 0x0464 */ + 0x00, /* 0x0465 */ + 0x00, /* 0x0466 */ + 0x00, /* 0x0467 */ + 0x00, /* 0x0468 */ + 0x00, /* 0x0469 */ + 0x00, /* 0x046a */ + 0x00, /* 0x046b */ + 0x00, /* 0x046c */ + 0x00, /* 0x046d */ + 0x00, /* 0x046e */ + 0x00, /* 0x046f */ + 0x00, /* 0x0470 */ + 0x00, /* 0x0471 */ + 0x00, /* 0x0472 */ + 0x00, /* 0x0473 */ + 0x00, /* 0x0474 */ + 0x00, /* 0x0475 */ + 0x00, /* 0x0476 */ + 0x00, /* 0x0477 */ + 0x00, /* 0x0478 */ + 0x00, /* 0x0479 */ + 0x00, /* 0x047a */ + 0x00, /* 0x047b */ + 0x00, /* 0x047c */ + 0x00, /* 0x047d */ + 0x00, /* 0x047e (overline) */ + 0x00, /* 0x047f */ + 0x00, /* 0x0480 */ + 0x00, /* 0x0481 */ + 0x00, /* 0x0482 */ + 0x00, /* 0x0483 */ + 0x00, /* 0x0484 */ + 0x00, /* 0x0485 */ + 0x00, /* 0x0486 */ + 0x00, /* 0x0487 */ + 0x00, /* 0x0488 */ + 0x00, /* 0x0489 */ + 0x00, /* 0x048a */ + 0x00, /* 0x048b */ + 0x00, /* 0x048c */ + 0x00, /* 0x048d */ + 0x00, /* 0x048e */ + 0x00, /* 0x048f */ + 0x00, /* 0x0490 */ + 0x00, /* 0x0491 */ + 0x00, /* 0x0492 */ + 0x00, /* 0x0493 */ + 0x00, /* 0x0494 */ + 0x00, /* 0x0495 */ + 0x00, /* 0x0496 */ + 0x00, /* 0x0497 */ + 0x00, /* 0x0498 */ + 0x00, /* 0x0499 */ + 0x00, /* 0x049a */ + 0x00, /* 0x049b */ + 0x00, /* 0x049c */ + 0x00, /* 0x049d */ + 0x00, /* 0x049e */ + 0x00, /* 0x049f */ + 0x00, /* 0x04a0 */ + 0x00, /* 0x04a1 (kana_fullstop) */ + 0x00, /* 0x04a2 (kana_openingbracket) */ + 0x00, /* 0x04a3 (kana_closingbracket) */ + 0x00, /* 0x04a4 (kana_comma) */ + 0x00, /* 0x04a5 (kana_middledot) */ + 0x00, /* 0x04a6 (kana_WO) */ + 0x00, /* 0x04a7 (kana_a) */ + 0x00, /* 0x04a8 (kana_i) */ + 0x00, /* 0x04a9 (kana_u) */ + 0x00, /* 0x04aa (kana_e) */ + 0x00, /* 0x04ab (kana_o) */ + 0x00, /* 0x04ac (kana_ya) */ + 0x00, /* 0x04ad (kana_yu) */ + 0x00, /* 0x04ae (kana_yo) */ + 0x00, /* 0x04af (kana_tu) */ + 0x00, /* 0x04b0 (prolongedsound) */ + 0x00, /* 0x04b1 (kana_A) */ + 0x00, /* 0x04b2 (kana_I) */ + 0x00, /* 0x04b3 (kana_U) */ + 0x00, /* 0x04b4 (kana_E) */ + 0x00, /* 0x04b5 (kana_O) */ + 0x00, /* 0x04b6 (kana_KA) */ + 0x00, /* 0x04b7 (kana_KI) */ + 0x00, /* 0x04b8 (kana_KU) */ + 0x00, /* 0x04b9 (kana_KE) */ + 0x00, /* 0x04ba (kana_KO) */ + 0x00, /* 0x04bb (kana_SA) */ + 0x00, /* 0x04bc (kana_SHI) */ + 0x00, /* 0x04bd (kana_SU) */ + 0x00, /* 0x04be (kana_SE) */ + 0x00, /* 0x04bf (kana_SO) */ + 0x00, /* 0x04c0 (kana_TA) */ + 0x00, /* 0x04c1 (kana_TI) */ + 0x00, /* 0x04c2 (kana_TU) */ + 0x00, /* 0x04c3 (kana_TE) */ + 0x00, /* 0x04c4 (kana_TO) */ + 0x00, /* 0x04c5 (kana_NA) */ + 0x00, /* 0x04c6 (kana_NI) */ + 0x00, /* 0x04c7 (kana_NU) */ + 0x00, /* 0x04c8 (kana_NE) */ + 0x00, /* 0x04c9 (kana_NO) */ + 0x00, /* 0x04ca (kana_HA) */ + 0x00, /* 0x04cb (kana_HI) */ + 0x00, /* 0x04cc (kana_HU) */ + 0x00, /* 0x04cd (kana_HE) */ + 0x00, /* 0x04ce (kana_HO) */ + 0x00, /* 0x04cf (kana_MA) */ + 0x00, /* 0x04d0 (kana_MI) */ + 0x00, /* 0x04d1 (kana_MU) */ + 0x00, /* 0x04d2 (kana_ME) */ + 0x00, /* 0x04d3 (kana_MO) */ + 0x00, /* 0x04d4 (kana_YA) */ + 0x00, /* 0x04d5 (kana_YU) */ + 0x00, /* 0x04d6 (kana_YO) */ + 0x00, /* 0x04d7 (kana_RA) */ + 0x00, /* 0x04d8 (kana_RI) */ + 0x00, /* 0x04d9 (kana_RU) */ + 0x00, /* 0x04da (kana_RE) */ + 0x00, /* 0x04db (kana_RO) */ + 0x00, /* 0x04dc (kana_WA) */ + 0x00, /* 0x04dd (kana_N) */ + 0x00, /* 0x04de (voicedsound) */ + 0x00, /* 0x04df (semivoicedsound) */ + 0x00, /* 0x04e0 */ + 0x00, /* 0x04e1 */ + 0x00, /* 0x04e2 */ + 0x00, /* 0x04e3 */ + 0x00, /* 0x04e4 */ + 0x00, /* 0x04e5 */ + 0x00, /* 0x04e6 */ + 0x00, /* 0x04e7 */ + 0x00, /* 0x04e8 */ + 0x00, /* 0x04e9 */ + 0x00, /* 0x04ea */ + 0x00, /* 0x04eb */ + 0x00, /* 0x04ec */ + 0x00, /* 0x04ed */ + 0x00, /* 0x04ee */ + 0x00, /* 0x04ef */ + 0x00, /* 0x04f0 */ + 0x00, /* 0x04f1 */ + 0x00, /* 0x04f2 */ + 0x00, /* 0x04f3 */ + 0x00, /* 0x04f4 */ + 0x00, /* 0x04f5 */ + 0x00, /* 0x04f6 */ + 0x00, /* 0x04f7 */ + 0x00, /* 0x04f8 */ + 0x00, /* 0x04f9 */ + 0x00, /* 0x04fa */ + 0x00, /* 0x04fb */ + 0x00, /* 0x04fc */ + 0x00, /* 0x04fd */ + 0x00, /* 0x04fe */ + 0x00, /* 0x04ff */ + }, + { /* 0x05?? */ + 0x00, /* 0x0500 */ + 0x00, /* 0x0501 */ + 0x00, /* 0x0502 */ + 0x00, /* 0x0503 */ + 0x00, /* 0x0504 */ + 0x00, /* 0x0505 */ + 0x00, /* 0x0506 */ + 0x00, /* 0x0507 */ + 0x00, /* 0x0508 */ + 0x00, /* 0x0509 */ + 0x00, /* 0x050a */ + 0x00, /* 0x050b */ + 0x00, /* 0x050c */ + 0x00, /* 0x050d */ + 0x00, /* 0x050e */ + 0x00, /* 0x050f */ + 0x00, /* 0x0510 */ + 0x00, /* 0x0511 */ + 0x00, /* 0x0512 */ + 0x00, /* 0x0513 */ + 0x00, /* 0x0514 */ + 0x00, /* 0x0515 */ + 0x00, /* 0x0516 */ + 0x00, /* 0x0517 */ + 0x00, /* 0x0518 */ + 0x00, /* 0x0519 */ + 0x00, /* 0x051a */ + 0x00, /* 0x051b */ + 0x00, /* 0x051c */ + 0x00, /* 0x051d */ + 0x00, /* 0x051e */ + 0x00, /* 0x051f */ + 0x00, /* 0x0520 */ + 0x00, /* 0x0521 */ + 0x00, /* 0x0522 */ + 0x00, /* 0x0523 */ + 0x00, /* 0x0524 */ + 0x00, /* 0x0525 */ + 0x00, /* 0x0526 */ + 0x00, /* 0x0527 */ + 0x00, /* 0x0528 */ + 0x00, /* 0x0529 */ + 0x00, /* 0x052a */ + 0x00, /* 0x052b */ + 0x00, /* 0x052c */ + 0x00, /* 0x052d */ + 0x00, /* 0x052e */ + 0x00, /* 0x052f */ + 0x00, /* 0x0530 */ + 0x00, /* 0x0531 */ + 0x00, /* 0x0532 */ + 0x00, /* 0x0533 */ + 0x00, /* 0x0534 */ + 0x00, /* 0x0535 */ + 0x00, /* 0x0536 */ + 0x00, /* 0x0537 */ + 0x00, /* 0x0538 */ + 0x00, /* 0x0539 */ + 0x00, /* 0x053a */ + 0x00, /* 0x053b */ + 0x00, /* 0x053c */ + 0x00, /* 0x053d */ + 0x00, /* 0x053e */ + 0x00, /* 0x053f */ + 0x00, /* 0x0540 */ + 0x00, /* 0x0541 */ + 0x00, /* 0x0542 */ + 0x00, /* 0x0543 */ + 0x00, /* 0x0544 */ + 0x00, /* 0x0545 */ + 0x00, /* 0x0546 */ + 0x00, /* 0x0547 */ + 0x00, /* 0x0548 */ + 0x00, /* 0x0549 */ + 0x00, /* 0x054a */ + 0x00, /* 0x054b */ + 0x00, /* 0x054c */ + 0x00, /* 0x054d */ + 0x00, /* 0x054e */ + 0x00, /* 0x054f */ + 0x00, /* 0x0550 */ + 0x00, /* 0x0551 */ + 0x00, /* 0x0552 */ + 0x00, /* 0x0553 */ + 0x00, /* 0x0554 */ + 0x00, /* 0x0555 */ + 0x00, /* 0x0556 */ + 0x00, /* 0x0557 */ + 0x00, /* 0x0558 */ + 0x00, /* 0x0559 */ + 0x00, /* 0x055a */ + 0x00, /* 0x055b */ + 0x00, /* 0x055c */ + 0x00, /* 0x055d */ + 0x00, /* 0x055e */ + 0x00, /* 0x055f */ + 0x00, /* 0x0560 */ + 0x00, /* 0x0561 */ + 0x00, /* 0x0562 */ + 0x00, /* 0x0563 */ + 0x00, /* 0x0564 */ + 0x00, /* 0x0565 */ + 0x00, /* 0x0566 */ + 0x00, /* 0x0567 */ + 0x00, /* 0x0568 */ + 0x00, /* 0x0569 */ + 0x00, /* 0x056a */ + 0x00, /* 0x056b */ + 0x00, /* 0x056c */ + 0x00, /* 0x056d */ + 0x00, /* 0x056e */ + 0x00, /* 0x056f */ + 0x00, /* 0x0570 */ + 0x00, /* 0x0571 */ + 0x00, /* 0x0572 */ + 0x00, /* 0x0573 */ + 0x00, /* 0x0574 */ + 0x00, /* 0x0575 */ + 0x00, /* 0x0576 */ + 0x00, /* 0x0577 */ + 0x00, /* 0x0578 */ + 0x00, /* 0x0579 */ + 0x00, /* 0x057a */ + 0x00, /* 0x057b */ + 0x00, /* 0x057c */ + 0x00, /* 0x057d */ + 0x00, /* 0x057e */ + 0x00, /* 0x057f */ + 0x00, /* 0x0580 */ + 0x00, /* 0x0581 */ + 0x00, /* 0x0582 */ + 0x00, /* 0x0583 */ + 0x00, /* 0x0584 */ + 0x00, /* 0x0585 */ + 0x00, /* 0x0586 */ + 0x00, /* 0x0587 */ + 0x00, /* 0x0588 */ + 0x00, /* 0x0589 */ + 0x00, /* 0x058a */ + 0x00, /* 0x058b */ + 0x00, /* 0x058c */ + 0x00, /* 0x058d */ + 0x00, /* 0x058e */ + 0x00, /* 0x058f */ + 0x00, /* 0x0590 */ + 0x00, /* 0x0591 */ + 0x00, /* 0x0592 */ + 0x00, /* 0x0593 */ + 0x00, /* 0x0594 */ + 0x00, /* 0x0595 */ + 0x00, /* 0x0596 */ + 0x00, /* 0x0597 */ + 0x00, /* 0x0598 */ + 0x00, /* 0x0599 */ + 0x00, /* 0x059a */ + 0x00, /* 0x059b */ + 0x00, /* 0x059c */ + 0x00, /* 0x059d */ + 0x00, /* 0x059e */ + 0x00, /* 0x059f */ + 0x00, /* 0x05a0 */ + 0x00, /* 0x05a1 */ + 0x00, /* 0x05a2 */ + 0x00, /* 0x05a3 */ + 0x00, /* 0x05a4 */ + 0x00, /* 0x05a5 */ + 0x00, /* 0x05a6 */ + 0x00, /* 0x05a7 */ + 0x00, /* 0x05a8 */ + 0x00, /* 0x05a9 */ + 0x00, /* 0x05aa */ + 0x00, /* 0x05ab */ + 0x00, /* 0x05ac (Arabic_comma) */ + 0x00, /* 0x05ad */ + 0x00, /* 0x05ae */ + 0x00, /* 0x05af */ + 0x00, /* 0x05b0 */ + 0x00, /* 0x05b1 */ + 0x00, /* 0x05b2 */ + 0x00, /* 0x05b3 */ + 0x00, /* 0x05b4 */ + 0x00, /* 0x05b5 */ + 0x00, /* 0x05b6 */ + 0x00, /* 0x05b7 */ + 0x00, /* 0x05b8 */ + 0x00, /* 0x05b9 */ + 0x00, /* 0x05ba */ + 0x00, /* 0x05bb (Arabic_semicolon) */ + 0x00, /* 0x05bc */ + 0x00, /* 0x05bd */ + 0x00, /* 0x05be */ + 0x00, /* 0x05bf (Arabic_question_mark) */ + 0x00, /* 0x05c0 */ + 0x00, /* 0x05c1 (Arabic_hamza) */ + 0x00, /* 0x05c2 (Arabic_maddaonalef) */ + 0x00, /* 0x05c3 (Arabic_hamzaonalef) */ + 0x00, /* 0x05c4 (Arabic_hamzaonwaw) */ + 0x00, /* 0x05c5 (Arabic_hamzaunderalef) */ + 0x00, /* 0x05c6 (Arabic_hamzaonyeh) */ + 0x00, /* 0x05c7 (Arabic_alef) */ + 0x00, /* 0x05c8 (Arabic_beh) */ + 0x00, /* 0x05c9 (Arabic_tehmarbuta) */ + 0x00, /* 0x05ca (Arabic_teh) */ + 0x00, /* 0x05cb (Arabic_theh) */ + 0x00, /* 0x05cc (Arabic_jeem) */ + 0x00, /* 0x05cd (Arabic_hah) */ + 0x00, /* 0x05ce (Arabic_khah) */ + 0x00, /* 0x05cf (Arabic_dal) */ + 0x00, /* 0x05d0 (Arabic_thal) */ + 0x00, /* 0x05d1 (Arabic_ra) */ + 0x00, /* 0x05d2 (Arabic_zain) */ + 0x00, /* 0x05d3 (Arabic_seen) */ + 0x00, /* 0x05d4 (Arabic_sheen) */ + 0x00, /* 0x05d5 (Arabic_sad) */ + 0x00, /* 0x05d6 (Arabic_dad) */ + 0x00, /* 0x05d7 (Arabic_tah) */ + 0x00, /* 0x05d8 (Arabic_zah) */ + 0x00, /* 0x05d9 (Arabic_ain) */ + 0x00, /* 0x05da (Arabic_ghain) */ + 0x00, /* 0x05db */ + 0x00, /* 0x05dc */ + 0x00, /* 0x05dd */ + 0x00, /* 0x05de */ + 0x00, /* 0x05df */ + 0x00, /* 0x05e0 (Arabic_tatweel) */ + 0x00, /* 0x05e1 (Arabic_feh) */ + 0x00, /* 0x05e2 (Arabic_qaf) */ + 0x00, /* 0x05e3 (Arabic_kaf) */ + 0x00, /* 0x05e4 (Arabic_lam) */ + 0x00, /* 0x05e5 (Arabic_meem) */ + 0x00, /* 0x05e6 (Arabic_noon) */ + 0x00, /* 0x05e7 (Arabic_heh) */ + 0x00, /* 0x05e8 (Arabic_waw) */ + 0x00, /* 0x05e9 (Arabic_alefmaksura) */ + 0x00, /* 0x05ea (Arabic_yeh) */ + 0x00, /* 0x05eb (Arabic_fathatan) */ + 0x00, /* 0x05ec (Arabic_dammatan) */ + 0x00, /* 0x05ed (Arabic_kasratan) */ + 0x00, /* 0x05ee (Arabic_fatha) */ + 0x00, /* 0x05ef (Arabic_damma) */ + 0x00, /* 0x05f0 (Arabic_kasra) */ + 0x00, /* 0x05f1 (Arabic_shadda) */ + 0x00, /* 0x05f2 (Arabic_sukun) */ + 0x00, /* 0x05f3 */ + 0x00, /* 0x05f4 */ + 0x00, /* 0x05f5 */ + 0x00, /* 0x05f6 */ + 0x00, /* 0x05f7 */ + 0x00, /* 0x05f8 */ + 0x00, /* 0x05f9 */ + 0x00, /* 0x05fa */ + 0x00, /* 0x05fb */ + 0x00, /* 0x05fc */ + 0x00, /* 0x05fd */ + 0x00, /* 0x05fe */ + 0x00, /* 0x05ff */ + }, + { /* 0x06?? */ + 0x00, /* 0x0600 */ + 0x00, /* 0x0601 */ + 0x00, /* 0x0602 */ + 0x00, /* 0x0603 */ + 0x00, /* 0x0604 */ + 0x00, /* 0x0605 */ + 0x00, /* 0x0606 */ + 0x00, /* 0x0607 */ + 0x00, /* 0x0608 */ + 0x00, /* 0x0609 */ + 0x00, /* 0x060a */ + 0x00, /* 0x060b */ + 0x00, /* 0x060c */ + 0x00, /* 0x060d */ + 0x00, /* 0x060e */ + 0x00, /* 0x060f */ + 0x00, /* 0x0610 */ + 0x00, /* 0x0611 */ + 0x00, /* 0x0612 */ + 0x00, /* 0x0613 */ + 0x00, /* 0x0614 */ + 0x00, /* 0x0615 */ + 0x00, /* 0x0616 */ + 0x00, /* 0x0617 */ + 0x00, /* 0x0618 */ + 0x00, /* 0x0619 */ + 0x00, /* 0x061a */ + 0x00, /* 0x061b */ + 0x00, /* 0x061c */ + 0x00, /* 0x061d */ + 0x00, /* 0x061e */ + 0x00, /* 0x061f */ + 0x00, /* 0x0620 */ + 0x00, /* 0x0621 */ + 0x00, /* 0x0622 */ + 0x00, /* 0x0623 */ + 0x00, /* 0x0624 */ + 0x00, /* 0x0625 */ + 0x00, /* 0x0626 */ + 0x00, /* 0x0627 */ + 0x00, /* 0x0628 */ + 0x00, /* 0x0629 */ + 0x00, /* 0x062a */ + 0x00, /* 0x062b */ + 0x00, /* 0x062c */ + 0x00, /* 0x062d */ + 0x00, /* 0x062e */ + 0x00, /* 0x062f */ + 0x00, /* 0x0630 */ + 0x00, /* 0x0631 */ + 0x00, /* 0x0632 */ + 0x00, /* 0x0633 */ + 0x00, /* 0x0634 */ + 0x00, /* 0x0635 */ + 0x00, /* 0x0636 */ + 0x00, /* 0x0637 */ + 0x00, /* 0x0638 */ + 0x00, /* 0x0639 */ + 0x00, /* 0x063a */ + 0x00, /* 0x063b */ + 0x00, /* 0x063c */ + 0x00, /* 0x063d */ + 0x00, /* 0x063e */ + 0x00, /* 0x063f */ + 0x00, /* 0x0640 */ + 0x00, /* 0x0641 */ + 0x00, /* 0x0642 */ + 0x00, /* 0x0643 */ + 0x00, /* 0x0644 */ + 0x00, /* 0x0645 */ + 0x00, /* 0x0646 */ + 0x00, /* 0x0647 */ + 0x00, /* 0x0648 */ + 0x00, /* 0x0649 */ + 0x00, /* 0x064a */ + 0x00, /* 0x064b */ + 0x00, /* 0x064c */ + 0x00, /* 0x064d */ + 0x00, /* 0x064e */ + 0x00, /* 0x064f */ + 0x00, /* 0x0650 */ + 0x00, /* 0x0651 */ + 0x00, /* 0x0652 */ + 0x00, /* 0x0653 */ + 0x00, /* 0x0654 */ + 0x00, /* 0x0655 */ + 0x00, /* 0x0656 */ + 0x00, /* 0x0657 */ + 0x00, /* 0x0658 */ + 0x00, /* 0x0659 */ + 0x00, /* 0x065a */ + 0x00, /* 0x065b */ + 0x00, /* 0x065c */ + 0x00, /* 0x065d */ + 0x00, /* 0x065e */ + 0x00, /* 0x065f */ + 0x00, /* 0x0660 */ + 0x00, /* 0x0661 */ + 0x00, /* 0x0662 */ + 0x00, /* 0x0663 */ + 0x00, /* 0x0664 */ + 0x00, /* 0x0665 */ + 0x00, /* 0x0666 */ + 0x00, /* 0x0667 */ + 0x00, /* 0x0668 */ + 0x00, /* 0x0669 */ + 0x00, /* 0x066a */ + 0x00, /* 0x066b */ + 0x00, /* 0x066c */ + 0x00, /* 0x066d */ + 0x00, /* 0x066e */ + 0x00, /* 0x066f */ + 0x00, /* 0x0670 */ + 0x00, /* 0x0671 */ + 0x00, /* 0x0672 */ + 0x00, /* 0x0673 */ + 0x00, /* 0x0674 */ + 0x00, /* 0x0675 */ + 0x00, /* 0x0676 */ + 0x00, /* 0x0677 */ + 0x00, /* 0x0678 */ + 0x00, /* 0x0679 */ + 0x00, /* 0x067a */ + 0x00, /* 0x067b */ + 0x00, /* 0x067c */ + 0x00, /* 0x067d */ + 0x00, /* 0x067e */ + 0x00, /* 0x067f */ + 0x00, /* 0x0680 */ + 0x00, /* 0x0681 */ + 0x00, /* 0x0682 */ + 0x00, /* 0x0683 */ + 0x00, /* 0x0684 */ + 0x00, /* 0x0685 */ + 0x00, /* 0x0686 */ + 0x00, /* 0x0687 */ + 0x00, /* 0x0688 */ + 0x00, /* 0x0689 */ + 0x00, /* 0x068a */ + 0x00, /* 0x068b */ + 0x00, /* 0x068c */ + 0x00, /* 0x068d */ + 0x00, /* 0x068e */ + 0x00, /* 0x068f */ + 0x00, /* 0x0690 */ + 0x00, /* 0x0691 */ + 0x00, /* 0x0692 */ + 0x00, /* 0x0693 */ + 0x00, /* 0x0694 */ + 0x00, /* 0x0695 */ + 0x00, /* 0x0696 */ + 0x00, /* 0x0697 */ + 0x00, /* 0x0698 */ + 0x00, /* 0x0699 */ + 0x00, /* 0x069a */ + 0x00, /* 0x069b */ + 0x00, /* 0x069c */ + 0x00, /* 0x069d */ + 0x00, /* 0x069e */ + 0x00, /* 0x069f */ + 0x00, /* 0x06a0 */ + 0x00, /* 0x06a1 (Serbian_dje) */ + 0x00, /* 0x06a2 (Macedonia_gje) */ + 0x00, /* 0x06a3 (Cyrillic_io) */ + 0x00, /* 0x06a4 (Ukranian_je) */ + 0x00, /* 0x06a5 (Macedonia_dse) */ + 0x00, /* 0x06a6 (Ukranian_i) */ + 0x00, /* 0x06a7 (Ukranian_yi) */ + 0x00, /* 0x06a8 (Serbian_je) */ + 0x00, /* 0x06a9 (Serbian_lje) */ + 0x00, /* 0x06aa (Serbian_nje) */ + 0x00, /* 0x06ab (Serbian_tshe) */ + 0x00, /* 0x06ac (Macedonia_kje) */ + 0x00, /* 0x06ad (Ukrainian_ghe_with_upturn) */ + 0x00, /* 0x06ae (Byelorussian_shortu) */ + 0x00, /* 0x06af (Serbian_dze) */ + 0x00, /* 0x06b0 (numerosign) */ + 0x00, /* 0x06b1 (Serbian_DJE) */ + 0x00, /* 0x06b2 (Macedonia_GJE) */ + 0x00, /* 0x06b3 (Cyrillic_IO) */ + 0x00, /* 0x06b4 (Ukranian_JE) */ + 0x00, /* 0x06b5 (Macedonia_DSE) */ + 0x00, /* 0x06b6 (Ukranian_I) */ + 0x00, /* 0x06b7 (Ukranian_YI) */ + 0x00, /* 0x06b8 (Serbian_JE) */ + 0x00, /* 0x06b9 (Serbian_LJE) */ + 0x00, /* 0x06ba (Serbian_NJE) */ + 0x00, /* 0x06bb (Serbian_TSHE) */ + 0x00, /* 0x06bc (Macedonia_KJE) */ + 0x00, /* 0x06bd (Ukrainian_GHE_WITH_UPTURN) */ + 0x00, /* 0x06be (Byelorussian_SHORTU) */ + 0x00, /* 0x06bf (Serbian_DZE) */ + 0x00, /* 0x06c0 (Cyrillic_yu) */ + 0x00, /* 0x06c1 (Cyrillic_a) */ + 0x00, /* 0x06c2 (Cyrillic_be) */ + 0x00, /* 0x06c3 (Cyrillic_tse) */ + 0x00, /* 0x06c4 (Cyrillic_de) */ + 0x00, /* 0x06c5 (Cyrillic_ie) */ + 0x00, /* 0x06c6 (Cyrillic_ef) */ + 0x00, /* 0x06c7 (Cyrillic_ghe) */ + 0x00, /* 0x06c8 (Cyrillic_ha) */ + 0x00, /* 0x06c9 (Cyrillic_i) */ + 0x00, /* 0x06ca (Cyrillic_shorti) */ + 0x00, /* 0x06cb (Cyrillic_ka) */ + 0x00, /* 0x06cc (Cyrillic_el) */ + 0x00, /* 0x06cd (Cyrillic_em) */ + 0x00, /* 0x06ce (Cyrillic_en) */ + 0x00, /* 0x06cf (Cyrillic_o) */ + 0x00, /* 0x06d0 (Cyrillic_pe) */ + 0x00, /* 0x06d1 (Cyrillic_ya) */ + 0x00, /* 0x06d2 (Cyrillic_er) */ + 0x00, /* 0x06d3 (Cyrillic_es) */ + 0x00, /* 0x06d4 (Cyrillic_te) */ + 0x00, /* 0x06d5 (Cyrillic_u) */ + 0x00, /* 0x06d6 (Cyrillic_zhe) */ + 0x00, /* 0x06d7 (Cyrillic_ve) */ + 0x00, /* 0x06d8 (Cyrillic_softsign) */ + 0x00, /* 0x06d9 (Cyrillic_yeru) */ + 0x00, /* 0x06da (Cyrillic_ze) */ + 0x00, /* 0x06db (Cyrillic_sha) */ + 0x00, /* 0x06dc (Cyrillic_e) */ + 0x00, /* 0x06dd (Cyrillic_shcha) */ + 0x00, /* 0x06de (Cyrillic_che) */ + 0x00, /* 0x06df (Cyrillic_hardsign) */ + 0x00, /* 0x06e0 (Cyrillic_YU) */ + 0x00, /* 0x06e1 (Cyrillic_A) */ + 0x00, /* 0x06e2 (Cyrillic_BE) */ + 0x00, /* 0x06e3 (Cyrillic_TSE) */ + 0x00, /* 0x06e4 (Cyrillic_DE) */ + 0x00, /* 0x06e5 (Cyrillic_IE) */ + 0x00, /* 0x06e6 (Cyrillic_EF) */ + 0x00, /* 0x06e7 (Cyrillic_GHE) */ + 0x00, /* 0x06e8 (Cyrillic_HA) */ + 0x00, /* 0x06e9 (Cyrillic_I) */ + 0x00, /* 0x06ea (Cyrillic_SHORTI) */ + 0x00, /* 0x06eb (Cyrillic_KA) */ + 0x00, /* 0x06ec (Cyrillic_EL) */ + 0x00, /* 0x06ed (Cyrillic_EM) */ + 0x00, /* 0x06ee (Cyrillic_EN) */ + 0x00, /* 0x06ef (Cyrillic_O) */ + 0x00, /* 0x06f0 (Cyrillic_PE) */ + 0x00, /* 0x06f1 (Cyrillic_YA) */ + 0x00, /* 0x06f2 (Cyrillic_ER) */ + 0x00, /* 0x06f3 (Cyrillic_ES) */ + 0x00, /* 0x06f4 (Cyrillic_TE) */ + 0x00, /* 0x06f5 (Cyrillic_U) */ + 0x00, /* 0x06f6 (Cyrillic_ZHE) */ + 0x00, /* 0x06f7 (Cyrillic_VE) */ + 0x00, /* 0x06f8 (Cyrillic_SOFTSIGN) */ + 0x00, /* 0x06f9 (Cyrillic_YERU) */ + 0x00, /* 0x06fa (Cyrillic_ZE) */ + 0x00, /* 0x06fb (Cyrillic_SHA) */ + 0x00, /* 0x06fc (Cyrillic_E) */ + 0x00, /* 0x06fd (Cyrillic_SHCHA) */ + 0x00, /* 0x06fe (Cyrillic_CHE) */ + 0x00, /* 0x06ff (Cyrillic_HARDSIGN) */ + }, + { /* 0x07?? */ + 0x00, /* 0x0700 */ + 0x00, /* 0x0701 */ + 0x00, /* 0x0702 */ + 0x00, /* 0x0703 */ + 0x00, /* 0x0704 */ + 0x00, /* 0x0705 */ + 0x00, /* 0x0706 */ + 0x00, /* 0x0707 */ + 0x00, /* 0x0708 */ + 0x00, /* 0x0709 */ + 0x00, /* 0x070a */ + 0x00, /* 0x070b */ + 0x00, /* 0x070c */ + 0x00, /* 0x070d */ + 0x00, /* 0x070e */ + 0x00, /* 0x070f */ + 0x00, /* 0x0710 */ + 0x00, /* 0x0711 */ + 0x00, /* 0x0712 */ + 0x00, /* 0x0713 */ + 0x00, /* 0x0714 */ + 0x00, /* 0x0715 */ + 0x00, /* 0x0716 */ + 0x00, /* 0x0717 */ + 0x00, /* 0x0718 */ + 0x00, /* 0x0719 */ + 0x00, /* 0x071a */ + 0x00, /* 0x071b */ + 0x00, /* 0x071c */ + 0x00, /* 0x071d */ + 0x00, /* 0x071e */ + 0x00, /* 0x071f */ + 0x00, /* 0x0720 */ + 0x00, /* 0x0721 */ + 0x00, /* 0x0722 */ + 0x00, /* 0x0723 */ + 0x00, /* 0x0724 */ + 0x00, /* 0x0725 */ + 0x00, /* 0x0726 */ + 0x00, /* 0x0727 */ + 0x00, /* 0x0728 */ + 0x00, /* 0x0729 */ + 0x00, /* 0x072a */ + 0x00, /* 0x072b */ + 0x00, /* 0x072c */ + 0x00, /* 0x072d */ + 0x00, /* 0x072e */ + 0x00, /* 0x072f */ + 0x00, /* 0x0730 */ + 0x00, /* 0x0731 */ + 0x00, /* 0x0732 */ + 0x00, /* 0x0733 */ + 0x00, /* 0x0734 */ + 0x00, /* 0x0735 */ + 0x00, /* 0x0736 */ + 0x00, /* 0x0737 */ + 0x00, /* 0x0738 */ + 0x00, /* 0x0739 */ + 0x00, /* 0x073a */ + 0x00, /* 0x073b */ + 0x00, /* 0x073c */ + 0x00, /* 0x073d */ + 0x00, /* 0x073e */ + 0x00, /* 0x073f */ + 0x00, /* 0x0740 */ + 0x00, /* 0x0741 */ + 0x00, /* 0x0742 */ + 0x00, /* 0x0743 */ + 0x00, /* 0x0744 */ + 0x00, /* 0x0745 */ + 0x00, /* 0x0746 */ + 0x00, /* 0x0747 */ + 0x00, /* 0x0748 */ + 0x00, /* 0x0749 */ + 0x00, /* 0x074a */ + 0x00, /* 0x074b */ + 0x00, /* 0x074c */ + 0x00, /* 0x074d */ + 0x00, /* 0x074e */ + 0x00, /* 0x074f */ + 0x00, /* 0x0750 */ + 0x00, /* 0x0751 */ + 0x00, /* 0x0752 */ + 0x00, /* 0x0753 */ + 0x00, /* 0x0754 */ + 0x00, /* 0x0755 */ + 0x00, /* 0x0756 */ + 0x00, /* 0x0757 */ + 0x00, /* 0x0758 */ + 0x00, /* 0x0759 */ + 0x00, /* 0x075a */ + 0x00, /* 0x075b */ + 0x00, /* 0x075c */ + 0x00, /* 0x075d */ + 0x00, /* 0x075e */ + 0x00, /* 0x075f */ + 0x00, /* 0x0760 */ + 0x00, /* 0x0761 */ + 0x00, /* 0x0762 */ + 0x00, /* 0x0763 */ + 0x00, /* 0x0764 */ + 0x00, /* 0x0765 */ + 0x00, /* 0x0766 */ + 0x00, /* 0x0767 */ + 0x00, /* 0x0768 */ + 0x00, /* 0x0769 */ + 0x00, /* 0x076a */ + 0x00, /* 0x076b */ + 0x00, /* 0x076c */ + 0x00, /* 0x076d */ + 0x00, /* 0x076e */ + 0x00, /* 0x076f */ + 0x00, /* 0x0770 */ + 0x00, /* 0x0771 */ + 0x00, /* 0x0772 */ + 0x00, /* 0x0773 */ + 0x00, /* 0x0774 */ + 0x00, /* 0x0775 */ + 0x00, /* 0x0776 */ + 0x00, /* 0x0777 */ + 0x00, /* 0x0778 */ + 0x00, /* 0x0779 */ + 0x00, /* 0x077a */ + 0x00, /* 0x077b */ + 0x00, /* 0x077c */ + 0x00, /* 0x077d */ + 0x00, /* 0x077e */ + 0x00, /* 0x077f */ + 0x00, /* 0x0780 */ + 0x00, /* 0x0781 */ + 0x00, /* 0x0782 */ + 0x00, /* 0x0783 */ + 0x00, /* 0x0784 */ + 0x00, /* 0x0785 */ + 0x00, /* 0x0786 */ + 0x00, /* 0x0787 */ + 0x00, /* 0x0788 */ + 0x00, /* 0x0789 */ + 0x00, /* 0x078a */ + 0x00, /* 0x078b */ + 0x00, /* 0x078c */ + 0x00, /* 0x078d */ + 0x00, /* 0x078e */ + 0x00, /* 0x078f */ + 0x00, /* 0x0790 */ + 0x00, /* 0x0791 */ + 0x00, /* 0x0792 */ + 0x00, /* 0x0793 */ + 0x00, /* 0x0794 */ + 0x00, /* 0x0795 */ + 0x00, /* 0x0796 */ + 0x00, /* 0x0797 */ + 0x00, /* 0x0798 */ + 0x00, /* 0x0799 */ + 0x00, /* 0x079a */ + 0x00, /* 0x079b */ + 0x00, /* 0x079c */ + 0x00, /* 0x079d */ + 0x00, /* 0x079e */ + 0x00, /* 0x079f */ + 0x00, /* 0x07a0 */ + 0x00, /* 0x07a1 (Greek_ALPHAaccent) */ + 0x00, /* 0x07a2 (Greek_EPSILONaccent) */ + 0x00, /* 0x07a3 (Greek_ETAaccent) */ + 0x00, /* 0x07a4 (Greek_IOTAaccent) */ + 0x00, /* 0x07a5 (Greek_IOTAdiaeresis) */ + 0x00, /* 0x07a6 */ + 0x00, /* 0x07a7 (Greek_OMICRONaccent) */ + 0x00, /* 0x07a8 (Greek_UPSILONaccent) */ + 0x00, /* 0x07a9 (Greek_UPSILONdieresis) */ + 0x00, /* 0x07aa */ + 0x00, /* 0x07ab (Greek_OMEGAaccent) */ + 0x00, /* 0x07ac */ + 0x00, /* 0x07ad */ + 0x00, /* 0x07ae (Greek_accentdieresis) */ + 0x00, /* 0x07af (Greek_horizbar) */ + 0x00, /* 0x07b0 */ + 0x00, /* 0x07b1 (Greek_alphaaccent) */ + 0x00, /* 0x07b2 (Greek_epsilonaccent) */ + 0x00, /* 0x07b3 (Greek_etaaccent) */ + 0x00, /* 0x07b4 (Greek_iotaaccent) */ + 0x00, /* 0x07b5 (Greek_iotadieresis) */ + 0x00, /* 0x07b6 (Greek_iotaaccentdieresis) */ + 0x00, /* 0x07b7 (Greek_omicronaccent) */ + 0x00, /* 0x07b8 (Greek_upsilonaccent) */ + 0x00, /* 0x07b9 (Greek_upsilondieresis) */ + 0x00, /* 0x07ba (Greek_upsilonaccentdieresis) */ + 0x00, /* 0x07bb (Greek_omegaaccent) */ + 0x00, /* 0x07bc */ + 0x00, /* 0x07bd */ + 0x00, /* 0x07be */ + 0x00, /* 0x07bf */ + 0x00, /* 0x07c0 */ + 0x00, /* 0x07c1 (Greek_ALPHA) */ + 0x00, /* 0x07c2 (Greek_BETA) */ + 0x00, /* 0x07c3 (Greek_GAMMA) */ + 0x00, /* 0x07c4 (Greek_DELTA) */ + 0x00, /* 0x07c5 (Greek_EPSILON) */ + 0x00, /* 0x07c6 (Greek_ZETA) */ + 0x00, /* 0x07c7 (Greek_ETA) */ + 0x00, /* 0x07c8 (Greek_THETA) */ + 0x00, /* 0x07c9 (Greek_IOTA) */ + 0x00, /* 0x07ca (Greek_KAPPA) */ + 0x00, /* 0x07cb (Greek_LAMBDA) */ + 0x00, /* 0x07cc (Greek_MU) */ + 0x00, /* 0x07cd (Greek_NU) */ + 0x00, /* 0x07ce (Greek_XI) */ + 0x00, /* 0x07cf (Greek_OMICRON) */ + 0x00, /* 0x07d0 (Greek_PI) */ + 0x00, /* 0x07d1 (Greek_RHO) */ + 0x00, /* 0x07d2 (Greek_SIGMA) */ + 0x00, /* 0x07d3 */ + 0x00, /* 0x07d4 (Greek_TAU) */ + 0x00, /* 0x07d5 (Greek_UPSILON) */ + 0x00, /* 0x07d6 (Greek_PHI) */ + 0x00, /* 0x07d7 (Greek_CHI) */ + 0x00, /* 0x07d8 (Greek_PSI) */ + 0x00, /* 0x07d9 (Greek_OMEGA) */ + 0x00, /* 0x07da */ + 0x00, /* 0x07db */ + 0x00, /* 0x07dc */ + 0x00, /* 0x07dd */ + 0x00, /* 0x07de */ + 0x00, /* 0x07df */ + 0x00, /* 0x07e0 */ + 0x00, /* 0x07e1 (Greek_alpha) */ + 0x00, /* 0x07e2 (Greek_beta) */ + 0x00, /* 0x07e3 (Greek_gamma) */ + 0x00, /* 0x07e4 (Greek_delta) */ + 0x00, /* 0x07e5 (Greek_epsilon) */ + 0x00, /* 0x07e6 (Greek_zeta) */ + 0x00, /* 0x07e7 (Greek_eta) */ + 0x00, /* 0x07e8 (Greek_theta) */ + 0x00, /* 0x07e9 (Greek_iota) */ + 0x00, /* 0x07ea (Greek_kappa) */ + 0x00, /* 0x07eb (Greek_lambda) */ + 0x00, /* 0x07ec (Greek_mu) */ + 0x00, /* 0x07ed (Greek_nu) */ + 0x00, /* 0x07ee (Greek_xi) */ + 0x00, /* 0x07ef (Greek_omicron) */ + 0x00, /* 0x07f0 (Greek_pi) */ + 0x00, /* 0x07f1 (Greek_rho) */ + 0x00, /* 0x07f2 (Greek_sigma) */ + 0x00, /* 0x07f3 (Greek_finalsmallsigma) */ + 0x00, /* 0x07f4 (Greek_tau) */ + 0x00, /* 0x07f5 (Greek_upsilon) */ + 0x00, /* 0x07f6 (Greek_phi) */ + 0x00, /* 0x07f7 (Greek_chi) */ + 0x00, /* 0x07f8 (Greek_psi) */ + 0x00, /* 0x07f9 (Greek_omega) */ + 0x00, /* 0x07fa */ + 0x00, /* 0x07fb */ + 0x00, /* 0x07fc */ + 0x00, /* 0x07fd */ + 0x00, /* 0x07fe */ + 0x00, /* 0x07ff */ + }, + { /* 0x08?? */ + 0x00, /* 0x0800 */ + 0x00, /* 0x0801 */ + 0x00, /* 0x0802 */ + 0x00, /* 0x0803 */ + 0x00, /* 0x0804 */ + 0x00, /* 0x0805 */ + 0x00, /* 0x0806 */ + 0x00, /* 0x0807 */ + 0x00, /* 0x0808 */ + 0x00, /* 0x0809 */ + 0x00, /* 0x080a */ + 0x00, /* 0x080b */ + 0x00, /* 0x080c */ + 0x00, /* 0x080d */ + 0x00, /* 0x080e */ + 0x00, /* 0x080f */ + 0x00, /* 0x0810 */ + 0x00, /* 0x0811 */ + 0x00, /* 0x0812 */ + 0x00, /* 0x0813 */ + 0x00, /* 0x0814 */ + 0x00, /* 0x0815 */ + 0x00, /* 0x0816 */ + 0x00, /* 0x0817 */ + 0x00, /* 0x0818 */ + 0x00, /* 0x0819 */ + 0x00, /* 0x081a */ + 0x00, /* 0x081b */ + 0x00, /* 0x081c */ + 0x00, /* 0x081d */ + 0x00, /* 0x081e */ + 0x00, /* 0x081f */ + 0x00, /* 0x0820 */ + 0x00, /* 0x0821 */ + 0x00, /* 0x0822 */ + 0x00, /* 0x0823 */ + 0x00, /* 0x0824 */ + 0x00, /* 0x0825 */ + 0x00, /* 0x0826 */ + 0x00, /* 0x0827 */ + 0x00, /* 0x0828 */ + 0x00, /* 0x0829 */ + 0x00, /* 0x082a */ + 0x00, /* 0x082b */ + 0x00, /* 0x082c */ + 0x00, /* 0x082d */ + 0x00, /* 0x082e */ + 0x00, /* 0x082f */ + 0x00, /* 0x0830 */ + 0x00, /* 0x0831 */ + 0x00, /* 0x0832 */ + 0x00, /* 0x0833 */ + 0x00, /* 0x0834 */ + 0x00, /* 0x0835 */ + 0x00, /* 0x0836 */ + 0x00, /* 0x0837 */ + 0x00, /* 0x0838 */ + 0x00, /* 0x0839 */ + 0x00, /* 0x083a */ + 0x00, /* 0x083b */ + 0x00, /* 0x083c */ + 0x00, /* 0x083d */ + 0x00, /* 0x083e */ + 0x00, /* 0x083f */ + 0x00, /* 0x0840 */ + 0x00, /* 0x0841 */ + 0x00, /* 0x0842 */ + 0x00, /* 0x0843 */ + 0x00, /* 0x0844 */ + 0x00, /* 0x0845 */ + 0x00, /* 0x0846 */ + 0x00, /* 0x0847 */ + 0x00, /* 0x0848 */ + 0x00, /* 0x0849 */ + 0x00, /* 0x084a */ + 0x00, /* 0x084b */ + 0x00, /* 0x084c */ + 0x00, /* 0x084d */ + 0x00, /* 0x084e */ + 0x00, /* 0x084f */ + 0x00, /* 0x0850 */ + 0x00, /* 0x0851 */ + 0x00, /* 0x0852 */ + 0x00, /* 0x0853 */ + 0x00, /* 0x0854 */ + 0x00, /* 0x0855 */ + 0x00, /* 0x0856 */ + 0x00, /* 0x0857 */ + 0x00, /* 0x0858 */ + 0x00, /* 0x0859 */ + 0x00, /* 0x085a */ + 0x00, /* 0x085b */ + 0x00, /* 0x085c */ + 0x00, /* 0x085d */ + 0x00, /* 0x085e */ + 0x00, /* 0x085f */ + 0x00, /* 0x0860 */ + 0x00, /* 0x0861 */ + 0x00, /* 0x0862 */ + 0x00, /* 0x0863 */ + 0x00, /* 0x0864 */ + 0x00, /* 0x0865 */ + 0x00, /* 0x0866 */ + 0x00, /* 0x0867 */ + 0x00, /* 0x0868 */ + 0x00, /* 0x0869 */ + 0x00, /* 0x086a */ + 0x00, /* 0x086b */ + 0x00, /* 0x086c */ + 0x00, /* 0x086d */ + 0x00, /* 0x086e */ + 0x00, /* 0x086f */ + 0x00, /* 0x0870 */ + 0x00, /* 0x0871 */ + 0x00, /* 0x0872 */ + 0x00, /* 0x0873 */ + 0x00, /* 0x0874 */ + 0x00, /* 0x0875 */ + 0x00, /* 0x0876 */ + 0x00, /* 0x0877 */ + 0x00, /* 0x0878 */ + 0x00, /* 0x0879 */ + 0x00, /* 0x087a */ + 0x00, /* 0x087b */ + 0x00, /* 0x087c */ + 0x00, /* 0x087d */ + 0x00, /* 0x087e */ + 0x00, /* 0x087f */ + 0x00, /* 0x0880 */ + 0x00, /* 0x0881 */ + 0x00, /* 0x0882 */ + 0x00, /* 0x0883 */ + 0x00, /* 0x0884 */ + 0x00, /* 0x0885 */ + 0x00, /* 0x0886 */ + 0x00, /* 0x0887 */ + 0x00, /* 0x0888 */ + 0x00, /* 0x0889 */ + 0x00, /* 0x088a */ + 0x00, /* 0x088b */ + 0x00, /* 0x088c */ + 0x00, /* 0x088d */ + 0x00, /* 0x088e */ + 0x00, /* 0x088f */ + 0x00, /* 0x0890 */ + 0x00, /* 0x0891 */ + 0x00, /* 0x0892 */ + 0x00, /* 0x0893 */ + 0x00, /* 0x0894 */ + 0x00, /* 0x0895 */ + 0x00, /* 0x0896 */ + 0x00, /* 0x0897 */ + 0x00, /* 0x0898 */ + 0x00, /* 0x0899 */ + 0x00, /* 0x089a */ + 0x00, /* 0x089b */ + 0x00, /* 0x089c */ + 0x00, /* 0x089d */ + 0x00, /* 0x089e */ + 0x00, /* 0x089f */ + 0x00, /* 0x08a0 */ + 0x00, /* 0x08a1 (leftradical) */ + 0x00, /* 0x08a2 (topleftradical) */ + 0x00, /* 0x08a3 (horizconnector) */ + 0x00, /* 0x08a4 (topintegral) */ + 0x00, /* 0x08a5 (botintegral) */ + 0x00, /* 0x08a6 (vertconnector) */ + 0x00, /* 0x08a7 (topleftsqbracket) */ + 0x00, /* 0x08a8 (botleftsqbracket) */ + 0x00, /* 0x08a9 (toprightsqbracket) */ + 0x00, /* 0x08aa (botrightsqbracket) */ + 0x00, /* 0x08ab (topleftparens) */ + 0x00, /* 0x08ac (botleftparens) */ + 0x00, /* 0x08ad (toprightparens) */ + 0x00, /* 0x08ae (botrightparens) */ + 0x00, /* 0x08af (leftmiddlecurlybrace) */ + 0x00, /* 0x08b0 (rightmiddlecurlybrace) */ + 0x00, /* 0x08b1 (topleftsummation) */ + 0x00, /* 0x08b2 (botleftsummation) */ + 0x00, /* 0x08b3 (topvertsummationconnector) */ + 0x00, /* 0x08b4 (botvertsummationconnector) */ + 0x00, /* 0x08b5 (toprightsummation) */ + 0x00, /* 0x08b6 (botrightsummation) */ + 0x00, /* 0x08b7 (rightmiddlesummation) */ + 0x00, /* 0x08b8 */ + 0x00, /* 0x08b9 */ + 0x00, /* 0x08ba */ + 0x00, /* 0x08bb */ + 0x00, /* 0x08bc (lessthanequal) */ + 0x00, /* 0x08bd (notequal) */ + 0x00, /* 0x08be (greaterthanequal) */ + 0x00, /* 0x08bf (integral) */ + 0x00, /* 0x08c0 (therefore) */ + 0x00, /* 0x08c1 (variation) */ + 0x00, /* 0x08c2 (infinity) */ + 0x00, /* 0x08c3 */ + 0x00, /* 0x08c4 */ + 0x00, /* 0x08c5 (nabla) */ + 0x00, /* 0x08c6 */ + 0x00, /* 0x08c7 */ + 0x00, /* 0x08c8 (approximate) */ + 0x00, /* 0x08c9 (similarequal) */ + 0x00, /* 0x08ca */ + 0x00, /* 0x08cb */ + 0x00, /* 0x08cc */ + 0x00, /* 0x08cd (ifonlyif) */ + 0x00, /* 0x08ce (implies) */ + 0x00, /* 0x08cf (identical) */ + 0x00, /* 0x08d0 */ + 0x00, /* 0x08d1 */ + 0x00, /* 0x08d2 */ + 0x00, /* 0x08d3 */ + 0x00, /* 0x08d4 */ + 0x00, /* 0x08d5 */ + 0x00, /* 0x08d6 (radical) */ + 0x00, /* 0x08d7 */ + 0x00, /* 0x08d8 */ + 0x00, /* 0x08d9 */ + 0x00, /* 0x08da (includedin) */ + 0x00, /* 0x08db (includes) */ + 0x00, /* 0x08dc (intersection) */ + 0x00, /* 0x08dd (union) */ + 0x00, /* 0x08de (logicaland) */ + 0x00, /* 0x08df (logicalor) */ + 0x00, /* 0x08e0 */ + 0x00, /* 0x08e1 */ + 0x00, /* 0x08e2 */ + 0x00, /* 0x08e3 */ + 0x00, /* 0x08e4 */ + 0x00, /* 0x08e5 */ + 0x00, /* 0x08e6 */ + 0x00, /* 0x08e7 */ + 0x00, /* 0x08e8 */ + 0x00, /* 0x08e9 */ + 0x00, /* 0x08ea */ + 0x00, /* 0x08eb */ + 0x00, /* 0x08ec */ + 0x00, /* 0x08ed */ + 0x00, /* 0x08ee */ + 0x00, /* 0x08ef (partialderivative) */ + 0x00, /* 0x08f0 */ + 0x00, /* 0x08f1 */ + 0x00, /* 0x08f2 */ + 0x00, /* 0x08f3 */ + 0x00, /* 0x08f4 */ + 0x00, /* 0x08f5 */ + 0x00, /* 0x08f6 (function) */ + 0x00, /* 0x08f7 */ + 0x00, /* 0x08f8 */ + 0x00, /* 0x08f9 */ + 0x00, /* 0x08fa */ + 0x00, /* 0x08fb (leftarrow) */ + 0x00, /* 0x08fc (uparrow) */ + 0x00, /* 0x08fd (rightarrow) */ + 0x00, /* 0x08fe (downarrow) */ + 0x00, /* 0x08ff */ + }, + { /* 0x09?? */ + 0x00, /* 0x0900 */ + 0x00, /* 0x0901 */ + 0x00, /* 0x0902 */ + 0x00, /* 0x0903 */ + 0x00, /* 0x0904 */ + 0x00, /* 0x0905 */ + 0x00, /* 0x0906 */ + 0x00, /* 0x0907 */ + 0x00, /* 0x0908 */ + 0x00, /* 0x0909 */ + 0x00, /* 0x090a */ + 0x00, /* 0x090b */ + 0x00, /* 0x090c */ + 0x00, /* 0x090d */ + 0x00, /* 0x090e */ + 0x00, /* 0x090f */ + 0x00, /* 0x0910 */ + 0x00, /* 0x0911 */ + 0x00, /* 0x0912 */ + 0x00, /* 0x0913 */ + 0x00, /* 0x0914 */ + 0x00, /* 0x0915 */ + 0x00, /* 0x0916 */ + 0x00, /* 0x0917 */ + 0x00, /* 0x0918 */ + 0x00, /* 0x0919 */ + 0x00, /* 0x091a */ + 0x00, /* 0x091b */ + 0x00, /* 0x091c */ + 0x00, /* 0x091d */ + 0x00, /* 0x091e */ + 0x00, /* 0x091f */ + 0x00, /* 0x0920 */ + 0x00, /* 0x0921 */ + 0x00, /* 0x0922 */ + 0x00, /* 0x0923 */ + 0x00, /* 0x0924 */ + 0x00, /* 0x0925 */ + 0x00, /* 0x0926 */ + 0x00, /* 0x0927 */ + 0x00, /* 0x0928 */ + 0x00, /* 0x0929 */ + 0x00, /* 0x092a */ + 0x00, /* 0x092b */ + 0x00, /* 0x092c */ + 0x00, /* 0x092d */ + 0x00, /* 0x092e */ + 0x00, /* 0x092f */ + 0x00, /* 0x0930 */ + 0x00, /* 0x0931 */ + 0x00, /* 0x0932 */ + 0x00, /* 0x0933 */ + 0x00, /* 0x0934 */ + 0x00, /* 0x0935 */ + 0x00, /* 0x0936 */ + 0x00, /* 0x0937 */ + 0x00, /* 0x0938 */ + 0x00, /* 0x0939 */ + 0x00, /* 0x093a */ + 0x00, /* 0x093b */ + 0x00, /* 0x093c */ + 0x00, /* 0x093d */ + 0x00, /* 0x093e */ + 0x00, /* 0x093f */ + 0x00, /* 0x0940 */ + 0x00, /* 0x0941 */ + 0x00, /* 0x0942 */ + 0x00, /* 0x0943 */ + 0x00, /* 0x0944 */ + 0x00, /* 0x0945 */ + 0x00, /* 0x0946 */ + 0x00, /* 0x0947 */ + 0x00, /* 0x0948 */ + 0x00, /* 0x0949 */ + 0x00, /* 0x094a */ + 0x00, /* 0x094b */ + 0x00, /* 0x094c */ + 0x00, /* 0x094d */ + 0x00, /* 0x094e */ + 0x00, /* 0x094f */ + 0x00, /* 0x0950 */ + 0x00, /* 0x0951 */ + 0x00, /* 0x0952 */ + 0x00, /* 0x0953 */ + 0x00, /* 0x0954 */ + 0x00, /* 0x0955 */ + 0x00, /* 0x0956 */ + 0x00, /* 0x0957 */ + 0x00, /* 0x0958 */ + 0x00, /* 0x0959 */ + 0x00, /* 0x095a */ + 0x00, /* 0x095b */ + 0x00, /* 0x095c */ + 0x00, /* 0x095d */ + 0x00, /* 0x095e */ + 0x00, /* 0x095f */ + 0x00, /* 0x0960 */ + 0x00, /* 0x0961 */ + 0x00, /* 0x0962 */ + 0x00, /* 0x0963 */ + 0x00, /* 0x0964 */ + 0x00, /* 0x0965 */ + 0x00, /* 0x0966 */ + 0x00, /* 0x0967 */ + 0x00, /* 0x0968 */ + 0x00, /* 0x0969 */ + 0x00, /* 0x096a */ + 0x00, /* 0x096b */ + 0x00, /* 0x096c */ + 0x00, /* 0x096d */ + 0x00, /* 0x096e */ + 0x00, /* 0x096f */ + 0x00, /* 0x0970 */ + 0x00, /* 0x0971 */ + 0x00, /* 0x0972 */ + 0x00, /* 0x0973 */ + 0x00, /* 0x0974 */ + 0x00, /* 0x0975 */ + 0x00, /* 0x0976 */ + 0x00, /* 0x0977 */ + 0x00, /* 0x0978 */ + 0x00, /* 0x0979 */ + 0x00, /* 0x097a */ + 0x00, /* 0x097b */ + 0x00, /* 0x097c */ + 0x00, /* 0x097d */ + 0x00, /* 0x097e */ + 0x00, /* 0x097f */ + 0x00, /* 0x0980 */ + 0x00, /* 0x0981 */ + 0x00, /* 0x0982 */ + 0x00, /* 0x0983 */ + 0x00, /* 0x0984 */ + 0x00, /* 0x0985 */ + 0x00, /* 0x0986 */ + 0x00, /* 0x0987 */ + 0x00, /* 0x0988 */ + 0x00, /* 0x0989 */ + 0x00, /* 0x098a */ + 0x00, /* 0x098b */ + 0x00, /* 0x098c */ + 0x00, /* 0x098d */ + 0x00, /* 0x098e */ + 0x00, /* 0x098f */ + 0x00, /* 0x0990 */ + 0x00, /* 0x0991 */ + 0x00, /* 0x0992 */ + 0x00, /* 0x0993 */ + 0x00, /* 0x0994 */ + 0x00, /* 0x0995 */ + 0x00, /* 0x0996 */ + 0x00, /* 0x0997 */ + 0x00, /* 0x0998 */ + 0x00, /* 0x0999 */ + 0x00, /* 0x099a */ + 0x00, /* 0x099b */ + 0x00, /* 0x099c */ + 0x00, /* 0x099d */ + 0x00, /* 0x099e */ + 0x00, /* 0x099f */ + 0x00, /* 0x09a0 */ + 0x00, /* 0x09a1 */ + 0x00, /* 0x09a2 */ + 0x00, /* 0x09a3 */ + 0x00, /* 0x09a4 */ + 0x00, /* 0x09a5 */ + 0x00, /* 0x09a6 */ + 0x00, /* 0x09a7 */ + 0x00, /* 0x09a8 */ + 0x00, /* 0x09a9 */ + 0x00, /* 0x09aa */ + 0x00, /* 0x09ab */ + 0x00, /* 0x09ac */ + 0x00, /* 0x09ad */ + 0x00, /* 0x09ae */ + 0x00, /* 0x09af */ + 0x00, /* 0x09b0 */ + 0x00, /* 0x09b1 */ + 0x00, /* 0x09b2 */ + 0x00, /* 0x09b3 */ + 0x00, /* 0x09b4 */ + 0x00, /* 0x09b5 */ + 0x00, /* 0x09b6 */ + 0x00, /* 0x09b7 */ + 0x00, /* 0x09b8 */ + 0x00, /* 0x09b9 */ + 0x00, /* 0x09ba */ + 0x00, /* 0x09bb */ + 0x00, /* 0x09bc */ + 0x00, /* 0x09bd */ + 0x00, /* 0x09be */ + 0x00, /* 0x09bf */ + 0x00, /* 0x09c0 */ + 0x00, /* 0x09c1 */ + 0x00, /* 0x09c2 */ + 0x00, /* 0x09c3 */ + 0x00, /* 0x09c4 */ + 0x00, /* 0x09c5 */ + 0x00, /* 0x09c6 */ + 0x00, /* 0x09c7 */ + 0x00, /* 0x09c8 */ + 0x00, /* 0x09c9 */ + 0x00, /* 0x09ca */ + 0x00, /* 0x09cb */ + 0x00, /* 0x09cc */ + 0x00, /* 0x09cd */ + 0x00, /* 0x09ce */ + 0x00, /* 0x09cf */ + 0x00, /* 0x09d0 */ + 0x00, /* 0x09d1 */ + 0x00, /* 0x09d2 */ + 0x00, /* 0x09d3 */ + 0x00, /* 0x09d4 */ + 0x00, /* 0x09d5 */ + 0x00, /* 0x09d6 */ + 0x00, /* 0x09d7 */ + 0x00, /* 0x09d8 */ + 0x00, /* 0x09d9 */ + 0x00, /* 0x09da */ + 0x00, /* 0x09db */ + 0x00, /* 0x09dc */ + 0x00, /* 0x09dd */ + 0x00, /* 0x09de */ + 0x00, /* 0x09df (blank) */ + 0x00, /* 0x09e0 (soliddiamond) */ + 0x00, /* 0x09e1 (checkerboard) */ + 0x00, /* 0x09e2 (ht) */ + 0x00, /* 0x09e3 (ff) */ + 0x00, /* 0x09e4 (cr) */ + 0x00, /* 0x09e5 (lf) */ + 0x00, /* 0x09e6 */ + 0x00, /* 0x09e7 */ + 0x00, /* 0x09e8 (nl) */ + 0x00, /* 0x09e9 (vt) */ + 0x00, /* 0x09ea (lowrightcorner) */ + 0x00, /* 0x09eb (uprightcorner) */ + 0x00, /* 0x09ec (upleftcorner) */ + 0x00, /* 0x09ed (lowleftcorner) */ + 0x00, /* 0x09ee (crossinglines) */ + 0x00, /* 0x09ef (horizlinescan1) */ + 0x00, /* 0x09f0 (horizlinescan3) */ + 0x00, /* 0x09f1 (horizlinescan5) */ + 0x00, /* 0x09f2 (horizlinescan7) */ + 0x00, /* 0x09f3 (horizlinescan9) */ + 0x00, /* 0x09f4 (leftt) */ + 0x00, /* 0x09f5 (rightt) */ + 0x00, /* 0x09f6 (bott) */ + 0x00, /* 0x09f7 (topt) */ + 0x00, /* 0x09f8 (vertbar) */ + 0x00, /* 0x09f9 */ + 0x00, /* 0x09fa */ + 0x00, /* 0x09fb */ + 0x00, /* 0x09fc */ + 0x00, /* 0x09fd */ + 0x00, /* 0x09fe */ + 0x00, /* 0x09ff */ + }, + { /* 0x0a?? */ + 0x00, /* 0x0a00 */ + 0x00, /* 0x0a01 */ + 0x00, /* 0x0a02 */ + 0x00, /* 0x0a03 */ + 0x00, /* 0x0a04 */ + 0x00, /* 0x0a05 */ + 0x00, /* 0x0a06 */ + 0x00, /* 0x0a07 */ + 0x00, /* 0x0a08 */ + 0x00, /* 0x0a09 */ + 0x00, /* 0x0a0a */ + 0x00, /* 0x0a0b */ + 0x00, /* 0x0a0c */ + 0x00, /* 0x0a0d */ + 0x00, /* 0x0a0e */ + 0x00, /* 0x0a0f */ + 0x00, /* 0x0a10 */ + 0x00, /* 0x0a11 */ + 0x00, /* 0x0a12 */ + 0x00, /* 0x0a13 */ + 0x00, /* 0x0a14 */ + 0x00, /* 0x0a15 */ + 0x00, /* 0x0a16 */ + 0x00, /* 0x0a17 */ + 0x00, /* 0x0a18 */ + 0x00, /* 0x0a19 */ + 0x00, /* 0x0a1a */ + 0x00, /* 0x0a1b */ + 0x00, /* 0x0a1c */ + 0x00, /* 0x0a1d */ + 0x00, /* 0x0a1e */ + 0x00, /* 0x0a1f */ + 0x00, /* 0x0a20 */ + 0x00, /* 0x0a21 */ + 0x00, /* 0x0a22 */ + 0x00, /* 0x0a23 */ + 0x00, /* 0x0a24 */ + 0x00, /* 0x0a25 */ + 0x00, /* 0x0a26 */ + 0x00, /* 0x0a27 */ + 0x00, /* 0x0a28 */ + 0x00, /* 0x0a29 */ + 0x00, /* 0x0a2a */ + 0x00, /* 0x0a2b */ + 0x00, /* 0x0a2c */ + 0x00, /* 0x0a2d */ + 0x00, /* 0x0a2e */ + 0x00, /* 0x0a2f */ + 0x00, /* 0x0a30 */ + 0x00, /* 0x0a31 */ + 0x00, /* 0x0a32 */ + 0x00, /* 0x0a33 */ + 0x00, /* 0x0a34 */ + 0x00, /* 0x0a35 */ + 0x00, /* 0x0a36 */ + 0x00, /* 0x0a37 */ + 0x00, /* 0x0a38 */ + 0x00, /* 0x0a39 */ + 0x00, /* 0x0a3a */ + 0x00, /* 0x0a3b */ + 0x00, /* 0x0a3c */ + 0x00, /* 0x0a3d */ + 0x00, /* 0x0a3e */ + 0x00, /* 0x0a3f */ + 0x00, /* 0x0a40 */ + 0x00, /* 0x0a41 */ + 0x00, /* 0x0a42 */ + 0x00, /* 0x0a43 */ + 0x00, /* 0x0a44 */ + 0x00, /* 0x0a45 */ + 0x00, /* 0x0a46 */ + 0x00, /* 0x0a47 */ + 0x00, /* 0x0a48 */ + 0x00, /* 0x0a49 */ + 0x00, /* 0x0a4a */ + 0x00, /* 0x0a4b */ + 0x00, /* 0x0a4c */ + 0x00, /* 0x0a4d */ + 0x00, /* 0x0a4e */ + 0x00, /* 0x0a4f */ + 0x00, /* 0x0a50 */ + 0x00, /* 0x0a51 */ + 0x00, /* 0x0a52 */ + 0x00, /* 0x0a53 */ + 0x00, /* 0x0a54 */ + 0x00, /* 0x0a55 */ + 0x00, /* 0x0a56 */ + 0x00, /* 0x0a57 */ + 0x00, /* 0x0a58 */ + 0x00, /* 0x0a59 */ + 0x00, /* 0x0a5a */ + 0x00, /* 0x0a5b */ + 0x00, /* 0x0a5c */ + 0x00, /* 0x0a5d */ + 0x00, /* 0x0a5e */ + 0x00, /* 0x0a5f */ + 0x00, /* 0x0a60 */ + 0x00, /* 0x0a61 */ + 0x00, /* 0x0a62 */ + 0x00, /* 0x0a63 */ + 0x00, /* 0x0a64 */ + 0x00, /* 0x0a65 */ + 0x00, /* 0x0a66 */ + 0x00, /* 0x0a67 */ + 0x00, /* 0x0a68 */ + 0x00, /* 0x0a69 */ + 0x00, /* 0x0a6a */ + 0x00, /* 0x0a6b */ + 0x00, /* 0x0a6c */ + 0x00, /* 0x0a6d */ + 0x00, /* 0x0a6e */ + 0x00, /* 0x0a6f */ + 0x00, /* 0x0a70 */ + 0x00, /* 0x0a71 */ + 0x00, /* 0x0a72 */ + 0x00, /* 0x0a73 */ + 0x00, /* 0x0a74 */ + 0x00, /* 0x0a75 */ + 0x00, /* 0x0a76 */ + 0x00, /* 0x0a77 */ + 0x00, /* 0x0a78 */ + 0x00, /* 0x0a79 */ + 0x00, /* 0x0a7a */ + 0x00, /* 0x0a7b */ + 0x00, /* 0x0a7c */ + 0x00, /* 0x0a7d */ + 0x00, /* 0x0a7e */ + 0x00, /* 0x0a7f */ + 0x00, /* 0x0a80 */ + 0x00, /* 0x0a81 */ + 0x00, /* 0x0a82 */ + 0x00, /* 0x0a83 */ + 0x00, /* 0x0a84 */ + 0x00, /* 0x0a85 */ + 0x00, /* 0x0a86 */ + 0x00, /* 0x0a87 */ + 0x00, /* 0x0a88 */ + 0x00, /* 0x0a89 */ + 0x00, /* 0x0a8a */ + 0x00, /* 0x0a8b */ + 0x00, /* 0x0a8c */ + 0x00, /* 0x0a8d */ + 0x00, /* 0x0a8e */ + 0x00, /* 0x0a8f */ + 0x00, /* 0x0a90 */ + 0x00, /* 0x0a91 */ + 0x00, /* 0x0a92 */ + 0x00, /* 0x0a93 */ + 0x00, /* 0x0a94 */ + 0x00, /* 0x0a95 */ + 0x00, /* 0x0a96 */ + 0x00, /* 0x0a97 */ + 0x00, /* 0x0a98 */ + 0x00, /* 0x0a99 */ + 0x00, /* 0x0a9a */ + 0x00, /* 0x0a9b */ + 0x00, /* 0x0a9c */ + 0x00, /* 0x0a9d */ + 0x00, /* 0x0a9e */ + 0x00, /* 0x0a9f */ + 0x00, /* 0x0aa0 */ + 0x00, /* 0x0aa1 (emspace) */ + 0x00, /* 0x0aa2 (enspace) */ + 0x00, /* 0x0aa3 (em3space) */ + 0x00, /* 0x0aa4 (em4space) */ + 0x00, /* 0x0aa5 (digitspace) */ + 0x00, /* 0x0aa6 (punctspace) */ + 0x00, /* 0x0aa7 (thinspace) */ + 0x00, /* 0x0aa8 (hairspace) */ + 0x00, /* 0x0aa9 (emdash) */ + 0x00, /* 0x0aaa (endash) */ + 0x00, /* 0x0aab */ + 0x00, /* 0x0aac (signifblank) */ + 0x00, /* 0x0aad */ + 0x00, /* 0x0aae (ellipsis) */ + 0x00, /* 0x0aaf (doubbaselinedot) */ + 0x00, /* 0x0ab0 (onethird) */ + 0x00, /* 0x0ab1 (twothirds) */ + 0x00, /* 0x0ab2 (onefifth) */ + 0x00, /* 0x0ab3 (twofifths) */ + 0x00, /* 0x0ab4 (threefifths) */ + 0x00, /* 0x0ab5 (fourfifths) */ + 0x00, /* 0x0ab6 (onesixth) */ + 0x00, /* 0x0ab7 (fivesixths) */ + 0x00, /* 0x0ab8 (careof) */ + 0x00, /* 0x0ab9 */ + 0x00, /* 0x0aba */ + 0x00, /* 0x0abb (figdash) */ + 0x00, /* 0x0abc (leftanglebracket) */ + 0x00, /* 0x0abd (decimalpoint) */ + 0x00, /* 0x0abe (rightanglebracket) */ + 0x00, /* 0x0abf (marker) */ + 0x00, /* 0x0ac0 */ + 0x00, /* 0x0ac1 */ + 0x00, /* 0x0ac2 */ + 0x00, /* 0x0ac3 (oneeighth) */ + 0x00, /* 0x0ac4 (threeeighths) */ + 0x00, /* 0x0ac5 (fiveeighths) */ + 0x00, /* 0x0ac6 (seveneighths) */ + 0x00, /* 0x0ac7 */ + 0x00, /* 0x0ac8 */ + 0x00, /* 0x0ac9 (trademark) */ + 0x00, /* 0x0aca (signaturemark) */ + 0x00, /* 0x0acb (trademarkincircle) */ + 0x00, /* 0x0acc (leftopentriangle) */ + 0x00, /* 0x0acd (rightopentriangle) */ + 0x00, /* 0x0ace (emopencircle) */ + 0x00, /* 0x0acf (emopenrectangle) */ + 0x00, /* 0x0ad0 (leftsinglequotemark) */ + 0x00, /* 0x0ad1 (rightsinglequotemark) */ + 0x00, /* 0x0ad2 (leftdoublequotemark) */ + 0x00, /* 0x0ad3 (rightdoublequotemark) */ + 0x00, /* 0x0ad4 (prescription) */ + 0x00, /* 0x0ad5 */ + 0x00, /* 0x0ad6 (minutes) */ + 0x00, /* 0x0ad7 (seconds) */ + 0x00, /* 0x0ad8 */ + 0x00, /* 0x0ad9 (latincross) */ + 0x00, /* 0x0ada (hexagram) */ + 0x00, /* 0x0adb (filledrectbullet) */ + 0x00, /* 0x0adc (filledlefttribullet) */ + 0x00, /* 0x0add (filledrighttribullet) */ + 0x00, /* 0x0ade (emfilledcircle) */ + 0x00, /* 0x0adf (emfilledrect) */ + 0x00, /* 0x0ae0 (enopencircbullet) */ + 0x00, /* 0x0ae1 (enopensquarebullet) */ + 0x00, /* 0x0ae2 (openrectbullet) */ + 0x00, /* 0x0ae3 (opentribulletup) */ + 0x00, /* 0x0ae4 (opentribulletdown) */ + 0x00, /* 0x0ae5 (openstar) */ + 0x00, /* 0x0ae6 (enfilledcircbullet) */ + 0x00, /* 0x0ae7 (enfilledsqbullet) */ + 0x00, /* 0x0ae8 (filledtribulletup) */ + 0x00, /* 0x0ae9 (filledtribulletdown) */ + 0x00, /* 0x0aea (leftpointer) */ + 0x00, /* 0x0aeb (rightpointer) */ + 0x00, /* 0x0aec (club) */ + 0x00, /* 0x0aed (diamond) */ + 0x00, /* 0x0aee (heart) */ + 0x00, /* 0x0aef */ + 0x00, /* 0x0af0 (maltesecross) */ + 0x00, /* 0x0af1 (dagger) */ + 0x00, /* 0x0af2 (doubledagger) */ + 0x00, /* 0x0af3 (checkmark) */ + 0x00, /* 0x0af4 (ballotcross) */ + 0x00, /* 0x0af5 (musicalsharp) */ + 0x00, /* 0x0af6 (musicalflat) */ + 0x00, /* 0x0af7 (malesymbol) */ + 0x00, /* 0x0af8 (femalesymbol) */ + 0x00, /* 0x0af9 (telephone) */ + 0x00, /* 0x0afa (telephonerecorder) */ + 0x00, /* 0x0afb (phonographcopyright) */ + 0x00, /* 0x0afc (caret) */ + 0x00, /* 0x0afd (singlelowquotemark) */ + 0x00, /* 0x0afe (doublelowquotemark) */ + 0x00, /* 0x0aff (cursor) */ + }, + { /* 0x0b?? */ + 0x00, /* 0x0b00 */ + 0x00, /* 0x0b01 */ + 0x00, /* 0x0b02 */ + 0x00, /* 0x0b03 */ + 0x00, /* 0x0b04 */ + 0x00, /* 0x0b05 */ + 0x00, /* 0x0b06 */ + 0x00, /* 0x0b07 */ + 0x00, /* 0x0b08 */ + 0x00, /* 0x0b09 */ + 0x00, /* 0x0b0a */ + 0x00, /* 0x0b0b */ + 0x00, /* 0x0b0c */ + 0x00, /* 0x0b0d */ + 0x00, /* 0x0b0e */ + 0x00, /* 0x0b0f */ + 0x00, /* 0x0b10 */ + 0x00, /* 0x0b11 */ + 0x00, /* 0x0b12 */ + 0x00, /* 0x0b13 */ + 0x00, /* 0x0b14 */ + 0x00, /* 0x0b15 */ + 0x00, /* 0x0b16 */ + 0x00, /* 0x0b17 */ + 0x00, /* 0x0b18 */ + 0x00, /* 0x0b19 */ + 0x00, /* 0x0b1a */ + 0x00, /* 0x0b1b */ + 0x00, /* 0x0b1c */ + 0x00, /* 0x0b1d */ + 0x00, /* 0x0b1e */ + 0x00, /* 0x0b1f */ + 0x00, /* 0x0b20 */ + 0x00, /* 0x0b21 */ + 0x00, /* 0x0b22 */ + 0x00, /* 0x0b23 */ + 0x00, /* 0x0b24 */ + 0x00, /* 0x0b25 */ + 0x00, /* 0x0b26 */ + 0x00, /* 0x0b27 */ + 0x00, /* 0x0b28 */ + 0x00, /* 0x0b29 */ + 0x00, /* 0x0b2a */ + 0x00, /* 0x0b2b */ + 0x00, /* 0x0b2c */ + 0x00, /* 0x0b2d */ + 0x00, /* 0x0b2e */ + 0x00, /* 0x0b2f */ + 0x00, /* 0x0b30 */ + 0x00, /* 0x0b31 */ + 0x00, /* 0x0b32 */ + 0x00, /* 0x0b33 */ + 0x00, /* 0x0b34 */ + 0x00, /* 0x0b35 */ + 0x00, /* 0x0b36 */ + 0x00, /* 0x0b37 */ + 0x00, /* 0x0b38 */ + 0x00, /* 0x0b39 */ + 0x00, /* 0x0b3a */ + 0x00, /* 0x0b3b */ + 0x00, /* 0x0b3c */ + 0x00, /* 0x0b3d */ + 0x00, /* 0x0b3e */ + 0x00, /* 0x0b3f */ + 0x00, /* 0x0b40 */ + 0x00, /* 0x0b41 */ + 0x00, /* 0x0b42 */ + 0x00, /* 0x0b43 */ + 0x00, /* 0x0b44 */ + 0x00, /* 0x0b45 */ + 0x00, /* 0x0b46 */ + 0x00, /* 0x0b47 */ + 0x00, /* 0x0b48 */ + 0x00, /* 0x0b49 */ + 0x00, /* 0x0b4a */ + 0x00, /* 0x0b4b */ + 0x00, /* 0x0b4c */ + 0x00, /* 0x0b4d */ + 0x00, /* 0x0b4e */ + 0x00, /* 0x0b4f */ + 0x00, /* 0x0b50 */ + 0x00, /* 0x0b51 */ + 0x00, /* 0x0b52 */ + 0x00, /* 0x0b53 */ + 0x00, /* 0x0b54 */ + 0x00, /* 0x0b55 */ + 0x00, /* 0x0b56 */ + 0x00, /* 0x0b57 */ + 0x00, /* 0x0b58 */ + 0x00, /* 0x0b59 */ + 0x00, /* 0x0b5a */ + 0x00, /* 0x0b5b */ + 0x00, /* 0x0b5c */ + 0x00, /* 0x0b5d */ + 0x00, /* 0x0b5e */ + 0x00, /* 0x0b5f */ + 0x00, /* 0x0b60 */ + 0x00, /* 0x0b61 */ + 0x00, /* 0x0b62 */ + 0x00, /* 0x0b63 */ + 0x00, /* 0x0b64 */ + 0x00, /* 0x0b65 */ + 0x00, /* 0x0b66 */ + 0x00, /* 0x0b67 */ + 0x00, /* 0x0b68 */ + 0x00, /* 0x0b69 */ + 0x00, /* 0x0b6a */ + 0x00, /* 0x0b6b */ + 0x00, /* 0x0b6c */ + 0x00, /* 0x0b6d */ + 0x00, /* 0x0b6e */ + 0x00, /* 0x0b6f */ + 0x00, /* 0x0b70 */ + 0x00, /* 0x0b71 */ + 0x00, /* 0x0b72 */ + 0x00, /* 0x0b73 */ + 0x00, /* 0x0b74 */ + 0x00, /* 0x0b75 */ + 0x00, /* 0x0b76 */ + 0x00, /* 0x0b77 */ + 0x00, /* 0x0b78 */ + 0x00, /* 0x0b79 */ + 0x00, /* 0x0b7a */ + 0x00, /* 0x0b7b */ + 0x00, /* 0x0b7c */ + 0x00, /* 0x0b7d */ + 0x00, /* 0x0b7e */ + 0x00, /* 0x0b7f */ + 0x00, /* 0x0b80 */ + 0x00, /* 0x0b81 */ + 0x00, /* 0x0b82 */ + 0x00, /* 0x0b83 */ + 0x00, /* 0x0b84 */ + 0x00, /* 0x0b85 */ + 0x00, /* 0x0b86 */ + 0x00, /* 0x0b87 */ + 0x00, /* 0x0b88 */ + 0x00, /* 0x0b89 */ + 0x00, /* 0x0b8a */ + 0x00, /* 0x0b8b */ + 0x00, /* 0x0b8c */ + 0x00, /* 0x0b8d */ + 0x00, /* 0x0b8e */ + 0x00, /* 0x0b8f */ + 0x00, /* 0x0b90 */ + 0x00, /* 0x0b91 */ + 0x00, /* 0x0b92 */ + 0x00, /* 0x0b93 */ + 0x00, /* 0x0b94 */ + 0x00, /* 0x0b95 */ + 0x00, /* 0x0b96 */ + 0x00, /* 0x0b97 */ + 0x00, /* 0x0b98 */ + 0x00, /* 0x0b99 */ + 0x00, /* 0x0b9a */ + 0x00, /* 0x0b9b */ + 0x00, /* 0x0b9c */ + 0x00, /* 0x0b9d */ + 0x00, /* 0x0b9e */ + 0x00, /* 0x0b9f */ + 0x00, /* 0x0ba0 */ + 0x00, /* 0x0ba1 */ + 0x00, /* 0x0ba2 */ + 0x00, /* 0x0ba3 (leftcaret) */ + 0x00, /* 0x0ba4 */ + 0x00, /* 0x0ba5 */ + 0x00, /* 0x0ba6 (rightcaret) */ + 0x00, /* 0x0ba7 */ + 0x00, /* 0x0ba8 (downcaret) */ + 0x00, /* 0x0ba9 (upcaret) */ + 0x00, /* 0x0baa */ + 0x00, /* 0x0bab */ + 0x00, /* 0x0bac */ + 0x00, /* 0x0bad */ + 0x00, /* 0x0bae */ + 0x00, /* 0x0baf */ + 0x00, /* 0x0bb0 */ + 0x00, /* 0x0bb1 */ + 0x00, /* 0x0bb2 */ + 0x00, /* 0x0bb3 */ + 0x00, /* 0x0bb4 */ + 0x00, /* 0x0bb5 */ + 0x00, /* 0x0bb6 */ + 0x00, /* 0x0bb7 */ + 0x00, /* 0x0bb8 */ + 0x00, /* 0x0bb9 */ + 0x00, /* 0x0bba */ + 0x00, /* 0x0bbb */ + 0x00, /* 0x0bbc */ + 0x00, /* 0x0bbd */ + 0x00, /* 0x0bbe */ + 0x00, /* 0x0bbf */ + 0x00, /* 0x0bc0 (overbar) */ + 0x00, /* 0x0bc1 */ + 0x00, /* 0x0bc2 (downtack) */ + 0x00, /* 0x0bc3 (upshoe) */ + 0x00, /* 0x0bc4 (downstile) */ + 0x00, /* 0x0bc5 */ + 0x00, /* 0x0bc6 (underbar) */ + 0x00, /* 0x0bc7 */ + 0x00, /* 0x0bc8 */ + 0x00, /* 0x0bc9 */ + 0x00, /* 0x0bca (jot) */ + 0x00, /* 0x0bcb */ + 0x00, /* 0x0bcc (quad) */ + 0x00, /* 0x0bcd */ + 0x00, /* 0x0bce (uptack) */ + 0x00, /* 0x0bcf (circle) */ + 0x00, /* 0x0bd0 */ + 0x00, /* 0x0bd1 */ + 0x00, /* 0x0bd2 */ + 0x00, /* 0x0bd3 (upstile) */ + 0x00, /* 0x0bd4 */ + 0x00, /* 0x0bd5 */ + 0x00, /* 0x0bd6 (downshoe) */ + 0x00, /* 0x0bd7 */ + 0x00, /* 0x0bd8 (rightshoe) */ + 0x00, /* 0x0bd9 */ + 0x00, /* 0x0bda (leftshoe) */ + 0x00, /* 0x0bdb */ + 0x00, /* 0x0bdc (lefttack) */ + 0x00, /* 0x0bdd */ + 0x00, /* 0x0bde */ + 0x00, /* 0x0bdf */ + 0x00, /* 0x0be0 */ + 0x00, /* 0x0be1 */ + 0x00, /* 0x0be2 */ + 0x00, /* 0x0be3 */ + 0x00, /* 0x0be4 */ + 0x00, /* 0x0be5 */ + 0x00, /* 0x0be6 */ + 0x00, /* 0x0be7 */ + 0x00, /* 0x0be8 */ + 0x00, /* 0x0be9 */ + 0x00, /* 0x0bea */ + 0x00, /* 0x0beb */ + 0x00, /* 0x0bec */ + 0x00, /* 0x0bed */ + 0x00, /* 0x0bee */ + 0x00, /* 0x0bef */ + 0x00, /* 0x0bf0 */ + 0x00, /* 0x0bf1 */ + 0x00, /* 0x0bf2 */ + 0x00, /* 0x0bf3 */ + 0x00, /* 0x0bf4 */ + 0x00, /* 0x0bf5 */ + 0x00, /* 0x0bf6 */ + 0x00, /* 0x0bf7 */ + 0x00, /* 0x0bf8 */ + 0x00, /* 0x0bf9 */ + 0x00, /* 0x0bfa */ + 0x00, /* 0x0bfb */ + 0x00, /* 0x0bfc (righttack) */ + 0x00, /* 0x0bfd */ + 0x00, /* 0x0bfe */ + 0x00, /* 0x0bff */ + }, + { /* 0x0c?? */ + 0x00, /* 0x0c00 */ + 0x00, /* 0x0c01 */ + 0x00, /* 0x0c02 */ + 0x00, /* 0x0c03 */ + 0x00, /* 0x0c04 */ + 0x00, /* 0x0c05 */ + 0x00, /* 0x0c06 */ + 0x00, /* 0x0c07 */ + 0x00, /* 0x0c08 */ + 0x00, /* 0x0c09 */ + 0x00, /* 0x0c0a */ + 0x00, /* 0x0c0b */ + 0x00, /* 0x0c0c */ + 0x00, /* 0x0c0d */ + 0x00, /* 0x0c0e */ + 0x00, /* 0x0c0f */ + 0x00, /* 0x0c10 */ + 0x00, /* 0x0c11 */ + 0x00, /* 0x0c12 */ + 0x00, /* 0x0c13 */ + 0x00, /* 0x0c14 */ + 0x00, /* 0x0c15 */ + 0x00, /* 0x0c16 */ + 0x00, /* 0x0c17 */ + 0x00, /* 0x0c18 */ + 0x00, /* 0x0c19 */ + 0x00, /* 0x0c1a */ + 0x00, /* 0x0c1b */ + 0x00, /* 0x0c1c */ + 0x00, /* 0x0c1d */ + 0x00, /* 0x0c1e */ + 0x00, /* 0x0c1f */ + 0x00, /* 0x0c20 */ + 0x00, /* 0x0c21 */ + 0x00, /* 0x0c22 */ + 0x00, /* 0x0c23 */ + 0x00, /* 0x0c24 */ + 0x00, /* 0x0c25 */ + 0x00, /* 0x0c26 */ + 0x00, /* 0x0c27 */ + 0x00, /* 0x0c28 */ + 0x00, /* 0x0c29 */ + 0x00, /* 0x0c2a */ + 0x00, /* 0x0c2b */ + 0x00, /* 0x0c2c */ + 0x00, /* 0x0c2d */ + 0x00, /* 0x0c2e */ + 0x00, /* 0x0c2f */ + 0x00, /* 0x0c30 */ + 0x00, /* 0x0c31 */ + 0x00, /* 0x0c32 */ + 0x00, /* 0x0c33 */ + 0x00, /* 0x0c34 */ + 0x00, /* 0x0c35 */ + 0x00, /* 0x0c36 */ + 0x00, /* 0x0c37 */ + 0x00, /* 0x0c38 */ + 0x00, /* 0x0c39 */ + 0x00, /* 0x0c3a */ + 0x00, /* 0x0c3b */ + 0x00, /* 0x0c3c */ + 0x00, /* 0x0c3d */ + 0x00, /* 0x0c3e */ + 0x00, /* 0x0c3f */ + 0x00, /* 0x0c40 */ + 0x00, /* 0x0c41 */ + 0x00, /* 0x0c42 */ + 0x00, /* 0x0c43 */ + 0x00, /* 0x0c44 */ + 0x00, /* 0x0c45 */ + 0x00, /* 0x0c46 */ + 0x00, /* 0x0c47 */ + 0x00, /* 0x0c48 */ + 0x00, /* 0x0c49 */ + 0x00, /* 0x0c4a */ + 0x00, /* 0x0c4b */ + 0x00, /* 0x0c4c */ + 0x00, /* 0x0c4d */ + 0x00, /* 0x0c4e */ + 0x00, /* 0x0c4f */ + 0x00, /* 0x0c50 */ + 0x00, /* 0x0c51 */ + 0x00, /* 0x0c52 */ + 0x00, /* 0x0c53 */ + 0x00, /* 0x0c54 */ + 0x00, /* 0x0c55 */ + 0x00, /* 0x0c56 */ + 0x00, /* 0x0c57 */ + 0x00, /* 0x0c58 */ + 0x00, /* 0x0c59 */ + 0x00, /* 0x0c5a */ + 0x00, /* 0x0c5b */ + 0x00, /* 0x0c5c */ + 0x00, /* 0x0c5d */ + 0x00, /* 0x0c5e */ + 0x00, /* 0x0c5f */ + 0x00, /* 0x0c60 */ + 0x00, /* 0x0c61 */ + 0x00, /* 0x0c62 */ + 0x00, /* 0x0c63 */ + 0x00, /* 0x0c64 */ + 0x00, /* 0x0c65 */ + 0x00, /* 0x0c66 */ + 0x00, /* 0x0c67 */ + 0x00, /* 0x0c68 */ + 0x00, /* 0x0c69 */ + 0x00, /* 0x0c6a */ + 0x00, /* 0x0c6b */ + 0x00, /* 0x0c6c */ + 0x00, /* 0x0c6d */ + 0x00, /* 0x0c6e */ + 0x00, /* 0x0c6f */ + 0x00, /* 0x0c70 */ + 0x00, /* 0x0c71 */ + 0x00, /* 0x0c72 */ + 0x00, /* 0x0c73 */ + 0x00, /* 0x0c74 */ + 0x00, /* 0x0c75 */ + 0x00, /* 0x0c76 */ + 0x00, /* 0x0c77 */ + 0x00, /* 0x0c78 */ + 0x00, /* 0x0c79 */ + 0x00, /* 0x0c7a */ + 0x00, /* 0x0c7b */ + 0x00, /* 0x0c7c */ + 0x00, /* 0x0c7d */ + 0x00, /* 0x0c7e */ + 0x00, /* 0x0c7f */ + 0x00, /* 0x0c80 */ + 0x00, /* 0x0c81 */ + 0x00, /* 0x0c82 */ + 0x00, /* 0x0c83 */ + 0x00, /* 0x0c84 */ + 0x00, /* 0x0c85 */ + 0x00, /* 0x0c86 */ + 0x00, /* 0x0c87 */ + 0x00, /* 0x0c88 */ + 0x00, /* 0x0c89 */ + 0x00, /* 0x0c8a */ + 0x00, /* 0x0c8b */ + 0x00, /* 0x0c8c */ + 0x00, /* 0x0c8d */ + 0x00, /* 0x0c8e */ + 0x00, /* 0x0c8f */ + 0x00, /* 0x0c90 */ + 0x00, /* 0x0c91 */ + 0x00, /* 0x0c92 */ + 0x00, /* 0x0c93 */ + 0x00, /* 0x0c94 */ + 0x00, /* 0x0c95 */ + 0x00, /* 0x0c96 */ + 0x00, /* 0x0c97 */ + 0x00, /* 0x0c98 */ + 0x00, /* 0x0c99 */ + 0x00, /* 0x0c9a */ + 0x00, /* 0x0c9b */ + 0x00, /* 0x0c9c */ + 0x00, /* 0x0c9d */ + 0x00, /* 0x0c9e */ + 0x00, /* 0x0c9f */ + 0x00, /* 0x0ca0 */ + 0x00, /* 0x0ca1 */ + 0x00, /* 0x0ca2 */ + 0x00, /* 0x0ca3 */ + 0x00, /* 0x0ca4 */ + 0x00, /* 0x0ca5 */ + 0x00, /* 0x0ca6 */ + 0x00, /* 0x0ca7 */ + 0x00, /* 0x0ca8 */ + 0x00, /* 0x0ca9 */ + 0x00, /* 0x0caa */ + 0x00, /* 0x0cab */ + 0x00, /* 0x0cac */ + 0x00, /* 0x0cad */ + 0x00, /* 0x0cae */ + 0x00, /* 0x0caf */ + 0x00, /* 0x0cb0 */ + 0x00, /* 0x0cb1 */ + 0x00, /* 0x0cb2 */ + 0x00, /* 0x0cb3 */ + 0x00, /* 0x0cb4 */ + 0x00, /* 0x0cb5 */ + 0x00, /* 0x0cb6 */ + 0x00, /* 0x0cb7 */ + 0x00, /* 0x0cb8 */ + 0x00, /* 0x0cb9 */ + 0x00, /* 0x0cba */ + 0x00, /* 0x0cbb */ + 0x00, /* 0x0cbc */ + 0x00, /* 0x0cbd */ + 0x00, /* 0x0cbe */ + 0x00, /* 0x0cbf */ + 0x00, /* 0x0cc0 */ + 0x00, /* 0x0cc1 */ + 0x00, /* 0x0cc2 */ + 0x00, /* 0x0cc3 */ + 0x00, /* 0x0cc4 */ + 0x00, /* 0x0cc5 */ + 0x00, /* 0x0cc6 */ + 0x00, /* 0x0cc7 */ + 0x00, /* 0x0cc8 */ + 0x00, /* 0x0cc9 */ + 0x00, /* 0x0cca */ + 0x00, /* 0x0ccb */ + 0x00, /* 0x0ccc */ + 0x00, /* 0x0ccd */ + 0x00, /* 0x0cce */ + 0x00, /* 0x0ccf */ + 0x00, /* 0x0cd0 */ + 0x00, /* 0x0cd1 */ + 0x00, /* 0x0cd2 */ + 0x00, /* 0x0cd3 */ + 0x00, /* 0x0cd4 */ + 0x00, /* 0x0cd5 */ + 0x00, /* 0x0cd6 */ + 0x00, /* 0x0cd7 */ + 0x00, /* 0x0cd8 */ + 0x00, /* 0x0cd9 */ + 0x00, /* 0x0cda */ + 0x00, /* 0x0cdb */ + 0x00, /* 0x0cdc */ + 0x00, /* 0x0cdd */ + 0x00, /* 0x0cde */ + 0x00, /* 0x0cdf (hebrew_doublelowline) */ + 0x00, /* 0x0ce0 (hebrew_aleph) */ + 0x00, /* 0x0ce1 (hebrew_beth) */ + 0x00, /* 0x0ce2 (hebrew_gimmel) */ + 0x00, /* 0x0ce3 (hebrew_daleth) */ + 0x00, /* 0x0ce4 (hebrew_he) */ + 0x00, /* 0x0ce5 (hebrew_waw) */ + 0x00, /* 0x0ce6 (hebrew_zayin) */ + 0x00, /* 0x0ce7 (hebrew_het) */ + 0x00, /* 0x0ce8 (hebrew_teth) */ + 0x00, /* 0x0ce9 (hebrew_yod) */ + 0x00, /* 0x0cea (hebrew_finalkaph) */ + 0x00, /* 0x0ceb (hebrew_kaph) */ + 0x00, /* 0x0cec (hebrew_lamed) */ + 0x00, /* 0x0ced (hebrew_finalmem) */ + 0x00, /* 0x0cee (hebrew_mem) */ + 0x00, /* 0x0cef (hebrew_finalnun) */ + 0x00, /* 0x0cf0 (hebrew_nun) */ + 0x00, /* 0x0cf1 (hebrew_samekh) */ + 0x00, /* 0x0cf2 (hebrew_ayin) */ + 0x00, /* 0x0cf3 (hebrew_finalpe) */ + 0x00, /* 0x0cf4 (hebrew_pe) */ + 0x00, /* 0x0cf5 (hebrew_finalzadi) */ + 0x00, /* 0x0cf6 (hebrew_zadi) */ + 0x00, /* 0x0cf7 (hebrew_kuf) */ + 0x00, /* 0x0cf8 (hebrew_resh) */ + 0x00, /* 0x0cf9 (hebrew_shin) */ + 0x00, /* 0x0cfa (hebrew_taf) */ + 0x00, /* 0x0cfb */ + 0x00, /* 0x0cfc */ + 0x00, /* 0x0cfd */ + 0x00, /* 0x0cfe */ + 0x00, /* 0x0cff */ + }, + { /* 0x0d?? */ + 0x00, /* 0x0d00 */ + 0x00, /* 0x0d01 */ + 0x00, /* 0x0d02 */ + 0x00, /* 0x0d03 */ + 0x00, /* 0x0d04 */ + 0x00, /* 0x0d05 */ + 0x00, /* 0x0d06 */ + 0x00, /* 0x0d07 */ + 0x00, /* 0x0d08 */ + 0x00, /* 0x0d09 */ + 0x00, /* 0x0d0a */ + 0x00, /* 0x0d0b */ + 0x00, /* 0x0d0c */ + 0x00, /* 0x0d0d */ + 0x00, /* 0x0d0e */ + 0x00, /* 0x0d0f */ + 0x00, /* 0x0d10 */ + 0x00, /* 0x0d11 */ + 0x00, /* 0x0d12 */ + 0x00, /* 0x0d13 */ + 0x00, /* 0x0d14 */ + 0x00, /* 0x0d15 */ + 0x00, /* 0x0d16 */ + 0x00, /* 0x0d17 */ + 0x00, /* 0x0d18 */ + 0x00, /* 0x0d19 */ + 0x00, /* 0x0d1a */ + 0x00, /* 0x0d1b */ + 0x00, /* 0x0d1c */ + 0x00, /* 0x0d1d */ + 0x00, /* 0x0d1e */ + 0x00, /* 0x0d1f */ + 0x00, /* 0x0d20 */ + 0x00, /* 0x0d21 */ + 0x00, /* 0x0d22 */ + 0x00, /* 0x0d23 */ + 0x00, /* 0x0d24 */ + 0x00, /* 0x0d25 */ + 0x00, /* 0x0d26 */ + 0x00, /* 0x0d27 */ + 0x00, /* 0x0d28 */ + 0x00, /* 0x0d29 */ + 0x00, /* 0x0d2a */ + 0x00, /* 0x0d2b */ + 0x00, /* 0x0d2c */ + 0x00, /* 0x0d2d */ + 0x00, /* 0x0d2e */ + 0x00, /* 0x0d2f */ + 0x00, /* 0x0d30 */ + 0x00, /* 0x0d31 */ + 0x00, /* 0x0d32 */ + 0x00, /* 0x0d33 */ + 0x00, /* 0x0d34 */ + 0x00, /* 0x0d35 */ + 0x00, /* 0x0d36 */ + 0x00, /* 0x0d37 */ + 0x00, /* 0x0d38 */ + 0x00, /* 0x0d39 */ + 0x00, /* 0x0d3a */ + 0x00, /* 0x0d3b */ + 0x00, /* 0x0d3c */ + 0x00, /* 0x0d3d */ + 0x00, /* 0x0d3e */ + 0x00, /* 0x0d3f */ + 0x00, /* 0x0d40 */ + 0x00, /* 0x0d41 */ + 0x00, /* 0x0d42 */ + 0x00, /* 0x0d43 */ + 0x00, /* 0x0d44 */ + 0x00, /* 0x0d45 */ + 0x00, /* 0x0d46 */ + 0x00, /* 0x0d47 */ + 0x00, /* 0x0d48 */ + 0x00, /* 0x0d49 */ + 0x00, /* 0x0d4a */ + 0x00, /* 0x0d4b */ + 0x00, /* 0x0d4c */ + 0x00, /* 0x0d4d */ + 0x00, /* 0x0d4e */ + 0x00, /* 0x0d4f */ + 0x00, /* 0x0d50 */ + 0x00, /* 0x0d51 */ + 0x00, /* 0x0d52 */ + 0x00, /* 0x0d53 */ + 0x00, /* 0x0d54 */ + 0x00, /* 0x0d55 */ + 0x00, /* 0x0d56 */ + 0x00, /* 0x0d57 */ + 0x00, /* 0x0d58 */ + 0x00, /* 0x0d59 */ + 0x00, /* 0x0d5a */ + 0x00, /* 0x0d5b */ + 0x00, /* 0x0d5c */ + 0x00, /* 0x0d5d */ + 0x00, /* 0x0d5e */ + 0x00, /* 0x0d5f */ + 0x00, /* 0x0d60 */ + 0x00, /* 0x0d61 */ + 0x00, /* 0x0d62 */ + 0x00, /* 0x0d63 */ + 0x00, /* 0x0d64 */ + 0x00, /* 0x0d65 */ + 0x00, /* 0x0d66 */ + 0x00, /* 0x0d67 */ + 0x00, /* 0x0d68 */ + 0x00, /* 0x0d69 */ + 0x00, /* 0x0d6a */ + 0x00, /* 0x0d6b */ + 0x00, /* 0x0d6c */ + 0x00, /* 0x0d6d */ + 0x00, /* 0x0d6e */ + 0x00, /* 0x0d6f */ + 0x00, /* 0x0d70 */ + 0x00, /* 0x0d71 */ + 0x00, /* 0x0d72 */ + 0x00, /* 0x0d73 */ + 0x00, /* 0x0d74 */ + 0x00, /* 0x0d75 */ + 0x00, /* 0x0d76 */ + 0x00, /* 0x0d77 */ + 0x00, /* 0x0d78 */ + 0x00, /* 0x0d79 */ + 0x00, /* 0x0d7a */ + 0x00, /* 0x0d7b */ + 0x00, /* 0x0d7c */ + 0x00, /* 0x0d7d */ + 0x00, /* 0x0d7e */ + 0x00, /* 0x0d7f */ + 0x00, /* 0x0d80 */ + 0x00, /* 0x0d81 */ + 0x00, /* 0x0d82 */ + 0x00, /* 0x0d83 */ + 0x00, /* 0x0d84 */ + 0x00, /* 0x0d85 */ + 0x00, /* 0x0d86 */ + 0x00, /* 0x0d87 */ + 0x00, /* 0x0d88 */ + 0x00, /* 0x0d89 */ + 0x00, /* 0x0d8a */ + 0x00, /* 0x0d8b */ + 0x00, /* 0x0d8c */ + 0x00, /* 0x0d8d */ + 0x00, /* 0x0d8e */ + 0x00, /* 0x0d8f */ + 0x00, /* 0x0d90 */ + 0x00, /* 0x0d91 */ + 0x00, /* 0x0d92 */ + 0x00, /* 0x0d93 */ + 0x00, /* 0x0d94 */ + 0x00, /* 0x0d95 */ + 0x00, /* 0x0d96 */ + 0x00, /* 0x0d97 */ + 0x00, /* 0x0d98 */ + 0x00, /* 0x0d99 */ + 0x00, /* 0x0d9a */ + 0x00, /* 0x0d9b */ + 0x00, /* 0x0d9c */ + 0x00, /* 0x0d9d */ + 0x00, /* 0x0d9e */ + 0x00, /* 0x0d9f */ + 0x00, /* 0x0da0 */ + 0x00, /* 0x0da1 (Thai_kokai) */ + 0x00, /* 0x0da2 (Thai_khokhai) */ + 0x00, /* 0x0da3 (Thai_khokhuat) */ + 0x00, /* 0x0da4 (Thai_khokhwai) */ + 0x00, /* 0x0da5 (Thai_khokhon) */ + 0x00, /* 0x0da6 (Thai_khorakhang) */ + 0x00, /* 0x0da7 (Thai_ngongu) */ + 0x00, /* 0x0da8 (Thai_chochan) */ + 0x00, /* 0x0da9 (Thai_choching) */ + 0x00, /* 0x0daa (Thai_chochang) */ + 0x00, /* 0x0dab (Thai_soso) */ + 0x00, /* 0x0dac (Thai_chochoe) */ + 0x00, /* 0x0dad (Thai_yoying) */ + 0x00, /* 0x0dae (Thai_dochada) */ + 0x00, /* 0x0daf (Thai_topatak) */ + 0x00, /* 0x0db0 (Thai_thothan) */ + 0x00, /* 0x0db1 (Thai_thonangmontho) */ + 0x00, /* 0x0db2 (Thai_thophuthao) */ + 0x00, /* 0x0db3 (Thai_nonen) */ + 0x00, /* 0x0db4 (Thai_dodek) */ + 0x00, /* 0x0db5 (Thai_totao) */ + 0x00, /* 0x0db6 (Thai_thothung) */ + 0x00, /* 0x0db7 (Thai_thothahan) */ + 0x00, /* 0x0db8 (Thai_thothong) */ + 0x00, /* 0x0db9 (Thai_nonu) */ + 0x00, /* 0x0dba (Thai_bobaimai) */ + 0x00, /* 0x0dbb (Thai_popla) */ + 0x00, /* 0x0dbc (Thai_phophung) */ + 0x00, /* 0x0dbd (Thai_fofa) */ + 0x00, /* 0x0dbe (Thai_phophan) */ + 0x00, /* 0x0dbf (Thai_fofan) */ + 0x00, /* 0x0dc0 (Thai_phosamphao) */ + 0x00, /* 0x0dc1 (Thai_moma) */ + 0x00, /* 0x0dc2 (Thai_yoyak) */ + 0x00, /* 0x0dc3 (Thai_rorua) */ + 0x00, /* 0x0dc4 (Thai_ru) */ + 0x00, /* 0x0dc5 (Thai_loling) */ + 0x00, /* 0x0dc6 (Thai_lu) */ + 0x00, /* 0x0dc7 (Thai_wowaen) */ + 0x00, /* 0x0dc8 (Thai_sosala) */ + 0x00, /* 0x0dc9 (Thai_sorusi) */ + 0x00, /* 0x0dca (Thai_sosua) */ + 0x00, /* 0x0dcb (Thai_hohip) */ + 0x00, /* 0x0dcc (Thai_lochula) */ + 0x00, /* 0x0dcd (Thai_oang) */ + 0x00, /* 0x0dce (Thai_honokhuk) */ + 0x00, /* 0x0dcf (Thai_paiyannoi) */ + 0x00, /* 0x0dd0 (Thai_saraa) */ + 0x00, /* 0x0dd1 (Thai_maihanakat) */ + 0x00, /* 0x0dd2 (Thai_saraaa) */ + 0x00, /* 0x0dd3 (Thai_saraam) */ + 0x00, /* 0x0dd4 (Thai_sarai) */ + 0x00, /* 0x0dd5 (Thai_saraii) */ + 0x00, /* 0x0dd6 (Thai_saraue) */ + 0x00, /* 0x0dd7 (Thai_sarauee) */ + 0x00, /* 0x0dd8 (Thai_sarau) */ + 0x00, /* 0x0dd9 (Thai_sarauu) */ + 0x00, /* 0x0dda (Thai_phinthu) */ + 0x00, /* 0x0ddb */ + 0x00, /* 0x0ddc */ + 0x00, /* 0x0ddd */ + 0x00, /* 0x0dde (Thai_maihanakat_maitho) */ + 0x00, /* 0x0ddf (Thai_baht) */ + 0x00, /* 0x0de0 (Thai_sarae) */ + 0x00, /* 0x0de1 (Thai_saraae) */ + 0x00, /* 0x0de2 (Thai_sarao) */ + 0x00, /* 0x0de3 (Thai_saraaimaimuan) */ + 0x00, /* 0x0de4 (Thai_saraaimaimalai) */ + 0x00, /* 0x0de5 (Thai_lakkhangyao) */ + 0x00, /* 0x0de6 (Thai_maiyamok) */ + 0x00, /* 0x0de7 (Thai_maitaikhu) */ + 0x00, /* 0x0de8 (Thai_maiek) */ + 0x00, /* 0x0de9 (Thai_maitho) */ + 0x00, /* 0x0dea (Thai_maitri) */ + 0x00, /* 0x0deb (Thai_maichattawa) */ + 0x00, /* 0x0dec (Thai_thanthakhat) */ + 0x00, /* 0x0ded (Thai_nikhahit) */ + 0x00, /* 0x0dee */ + 0x00, /* 0x0def */ + 0x00, /* 0x0df0 (Thai_leksun) */ + 0x00, /* 0x0df1 (Thai_leknung) */ + 0x00, /* 0x0df2 (Thai_leksong) */ + 0x00, /* 0x0df3 (Thai_leksam) */ + 0x00, /* 0x0df4 (Thai_leksi) */ + 0x00, /* 0x0df5 (Thai_lekha) */ + 0x00, /* 0x0df6 (Thai_lekhok) */ + 0x00, /* 0x0df7 (Thai_lekchet) */ + 0x00, /* 0x0df8 (Thai_lekpaet) */ + 0x00, /* 0x0df9 (Thai_lekkao) */ + 0x00, /* 0x0dfa */ + 0x00, /* 0x0dfb */ + 0x00, /* 0x0dfc */ + 0x00, /* 0x0dfd */ + 0x00, /* 0x0dfe */ + 0x00, /* 0x0dff */ + }, + { /* 0x0e?? */ + 0x00, /* 0x0e00 */ + 0x00, /* 0x0e01 */ + 0x00, /* 0x0e02 */ + 0x00, /* 0x0e03 */ + 0x00, /* 0x0e04 */ + 0x00, /* 0x0e05 */ + 0x00, /* 0x0e06 */ + 0x00, /* 0x0e07 */ + 0x00, /* 0x0e08 */ + 0x00, /* 0x0e09 */ + 0x00, /* 0x0e0a */ + 0x00, /* 0x0e0b */ + 0x00, /* 0x0e0c */ + 0x00, /* 0x0e0d */ + 0x00, /* 0x0e0e */ + 0x00, /* 0x0e0f */ + 0x00, /* 0x0e10 */ + 0x00, /* 0x0e11 */ + 0x00, /* 0x0e12 */ + 0x00, /* 0x0e13 */ + 0x00, /* 0x0e14 */ + 0x00, /* 0x0e15 */ + 0x00, /* 0x0e16 */ + 0x00, /* 0x0e17 */ + 0x00, /* 0x0e18 */ + 0x00, /* 0x0e19 */ + 0x00, /* 0x0e1a */ + 0x00, /* 0x0e1b */ + 0x00, /* 0x0e1c */ + 0x00, /* 0x0e1d */ + 0x00, /* 0x0e1e */ + 0x00, /* 0x0e1f */ + 0x00, /* 0x0e20 */ + 0x00, /* 0x0e21 */ + 0x00, /* 0x0e22 */ + 0x00, /* 0x0e23 */ + 0x00, /* 0x0e24 */ + 0x00, /* 0x0e25 */ + 0x00, /* 0x0e26 */ + 0x00, /* 0x0e27 */ + 0x00, /* 0x0e28 */ + 0x00, /* 0x0e29 */ + 0x00, /* 0x0e2a */ + 0x00, /* 0x0e2b */ + 0x00, /* 0x0e2c */ + 0x00, /* 0x0e2d */ + 0x00, /* 0x0e2e */ + 0x00, /* 0x0e2f */ + 0x00, /* 0x0e30 */ + 0x00, /* 0x0e31 */ + 0x00, /* 0x0e32 */ + 0x00, /* 0x0e33 */ + 0x00, /* 0x0e34 */ + 0x00, /* 0x0e35 */ + 0x00, /* 0x0e36 */ + 0x00, /* 0x0e37 */ + 0x00, /* 0x0e38 */ + 0x00, /* 0x0e39 */ + 0x00, /* 0x0e3a */ + 0x00, /* 0x0e3b */ + 0x00, /* 0x0e3c */ + 0x00, /* 0x0e3d */ + 0x00, /* 0x0e3e */ + 0x00, /* 0x0e3f */ + 0x00, /* 0x0e40 */ + 0x00, /* 0x0e41 */ + 0x00, /* 0x0e42 */ + 0x00, /* 0x0e43 */ + 0x00, /* 0x0e44 */ + 0x00, /* 0x0e45 */ + 0x00, /* 0x0e46 */ + 0x00, /* 0x0e47 */ + 0x00, /* 0x0e48 */ + 0x00, /* 0x0e49 */ + 0x00, /* 0x0e4a */ + 0x00, /* 0x0e4b */ + 0x00, /* 0x0e4c */ + 0x00, /* 0x0e4d */ + 0x00, /* 0x0e4e */ + 0x00, /* 0x0e4f */ + 0x00, /* 0x0e50 */ + 0x00, /* 0x0e51 */ + 0x00, /* 0x0e52 */ + 0x00, /* 0x0e53 */ + 0x00, /* 0x0e54 */ + 0x00, /* 0x0e55 */ + 0x00, /* 0x0e56 */ + 0x00, /* 0x0e57 */ + 0x00, /* 0x0e58 */ + 0x00, /* 0x0e59 */ + 0x00, /* 0x0e5a */ + 0x00, /* 0x0e5b */ + 0x00, /* 0x0e5c */ + 0x00, /* 0x0e5d */ + 0x00, /* 0x0e5e */ + 0x00, /* 0x0e5f */ + 0x00, /* 0x0e60 */ + 0x00, /* 0x0e61 */ + 0x00, /* 0x0e62 */ + 0x00, /* 0x0e63 */ + 0x00, /* 0x0e64 */ + 0x00, /* 0x0e65 */ + 0x00, /* 0x0e66 */ + 0x00, /* 0x0e67 */ + 0x00, /* 0x0e68 */ + 0x00, /* 0x0e69 */ + 0x00, /* 0x0e6a */ + 0x00, /* 0x0e6b */ + 0x00, /* 0x0e6c */ + 0x00, /* 0x0e6d */ + 0x00, /* 0x0e6e */ + 0x00, /* 0x0e6f */ + 0x00, /* 0x0e70 */ + 0x00, /* 0x0e71 */ + 0x00, /* 0x0e72 */ + 0x00, /* 0x0e73 */ + 0x00, /* 0x0e74 */ + 0x00, /* 0x0e75 */ + 0x00, /* 0x0e76 */ + 0x00, /* 0x0e77 */ + 0x00, /* 0x0e78 */ + 0x00, /* 0x0e79 */ + 0x00, /* 0x0e7a */ + 0x00, /* 0x0e7b */ + 0x00, /* 0x0e7c */ + 0x00, /* 0x0e7d */ + 0x00, /* 0x0e7e */ + 0x00, /* 0x0e7f */ + 0x00, /* 0x0e80 */ + 0x00, /* 0x0e81 */ + 0x00, /* 0x0e82 */ + 0x00, /* 0x0e83 */ + 0x00, /* 0x0e84 */ + 0x00, /* 0x0e85 */ + 0x00, /* 0x0e86 */ + 0x00, /* 0x0e87 */ + 0x00, /* 0x0e88 */ + 0x00, /* 0x0e89 */ + 0x00, /* 0x0e8a */ + 0x00, /* 0x0e8b */ + 0x00, /* 0x0e8c */ + 0x00, /* 0x0e8d */ + 0x00, /* 0x0e8e */ + 0x00, /* 0x0e8f */ + 0x00, /* 0x0e90 */ + 0x00, /* 0x0e91 */ + 0x00, /* 0x0e92 */ + 0x00, /* 0x0e93 */ + 0x00, /* 0x0e94 */ + 0x00, /* 0x0e95 */ + 0x00, /* 0x0e96 */ + 0x00, /* 0x0e97 */ + 0x00, /* 0x0e98 */ + 0x00, /* 0x0e99 */ + 0x00, /* 0x0e9a */ + 0x00, /* 0x0e9b */ + 0x00, /* 0x0e9c */ + 0x00, /* 0x0e9d */ + 0x00, /* 0x0e9e */ + 0x00, /* 0x0e9f */ + 0x00, /* 0x0ea0 */ + 0x00, /* 0x0ea1 (Hangul_Kiyeog) */ + 0x00, /* 0x0ea2 (Hangul_SsangKiyeog) */ + 0x00, /* 0x0ea3 (Hangul_KiyeogSios) */ + 0x00, /* 0x0ea4 (Hangul_Nieun) */ + 0x00, /* 0x0ea5 (Hangul_NieunJieuj) */ + 0x00, /* 0x0ea6 (Hangul_NieunHieuh) */ + 0x00, /* 0x0ea7 (Hangul_Dikeud) */ + 0x00, /* 0x0ea8 (Hangul_SsangDikeud) */ + 0x00, /* 0x0ea9 (Hangul_Rieul) */ + 0x00, /* 0x0eaa (Hangul_RieulKiyeog) */ + 0x00, /* 0x0eab (Hangul_RieulMieum) */ + 0x00, /* 0x0eac (Hangul_RieulPieub) */ + 0x00, /* 0x0ead (Hangul_RieulSios) */ + 0x00, /* 0x0eae (Hangul_RieulTieut) */ + 0x00, /* 0x0eaf (Hangul_RieulPhieuf) */ + 0x00, /* 0x0eb0 (Hangul_RieulHieuh) */ + 0x00, /* 0x0eb1 (Hangul_Mieum) */ + 0x00, /* 0x0eb2 (Hangul_Pieub) */ + 0x00, /* 0x0eb3 (Hangul_SsangPieub) */ + 0x00, /* 0x0eb4 (Hangul_PieubSios) */ + 0x00, /* 0x0eb5 (Hangul_Sios) */ + 0x00, /* 0x0eb6 (Hangul_SsangSios) */ + 0x00, /* 0x0eb7 (Hangul_Ieung) */ + 0x00, /* 0x0eb8 (Hangul_Jieuj) */ + 0x00, /* 0x0eb9 (Hangul_SsangJieuj) */ + 0x00, /* 0x0eba (Hangul_Cieuc) */ + 0x00, /* 0x0ebb (Hangul_Khieuq) */ + 0x00, /* 0x0ebc (Hangul_Tieut) */ + 0x00, /* 0x0ebd (Hangul_Phieuf) */ + 0x00, /* 0x0ebe (Hangul_Hieuh) */ + 0x00, /* 0x0ebf (Hangul_A) */ + 0x00, /* 0x0ec0 (Hangul_AE) */ + 0x00, /* 0x0ec1 (Hangul_YA) */ + 0x00, /* 0x0ec2 (Hangul_YAE) */ + 0x00, /* 0x0ec3 (Hangul_EO) */ + 0x00, /* 0x0ec4 (Hangul_E) */ + 0x00, /* 0x0ec5 (Hangul_YEO) */ + 0x00, /* 0x0ec6 (Hangul_YE) */ + 0x00, /* 0x0ec7 (Hangul_O) */ + 0x00, /* 0x0ec8 (Hangul_WA) */ + 0x00, /* 0x0ec9 (Hangul_WAE) */ + 0x00, /* 0x0eca (Hangul_OE) */ + 0x00, /* 0x0ecb (Hangul_YO) */ + 0x00, /* 0x0ecc (Hangul_U) */ + 0x00, /* 0x0ecd (Hangul_WEO) */ + 0x00, /* 0x0ece (Hangul_WE) */ + 0x00, /* 0x0ecf (Hangul_WI) */ + 0x00, /* 0x0ed0 (Hangul_YU) */ + 0x00, /* 0x0ed1 (Hangul_EU) */ + 0x00, /* 0x0ed2 (Hangul_YI) */ + 0x00, /* 0x0ed3 (Hangul_I) */ + 0x00, /* 0x0ed4 (Hangul_J_Kiyeog) */ + 0x00, /* 0x0ed5 (Hangul_J_SsangKiyeog) */ + 0x00, /* 0x0ed6 (Hangul_J_KiyeogSios) */ + 0x00, /* 0x0ed7 (Hangul_J_Nieun) */ + 0x00, /* 0x0ed8 (Hangul_J_NieunJieuj) */ + 0x00, /* 0x0ed9 (Hangul_J_NieunHieuh) */ + 0x00, /* 0x0eda (Hangul_J_Dikeud) */ + 0x00, /* 0x0edb (Hangul_J_Rieul) */ + 0x00, /* 0x0edc (Hangul_J_RieulKiyeog) */ + 0x00, /* 0x0edd (Hangul_J_RieulMieum) */ + 0x00, /* 0x0ede (Hangul_J_RieulPieub) */ + 0x00, /* 0x0edf (Hangul_J_RieulSios) */ + 0x00, /* 0x0ee0 (Hangul_J_RieulTieut) */ + 0x00, /* 0x0ee1 (Hangul_J_RieulPhieuf) */ + 0x00, /* 0x0ee2 (Hangul_J_RieulHieuh) */ + 0x00, /* 0x0ee3 (Hangul_J_Mieum) */ + 0x00, /* 0x0ee4 (Hangul_J_Pieub) */ + 0x00, /* 0x0ee5 (Hangul_J_PieubSios) */ + 0x00, /* 0x0ee6 (Hangul_J_Sios) */ + 0x00, /* 0x0ee7 (Hangul_J_SsangSios) */ + 0x00, /* 0x0ee8 (Hangul_J_Ieung) */ + 0x00, /* 0x0ee9 (Hangul_J_Jieuj) */ + 0x00, /* 0x0eea (Hangul_J_Cieuc) */ + 0x00, /* 0x0eeb (Hangul_J_Khieuq) */ + 0x00, /* 0x0eec (Hangul_J_Tieut) */ + 0x00, /* 0x0eed (Hangul_J_Phieuf) */ + 0x00, /* 0x0eee (Hangul_J_Hieuh) */ + 0x00, /* 0x0eef (Hangul_RieulYeorinHieuh) */ + 0x00, /* 0x0ef0 (Hangul_SunkyeongeumMieum) */ + 0x00, /* 0x0ef1 (Hangul_SunkyeongeumPieub) */ + 0x00, /* 0x0ef2 (Hangul_PanSios) */ + 0x00, /* 0x0ef3 (Hangul_KkogjiDalrinIeung) */ + 0x00, /* 0x0ef4 (Hangul_SunkyeongeumPhieuf) */ + 0x00, /* 0x0ef5 (Hangul_YeorinHieuh) */ + 0x00, /* 0x0ef6 (Hangul_AraeA) */ + 0x00, /* 0x0ef7 (Hangul_AraeAE) */ + 0x00, /* 0x0ef8 (Hangul_J_PanSios) */ + 0x00, /* 0x0ef9 (Hangul_J_KkogjiDalrinIeung) */ + 0x00, /* 0x0efa (Hangul_J_YeorinHieuh) */ + 0x00, /* 0x0efb */ + 0x00, /* 0x0efc */ + 0x00, /* 0x0efd */ + 0x00, /* 0x0efe */ + 0x00, /* 0x0eff (Korean_Won) */ + }, + {0}, /* 0x0f?? */ + {0}, /* 0x10?? */ + {0}, /* 0x11?? */ + {0}, /* 0x12?? */ + { /* 0x13?? */ + 0x00, /* 0x1300 */ + 0x00, /* 0x1301 */ + 0x00, /* 0x1302 */ + 0x00, /* 0x1303 */ + 0x00, /* 0x1304 */ + 0x00, /* 0x1305 */ + 0x00, /* 0x1306 */ + 0x00, /* 0x1307 */ + 0x00, /* 0x1308 */ + 0x00, /* 0x1309 */ + 0x00, /* 0x130a */ + 0x00, /* 0x130b */ + 0x00, /* 0x130c */ + 0x00, /* 0x130d */ + 0x00, /* 0x130e */ + 0x00, /* 0x130f */ + 0x00, /* 0x1310 */ + 0x00, /* 0x1311 */ + 0x00, /* 0x1312 */ + 0x00, /* 0x1313 */ + 0x00, /* 0x1314 */ + 0x00, /* 0x1315 */ + 0x00, /* 0x1316 */ + 0x00, /* 0x1317 */ + 0x00, /* 0x1318 */ + 0x00, /* 0x1319 */ + 0x00, /* 0x131a */ + 0x00, /* 0x131b */ + 0x00, /* 0x131c */ + 0x00, /* 0x131d */ + 0x00, /* 0x131e */ + 0x00, /* 0x131f */ + 0x00, /* 0x1320 */ + 0x00, /* 0x1321 */ + 0x00, /* 0x1322 */ + 0x00, /* 0x1323 */ + 0x00, /* 0x1324 */ + 0x00, /* 0x1325 */ + 0x00, /* 0x1326 */ + 0x00, /* 0x1327 */ + 0x00, /* 0x1328 */ + 0x00, /* 0x1329 */ + 0x00, /* 0x132a */ + 0x00, /* 0x132b */ + 0x00, /* 0x132c */ + 0x00, /* 0x132d */ + 0x00, /* 0x132e */ + 0x00, /* 0x132f */ + 0x00, /* 0x1330 */ + 0x00, /* 0x1331 */ + 0x00, /* 0x1332 */ + 0x00, /* 0x1333 */ + 0x00, /* 0x1334 */ + 0x00, /* 0x1335 */ + 0x00, /* 0x1336 */ + 0x00, /* 0x1337 */ + 0x00, /* 0x1338 */ + 0x00, /* 0x1339 */ + 0x00, /* 0x133a */ + 0x00, /* 0x133b */ + 0x00, /* 0x133c */ + 0x00, /* 0x133d */ + 0x00, /* 0x133e */ + 0x00, /* 0x133f */ + 0x00, /* 0x1340 */ + 0x00, /* 0x1341 */ + 0x00, /* 0x1342 */ + 0x00, /* 0x1343 */ + 0x00, /* 0x1344 */ + 0x00, /* 0x1345 */ + 0x00, /* 0x1346 */ + 0x00, /* 0x1347 */ + 0x00, /* 0x1348 */ + 0x00, /* 0x1349 */ + 0x00, /* 0x134a */ + 0x00, /* 0x134b */ + 0x00, /* 0x134c */ + 0x00, /* 0x134d */ + 0x00, /* 0x134e */ + 0x00, /* 0x134f */ + 0x00, /* 0x1350 */ + 0x00, /* 0x1351 */ + 0x00, /* 0x1352 */ + 0x00, /* 0x1353 */ + 0x00, /* 0x1354 */ + 0x00, /* 0x1355 */ + 0x00, /* 0x1356 */ + 0x00, /* 0x1357 */ + 0x00, /* 0x1358 */ + 0x00, /* 0x1359 */ + 0x00, /* 0x135a */ + 0x00, /* 0x135b */ + 0x00, /* 0x135c */ + 0x00, /* 0x135d */ + 0x00, /* 0x135e */ + 0x00, /* 0x135f */ + 0x00, /* 0x1360 */ + 0x00, /* 0x1361 */ + 0x00, /* 0x1362 */ + 0x00, /* 0x1363 */ + 0x00, /* 0x1364 */ + 0x00, /* 0x1365 */ + 0x00, /* 0x1366 */ + 0x00, /* 0x1367 */ + 0x00, /* 0x1368 */ + 0x00, /* 0x1369 */ + 0x00, /* 0x136a */ + 0x00, /* 0x136b */ + 0x00, /* 0x136c */ + 0x00, /* 0x136d */ + 0x00, /* 0x136e */ + 0x00, /* 0x136f */ + 0x00, /* 0x1370 */ + 0x00, /* 0x1371 */ + 0x00, /* 0x1372 */ + 0x00, /* 0x1373 */ + 0x00, /* 0x1374 */ + 0x00, /* 0x1375 */ + 0x00, /* 0x1376 */ + 0x00, /* 0x1377 */ + 0x00, /* 0x1378 */ + 0x00, /* 0x1379 */ + 0x00, /* 0x137a */ + 0x00, /* 0x137b */ + 0x00, /* 0x137c */ + 0x00, /* 0x137d */ + 0x00, /* 0x137e */ + 0x00, /* 0x137f */ + 0x00, /* 0x1380 */ + 0x00, /* 0x1381 */ + 0x00, /* 0x1382 */ + 0x00, /* 0x1383 */ + 0x00, /* 0x1384 */ + 0x00, /* 0x1385 */ + 0x00, /* 0x1386 */ + 0x00, /* 0x1387 */ + 0x00, /* 0x1388 */ + 0x00, /* 0x1389 */ + 0x00, /* 0x138a */ + 0x00, /* 0x138b */ + 0x00, /* 0x138c */ + 0x00, /* 0x138d */ + 0x00, /* 0x138e */ + 0x00, /* 0x138f */ + 0x00, /* 0x1390 */ + 0x00, /* 0x1391 */ + 0x00, /* 0x1392 */ + 0x00, /* 0x1393 */ + 0x00, /* 0x1394 */ + 0x00, /* 0x1395 */ + 0x00, /* 0x1396 */ + 0x00, /* 0x1397 */ + 0x00, /* 0x1398 */ + 0x00, /* 0x1399 */ + 0x00, /* 0x139a */ + 0x00, /* 0x139b */ + 0x00, /* 0x139c */ + 0x00, /* 0x139d */ + 0x00, /* 0x139e */ + 0x00, /* 0x139f */ + 0x00, /* 0x13a0 */ + 0x00, /* 0x13a1 */ + 0x00, /* 0x13a2 */ + 0x00, /* 0x13a3 */ + 0x00, /* 0x13a4 */ + 0x00, /* 0x13a5 */ + 0x00, /* 0x13a6 */ + 0x00, /* 0x13a7 */ + 0x00, /* 0x13a8 */ + 0x00, /* 0x13a9 */ + 0x00, /* 0x13aa */ + 0x00, /* 0x13ab */ + 0x00, /* 0x13ac */ + 0x00, /* 0x13ad */ + 0x00, /* 0x13ae */ + 0x00, /* 0x13af */ + 0x00, /* 0x13b0 */ + 0x00, /* 0x13b1 */ + 0x00, /* 0x13b2 */ + 0x00, /* 0x13b3 */ + 0x00, /* 0x13b4 */ + 0x00, /* 0x13b5 */ + 0x00, /* 0x13b6 */ + 0x00, /* 0x13b7 */ + 0x00, /* 0x13b8 */ + 0x00, /* 0x13b9 */ + 0x00, /* 0x13ba */ + 0x00, /* 0x13bb */ + 0x00, /* 0x13bc (OE) */ + 0x00, /* 0x13bd (oe) */ + 0x00, /* 0x13be (Ydiaeresis) */ + 0x00, /* 0x13bf */ + 0x00, /* 0x13c0 */ + 0x00, /* 0x13c1 */ + 0x00, /* 0x13c2 */ + 0x00, /* 0x13c3 */ + 0x00, /* 0x13c4 */ + 0x00, /* 0x13c5 */ + 0x00, /* 0x13c6 */ + 0x00, /* 0x13c7 */ + 0x00, /* 0x13c8 */ + 0x00, /* 0x13c9 */ + 0x00, /* 0x13ca */ + 0x00, /* 0x13cb */ + 0x00, /* 0x13cc */ + 0x00, /* 0x13cd */ + 0x00, /* 0x13ce */ + 0x00, /* 0x13cf */ + 0x00, /* 0x13d0 */ + 0x00, /* 0x13d1 */ + 0x00, /* 0x13d2 */ + 0x00, /* 0x13d3 */ + 0x00, /* 0x13d4 */ + 0x00, /* 0x13d5 */ + 0x00, /* 0x13d6 */ + 0x00, /* 0x13d7 */ + 0x00, /* 0x13d8 */ + 0x00, /* 0x13d9 */ + 0x00, /* 0x13da */ + 0x00, /* 0x13db */ + 0x00, /* 0x13dc */ + 0x00, /* 0x13dd */ + 0x00, /* 0x13de */ + 0x00, /* 0x13df */ + 0x00, /* 0x13e0 */ + 0x00, /* 0x13e1 */ + 0x00, /* 0x13e2 */ + 0x00, /* 0x13e3 */ + 0x00, /* 0x13e4 */ + 0x00, /* 0x13e5 */ + 0x00, /* 0x13e6 */ + 0x00, /* 0x13e7 */ + 0x00, /* 0x13e8 */ + 0x00, /* 0x13e9 */ + 0x00, /* 0x13ea */ + 0x00, /* 0x13eb */ + 0x00, /* 0x13ec */ + 0x00, /* 0x13ed */ + 0x00, /* 0x13ee */ + 0x00, /* 0x13ef */ + 0x00, /* 0x13f0 */ + 0x00, /* 0x13f1 */ + 0x00, /* 0x13f2 */ + 0x00, /* 0x13f3 */ + 0x00, /* 0x13f4 */ + 0x00, /* 0x13f5 */ + 0x00, /* 0x13f6 */ + 0x00, /* 0x13f7 */ + 0x00, /* 0x13f8 */ + 0x00, /* 0x13f9 */ + 0x00, /* 0x13fa */ + 0x00, /* 0x13fb */ + 0x00, /* 0x13fc */ + 0x00, /* 0x13fd */ + 0x00, /* 0x13fe */ + 0x00, /* 0x13ff */ + }, + {0}, /* 0x14?? */ + {0}, /* 0x15?? */ + {0}, /* 0x16?? */ + {0}, /* 0x17?? */ + {0}, /* 0x18?? */ + {0}, /* 0x19?? */ + {0}, /* 0x1a?? */ + {0}, /* 0x1b?? */ + {0}, /* 0x1c?? */ + {0}, /* 0x1d?? */ + {0}, /* 0x1e?? */ + {0}, /* 0x1f?? */ + { /* 0x20?? */ + 0x00, /* 0x2000 */ + 0x00, /* 0x2001 */ + 0x00, /* 0x2002 */ + 0x00, /* 0x2003 */ + 0x00, /* 0x2004 */ + 0x00, /* 0x2005 */ + 0x00, /* 0x2006 */ + 0x00, /* 0x2007 */ + 0x00, /* 0x2008 */ + 0x00, /* 0x2009 */ + 0x00, /* 0x200a */ + 0x00, /* 0x200b */ + 0x00, /* 0x200c */ + 0x00, /* 0x200d */ + 0x00, /* 0x200e */ + 0x00, /* 0x200f */ + 0x00, /* 0x2010 */ + 0x00, /* 0x2011 */ + 0x00, /* 0x2012 */ + 0x00, /* 0x2013 */ + 0x00, /* 0x2014 */ + 0x00, /* 0x2015 */ + 0x00, /* 0x2016 */ + 0x00, /* 0x2017 */ + 0x00, /* 0x2018 */ + 0x00, /* 0x2019 */ + 0x00, /* 0x201a */ + 0x00, /* 0x201b */ + 0x00, /* 0x201c */ + 0x00, /* 0x201d */ + 0x00, /* 0x201e */ + 0x00, /* 0x201f */ + 0x00, /* 0x2020 */ + 0x00, /* 0x2021 */ + 0x00, /* 0x2022 */ + 0x00, /* 0x2023 */ + 0x00, /* 0x2024 */ + 0x00, /* 0x2025 */ + 0x00, /* 0x2026 */ + 0x00, /* 0x2027 */ + 0x00, /* 0x2028 */ + 0x00, /* 0x2029 */ + 0x00, /* 0x202a */ + 0x00, /* 0x202b */ + 0x00, /* 0x202c */ + 0x00, /* 0x202d */ + 0x00, /* 0x202e */ + 0x00, /* 0x202f */ + 0x00, /* 0x2030 */ + 0x00, /* 0x2031 */ + 0x00, /* 0x2032 */ + 0x00, /* 0x2033 */ + 0x00, /* 0x2034 */ + 0x00, /* 0x2035 */ + 0x00, /* 0x2036 */ + 0x00, /* 0x2037 */ + 0x00, /* 0x2038 */ + 0x00, /* 0x2039 */ + 0x00, /* 0x203a */ + 0x00, /* 0x203b */ + 0x00, /* 0x203c */ + 0x00, /* 0x203d */ + 0x00, /* 0x203e */ + 0x00, /* 0x203f */ + 0x00, /* 0x2040 */ + 0x00, /* 0x2041 */ + 0x00, /* 0x2042 */ + 0x00, /* 0x2043 */ + 0x00, /* 0x2044 */ + 0x00, /* 0x2045 */ + 0x00, /* 0x2046 */ + 0x00, /* 0x2047 */ + 0x00, /* 0x2048 */ + 0x00, /* 0x2049 */ + 0x00, /* 0x204a */ + 0x00, /* 0x204b */ + 0x00, /* 0x204c */ + 0x00, /* 0x204d */ + 0x00, /* 0x204e */ + 0x00, /* 0x204f */ + 0x00, /* 0x2050 */ + 0x00, /* 0x2051 */ + 0x00, /* 0x2052 */ + 0x00, /* 0x2053 */ + 0x00, /* 0x2054 */ + 0x00, /* 0x2055 */ + 0x00, /* 0x2056 */ + 0x00, /* 0x2057 */ + 0x00, /* 0x2058 */ + 0x00, /* 0x2059 */ + 0x00, /* 0x205a */ + 0x00, /* 0x205b */ + 0x00, /* 0x205c */ + 0x00, /* 0x205d */ + 0x00, /* 0x205e */ + 0x00, /* 0x205f */ + 0x00, /* 0x2060 */ + 0x00, /* 0x2061 */ + 0x00, /* 0x2062 */ + 0x00, /* 0x2063 */ + 0x00, /* 0x2064 */ + 0x00, /* 0x2065 */ + 0x00, /* 0x2066 */ + 0x00, /* 0x2067 */ + 0x00, /* 0x2068 */ + 0x00, /* 0x2069 */ + 0x00, /* 0x206a */ + 0x00, /* 0x206b */ + 0x00, /* 0x206c */ + 0x00, /* 0x206d */ + 0x00, /* 0x206e */ + 0x00, /* 0x206f */ + 0x00, /* 0x2070 */ + 0x00, /* 0x2071 */ + 0x00, /* 0x2072 */ + 0x00, /* 0x2073 */ + 0x00, /* 0x2074 */ + 0x00, /* 0x2075 */ + 0x00, /* 0x2076 */ + 0x00, /* 0x2077 */ + 0x00, /* 0x2078 */ + 0x00, /* 0x2079 */ + 0x00, /* 0x207a */ + 0x00, /* 0x207b */ + 0x00, /* 0x207c */ + 0x00, /* 0x207d */ + 0x00, /* 0x207e */ + 0x00, /* 0x207f */ + 0x00, /* 0x2080 */ + 0x00, /* 0x2081 */ + 0x00, /* 0x2082 */ + 0x00, /* 0x2083 */ + 0x00, /* 0x2084 */ + 0x00, /* 0x2085 */ + 0x00, /* 0x2086 */ + 0x00, /* 0x2087 */ + 0x00, /* 0x2088 */ + 0x00, /* 0x2089 */ + 0x00, /* 0x208a */ + 0x00, /* 0x208b */ + 0x00, /* 0x208c */ + 0x00, /* 0x208d */ + 0x00, /* 0x208e */ + 0x00, /* 0x208f */ + 0x00, /* 0x2090 */ + 0x00, /* 0x2091 */ + 0x00, /* 0x2092 */ + 0x00, /* 0x2093 */ + 0x00, /* 0x2094 */ + 0x00, /* 0x2095 */ + 0x00, /* 0x2096 */ + 0x00, /* 0x2097 */ + 0x00, /* 0x2098 */ + 0x00, /* 0x2099 */ + 0x00, /* 0x209a */ + 0x00, /* 0x209b */ + 0x00, /* 0x209c */ + 0x00, /* 0x209d */ + 0x00, /* 0x209e */ + 0x00, /* 0x209f */ + 0x00, /* 0x20a0 */ + 0x00, /* 0x20a1 */ + 0x00, /* 0x20a2 */ + 0x00, /* 0x20a3 */ + 0x00, /* 0x20a4 */ + 0x00, /* 0x20a5 */ + 0x00, /* 0x20a6 */ + 0x00, /* 0x20a7 */ + 0x00, /* 0x20a8 */ + 0x00, /* 0x20a9 */ + 0x00, /* 0x20aa */ + 0x00, /* 0x20ab */ + 0x00, /* 0x20ac (EuroSign) */ + 0x00, /* 0x20ad */ + 0x00, /* 0x20ae */ + 0x00, /* 0x20af */ + 0x00, /* 0x20b0 */ + 0x00, /* 0x20b1 */ + 0x00, /* 0x20b2 */ + 0x00, /* 0x20b3 */ + 0x00, /* 0x20b4 */ + 0x00, /* 0x20b5 */ + 0x00, /* 0x20b6 */ + 0x00, /* 0x20b7 */ + 0x00, /* 0x20b8 */ + 0x00, /* 0x20b9 */ + 0x00, /* 0x20ba */ + 0x00, /* 0x20bb */ + 0x00, /* 0x20bc */ + 0x00, /* 0x20bd */ + 0x00, /* 0x20be */ + 0x00, /* 0x20bf */ + 0x00, /* 0x20c0 */ + 0x00, /* 0x20c1 */ + 0x00, /* 0x20c2 */ + 0x00, /* 0x20c3 */ + 0x00, /* 0x20c4 */ + 0x00, /* 0x20c5 */ + 0x00, /* 0x20c6 */ + 0x00, /* 0x20c7 */ + 0x00, /* 0x20c8 */ + 0x00, /* 0x20c9 */ + 0x00, /* 0x20ca */ + 0x00, /* 0x20cb */ + 0x00, /* 0x20cc */ + 0x00, /* 0x20cd */ + 0x00, /* 0x20ce */ + 0x00, /* 0x20cf */ + 0x00, /* 0x20d0 */ + 0x00, /* 0x20d1 */ + 0x00, /* 0x20d2 */ + 0x00, /* 0x20d3 */ + 0x00, /* 0x20d4 */ + 0x00, /* 0x20d5 */ + 0x00, /* 0x20d6 */ + 0x00, /* 0x20d7 */ + 0x00, /* 0x20d8 */ + 0x00, /* 0x20d9 */ + 0x00, /* 0x20da */ + 0x00, /* 0x20db */ + 0x00, /* 0x20dc */ + 0x00, /* 0x20dd */ + 0x00, /* 0x20de */ + 0x00, /* 0x20df */ + 0x00, /* 0x20e0 */ + 0x00, /* 0x20e1 */ + 0x00, /* 0x20e2 */ + 0x00, /* 0x20e3 */ + 0x00, /* 0x20e4 */ + 0x00, /* 0x20e5 */ + 0x00, /* 0x20e6 */ + 0x00, /* 0x20e7 */ + 0x00, /* 0x20e8 */ + 0x00, /* 0x20e9 */ + 0x00, /* 0x20ea */ + 0x00, /* 0x20eb */ + 0x00, /* 0x20ec */ + 0x00, /* 0x20ed */ + 0x00, /* 0x20ee */ + 0x00, /* 0x20ef */ + 0x00, /* 0x20f0 */ + 0x00, /* 0x20f1 */ + 0x00, /* 0x20f2 */ + 0x00, /* 0x20f3 */ + 0x00, /* 0x20f4 */ + 0x00, /* 0x20f5 */ + 0x00, /* 0x20f6 */ + 0x00, /* 0x20f7 */ + 0x00, /* 0x20f8 */ + 0x00, /* 0x20f9 */ + 0x00, /* 0x20fa */ + 0x00, /* 0x20fb */ + 0x00, /* 0x20fc */ + 0x00, /* 0x20fd */ + 0x00, /* 0x20fe */ + 0x00, /* 0x20ff */ + }, + {0}, /* 0x21?? */ + {0}, /* 0x22?? */ + {0}, /* 0x23?? */ + {0}, /* 0x24?? */ + {0}, /* 0x25?? */ + {0}, /* 0x26?? */ + {0}, /* 0x27?? */ + {0}, /* 0x28?? */ + {0}, /* 0x29?? */ + {0}, /* 0x2a?? */ + {0}, /* 0x2b?? */ + {0}, /* 0x2c?? */ + {0}, /* 0x2d?? */ + {0}, /* 0x2e?? */ + {0}, /* 0x2f?? */ + {0}, /* 0x30?? */ + {0}, /* 0x31?? */ + {0}, /* 0x32?? */ + {0}, /* 0x33?? */ + {0}, /* 0x34?? */ + {0}, /* 0x35?? */ + {0}, /* 0x36?? */ + {0}, /* 0x37?? */ + {0}, /* 0x38?? */ + {0}, /* 0x39?? */ + {0}, /* 0x3a?? */ + {0}, /* 0x3b?? */ + {0}, /* 0x3c?? */ + {0}, /* 0x3d?? */ + {0}, /* 0x3e?? */ + {0}, /* 0x3f?? */ + {0}, /* 0x40?? */ + {0}, /* 0x41?? */ + {0}, /* 0x42?? */ + {0}, /* 0x43?? */ + {0}, /* 0x44?? */ + {0}, /* 0x45?? */ + {0}, /* 0x46?? */ + {0}, /* 0x47?? */ + {0}, /* 0x48?? */ + {0}, /* 0x49?? */ + {0}, /* 0x4a?? */ + {0}, /* 0x4b?? */ + {0}, /* 0x4c?? */ + {0}, /* 0x4d?? */ + {0}, /* 0x4e?? */ + {0}, /* 0x4f?? */ + {0}, /* 0x50?? */ + {0}, /* 0x51?? */ + {0}, /* 0x52?? */ + {0}, /* 0x53?? */ + {0}, /* 0x54?? */ + {0}, /* 0x55?? */ + {0}, /* 0x56?? */ + {0}, /* 0x57?? */ + {0}, /* 0x58?? */ + {0}, /* 0x59?? */ + {0}, /* 0x5a?? */ + {0}, /* 0x5b?? */ + {0}, /* 0x5c?? */ + {0}, /* 0x5d?? */ + {0}, /* 0x5e?? */ + {0}, /* 0x5f?? */ + {0}, /* 0x60?? */ + {0}, /* 0x61?? */ + {0}, /* 0x62?? */ + {0}, /* 0x63?? */ + {0}, /* 0x64?? */ + {0}, /* 0x65?? */ + {0}, /* 0x66?? */ + {0}, /* 0x67?? */ + {0}, /* 0x68?? */ + {0}, /* 0x69?? */ + {0}, /* 0x6a?? */ + {0}, /* 0x6b?? */ + {0}, /* 0x6c?? */ + {0}, /* 0x6d?? */ + {0}, /* 0x6e?? */ + {0}, /* 0x6f?? */ + {0}, /* 0x70?? */ + {0}, /* 0x71?? */ + {0}, /* 0x72?? */ + {0}, /* 0x73?? */ + {0}, /* 0x74?? */ + {0}, /* 0x75?? */ + {0}, /* 0x76?? */ + {0}, /* 0x77?? */ + {0}, /* 0x78?? */ + {0}, /* 0x79?? */ + {0}, /* 0x7a?? */ + {0}, /* 0x7b?? */ + {0}, /* 0x7c?? */ + {0}, /* 0x7d?? */ + {0}, /* 0x7e?? */ + {0}, /* 0x7f?? */ + {0}, /* 0x80?? */ + {0}, /* 0x81?? */ + {0}, /* 0x82?? */ + {0}, /* 0x83?? */ + {0}, /* 0x84?? */ + {0}, /* 0x85?? */ + {0}, /* 0x86?? */ + {0}, /* 0x87?? */ + {0}, /* 0x88?? */ + {0}, /* 0x89?? */ + {0}, /* 0x8a?? */ + {0}, /* 0x8b?? */ + {0}, /* 0x8c?? */ + {0}, /* 0x8d?? */ + {0}, /* 0x8e?? */ + {0}, /* 0x8f?? */ + {0}, /* 0x90?? */ + {0}, /* 0x91?? */ + {0}, /* 0x92?? */ + {0}, /* 0x93?? */ + {0}, /* 0x94?? */ + {0}, /* 0x95?? */ + {0}, /* 0x96?? */ + {0}, /* 0x97?? */ + {0}, /* 0x98?? */ + {0}, /* 0x99?? */ + {0}, /* 0x9a?? */ + {0}, /* 0x9b?? */ + {0}, /* 0x9c?? */ + {0}, /* 0x9d?? */ + {0}, /* 0x9e?? */ + {0}, /* 0x9f?? */ + {0}, /* 0xa0?? */ + {0}, /* 0xa1?? */ + {0}, /* 0xa2?? */ + {0}, /* 0xa3?? */ + {0}, /* 0xa4?? */ + {0}, /* 0xa5?? */ + {0}, /* 0xa6?? */ + {0}, /* 0xa7?? */ + {0}, /* 0xa8?? */ + {0}, /* 0xa9?? */ + {0}, /* 0xaa?? */ + {0}, /* 0xab?? */ + {0}, /* 0xac?? */ + {0}, /* 0xad?? */ + {0}, /* 0xae?? */ + {0}, /* 0xaf?? */ + {0}, /* 0xb0?? */ + {0}, /* 0xb1?? */ + {0}, /* 0xb2?? */ + {0}, /* 0xb3?? */ + {0}, /* 0xb4?? */ + {0}, /* 0xb5?? */ + {0}, /* 0xb6?? */ + {0}, /* 0xb7?? */ + {0}, /* 0xb8?? */ + {0}, /* 0xb9?? */ + {0}, /* 0xba?? */ + {0}, /* 0xbb?? */ + {0}, /* 0xbc?? */ + {0}, /* 0xbd?? */ + {0}, /* 0xbe?? */ + {0}, /* 0xbf?? */ + {0}, /* 0xc0?? */ + {0}, /* 0xc1?? */ + {0}, /* 0xc2?? */ + {0}, /* 0xc3?? */ + {0}, /* 0xc4?? */ + {0}, /* 0xc5?? */ + {0}, /* 0xc6?? */ + {0}, /* 0xc7?? */ + {0}, /* 0xc8?? */ + {0}, /* 0xc9?? */ + {0}, /* 0xca?? */ + {0}, /* 0xcb?? */ + {0}, /* 0xcc?? */ + {0}, /* 0xcd?? */ + {0}, /* 0xce?? */ + {0}, /* 0xcf?? */ + {0}, /* 0xd0?? */ + {0}, /* 0xd1?? */ + {0}, /* 0xd2?? */ + {0}, /* 0xd3?? */ + {0}, /* 0xd4?? */ + {0}, /* 0xd5?? */ + {0}, /* 0xd6?? */ + {0}, /* 0xd7?? */ + {0}, /* 0xd8?? */ + {0}, /* 0xd9?? */ + {0}, /* 0xda?? */ + {0}, /* 0xdb?? */ + {0}, /* 0xdc?? */ + {0}, /* 0xdd?? */ + {0}, /* 0xde?? */ + {0}, /* 0xdf?? */ + {0}, /* 0xe0?? */ + {0}, /* 0xe1?? */ + {0}, /* 0xe2?? */ + {0}, /* 0xe3?? */ + {0}, /* 0xe4?? */ + {0}, /* 0xe5?? */ + {0}, /* 0xe6?? */ + {0}, /* 0xe7?? */ + {0}, /* 0xe8?? */ + {0}, /* 0xe9?? */ + {0}, /* 0xea?? */ + {0}, /* 0xeb?? */ + {0}, /* 0xec?? */ + {0}, /* 0xed?? */ + {0}, /* 0xee?? */ + {0}, /* 0xef?? */ + {0}, /* 0xf0?? */ + {0}, /* 0xf1?? */ + {0}, /* 0xf2?? */ + {0}, /* 0xf3?? */ + {0}, /* 0xf4?? */ + {0}, /* 0xf5?? */ + {0}, /* 0xf6?? */ + {0}, /* 0xf7?? */ + {0}, /* 0xf8?? */ + {0}, /* 0xf9?? */ + {0}, /* 0xfa?? */ + {0}, /* 0xfb?? */ + {0}, /* 0xfc?? */ + { /* 0xfd?? */ + 0x00, /* 0xfd00 */ + 0x00, /* 0xfd01 (3270_Duplicate) */ + 0x00, /* 0xfd02 (3270_FieldMark) */ + 0x00, /* 0xfd03 (3270_Right2) */ + 0x00, /* 0xfd04 (3270_Left2) */ + 0x00, /* 0xfd05 (3270_BackTab) */ + 0x00, /* 0xfd06 (3270_EraseEOF) */ + 0x00, /* 0xfd07 (3270_EraseInput) */ + 0x00, /* 0xfd08 (3270_Reset) */ + 0x00, /* 0xfd09 (3270_Quit) */ + 0x00, /* 0xfd0a (3270_PA1) */ + 0x00, /* 0xfd0b (3270_PA2) */ + 0x00, /* 0xfd0c (3270_PA3) */ + 0x00, /* 0xfd0d (3270_Test) */ + 0x00, /* 0xfd0e (3270_Attn) */ + 0x00, /* 0xfd0f (3270_CursorBlink) */ + 0x00, /* 0xfd10 (3270_AltCursor) */ + 0x00, /* 0xfd11 (3270_KeyClick) */ + 0x00, /* 0xfd12 (3270_Jump) */ + 0x00, /* 0xfd13 (3270_Ident) */ + 0x00, /* 0xfd14 (3270_Rule) */ + 0x00, /* 0xfd15 (3270_Copy) */ + 0x00, /* 0xfd16 (3270_Play) */ + 0x00, /* 0xfd17 (3270_Setup) */ + 0x00, /* 0xfd18 (3270_Record) */ + 0x00, /* 0xfd19 (3270_ChangeScreen) */ + 0x00, /* 0xfd1a (3270_DeleteWord) */ + 0x00, /* 0xfd1b (3270_ExSelect) */ + 0x00, /* 0xfd1c (3270_CursorSelect) */ + 0x00, /* 0xfd1d (3270_PrintScreen) */ + 0x00, /* 0xfd1e (3270_Enter) */ + 0x00, /* 0xfd1f */ + 0x00, /* 0xfd20 */ + 0x00, /* 0xfd21 */ + 0x00, /* 0xfd22 */ + 0x00, /* 0xfd23 */ + 0x00, /* 0xfd24 */ + 0x00, /* 0xfd25 */ + 0x00, /* 0xfd26 */ + 0x00, /* 0xfd27 */ + 0x00, /* 0xfd28 */ + 0x00, /* 0xfd29 */ + 0x00, /* 0xfd2a */ + 0x00, /* 0xfd2b */ + 0x00, /* 0xfd2c */ + 0x00, /* 0xfd2d */ + 0x00, /* 0xfd2e */ + 0x00, /* 0xfd2f */ + 0x00, /* 0xfd30 */ + 0x00, /* 0xfd31 */ + 0x00, /* 0xfd32 */ + 0x00, /* 0xfd33 */ + 0x00, /* 0xfd34 */ + 0x00, /* 0xfd35 */ + 0x00, /* 0xfd36 */ + 0x00, /* 0xfd37 */ + 0x00, /* 0xfd38 */ + 0x00, /* 0xfd39 */ + 0x00, /* 0xfd3a */ + 0x00, /* 0xfd3b */ + 0x00, /* 0xfd3c */ + 0x00, /* 0xfd3d */ + 0x00, /* 0xfd3e */ + 0x00, /* 0xfd3f */ + 0x00, /* 0xfd40 */ + 0x00, /* 0xfd41 */ + 0x00, /* 0xfd42 */ + 0x00, /* 0xfd43 */ + 0x00, /* 0xfd44 */ + 0x00, /* 0xfd45 */ + 0x00, /* 0xfd46 */ + 0x00, /* 0xfd47 */ + 0x00, /* 0xfd48 */ + 0x00, /* 0xfd49 */ + 0x00, /* 0xfd4a */ + 0x00, /* 0xfd4b */ + 0x00, /* 0xfd4c */ + 0x00, /* 0xfd4d */ + 0x00, /* 0xfd4e */ + 0x00, /* 0xfd4f */ + 0x00, /* 0xfd50 */ + 0x00, /* 0xfd51 */ + 0x00, /* 0xfd52 */ + 0x00, /* 0xfd53 */ + 0x00, /* 0xfd54 */ + 0x00, /* 0xfd55 */ + 0x00, /* 0xfd56 */ + 0x00, /* 0xfd57 */ + 0x00, /* 0xfd58 */ + 0x00, /* 0xfd59 */ + 0x00, /* 0xfd5a */ + 0x00, /* 0xfd5b */ + 0x00, /* 0xfd5c */ + 0x00, /* 0xfd5d */ + 0x00, /* 0xfd5e */ + 0x00, /* 0xfd5f */ + 0x00, /* 0xfd60 */ + 0x00, /* 0xfd61 */ + 0x00, /* 0xfd62 */ + 0x00, /* 0xfd63 */ + 0x00, /* 0xfd64 */ + 0x00, /* 0xfd65 */ + 0x00, /* 0xfd66 */ + 0x00, /* 0xfd67 */ + 0x00, /* 0xfd68 */ + 0x00, /* 0xfd69 */ + 0x00, /* 0xfd6a */ + 0x00, /* 0xfd6b */ + 0x00, /* 0xfd6c */ + 0x00, /* 0xfd6d */ + 0x00, /* 0xfd6e */ + 0x00, /* 0xfd6f */ + 0x00, /* 0xfd70 */ + 0x00, /* 0xfd71 */ + 0x00, /* 0xfd72 */ + 0x00, /* 0xfd73 */ + 0x00, /* 0xfd74 */ + 0x00, /* 0xfd75 */ + 0x00, /* 0xfd76 */ + 0x00, /* 0xfd77 */ + 0x00, /* 0xfd78 */ + 0x00, /* 0xfd79 */ + 0x00, /* 0xfd7a */ + 0x00, /* 0xfd7b */ + 0x00, /* 0xfd7c */ + 0x00, /* 0xfd7d */ + 0x00, /* 0xfd7e */ + 0x00, /* 0xfd7f */ + 0x00, /* 0xfd80 */ + 0x00, /* 0xfd81 */ + 0x00, /* 0xfd82 */ + 0x00, /* 0xfd83 */ + 0x00, /* 0xfd84 */ + 0x00, /* 0xfd85 */ + 0x00, /* 0xfd86 */ + 0x00, /* 0xfd87 */ + 0x00, /* 0xfd88 */ + 0x00, /* 0xfd89 */ + 0x00, /* 0xfd8a */ + 0x00, /* 0xfd8b */ + 0x00, /* 0xfd8c */ + 0x00, /* 0xfd8d */ + 0x00, /* 0xfd8e */ + 0x00, /* 0xfd8f */ + 0x00, /* 0xfd90 */ + 0x00, /* 0xfd91 */ + 0x00, /* 0xfd92 */ + 0x00, /* 0xfd93 */ + 0x00, /* 0xfd94 */ + 0x00, /* 0xfd95 */ + 0x00, /* 0xfd96 */ + 0x00, /* 0xfd97 */ + 0x00, /* 0xfd98 */ + 0x00, /* 0xfd99 */ + 0x00, /* 0xfd9a */ + 0x00, /* 0xfd9b */ + 0x00, /* 0xfd9c */ + 0x00, /* 0xfd9d */ + 0x00, /* 0xfd9e */ + 0x00, /* 0xfd9f */ + 0x00, /* 0xfda0 */ + 0x00, /* 0xfda1 */ + 0x00, /* 0xfda2 */ + 0x00, /* 0xfda3 */ + 0x00, /* 0xfda4 */ + 0x00, /* 0xfda5 */ + 0x00, /* 0xfda6 */ + 0x00, /* 0xfda7 */ + 0x00, /* 0xfda8 */ + 0x00, /* 0xfda9 */ + 0x00, /* 0xfdaa */ + 0x00, /* 0xfdab */ + 0x00, /* 0xfdac */ + 0x00, /* 0xfdad */ + 0x00, /* 0xfdae */ + 0x00, /* 0xfdaf */ + 0x00, /* 0xfdb0 */ + 0x00, /* 0xfdb1 */ + 0x00, /* 0xfdb2 */ + 0x00, /* 0xfdb3 */ + 0x00, /* 0xfdb4 */ + 0x00, /* 0xfdb5 */ + 0x00, /* 0xfdb6 */ + 0x00, /* 0xfdb7 */ + 0x00, /* 0xfdb8 */ + 0x00, /* 0xfdb9 */ + 0x00, /* 0xfdba */ + 0x00, /* 0xfdbb */ + 0x00, /* 0xfdbc */ + 0x00, /* 0xfdbd */ + 0x00, /* 0xfdbe */ + 0x00, /* 0xfdbf */ + 0x00, /* 0xfdc0 */ + 0x00, /* 0xfdc1 */ + 0x00, /* 0xfdc2 */ + 0x00, /* 0xfdc3 */ + 0x00, /* 0xfdc4 */ + 0x00, /* 0xfdc5 */ + 0x00, /* 0xfdc6 */ + 0x00, /* 0xfdc7 */ + 0x00, /* 0xfdc8 */ + 0x00, /* 0xfdc9 */ + 0x00, /* 0xfdca */ + 0x00, /* 0xfdcb */ + 0x00, /* 0xfdcc */ + 0x00, /* 0xfdcd */ + 0x00, /* 0xfdce */ + 0x00, /* 0xfdcf */ + 0x00, /* 0xfdd0 */ + 0x00, /* 0xfdd1 */ + 0x00, /* 0xfdd2 */ + 0x00, /* 0xfdd3 */ + 0x00, /* 0xfdd4 */ + 0x00, /* 0xfdd5 */ + 0x00, /* 0xfdd6 */ + 0x00, /* 0xfdd7 */ + 0x00, /* 0xfdd8 */ + 0x00, /* 0xfdd9 */ + 0x00, /* 0xfdda */ + 0x00, /* 0xfddb */ + 0x00, /* 0xfddc */ + 0x00, /* 0xfddd */ + 0x00, /* 0xfdde */ + 0x00, /* 0xfddf */ + 0x00, /* 0xfde0 */ + 0x00, /* 0xfde1 */ + 0x00, /* 0xfde2 */ + 0x00, /* 0xfde3 */ + 0x00, /* 0xfde4 */ + 0x00, /* 0xfde5 */ + 0x00, /* 0xfde6 */ + 0x00, /* 0xfde7 */ + 0x00, /* 0xfde8 */ + 0x00, /* 0xfde9 */ + 0x00, /* 0xfdea */ + 0x00, /* 0xfdeb */ + 0x00, /* 0xfdec */ + 0x00, /* 0xfded */ + 0x00, /* 0xfdee */ + 0x00, /* 0xfdef */ + 0x00, /* 0xfdf0 */ + 0x00, /* 0xfdf1 */ + 0x00, /* 0xfdf2 */ + 0x00, /* 0xfdf3 */ + 0x00, /* 0xfdf4 */ + 0x00, /* 0xfdf5 */ + 0x00, /* 0xfdf6 */ + 0x00, /* 0xfdf7 */ + 0x00, /* 0xfdf8 */ + 0x00, /* 0xfdf9 */ + 0x00, /* 0xfdfa */ + 0x00, /* 0xfdfb */ + 0x00, /* 0xfdfc */ + 0x00, /* 0xfdfd */ + 0x00, /* 0xfdfe */ + 0x00, /* 0xfdff */ + }, + { /* 0xfe?? */ + 0x00, /* 0xfe00 */ + 0x00, /* 0xfe01 (ISO_Lock) */ + 0x00, /* 0xfe02 (ISO_Level2_Latch) */ + 0x00, /* 0xfe03 (ISO_Level3_Shift) */ + 0x00, /* 0xfe04 (ISO_Level3_Latch) */ + 0x00, /* 0xfe05 (ISO_Level3_Lock) */ + 0x00, /* 0xfe06 (ISO_Group_Latch) */ + 0x00, /* 0xfe07 (ISO_Group_Lock) */ + 0x00, /* 0xfe08 (ISO_Next_Group) */ + 0x00, /* 0xfe09 (ISO_Next_Group_Lock) */ + 0x00, /* 0xfe0a (ISO_Prev_Group) */ + 0x00, /* 0xfe0b (ISO_Prev_Group_Lock) */ + 0x00, /* 0xfe0c (ISO_First_Group) */ + 0x00, /* 0xfe0d (ISO_First_Group_Lock) */ + 0x00, /* 0xfe0e (ISO_Last_Group) */ + 0x00, /* 0xfe0f (ISO_Last_Group_Lock) */ + 0x00, /* 0xfe10 */ + 0x00, /* 0xfe11 (ISO_Level5_Shift) */ + 0x00, /* 0xfe12 (ISO_Level5_Latch) */ + 0x00, /* 0xfe13 (ISO_Level5_Lock) */ + 0x00, /* 0xfe14 */ + 0x00, /* 0xfe15 */ + 0x00, /* 0xfe16 */ + 0x00, /* 0xfe17 */ + 0x00, /* 0xfe18 */ + 0x00, /* 0xfe19 */ + 0x00, /* 0xfe1a */ + 0x00, /* 0xfe1b */ + 0x00, /* 0xfe1c */ + 0x00, /* 0xfe1d */ + 0x00, /* 0xfe1e */ + 0x00, /* 0xfe1f */ + 0x00, /* 0xfe20 (ISO_Left_Tab) */ + 0x00, /* 0xfe21 (ISO_Move_Line_Up) */ + 0x00, /* 0xfe22 (ISO_Move_Line_Down) */ + 0x00, /* 0xfe23 (ISO_Partial_Line_Up) */ + 0x00, /* 0xfe24 (ISO_Partial_Line_Down) */ + 0x00, /* 0xfe25 (ISO_Partial_Space_Left) */ + 0x00, /* 0xfe26 (ISO_Partial_Space_Right) */ + 0x00, /* 0xfe27 (ISO_Set_Margin_Left) */ + 0x00, /* 0xfe28 (ISO_Set_Margin_Right) */ + 0x00, /* 0xfe29 (ISO_Release_Margin_Left) */ + 0x00, /* 0xfe2a (ISO_Release_Margin_Right) */ + 0x00, /* 0xfe2b (ISO_Release_Both_Margins) */ + 0x00, /* 0xfe2c (ISO_Fast_Cursor_Left) */ + 0x00, /* 0xfe2d (ISO_Fast_Cursor_Right) */ + 0x00, /* 0xfe2e (ISO_Fast_Cursor_Up) */ + 0x00, /* 0xfe2f (ISO_Fast_Cursor_Down) */ + 0x00, /* 0xfe30 (ISO_Continuous_Underline) */ + 0x00, /* 0xfe31 (ISO_Discontinuous_Underline) */ + 0x00, /* 0xfe32 (ISO_Emphasize) */ + 0x00, /* 0xfe33 (ISO_Center_Object) */ + 0x00, /* 0xfe34 (ISO_Enter) */ + 0x00, /* 0xfe35 */ + 0x00, /* 0xfe36 */ + 0x00, /* 0xfe37 */ + 0x00, /* 0xfe38 */ + 0x00, /* 0xfe39 */ + 0x00, /* 0xfe3a */ + 0x00, /* 0xfe3b */ + 0x00, /* 0xfe3c */ + 0x00, /* 0xfe3d */ + 0x00, /* 0xfe3e */ + 0x00, /* 0xfe3f */ + 0x00, /* 0xfe40 */ + 0x00, /* 0xfe41 */ + 0x00, /* 0xfe42 */ + 0x00, /* 0xfe43 */ + 0x00, /* 0xfe44 */ + 0x00, /* 0xfe45 */ + 0x00, /* 0xfe46 */ + 0x00, /* 0xfe47 */ + 0x00, /* 0xfe48 */ + 0x00, /* 0xfe49 */ + 0x00, /* 0xfe4a */ + 0x00, /* 0xfe4b */ + 0x00, /* 0xfe4c */ + 0x00, /* 0xfe4d */ + 0x00, /* 0xfe4e */ + 0x00, /* 0xfe4f */ + 0x00, /* 0xfe50 (dead_grave) */ + 0x00, /* 0xfe51 (dead_acute) */ + 0x00, /* 0xfe52 (dead_circumflex) */ + 0x00, /* 0xfe53 (dead_perispomeni) */ + 0x00, /* 0xfe54 (dead_macron) */ + 0x00, /* 0xfe55 (dead_breve) */ + 0x00, /* 0xfe56 (dead_abovedot) */ + 0x00, /* 0xfe57 (dead_diaeresis) */ + 0x00, /* 0xfe58 (dead_abovering) */ + 0x00, /* 0xfe59 (dead_doubleacute) */ + 0x00, /* 0xfe5a (dead_caron) */ + 0x00, /* 0xfe5b (dead_cedilla) */ + 0x00, /* 0xfe5c (dead_ogonek) */ + 0x00, /* 0xfe5d (dead_iota) */ + 0x00, /* 0xfe5e (dead_voiced_sound) */ + 0x00, /* 0xfe5f (dead_semivoiced_sound) */ + 0x00, /* 0xfe60 (dead_belowdot) */ + 0x00, /* 0xfe61 (dead_hook) */ + 0x00, /* 0xfe62 (dead_horn) */ + 0x00, /* 0xfe63 (dead_stroke) */ + 0x00, /* 0xfe64 (dead_psili) */ + 0x00, /* 0xfe65 (dead_dasia) */ + 0x00, /* 0xfe66 (dead_doublegrave) */ + 0x00, /* 0xfe67 (dead_belowring) */ + 0x00, /* 0xfe68 (dead_belowmacron) */ + 0x00, /* 0xfe69 (dead_belowcircumflex) */ + 0x00, /* 0xfe6a (dead_belowtilde) */ + 0x00, /* 0xfe6b (dead_belowbreve) */ + 0x00, /* 0xfe6c (dead_belowdiaeresis) */ + 0x00, /* 0xfe6d (dead_invertedbreve) */ + 0x00, /* 0xfe6e (dead_belowcomma) */ + 0x00, /* 0xfe6f (dead_currency) */ + 0x00, /* 0xfe70 (AccessX_Enable) */ + 0x00, /* 0xfe71 (AccessX_Feedback_Enable) */ + 0x00, /* 0xfe72 (RepeatKeys_Enable) */ + 0x00, /* 0xfe73 (SlowKeys_Enable) */ + 0x00, /* 0xfe74 (BounceKeys_Enable) */ + 0x00, /* 0xfe75 (StickyKeys_Enable) */ + 0x00, /* 0xfe76 (MouseKeys_Enable) */ + 0x00, /* 0xfe77 (MouseKeys_Accel_Enable) */ + 0x00, /* 0xfe78 (Overlay1_Enable) */ + 0x00, /* 0xfe79 (Overlay2_Enable) */ + 0x00, /* 0xfe7a (AudibleBell_Enable) */ + 0x00, /* 0xfe7b */ + 0x00, /* 0xfe7c */ + 0x00, /* 0xfe7d */ + 0x00, /* 0xfe7e */ + 0x00, /* 0xfe7f */ + 0x00, /* 0xfe80 (dead_a) */ + 0x00, /* 0xfe81 (dead_A) */ + 0x00, /* 0xfe82 (dead_e) */ + 0x00, /* 0xfe83 (dead_E) */ + 0x00, /* 0xfe84 (dead_i) */ + 0x00, /* 0xfe85 (dead_I) */ + 0x00, /* 0xfe86 (dead_o) */ + 0x00, /* 0xfe87 (dead_O) */ + 0x00, /* 0xfe88 (dead_u) */ + 0x00, /* 0xfe89 (dead_U) */ + 0x00, /* 0xfe8a (dead_small_schwa) */ + 0x00, /* 0xfe8b (dead_capital_schwa) */ + 0x00, /* 0xfe8c */ + 0x00, /* 0xfe8d */ + 0x00, /* 0xfe8e */ + 0x00, /* 0xfe8f */ + 0x00, /* 0xfe90 */ + 0x00, /* 0xfe91 */ + 0x00, /* 0xfe92 */ + 0x00, /* 0xfe93 */ + 0x00, /* 0xfe94 */ + 0x00, /* 0xfe95 */ + 0x00, /* 0xfe96 */ + 0x00, /* 0xfe97 */ + 0x00, /* 0xfe98 */ + 0x00, /* 0xfe99 */ + 0x00, /* 0xfe9a */ + 0x00, /* 0xfe9b */ + 0x00, /* 0xfe9c */ + 0x00, /* 0xfe9d */ + 0x00, /* 0xfe9e */ + 0x00, /* 0xfe9f */ + 0x00, /* 0xfea0 */ + 0x00, /* 0xfea1 */ + 0x00, /* 0xfea2 */ + 0x00, /* 0xfea3 */ + 0x00, /* 0xfea4 */ + 0x00, /* 0xfea5 */ + 0x00, /* 0xfea6 */ + 0x00, /* 0xfea7 */ + 0x00, /* 0xfea8 */ + 0x00, /* 0xfea9 */ + 0x00, /* 0xfeaa */ + 0x00, /* 0xfeab */ + 0x00, /* 0xfeac */ + 0x00, /* 0xfead */ + 0x00, /* 0xfeae */ + 0x00, /* 0xfeaf */ + 0x00, /* 0xfeb0 */ + 0x00, /* 0xfeb1 */ + 0x00, /* 0xfeb2 */ + 0x00, /* 0xfeb3 */ + 0x00, /* 0xfeb4 */ + 0x00, /* 0xfeb5 */ + 0x00, /* 0xfeb6 */ + 0x00, /* 0xfeb7 */ + 0x00, /* 0xfeb8 */ + 0x00, /* 0xfeb9 */ + 0x00, /* 0xfeba */ + 0x00, /* 0xfebb */ + 0x00, /* 0xfebc */ + 0x00, /* 0xfebd */ + 0x00, /* 0xfebe */ + 0x00, /* 0xfebf */ + 0x00, /* 0xfec0 */ + 0x00, /* 0xfec1 */ + 0x00, /* 0xfec2 */ + 0x00, /* 0xfec3 */ + 0x00, /* 0xfec4 */ + 0x00, /* 0xfec5 */ + 0x00, /* 0xfec6 */ + 0x00, /* 0xfec7 */ + 0x00, /* 0xfec8 */ + 0x00, /* 0xfec9 */ + 0x00, /* 0xfeca */ + 0x00, /* 0xfecb */ + 0x00, /* 0xfecc */ + 0x00, /* 0xfecd */ + 0x00, /* 0xfece */ + 0x00, /* 0xfecf */ + 0x00, /* 0xfed0 (First_Virtual_Screen) */ + 0x00, /* 0xfed1 (Prev_Virtual_Screen) */ + 0x00, /* 0xfed2 (Next_Virtual_Screen) */ + 0x00, /* 0xfed3 */ + 0x00, /* 0xfed4 (Last_Virtual_Screen) */ + 0x00, /* 0xfed5 (Terminate_Server) */ + 0x00, /* 0xfed6 */ + 0x00, /* 0xfed7 */ + 0x00, /* 0xfed8 */ + 0x00, /* 0xfed9 */ + 0x00, /* 0xfeda */ + 0x00, /* 0xfedb */ + 0x00, /* 0xfedc */ + 0x00, /* 0xfedd */ + 0x00, /* 0xfede */ + 0x00, /* 0xfedf */ + 0x00, /* 0xfee0 (Pointer_Left) */ + 0x00, /* 0xfee1 (Pointer_Right) */ + 0x00, /* 0xfee2 (Pointer_Up) */ + 0x00, /* 0xfee3 (Pointer_Down) */ + 0x00, /* 0xfee4 (Pointer_UpLeft) */ + 0x00, /* 0xfee5 (Pointer_UpRight) */ + 0x00, /* 0xfee6 (Pointer_DownLeft) */ + 0x00, /* 0xfee7 (Pointer_DownRight) */ + 0x00, /* 0xfee8 (Pointer_Button_Dflt) */ + 0x00, /* 0xfee9 (Pointer_Button1) */ + 0x00, /* 0xfeea (Pointer_Button2) */ + 0x00, /* 0xfeeb (Pointer_Button3) */ + 0x00, /* 0xfeec (Pointer_Button4) */ + 0x00, /* 0xfeed (Pointer_Button5) */ + 0x00, /* 0xfeee (Pointer_DblClick_Dflt) */ + 0x00, /* 0xfeef (Pointer_DblClick1) */ + 0x00, /* 0xfef0 (Pointer_DblClick2) */ + 0x00, /* 0xfef1 (Pointer_DblClick3) */ + 0x00, /* 0xfef2 (Pointer_DblClick4) */ + 0x00, /* 0xfef3 (Pointer_DblClick5) */ + 0x00, /* 0xfef4 (Pointer_Drag_Dflt) */ + 0x00, /* 0xfef5 (Pointer_Drag1) */ + 0x00, /* 0xfef6 (Pointer_Drag2) */ + 0x00, /* 0xfef7 (Pointer_Drag3) */ + 0x00, /* 0xfef8 (Pointer_Drag4) */ + 0x00, /* 0xfef9 (Pointer_EnableKeys) */ + 0x00, /* 0xfefa (Pointer_Accelerate) */ + 0x00, /* 0xfefb (Pointer_DfltBtnNext) */ + 0x00, /* 0xfefc (Pointer_DfltBtnPrev) */ + 0x00, /* 0xfefd (Pointer_Drag5) */ + 0x00, /* 0xfefe */ + 0x00, /* 0xfeff */ + }, + { /* 0xff?? */ + 0x00, /* 0xff00 */ + 0x00, /* 0xff01 */ + 0x00, /* 0xff02 */ + 0x00, /* 0xff03 */ + 0x00, /* 0xff04 */ + 0x00, /* 0xff05 */ + 0x00, /* 0xff06 */ + 0x00, /* 0xff07 */ + 0x00, /* 0xff08 (BackSpace) */ + 0x00, /* 0xff09 (Tab) */ + 0x00, /* 0xff0a (Linefeed) */ + 0x00, /* 0xff0b (Clear) */ + 0x00, /* 0xff0c */ + 0x00, /* 0xff0d (Return) */ + 0x00, /* 0xff0e */ + 0x00, /* 0xff0f */ + 0x00, /* 0xff10 */ + 0x00, /* 0xff11 */ + 0x00, /* 0xff12 */ + 0x00, /* 0xff13 (Pause) */ + 0x00, /* 0xff14 (Scroll_Lock) */ + 0x00, /* 0xff15 (Sys_Req) */ + 0x00, /* 0xff16 */ + 0x00, /* 0xff17 */ + 0x00, /* 0xff18 */ + 0x00, /* 0xff19 */ + 0x00, /* 0xff1a */ + 0x00, /* 0xff1b (Escape) */ + 0x00, /* 0xff1c */ + 0x00, /* 0xff1d */ + 0x00, /* 0xff1e */ + 0x00, /* 0xff1f */ + 0x00, /* 0xff20 (Multi_key) */ + 0x00, /* 0xff21 (Kanji) */ + 0x00, /* 0xff22 (Muhenkan) */ + 0x00, /* 0xff23 (Henkan) */ + 0x00, /* 0xff24 (Romaji) */ + 0x00, /* 0xff25 (Hiragana) */ + 0x00, /* 0xff26 (Katakana) */ + 0x00, /* 0xff27 (Hiragana_Katakana) */ + 0x00, /* 0xff28 (Zenkaku) */ + 0x00, /* 0xff29 (Hankaku) */ + 0x00, /* 0xff2a (Zenkaku_Hankaku) */ + 0x00, /* 0xff2b (Touroku) */ + 0x00, /* 0xff2c (Massyo) */ + 0x00, /* 0xff2d (Kana_Lock) */ + 0x00, /* 0xff2e (Kana_Shift) */ + 0x00, /* 0xff2f (Eisu_Shift) */ + 0x00, /* 0xff30 (Eisu_toggle) */ + 0x00, /* 0xff31 (Hangul) */ + 0x00, /* 0xff32 (Hangul_Start) */ + 0x00, /* 0xff33 (Hangul_End) */ + 0x00, /* 0xff34 (Hangul_Hanja) */ + 0x00, /* 0xff35 (Hangul_Jamo) */ + 0x00, /* 0xff36 (Hangul_Romaja) */ + 0x00, /* 0xff37 (Hangul_Codeinput) */ + 0x00, /* 0xff38 (Hangul_Jeonja) */ + 0x00, /* 0xff39 (Hangul_Banja) */ + 0x00, /* 0xff3a (Hangul_PreHanja) */ + 0x00, /* 0xff3b (Hangul_PostHanja) */ + 0x00, /* 0xff3c (Hangul_SingleCandidate) */ + 0x00, /* 0xff3d (Hangul_MultipleCandidate) */ + 0x00, /* 0xff3e (Hangul_PreviousCandidate) */ + 0x00, /* 0xff3f (Hangul_Special) */ + 0x00, /* 0xff40 */ + 0x00, /* 0xff41 */ + 0x00, /* 0xff42 */ + 0x00, /* 0xff43 */ + 0x00, /* 0xff44 */ + 0x00, /* 0xff45 */ + 0x00, /* 0xff46 */ + 0x00, /* 0xff47 */ + 0x00, /* 0xff48 */ + 0x00, /* 0xff49 */ + 0x00, /* 0xff4a */ + 0x00, /* 0xff4b */ + 0x00, /* 0xff4c */ + 0x00, /* 0xff4d */ + 0x00, /* 0xff4e */ + 0x00, /* 0xff4f */ + 0x00, /* 0xff50 (Home) */ + 0x00, /* 0xff51 (Left) */ + 0x00, /* 0xff52 (Up) */ + 0x00, /* 0xff53 (Right) */ + 0x00, /* 0xff54 (Down) */ + 0x00, /* 0xff55 (Page_Up) */ + 0x00, /* 0xff56 (Page_Down) */ + 0x00, /* 0xff57 (End) */ + 0x00, /* 0xff58 (Begin) */ + 0x00, /* 0xff59 */ + 0x00, /* 0xff5a */ + 0x00, /* 0xff5b */ + 0x00, /* 0xff5c */ + 0x00, /* 0xff5d */ + 0x00, /* 0xff5e */ + 0x00, /* 0xff5f */ + 0x00, /* 0xff60 (Select) */ + 0x00, /* 0xff61 (Print) */ + 0x00, /* 0xff62 (Execute) */ + 0x00, /* 0xff63 (Insert) */ + 0x00, /* 0xff64 */ + 0x00, /* 0xff65 (Undo) */ + 0x00, /* 0xff66 (Redo) */ + 0x00, /* 0xff67 (Menu) */ + 0x00, /* 0xff68 (Find) */ + 0x00, /* 0xff69 (Cancel) */ + 0x00, /* 0xff6a (Help) */ + 0x00, /* 0xff6b (Break) */ + 0x00, /* 0xff6c */ + 0x00, /* 0xff6d */ + 0x00, /* 0xff6e */ + 0x00, /* 0xff6f */ + 0x00, /* 0xff70 */ + 0x00, /* 0xff71 */ + 0x00, /* 0xff72 */ + 0x00, /* 0xff73 */ + 0x00, /* 0xff74 */ + 0x00, /* 0xff75 */ + 0x00, /* 0xff76 */ + 0x00, /* 0xff77 */ + 0x00, /* 0xff78 */ + 0x00, /* 0xff79 */ + 0x00, /* 0xff7a */ + 0x00, /* 0xff7b */ + 0x00, /* 0xff7c */ + 0x00, /* 0xff7d */ + 0x00, /* 0xff7e (Hangul_switch) */ + 0x00, /* 0xff7f (Num_Lock) */ + 0x00, /* 0xff80 (KP_Space) */ + 0x00, /* 0xff81 */ + 0x00, /* 0xff82 */ + 0x00, /* 0xff83 */ + 0x00, /* 0xff84 */ + 0x00, /* 0xff85 */ + 0x00, /* 0xff86 */ + 0x00, /* 0xff87 */ + 0x00, /* 0xff88 */ + 0x00, /* 0xff89 (KP_Tab) */ + 0x00, /* 0xff8a */ + 0x00, /* 0xff8b */ + 0x00, /* 0xff8c */ + 0x00, /* 0xff8d (KP_Enter) */ + 0x00, /* 0xff8e */ + 0x00, /* 0xff8f */ + 0x00, /* 0xff90 */ + 0x00, /* 0xff91 (KP_F1) */ + 0x00, /* 0xff92 (KP_F2) */ + 0x00, /* 0xff93 (KP_F3) */ + 0x00, /* 0xff94 (KP_F4) */ + 0x00, /* 0xff95 (KP_Home) */ + 0x00, /* 0xff96 (KP_Left) */ + 0x00, /* 0xff97 (KP_Up) */ + 0x00, /* 0xff98 (KP_Right) */ + 0x00, /* 0xff99 (KP_Down) */ + 0x00, /* 0xff9a (KP_Page_Up) */ + 0x00, /* 0xff9b (KP_Page_Down) */ + 0x00, /* 0xff9c (KP_End) */ + 0x00, /* 0xff9d (KP_Begin) */ + 0x00, /* 0xff9e (KP_Insert) */ + 0x00, /* 0xff9f (KP_Delete) */ + 0x00, /* 0xffa0 */ + 0x00, /* 0xffa1 */ + 0x00, /* 0xffa2 */ + 0x00, /* 0xffa3 */ + 0x00, /* 0xffa4 */ + 0x00, /* 0xffa5 */ + 0x00, /* 0xffa6 */ + 0x00, /* 0xffa7 */ + 0x00, /* 0xffa8 */ + 0x00, /* 0xffa9 */ + 0x00, /* 0xffaa (KP_Multiply) */ + 0x00, /* 0xffab (KP_Add) */ + 0x00, /* 0xffac (KP_Separator) */ + 0x00, /* 0xffad (KP_Subtract) */ + 0x00, /* 0xffae (KP_Decimal) */ + 0x00, /* 0xffaf (KP_Divide) */ + 0x00, /* 0xffb0 (KP_0) */ + 0x00, /* 0xffb1 (KP_1) */ + 0x00, /* 0xffb2 (KP_2) */ + 0x00, /* 0xffb3 (KP_3) */ + 0x00, /* 0xffb4 (KP_4) */ + 0x00, /* 0xffb5 (KP_5) */ + 0x00, /* 0xffb6 (KP_6) */ + 0x00, /* 0xffb7 (KP_7) */ + 0x00, /* 0xffb8 (KP_8) */ + 0x00, /* 0xffb9 (KP_9) */ + 0x00, /* 0xffba */ + 0x00, /* 0xffbb */ + 0x00, /* 0xffbc */ + 0x00, /* 0xffbd (KP_Equal) */ + 0x00, /* 0xffbe (F1) */ + 0x00, /* 0xffbf (F2) */ + 0x00, /* 0xffc0 (F3) */ + 0x00, /* 0xffc1 (F4) */ + 0x00, /* 0xffc2 (F5) */ + 0x00, /* 0xffc3 (F6) */ + 0x00, /* 0xffc4 (F7) */ + 0x00, /* 0xffc5 (F8) */ + 0x00, /* 0xffc6 (F9) */ + 0x00, /* 0xffc7 (F10) */ + 0x00, /* 0xffc8 (L1) */ + 0x00, /* 0xffc9 (L2) */ + 0x00, /* 0xffca (L3) */ + 0x00, /* 0xffcb (L4) */ + 0x00, /* 0xffcc (L5) */ + 0x00, /* 0xffcd (L6) */ + 0x00, /* 0xffce (L7) */ + 0x00, /* 0xffcf (L8) */ + 0x00, /* 0xffd0 (L9) */ + 0x00, /* 0xffd1 (L10) */ + 0x00, /* 0xffd2 (R1) */ + 0x00, /* 0xffd3 (R2) */ + 0x00, /* 0xffd4 (R3) */ + 0x00, /* 0xffd5 (R4) */ + 0x00, /* 0xffd6 (R5) */ + 0x00, /* 0xffd7 (R6) */ + 0x00, /* 0xffd8 (R7) */ + 0x00, /* 0xffd9 (R8) */ + 0x00, /* 0xffda (R9) */ + 0x00, /* 0xffdb (R10) */ + 0x00, /* 0xffdc (R11) */ + 0x00, /* 0xffdd (R12) */ + 0x00, /* 0xffde (R13) */ + 0x00, /* 0xffdf (R14) */ + 0x00, /* 0xffe0 (R15) */ + 0x00, /* 0xffe1 (Shift_L) */ + 0x00, /* 0xffe2 (Shift_R) */ + 0x00, /* 0xffe3 (Control_L) */ + 0x00, /* 0xffe4 (Control_R) */ + 0x00, /* 0xffe5 (Caps_Lock) */ + 0x00, /* 0xffe6 (Shift_Lock) */ + 0x00, /* 0xffe7 (Meta_L) */ + 0x00, /* 0xffe8 (Meta_R) */ + 0x00, /* 0xffe9 (Alt_L) */ + 0x00, /* 0xffea (Alt_R) */ + 0x00, /* 0xffeb (Super_L) */ + 0x00, /* 0xffec (Super_R) */ + 0x00, /* 0xffed (Hyper_L) */ + 0x00, /* 0xffee (Hyper_R) */ + 0x00, /* 0xffef */ + 0x00, /* 0xfff0 */ + 0x00, /* 0xfff1 (braille_dot_1) */ + 0x00, /* 0xfff2 (braille_dot_2) */ + 0x00, /* 0xfff3 (braille_dot_3) */ + 0x00, /* 0xfff4 (braille_dot_4) */ + 0x00, /* 0xfff5 (braille_dot_5) */ + 0x00, /* 0xfff6 (braille_dot_6) */ + 0x00, /* 0xfff7 (braille_dot_7) */ + 0x00, /* 0xfff8 (braille_dot_8) */ + 0x00, /* 0xfff9 (braille_dot_9) */ + 0x00, /* 0xfffa (braille_dot_10) */ + 0x00, /* 0xfffb */ + 0x00, /* 0xfffc */ + 0x00, /* 0xfffd */ + 0x00, /* 0xfffe */ + 0x00, /* 0xffff (Delete) */ + }, +}; + From 1ecbf7bbef740513330ee6c3d19a8802ab5a1e42 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Sun, 24 Jul 2011 01:05:10 -0700 Subject: [PATCH 019/253] Fixed some scancodes --- protocols/rdp/src/rdp_keymap.c | 38 +++++++++++++++++----------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/protocols/rdp/src/rdp_keymap.c b/protocols/rdp/src/rdp_keymap.c index 4aaa3992..a5836bba 100644 --- a/protocols/rdp/src/rdp_keymap.c +++ b/protocols/rdp/src/rdp_keymap.c @@ -69,7 +69,7 @@ const int guac_rdp_keysym_scancode[256][256] = { 0x00, /* 0x001d */ 0x00, /* 0x001e */ 0x00, /* 0x001f */ - 0x00, /* 0x0020 (space) */ + 0x39, /* 0x0020 (space) */ 0x00, /* 0x0021 (exclam) */ 0x00, /* 0x0022 (quotedbl) */ 0x00, /* 0x0023 (numbersign) */ @@ -85,16 +85,16 @@ const int guac_rdp_keysym_scancode[256][256] = { 0x00, /* 0x002d (minus) */ 0x00, /* 0x002e (period) */ 0x00, /* 0x002f (slash) */ - 0x00, /* 0x0030 */ - 0x00, /* 0x0031 (1) */ - 0x00, /* 0x0032 (2) */ - 0x00, /* 0x0033 (3) */ - 0x00, /* 0x0034 (4) */ - 0x00, /* 0x0035 (5) */ - 0x00, /* 0x0036 (6) */ - 0x00, /* 0x0037 (7) */ - 0x00, /* 0x0038 (8) */ - 0x00, /* 0x0039 (9) */ + 0x0B, /* 0x0030 (0) */ + 0x02, /* 0x0031 (1) */ + 0x03, /* 0x0032 (2) */ + 0x04, /* 0x0033 (3) */ + 0x05, /* 0x0034 (4) */ + 0x06, /* 0x0035 (5) */ + 0x07, /* 0x0036 (6) */ + 0x08, /* 0x0037 (7) */ + 0x09, /* 0x0038 (8) */ + 0x0A, /* 0x0039 (9) */ 0x00, /* 0x003a (colon) */ 0x00, /* 0x003b (semicolon) */ 0x00, /* 0x003c (less) */ @@ -5183,12 +5183,12 @@ const int guac_rdp_keysym_scancode[256][256] = { 0x00, /* 0xff05 */ 0x00, /* 0xff06 */ 0x00, /* 0xff07 */ - 0x00, /* 0xff08 (BackSpace) */ - 0x00, /* 0xff09 (Tab) */ + 0x0E, /* 0xff08 (BackSpace) */ + 0x0F, /* 0xff09 (Tab) */ 0x00, /* 0xff0a (Linefeed) */ 0x00, /* 0xff0b (Clear) */ 0x00, /* 0xff0c */ - 0x00, /* 0xff0d (Return) */ + 0x1C, /* 0xff0d (Return) */ 0x00, /* 0xff0e */ 0x00, /* 0xff0f */ 0x00, /* 0xff10 */ @@ -5400,10 +5400,10 @@ const int guac_rdp_keysym_scancode[256][256] = { 0x00, /* 0xffde (R13) */ 0x00, /* 0xffdf (R14) */ 0x00, /* 0xffe0 (R15) */ - 0x00, /* 0xffe1 (Shift_L) */ - 0x00, /* 0xffe2 (Shift_R) */ - 0x00, /* 0xffe3 (Control_L) */ - 0x00, /* 0xffe4 (Control_R) */ + 0x2A, /* 0xffe1 (Shift_L) */ + 0x36, /* 0xffe2 (Shift_R) */ + 0x1D, /* 0xffe3 (Control_L) */ + 0x1D, /* 0xffe4 (Control_R) */ 0x00, /* 0xffe5 (Caps_Lock) */ 0x00, /* 0xffe6 (Shift_Lock) */ 0x00, /* 0xffe7 (Meta_L) */ @@ -5430,7 +5430,7 @@ const int guac_rdp_keysym_scancode[256][256] = { 0x00, /* 0xfffc */ 0x00, /* 0xfffd */ 0x00, /* 0xfffe */ - 0x00, /* 0xffff (Delete) */ + 0x2E, /* 0xffff (Delete) */ }, }; From 50c80a7685151b599d10eadd70cc3291157e837d Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Sun, 24 Jul 2011 23:35:54 -0700 Subject: [PATCH 020/253] Added flags to keymap. --- protocols/rdp/configure.in | 1 + protocols/rdp/include/rdp_keymap.h | 7 +- protocols/rdp/src/rdp_client.c | 10 +- protocols/rdp/src/rdp_keymap.c | 31198 ++++++++++++++++++++++----- 4 files changed, 25853 insertions(+), 5363 deletions(-) diff --git a/protocols/rdp/configure.in b/protocols/rdp/configure.in index 968cd7cd..1b6b23d9 100644 --- a/protocols/rdp/configure.in +++ b/protocols/rdp/configure.in @@ -40,6 +40,7 @@ AC_CONFIG_MACRO_DIR([m4]) # Checks for programs. AC_PROG_CC +AC_PROG_CC_C99 AC_PROG_LIBTOOL # Checks for libraries. diff --git a/protocols/rdp/include/rdp_keymap.h b/protocols/rdp/include/rdp_keymap.h index 73ddc32e..a97502ac 100644 --- a/protocols/rdp/include/rdp_keymap.h +++ b/protocols/rdp/include/rdp_keymap.h @@ -38,7 +38,12 @@ #ifndef _GUAC_CLIENT_RDP_KEYMAP #define _GUAC_CLIENT_RDP_KEYMAP -extern const int guac_rdp_keysym_scancode[256][256]; +typedef struct guac_rdp_keymap { + int scancode; + int flags; +} guac_rdp_keymap; + +extern const guac_rdp_keymap guac_rdp_keysym_scancode[256][256]; #endif diff --git a/protocols/rdp/src/rdp_client.c b/protocols/rdp/src/rdp_client.c index 18fa10c1..e4c5ab0d 100644 --- a/protocols/rdp/src/rdp_client.c +++ b/protocols/rdp/src/rdp_client.c @@ -348,16 +348,16 @@ int rdp_guac_client_key_handler(guac_client* client, int keysym, int pressed) { if (keysym <= 0xFFFF) { /* Look up scancode */ - int scancode = - guac_rdp_keysym_scancode[(keysym & 0xFF00) >> 8][keysym & 0xFF]; + const guac_rdp_keymap* keymap = + &guac_rdp_keysym_scancode[(keysym & 0xFF00) >> 8][keysym & 0xFF]; /* If defined, send event */ - if (scancode != 0) + if (keymap->scancode != 0) rdp_inst->rdp_send_input( rdp_inst, RDP_INPUT_SCANCODE, pressed ? RDP_KEYPRESS : RDP_KEYRELEASE, - scancode, - 0); + keymap->scancode, + keymap->flags); } diff --git a/protocols/rdp/src/rdp_keymap.c b/protocols/rdp/src/rdp_keymap.c index a5836bba..dfa0aff7 100644 --- a/protocols/rdp/src/rdp_keymap.c +++ b/protocols/rdp/src/rdp_keymap.c @@ -35,5402 +35,25886 @@ * * ***** END LICENSE BLOCK ***** */ -const int guac_rdp_keysym_scancode[256][256] = { +#include + +#include "rdp_keymap.h" + +const guac_rdp_keymap guac_rdp_keysym_scancode[256][256] = { { /* 0x00?? */ - 0x00, /* 0x0000 */ - 0x00, /* 0x0001 */ - 0x00, /* 0x0002 */ - 0x00, /* 0x0003 */ - 0x00, /* 0x0004 */ - 0x00, /* 0x0005 */ - 0x00, /* 0x0006 */ - 0x00, /* 0x0007 */ - 0x00, /* 0x0008 */ - 0x00, /* 0x0009 */ - 0x00, /* 0x000a */ - 0x00, /* 0x000b */ - 0x00, /* 0x000c */ - 0x00, /* 0x000d */ - 0x00, /* 0x000e */ - 0x00, /* 0x000f */ - 0x00, /* 0x0010 */ - 0x00, /* 0x0011 */ - 0x00, /* 0x0012 */ - 0x00, /* 0x0013 */ - 0x00, /* 0x0014 */ - 0x00, /* 0x0015 */ - 0x00, /* 0x0016 */ - 0x00, /* 0x0017 */ - 0x00, /* 0x0018 */ - 0x00, /* 0x0019 */ - 0x00, /* 0x001a */ - 0x00, /* 0x001b */ - 0x00, /* 0x001c */ - 0x00, /* 0x001d */ - 0x00, /* 0x001e */ - 0x00, /* 0x001f */ - 0x39, /* 0x0020 (space) */ - 0x00, /* 0x0021 (exclam) */ - 0x00, /* 0x0022 (quotedbl) */ - 0x00, /* 0x0023 (numbersign) */ - 0x00, /* 0x0024 (dollar) */ - 0x00, /* 0x0025 (percent) */ - 0x00, /* 0x0026 (ampersand) */ - 0x00, /* 0x0027 (quoteright) */ - 0x00, /* 0x0028 (parenleft) */ - 0x00, /* 0x0029 (parenright) */ - 0x00, /* 0x002a (asterisk) */ - 0x00, /* 0x002b (plus) */ - 0x00, /* 0x002c (comma) */ - 0x00, /* 0x002d (minus) */ - 0x00, /* 0x002e (period) */ - 0x00, /* 0x002f (slash) */ - 0x0B, /* 0x0030 (0) */ - 0x02, /* 0x0031 (1) */ - 0x03, /* 0x0032 (2) */ - 0x04, /* 0x0033 (3) */ - 0x05, /* 0x0034 (4) */ - 0x06, /* 0x0035 (5) */ - 0x07, /* 0x0036 (6) */ - 0x08, /* 0x0037 (7) */ - 0x09, /* 0x0038 (8) */ - 0x0A, /* 0x0039 (9) */ - 0x00, /* 0x003a (colon) */ - 0x00, /* 0x003b (semicolon) */ - 0x00, /* 0x003c (less) */ - 0x00, /* 0x003d (equal) */ - 0x00, /* 0x003e (greater) */ - 0x00, /* 0x003f (question) */ - 0x00, /* 0x0040 (at) */ - 0x1E, /* 0x0041 (A) */ - 0x30, /* 0x0042 (B) */ - 0x2E, /* 0x0043 (C) */ - 0x20, /* 0x0044 (D) */ - 0x12, /* 0x0045 (E) */ - 0x21, /* 0x0046 (F) */ - 0x22, /* 0x0047 (G) */ - 0x23, /* 0x0048 (H) */ - 0x17, /* 0x0049 (I) */ - 0x24, /* 0x004a (J) */ - 0x25, /* 0x004b (K) */ - 0x26, /* 0x004c (L) */ - 0x32, /* 0x004d (M) */ - 0x31, /* 0x004e (N) */ - 0x18, /* 0x004f (O) */ - 0x19, /* 0x0050 (P) */ - 0x10, /* 0x0051 (Q) */ - 0x13, /* 0x0052 (R) */ - 0x1F, /* 0x0053 (S) */ - 0x14, /* 0x0054 (T) */ - 0x16, /* 0x0055 (U) */ - 0x2F, /* 0x0056 (V) */ - 0x11, /* 0x0057 (W) */ - 0x2D, /* 0x0058 (X) */ - 0x15, /* 0x0059 (Y) */ - 0x2C, /* 0x005a (Z) */ - 0x00, /* 0x005b (bracketleft) */ - 0x00, /* 0x005c (backslash) */ - 0x00, /* 0x005d (bracketright) */ - 0x00, /* 0x005e (asciicircum) */ - 0x00, /* 0x005f (underscore) */ - 0x00, /* 0x0060 (quoteleft) */ - 0x1E, /* 0x0061 (a) */ - 0x30, /* 0x0062 (b) */ - 0x2E, /* 0x0063 (c) */ - 0x20, /* 0x0064 (d) */ - 0x12, /* 0x0065 (e) */ - 0x21, /* 0x0066 (f) */ - 0x22, /* 0x0067 (g) */ - 0x23, /* 0x0068 (h) */ - 0x17, /* 0x0069 (i) */ - 0x24, /* 0x006a (j) */ - 0x25, /* 0x006b (k) */ - 0x26, /* 0x006c (l) */ - 0x32, /* 0x006d (m) */ - 0x31, /* 0x006e (n) */ - 0x18, /* 0x006f (o) */ - 0x19, /* 0x0070 (p) */ - 0x10, /* 0x0071 (q) */ - 0x13, /* 0x0072 (r) */ - 0x1F, /* 0x0073 (s) */ - 0x14, /* 0x0074 (t) */ - 0x16, /* 0x0075 (u) */ - 0x2F, /* 0x0076 (v) */ - 0x11, /* 0x0077 (w) */ - 0x2D, /* 0x0078 (x) */ - 0x15, /* 0x0079 (y) */ - 0x2C, /* 0x007a (z) */ - 0x00, /* 0x007b (braceleft) */ - 0x00, /* 0x007c (bar) */ - 0x00, /* 0x007d (braceright) */ - 0x00, /* 0x007e (asciitilde) */ - 0x00, /* 0x007f */ - 0x00, /* 0x0080 */ - 0x00, /* 0x0081 */ - 0x00, /* 0x0082 */ - 0x00, /* 0x0083 */ - 0x00, /* 0x0084 */ - 0x00, /* 0x0085 */ - 0x00, /* 0x0086 */ - 0x00, /* 0x0087 */ - 0x00, /* 0x0088 */ - 0x00, /* 0x0089 */ - 0x00, /* 0x008a */ - 0x00, /* 0x008b */ - 0x00, /* 0x008c */ - 0x00, /* 0x008d */ - 0x00, /* 0x008e */ - 0x00, /* 0x008f */ - 0x00, /* 0x0090 */ - 0x00, /* 0x0091 */ - 0x00, /* 0x0092 */ - 0x00, /* 0x0093 */ - 0x00, /* 0x0094 */ - 0x00, /* 0x0095 */ - 0x00, /* 0x0096 */ - 0x00, /* 0x0097 */ - 0x00, /* 0x0098 */ - 0x00, /* 0x0099 */ - 0x00, /* 0x009a */ - 0x00, /* 0x009b */ - 0x00, /* 0x009c */ - 0x00, /* 0x009d */ - 0x00, /* 0x009e */ - 0x00, /* 0x009f */ - 0x00, /* 0x00a0 (nobreakspace) */ - 0x00, /* 0x00a1 (exclamdown) */ - 0x00, /* 0x00a2 (cent) */ - 0x00, /* 0x00a3 (sterling) */ - 0x00, /* 0x00a4 (currency) */ - 0x00, /* 0x00a5 (yen) */ - 0x00, /* 0x00a6 (brokenbar) */ - 0x00, /* 0x00a7 (section) */ - 0x00, /* 0x00a8 (diaeresis) */ - 0x00, /* 0x00a9 (copyright) */ - 0x00, /* 0x00aa (ordfeminine) */ - 0x00, /* 0x00ab (guillemotleft) */ - 0x00, /* 0x00ac (notsign) */ - 0x00, /* 0x00ad (hyphen) */ - 0x00, /* 0x00ae (registered) */ - 0x00, /* 0x00af (macron) */ - 0x00, /* 0x00b0 (degree) */ - 0x00, /* 0x00b1 (plusminus) */ - 0x00, /* 0x00b2 (twosuperior) */ - 0x00, /* 0x00b3 (threesuperior) */ - 0x00, /* 0x00b4 (acute) */ - 0x00, /* 0x00b5 (mu) */ - 0x00, /* 0x00b6 (paragraph) */ - 0x00, /* 0x00b7 (periodcentered) */ - 0x00, /* 0x00b8 (cedilla) */ - 0x00, /* 0x00b9 (onesuperior) */ - 0x00, /* 0x00ba (masculine) */ - 0x00, /* 0x00bb (guillemotright) */ - 0x00, /* 0x00bc (onequarter) */ - 0x00, /* 0x00bd (onehalf) */ - 0x00, /* 0x00be (threequarters) */ - 0x00, /* 0x00bf (questiondown) */ - 0x00, /* 0x00c0 (Agrave) */ - 0x00, /* 0x00c1 (Aacute) */ - 0x00, /* 0x00c2 (Acircumflex) */ - 0x00, /* 0x00c3 (Atilde) */ - 0x00, /* 0x00c4 (Adiaeresis) */ - 0x00, /* 0x00c5 (Aring) */ - 0x00, /* 0x00c6 (AE) */ - 0x00, /* 0x00c7 (Ccedilla) */ - 0x00, /* 0x00c8 (Egrave) */ - 0x00, /* 0x00c9 (Eacute) */ - 0x00, /* 0x00ca (Ecircumflex) */ - 0x00, /* 0x00cb (Ediaeresis) */ - 0x00, /* 0x00cc (Igrave) */ - 0x00, /* 0x00cd (Iacute) */ - 0x00, /* 0x00ce (Icircumflex) */ - 0x00, /* 0x00cf (Idiaeresis) */ - 0x00, /* 0x00d0 (Eth) */ - 0x00, /* 0x00d1 (Ntilde) */ - 0x00, /* 0x00d2 (Ograve) */ - 0x00, /* 0x00d3 (Oacute) */ - 0x00, /* 0x00d4 (Ocircumflex) */ - 0x00, /* 0x00d5 (Otilde) */ - 0x00, /* 0x00d6 (Odiaeresis) */ - 0x00, /* 0x00d7 (multiply) */ - 0x00, /* 0x00d8 (Ooblique) */ - 0x00, /* 0x00d9 (Ugrave) */ - 0x00, /* 0x00da (Uacute) */ - 0x00, /* 0x00db (Ucircumflex) */ - 0x00, /* 0x00dc (Udiaeresis) */ - 0x00, /* 0x00dd (Yacute) */ - 0x00, /* 0x00de (Thorn) */ - 0x00, /* 0x00df (ssharp) */ - 0x00, /* 0x00e0 (agrave) */ - 0x00, /* 0x00e1 (aacute) */ - 0x00, /* 0x00e2 (acircumflex) */ - 0x00, /* 0x00e3 (atilde) */ - 0x00, /* 0x00e4 (adiaeresis) */ - 0x00, /* 0x00e5 (aring) */ - 0x00, /* 0x00e6 (ae) */ - 0x00, /* 0x00e7 (ccedilla) */ - 0x00, /* 0x00e8 (egrave) */ - 0x00, /* 0x00e9 (eacute) */ - 0x00, /* 0x00ea (ecircumflex) */ - 0x00, /* 0x00eb (ediaeresis) */ - 0x00, /* 0x00ec (igrave) */ - 0x00, /* 0x00ed (iacute) */ - 0x00, /* 0x00ee (icircumflex) */ - 0x00, /* 0x00ef (idiaeresis) */ - 0x00, /* 0x00f0 (eth) */ - 0x00, /* 0x00f1 (ntilde) */ - 0x00, /* 0x00f2 (ograve) */ - 0x00, /* 0x00f3 (oacute) */ - 0x00, /* 0x00f4 (ocircumflex) */ - 0x00, /* 0x00f5 (otilde) */ - 0x00, /* 0x00f6 (odiaeresis) */ - 0x00, /* 0x00f7 (division) */ - 0x00, /* 0x00f8 (ooblique) */ - 0x00, /* 0x00f9 (ugrave) */ - 0x00, /* 0x00fa (uacute) */ - 0x00, /* 0x00fb (ucircumflex) */ - 0x00, /* 0x00fc (udiaeresis) */ - 0x00, /* 0x00fd (yacute) */ - 0x00, /* 0x00fe (thorn) */ - 0x00, /* 0x00ff (ydiaeresis) */ + { /* 0x0000 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0001 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0002 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0003 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0004 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0005 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0006 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0007 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0008 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0009 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x000a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x000b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x000c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x000d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x000e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x000f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0010 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0011 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0012 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0013 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0014 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0015 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0016 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0017 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0018 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0019 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x001a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x001b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x001c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x001d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x001e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x001f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0020 (space) */ + .scancode = 0x39, + .flags = 0x00 + }, + + { /* 0x0021 (exclam) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0022 (quotedbl) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0023 (numbersign) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0024 (dollar) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0025 (percent) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0026 (ampersand) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0027 (quoteright) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0028 (parenleft) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0029 (parenright) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x002a (asterisk) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x002b (plus) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x002c (comma) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x002d (minus) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x002e (period) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x002f (slash) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0030 (0) */ + .scancode = 0x0B, + .flags = 0x00 + }, + + { /* 0x0031 (1) */ + .scancode = 0x02, + .flags = 0x00 + }, + + { /* 0x0032 (2) */ + .scancode = 0x03, + .flags = 0x00 + }, + + { /* 0x0033 (3) */ + .scancode = 0x04, + .flags = 0x00 + }, + + { /* 0x0034 (4) */ + .scancode = 0x05, + .flags = 0x00 + }, + + { /* 0x0035 (5) */ + .scancode = 0x06, + .flags = 0x00 + }, + + { /* 0x0036 (6) */ + .scancode = 0x07, + .flags = 0x00 + }, + + { /* 0x0037 (7) */ + .scancode = 0x08, + .flags = 0x00 + }, + + { /* 0x0038 (8) */ + .scancode = 0x09, + .flags = 0x00 + }, + + { /* 0x0039 (9) */ + .scancode = 0x0A, + .flags = 0x00 + }, + + { /* 0x003a (colon) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x003b (semicolon) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x003c (less) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x003d (equal) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x003e (greater) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x003f (question) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0040 (at) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0041 (A) */ + .scancode = 0x1E, + .flags = 0x00 + }, + + { /* 0x0042 (B) */ + .scancode = 0x30, + .flags = 0x00 + }, + + { /* 0x0043 (C) */ + .scancode = 0x2E, + .flags = 0x00 + }, + + { /* 0x0044 (D) */ + .scancode = 0x20, + .flags = 0x00 + }, + + { /* 0x0045 (E) */ + .scancode = 0x12, + .flags = 0x00 + }, + + { /* 0x0046 (F) */ + .scancode = 0x21, + .flags = 0x00 + }, + + { /* 0x0047 (G) */ + .scancode = 0x22, + .flags = 0x00 + }, + + { /* 0x0048 (H) */ + .scancode = 0x23, + .flags = 0x00 + }, + + { /* 0x0049 (I) */ + .scancode = 0x17, + .flags = 0x00 + }, + + { /* 0x004a (J) */ + .scancode = 0x24, + .flags = 0x00 + }, + + { /* 0x004b (K) */ + .scancode = 0x25, + .flags = 0x00 + }, + + { /* 0x004c (L) */ + .scancode = 0x26, + .flags = 0x00 + }, + + { /* 0x004d (M) */ + .scancode = 0x32, + .flags = 0x00 + }, + + { /* 0x004e (N) */ + .scancode = 0x31, + .flags = 0x00 + }, + + { /* 0x004f (O) */ + .scancode = 0x18, + .flags = 0x00 + }, + + { /* 0x0050 (P) */ + .scancode = 0x19, + .flags = 0x00 + }, + + { /* 0x0051 (Q) */ + .scancode = 0x10, + .flags = 0x00 + }, + + { /* 0x0052 (R) */ + .scancode = 0x13, + .flags = 0x00 + }, + + { /* 0x0053 (S) */ + .scancode = 0x1F, + .flags = 0x00 + }, + + { /* 0x0054 (T) */ + .scancode = 0x14, + .flags = 0x00 + }, + + { /* 0x0055 (U) */ + .scancode = 0x16, + .flags = 0x00 + }, + + { /* 0x0056 (V) */ + .scancode = 0x2F, + .flags = 0x00 + }, + + { /* 0x0057 (W) */ + .scancode = 0x11, + .flags = 0x00 + }, + + { /* 0x0058 (X) */ + .scancode = 0x2D, + .flags = 0x00 + }, + + { /* 0x0059 (Y) */ + .scancode = 0x15, + .flags = 0x00 + }, + + { /* 0x005a (Z) */ + .scancode = 0x2C, + .flags = 0x00 + }, + + { /* 0x005b (bracketleft) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x005c (backslash) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x005d (bracketright) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x005e (asciicircum) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x005f (underscore) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0060 (quoteleft) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0061 (a) */ + .scancode = 0x1E, + .flags = 0x00 + }, + + { /* 0x0062 (b) */ + .scancode = 0x30, + .flags = 0x00 + }, + + { /* 0x0063 (c) */ + .scancode = 0x2E, + .flags = 0x00 + }, + + { /* 0x0064 (d) */ + .scancode = 0x20, + .flags = 0x00 + }, + + { /* 0x0065 (e) */ + .scancode = 0x12, + .flags = 0x00 + }, + + { /* 0x0066 (f) */ + .scancode = 0x21, + .flags = 0x00 + }, + + { /* 0x0067 (g) */ + .scancode = 0x22, + .flags = 0x00 + }, + + { /* 0x0068 (h) */ + .scancode = 0x23, + .flags = 0x00 + }, + + { /* 0x0069 (i) */ + .scancode = 0x17, + .flags = 0x00 + }, + + { /* 0x006a (j) */ + .scancode = 0x24, + .flags = 0x00 + }, + + { /* 0x006b (k) */ + .scancode = 0x25, + .flags = 0x00 + }, + + { /* 0x006c (l) */ + .scancode = 0x26, + .flags = 0x00 + }, + + { /* 0x006d (m) */ + .scancode = 0x32, + .flags = 0x00 + }, + + { /* 0x006e (n) */ + .scancode = 0x31, + .flags = 0x00 + }, + + { /* 0x006f (o) */ + .scancode = 0x18, + .flags = 0x00 + }, + + { /* 0x0070 (p) */ + .scancode = 0x19, + .flags = 0x00 + }, + + { /* 0x0071 (q) */ + .scancode = 0x10, + .flags = 0x00 + }, + + { /* 0x0072 (r) */ + .scancode = 0x13, + .flags = 0x00 + }, + + { /* 0x0073 (s) */ + .scancode = 0x1F, + .flags = 0x00 + }, + + { /* 0x0074 (t) */ + .scancode = 0x14, + .flags = 0x00 + }, + + { /* 0x0075 (u) */ + .scancode = 0x16, + .flags = 0x00 + }, + + { /* 0x0076 (v) */ + .scancode = 0x2F, + .flags = 0x00 + }, + + { /* 0x0077 (w) */ + .scancode = 0x11, + .flags = 0x00 + }, + + { /* 0x0078 (x) */ + .scancode = 0x2D, + .flags = 0x00 + }, + + { /* 0x0079 (y) */ + .scancode = 0x15, + .flags = 0x00 + }, + + { /* 0x007a (z) */ + .scancode = 0x2C, + .flags = 0x00 + }, + + { /* 0x007b (braceleft) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x007c (bar) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x007d (braceright) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x007e (asciitilde) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x007f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0080 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0081 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0082 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0083 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0084 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0085 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0086 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0087 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0088 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0089 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x008a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x008b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x008c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x008d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x008e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x008f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0090 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0091 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0092 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0093 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0094 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0095 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0096 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0097 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0098 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0099 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x009a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x009b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x009c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x009d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x009e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x009f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00a0 (nobreakspace) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00a1 (exclamdown) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00a2 (cent) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00a3 (sterling) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00a4 (currency) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00a5 (yen) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00a6 (brokenbar) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00a7 (section) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00a8 (diaeresis) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00a9 (copyright) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00aa (ordfeminine) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00ab (guillemotleft) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00ac (notsign) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00ad (hyphen) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00ae (registered) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00af (macron) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00b0 (degree) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00b1 (plusminus) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00b2 (twosuperior) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00b3 (threesuperior) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00b4 (acute) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00b5 (mu) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00b6 (paragraph) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00b7 (periodcentered) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00b8 (cedilla) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00b9 (onesuperior) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00ba (masculine) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00bb (guillemotright) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00bc (onequarter) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00bd (onehalf) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00be (threequarters) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00bf (questiondown) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00c0 (Agrave) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00c1 (Aacute) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00c2 (Acircumflex) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00c3 (Atilde) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00c4 (Adiaeresis) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00c5 (Aring) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00c6 (AE) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00c7 (Ccedilla) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00c8 (Egrave) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00c9 (Eacute) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00ca (Ecircumflex) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00cb (Ediaeresis) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00cc (Igrave) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00cd (Iacute) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00ce (Icircumflex) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00cf (Idiaeresis) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00d0 (Eth) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00d1 (Ntilde) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00d2 (Ograve) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00d3 (Oacute) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00d4 (Ocircumflex) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00d5 (Otilde) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00d6 (Odiaeresis) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00d7 (multiply) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00d8 (Ooblique) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00d9 (Ugrave) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00da (Uacute) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00db (Ucircumflex) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00dc (Udiaeresis) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00dd (Yacute) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00de (Thorn) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00df (ssharp) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00e0 (agrave) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00e1 (aacute) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00e2 (acircumflex) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00e3 (atilde) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00e4 (adiaeresis) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00e5 (aring) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00e6 (ae) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00e7 (ccedilla) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00e8 (egrave) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00e9 (eacute) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00ea (ecircumflex) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00eb (ediaeresis) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00ec (igrave) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00ed (iacute) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00ee (icircumflex) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00ef (idiaeresis) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00f0 (eth) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00f1 (ntilde) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00f2 (ograve) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00f3 (oacute) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00f4 (ocircumflex) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00f5 (otilde) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00f6 (odiaeresis) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00f7 (division) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00f8 (ooblique) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00f9 (ugrave) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00fa (uacute) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00fb (ucircumflex) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00fc (udiaeresis) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00fd (yacute) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00fe (thorn) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x00ff (ydiaeresis) */ + .scancode = 0x00, + .flags = 0x00 + }, + }, { /* 0x01?? */ - 0x00, /* 0x0100 */ - 0x00, /* 0x0101 */ - 0x00, /* 0x0102 */ - 0x00, /* 0x0103 */ - 0x00, /* 0x0104 */ - 0x00, /* 0x0105 */ - 0x00, /* 0x0106 */ - 0x00, /* 0x0107 */ - 0x00, /* 0x0108 */ - 0x00, /* 0x0109 */ - 0x00, /* 0x010a */ - 0x00, /* 0x010b */ - 0x00, /* 0x010c */ - 0x00, /* 0x010d */ - 0x00, /* 0x010e */ - 0x00, /* 0x010f */ - 0x00, /* 0x0110 */ - 0x00, /* 0x0111 */ - 0x00, /* 0x0112 */ - 0x00, /* 0x0113 */ - 0x00, /* 0x0114 */ - 0x00, /* 0x0115 */ - 0x00, /* 0x0116 */ - 0x00, /* 0x0117 */ - 0x00, /* 0x0118 */ - 0x00, /* 0x0119 */ - 0x00, /* 0x011a */ - 0x00, /* 0x011b */ - 0x00, /* 0x011c */ - 0x00, /* 0x011d */ - 0x00, /* 0x011e */ - 0x00, /* 0x011f */ - 0x00, /* 0x0120 */ - 0x00, /* 0x0121 */ - 0x00, /* 0x0122 */ - 0x00, /* 0x0123 */ - 0x00, /* 0x0124 */ - 0x00, /* 0x0125 */ - 0x00, /* 0x0126 */ - 0x00, /* 0x0127 */ - 0x00, /* 0x0128 */ - 0x00, /* 0x0129 */ - 0x00, /* 0x012a */ - 0x00, /* 0x012b */ - 0x00, /* 0x012c */ - 0x00, /* 0x012d */ - 0x00, /* 0x012e */ - 0x00, /* 0x012f */ - 0x00, /* 0x0130 */ - 0x00, /* 0x0131 */ - 0x00, /* 0x0132 */ - 0x00, /* 0x0133 */ - 0x00, /* 0x0134 */ - 0x00, /* 0x0135 */ - 0x00, /* 0x0136 */ - 0x00, /* 0x0137 */ - 0x00, /* 0x0138 */ - 0x00, /* 0x0139 */ - 0x00, /* 0x013a */ - 0x00, /* 0x013b */ - 0x00, /* 0x013c */ - 0x00, /* 0x013d */ - 0x00, /* 0x013e */ - 0x00, /* 0x013f */ - 0x00, /* 0x0140 */ - 0x00, /* 0x0141 */ - 0x00, /* 0x0142 */ - 0x00, /* 0x0143 */ - 0x00, /* 0x0144 */ - 0x00, /* 0x0145 */ - 0x00, /* 0x0146 */ - 0x00, /* 0x0147 */ - 0x00, /* 0x0148 */ - 0x00, /* 0x0149 */ - 0x00, /* 0x014a */ - 0x00, /* 0x014b */ - 0x00, /* 0x014c */ - 0x00, /* 0x014d */ - 0x00, /* 0x014e */ - 0x00, /* 0x014f */ - 0x00, /* 0x0150 */ - 0x00, /* 0x0151 */ - 0x00, /* 0x0152 */ - 0x00, /* 0x0153 */ - 0x00, /* 0x0154 */ - 0x00, /* 0x0155 */ - 0x00, /* 0x0156 */ - 0x00, /* 0x0157 */ - 0x00, /* 0x0158 */ - 0x00, /* 0x0159 */ - 0x00, /* 0x015a */ - 0x00, /* 0x015b */ - 0x00, /* 0x015c */ - 0x00, /* 0x015d */ - 0x00, /* 0x015e */ - 0x00, /* 0x015f */ - 0x00, /* 0x0160 */ - 0x00, /* 0x0161 */ - 0x00, /* 0x0162 */ - 0x00, /* 0x0163 */ - 0x00, /* 0x0164 */ - 0x00, /* 0x0165 */ - 0x00, /* 0x0166 */ - 0x00, /* 0x0167 */ - 0x00, /* 0x0168 */ - 0x00, /* 0x0169 */ - 0x00, /* 0x016a */ - 0x00, /* 0x016b */ - 0x00, /* 0x016c */ - 0x00, /* 0x016d */ - 0x00, /* 0x016e */ - 0x00, /* 0x016f */ - 0x00, /* 0x0170 */ - 0x00, /* 0x0171 */ - 0x00, /* 0x0172 */ - 0x00, /* 0x0173 */ - 0x00, /* 0x0174 */ - 0x00, /* 0x0175 */ - 0x00, /* 0x0176 */ - 0x00, /* 0x0177 */ - 0x00, /* 0x0178 */ - 0x00, /* 0x0179 */ - 0x00, /* 0x017a */ - 0x00, /* 0x017b */ - 0x00, /* 0x017c */ - 0x00, /* 0x017d */ - 0x00, /* 0x017e */ - 0x00, /* 0x017f */ - 0x00, /* 0x0180 */ - 0x00, /* 0x0181 */ - 0x00, /* 0x0182 */ - 0x00, /* 0x0183 */ - 0x00, /* 0x0184 */ - 0x00, /* 0x0185 */ - 0x00, /* 0x0186 */ - 0x00, /* 0x0187 */ - 0x00, /* 0x0188 */ - 0x00, /* 0x0189 */ - 0x00, /* 0x018a */ - 0x00, /* 0x018b */ - 0x00, /* 0x018c */ - 0x00, /* 0x018d */ - 0x00, /* 0x018e */ - 0x00, /* 0x018f */ - 0x00, /* 0x0190 */ - 0x00, /* 0x0191 */ - 0x00, /* 0x0192 */ - 0x00, /* 0x0193 */ - 0x00, /* 0x0194 */ - 0x00, /* 0x0195 */ - 0x00, /* 0x0196 */ - 0x00, /* 0x0197 */ - 0x00, /* 0x0198 */ - 0x00, /* 0x0199 */ - 0x00, /* 0x019a */ - 0x00, /* 0x019b */ - 0x00, /* 0x019c */ - 0x00, /* 0x019d */ - 0x00, /* 0x019e */ - 0x00, /* 0x019f */ - 0x00, /* 0x01a0 */ - 0x00, /* 0x01a1 (Aogonek) */ - 0x00, /* 0x01a2 (breve) */ - 0x00, /* 0x01a3 (Lstroke) */ - 0x00, /* 0x01a4 */ - 0x00, /* 0x01a5 (Lcaron) */ - 0x00, /* 0x01a6 (Sacute) */ - 0x00, /* 0x01a7 */ - 0x00, /* 0x01a8 */ - 0x00, /* 0x01a9 (Scaron) */ - 0x00, /* 0x01aa (Scedilla) */ - 0x00, /* 0x01ab (Tcaron) */ - 0x00, /* 0x01ac (Zacute) */ - 0x00, /* 0x01ad */ - 0x00, /* 0x01ae (Zcaron) */ - 0x00, /* 0x01af (Zabovedot) */ - 0x00, /* 0x01b0 */ - 0x00, /* 0x01b1 (aogonek) */ - 0x00, /* 0x01b2 (ogonek) */ - 0x00, /* 0x01b3 (lstroke) */ - 0x00, /* 0x01b4 */ - 0x00, /* 0x01b5 (lcaron) */ - 0x00, /* 0x01b6 (sacute) */ - 0x00, /* 0x01b7 (caron) */ - 0x00, /* 0x01b8 */ - 0x00, /* 0x01b9 (scaron) */ - 0x00, /* 0x01ba (scedilla) */ - 0x00, /* 0x01bb (tcaron) */ - 0x00, /* 0x01bc (zacute) */ - 0x00, /* 0x01bd (doubleacute) */ - 0x00, /* 0x01be (zcaron) */ - 0x00, /* 0x01bf (zabovedot) */ - 0x00, /* 0x01c0 (Racute) */ - 0x00, /* 0x01c1 */ - 0x00, /* 0x01c2 */ - 0x00, /* 0x01c3 (Abreve) */ - 0x00, /* 0x01c4 */ - 0x00, /* 0x01c5 (Lacute) */ - 0x00, /* 0x01c6 (Cacute) */ - 0x00, /* 0x01c7 */ - 0x00, /* 0x01c8 (Ccaron) */ - 0x00, /* 0x01c9 */ - 0x00, /* 0x01ca (Eogonek) */ - 0x00, /* 0x01cb */ - 0x00, /* 0x01cc (Ecaron) */ - 0x00, /* 0x01cd */ - 0x00, /* 0x01ce */ - 0x00, /* 0x01cf (Dcaron) */ - 0x00, /* 0x01d0 (Dstroke) */ - 0x00, /* 0x01d1 (Nacute) */ - 0x00, /* 0x01d2 (Ncaron) */ - 0x00, /* 0x01d3 */ - 0x00, /* 0x01d4 */ - 0x00, /* 0x01d5 (Odoubleacute) */ - 0x00, /* 0x01d6 */ - 0x00, /* 0x01d7 */ - 0x00, /* 0x01d8 (Rcaron) */ - 0x00, /* 0x01d9 (Uring) */ - 0x00, /* 0x01da */ - 0x00, /* 0x01db (Udoubleacute) */ - 0x00, /* 0x01dc */ - 0x00, /* 0x01dd */ - 0x00, /* 0x01de (Tcedilla) */ - 0x00, /* 0x01df */ - 0x00, /* 0x01e0 (racute) */ - 0x00, /* 0x01e1 */ - 0x00, /* 0x01e2 */ - 0x00, /* 0x01e3 (abreve) */ - 0x00, /* 0x01e4 */ - 0x00, /* 0x01e5 (lacute) */ - 0x00, /* 0x01e6 (cacute) */ - 0x00, /* 0x01e7 */ - 0x00, /* 0x01e8 (ccaron) */ - 0x00, /* 0x01e9 */ - 0x00, /* 0x01ea (eogonek) */ - 0x00, /* 0x01eb */ - 0x00, /* 0x01ec (ecaron) */ - 0x00, /* 0x01ed */ - 0x00, /* 0x01ee */ - 0x00, /* 0x01ef (dcaron) */ - 0x00, /* 0x01f0 (dstroke) */ - 0x00, /* 0x01f1 (nacute) */ - 0x00, /* 0x01f2 (ncaron) */ - 0x00, /* 0x01f3 */ - 0x00, /* 0x01f4 */ - 0x00, /* 0x01f5 (odoubleacute) */ - 0x00, /* 0x01f6 */ - 0x00, /* 0x01f7 */ - 0x00, /* 0x01f8 (rcaron) */ - 0x00, /* 0x01f9 (uring) */ - 0x00, /* 0x01fa */ - 0x00, /* 0x01fb (udoubleacute) */ - 0x00, /* 0x01fc */ - 0x00, /* 0x01fd */ - 0x00, /* 0x01fe (tcedilla) */ - 0x00, /* 0x01ff (abovedot) */ + { /* 0x0100 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0101 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0102 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0103 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0104 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0105 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0106 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0107 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0108 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0109 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x010a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x010b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x010c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x010d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x010e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x010f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0110 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0111 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0112 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0113 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0114 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0115 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0116 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0117 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0118 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0119 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x011a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x011b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x011c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x011d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x011e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x011f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0120 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0121 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0122 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0123 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0124 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0125 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0126 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0127 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0128 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0129 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x012a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x012b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x012c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x012d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x012e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x012f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0130 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0131 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0132 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0133 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0134 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0135 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0136 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0137 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0138 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0139 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x013a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x013b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x013c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x013d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x013e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x013f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0140 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0141 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0142 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0143 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0144 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0145 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0146 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0147 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0148 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0149 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x014a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x014b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x014c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x014d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x014e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x014f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0150 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0151 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0152 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0153 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0154 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0155 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0156 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0157 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0158 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0159 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x015a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x015b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x015c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x015d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x015e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x015f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0160 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0161 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0162 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0163 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0164 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0165 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0166 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0167 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0168 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0169 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x016a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x016b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x016c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x016d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x016e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x016f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0170 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0171 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0172 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0173 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0174 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0175 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0176 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0177 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0178 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0179 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x017a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x017b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x017c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x017d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x017e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x017f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0180 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0181 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0182 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0183 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0184 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0185 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0186 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0187 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0188 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0189 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x018a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x018b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x018c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x018d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x018e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x018f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0190 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0191 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0192 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0193 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0194 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0195 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0196 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0197 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0198 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0199 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x019a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x019b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x019c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x019d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x019e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x019f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01a0 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01a1 (Aogonek) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01a2 (breve) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01a3 (Lstroke) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01a4 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01a5 (Lcaron) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01a6 (Sacute) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01a7 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01a8 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01a9 (Scaron) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01aa (Scedilla) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01ab (Tcaron) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01ac (Zacute) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01ad */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01ae (Zcaron) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01af (Zabovedot) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01b0 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01b1 (aogonek) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01b2 (ogonek) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01b3 (lstroke) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01b4 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01b5 (lcaron) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01b6 (sacute) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01b7 (caron) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01b8 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01b9 (scaron) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01ba (scedilla) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01bb (tcaron) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01bc (zacute) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01bd (doubleacute) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01be (zcaron) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01bf (zabovedot) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01c0 (Racute) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01c1 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01c2 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01c3 (Abreve) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01c4 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01c5 (Lacute) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01c6 (Cacute) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01c7 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01c8 (Ccaron) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01c9 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01ca (Eogonek) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01cb */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01cc (Ecaron) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01cd */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01ce */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01cf (Dcaron) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01d0 (Dstroke) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01d1 (Nacute) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01d2 (Ncaron) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01d3 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01d4 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01d5 (Odoubleacute) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01d6 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01d7 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01d8 (Rcaron) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01d9 (Uring) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01da */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01db (Udoubleacute) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01dc */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01dd */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01de (Tcedilla) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01df */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01e0 (racute) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01e1 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01e2 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01e3 (abreve) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01e4 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01e5 (lacute) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01e6 (cacute) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01e7 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01e8 (ccaron) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01e9 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01ea (eogonek) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01eb */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01ec (ecaron) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01ed */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01ee */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01ef (dcaron) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01f0 (dstroke) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01f1 (nacute) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01f2 (ncaron) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01f3 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01f4 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01f5 (odoubleacute) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01f6 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01f7 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01f8 (rcaron) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01f9 (uring) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01fa */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01fb (udoubleacute) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01fc */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01fd */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01fe (tcedilla) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x01ff (abovedot) */ + .scancode = 0x00, + .flags = 0x00 + }, + }, { /* 0x02?? */ - 0x00, /* 0x0200 */ - 0x00, /* 0x0201 */ - 0x00, /* 0x0202 */ - 0x00, /* 0x0203 */ - 0x00, /* 0x0204 */ - 0x00, /* 0x0205 */ - 0x00, /* 0x0206 */ - 0x00, /* 0x0207 */ - 0x00, /* 0x0208 */ - 0x00, /* 0x0209 */ - 0x00, /* 0x020a */ - 0x00, /* 0x020b */ - 0x00, /* 0x020c */ - 0x00, /* 0x020d */ - 0x00, /* 0x020e */ - 0x00, /* 0x020f */ - 0x00, /* 0x0210 */ - 0x00, /* 0x0211 */ - 0x00, /* 0x0212 */ - 0x00, /* 0x0213 */ - 0x00, /* 0x0214 */ - 0x00, /* 0x0215 */ - 0x00, /* 0x0216 */ - 0x00, /* 0x0217 */ - 0x00, /* 0x0218 */ - 0x00, /* 0x0219 */ - 0x00, /* 0x021a */ - 0x00, /* 0x021b */ - 0x00, /* 0x021c */ - 0x00, /* 0x021d */ - 0x00, /* 0x021e */ - 0x00, /* 0x021f */ - 0x00, /* 0x0220 */ - 0x00, /* 0x0221 */ - 0x00, /* 0x0222 */ - 0x00, /* 0x0223 */ - 0x00, /* 0x0224 */ - 0x00, /* 0x0225 */ - 0x00, /* 0x0226 */ - 0x00, /* 0x0227 */ - 0x00, /* 0x0228 */ - 0x00, /* 0x0229 */ - 0x00, /* 0x022a */ - 0x00, /* 0x022b */ - 0x00, /* 0x022c */ - 0x00, /* 0x022d */ - 0x00, /* 0x022e */ - 0x00, /* 0x022f */ - 0x00, /* 0x0230 */ - 0x00, /* 0x0231 */ - 0x00, /* 0x0232 */ - 0x00, /* 0x0233 */ - 0x00, /* 0x0234 */ - 0x00, /* 0x0235 */ - 0x00, /* 0x0236 */ - 0x00, /* 0x0237 */ - 0x00, /* 0x0238 */ - 0x00, /* 0x0239 */ - 0x00, /* 0x023a */ - 0x00, /* 0x023b */ - 0x00, /* 0x023c */ - 0x00, /* 0x023d */ - 0x00, /* 0x023e */ - 0x00, /* 0x023f */ - 0x00, /* 0x0240 */ - 0x00, /* 0x0241 */ - 0x00, /* 0x0242 */ - 0x00, /* 0x0243 */ - 0x00, /* 0x0244 */ - 0x00, /* 0x0245 */ - 0x00, /* 0x0246 */ - 0x00, /* 0x0247 */ - 0x00, /* 0x0248 */ - 0x00, /* 0x0249 */ - 0x00, /* 0x024a */ - 0x00, /* 0x024b */ - 0x00, /* 0x024c */ - 0x00, /* 0x024d */ - 0x00, /* 0x024e */ - 0x00, /* 0x024f */ - 0x00, /* 0x0250 */ - 0x00, /* 0x0251 */ - 0x00, /* 0x0252 */ - 0x00, /* 0x0253 */ - 0x00, /* 0x0254 */ - 0x00, /* 0x0255 */ - 0x00, /* 0x0256 */ - 0x00, /* 0x0257 */ - 0x00, /* 0x0258 */ - 0x00, /* 0x0259 */ - 0x00, /* 0x025a */ - 0x00, /* 0x025b */ - 0x00, /* 0x025c */ - 0x00, /* 0x025d */ - 0x00, /* 0x025e */ - 0x00, /* 0x025f */ - 0x00, /* 0x0260 */ - 0x00, /* 0x0261 */ - 0x00, /* 0x0262 */ - 0x00, /* 0x0263 */ - 0x00, /* 0x0264 */ - 0x00, /* 0x0265 */ - 0x00, /* 0x0266 */ - 0x00, /* 0x0267 */ - 0x00, /* 0x0268 */ - 0x00, /* 0x0269 */ - 0x00, /* 0x026a */ - 0x00, /* 0x026b */ - 0x00, /* 0x026c */ - 0x00, /* 0x026d */ - 0x00, /* 0x026e */ - 0x00, /* 0x026f */ - 0x00, /* 0x0270 */ - 0x00, /* 0x0271 */ - 0x00, /* 0x0272 */ - 0x00, /* 0x0273 */ - 0x00, /* 0x0274 */ - 0x00, /* 0x0275 */ - 0x00, /* 0x0276 */ - 0x00, /* 0x0277 */ - 0x00, /* 0x0278 */ - 0x00, /* 0x0279 */ - 0x00, /* 0x027a */ - 0x00, /* 0x027b */ - 0x00, /* 0x027c */ - 0x00, /* 0x027d */ - 0x00, /* 0x027e */ - 0x00, /* 0x027f */ - 0x00, /* 0x0280 */ - 0x00, /* 0x0281 */ - 0x00, /* 0x0282 */ - 0x00, /* 0x0283 */ - 0x00, /* 0x0284 */ - 0x00, /* 0x0285 */ - 0x00, /* 0x0286 */ - 0x00, /* 0x0287 */ - 0x00, /* 0x0288 */ - 0x00, /* 0x0289 */ - 0x00, /* 0x028a */ - 0x00, /* 0x028b */ - 0x00, /* 0x028c */ - 0x00, /* 0x028d */ - 0x00, /* 0x028e */ - 0x00, /* 0x028f */ - 0x00, /* 0x0290 */ - 0x00, /* 0x0291 */ - 0x00, /* 0x0292 */ - 0x00, /* 0x0293 */ - 0x00, /* 0x0294 */ - 0x00, /* 0x0295 */ - 0x00, /* 0x0296 */ - 0x00, /* 0x0297 */ - 0x00, /* 0x0298 */ - 0x00, /* 0x0299 */ - 0x00, /* 0x029a */ - 0x00, /* 0x029b */ - 0x00, /* 0x029c */ - 0x00, /* 0x029d */ - 0x00, /* 0x029e */ - 0x00, /* 0x029f */ - 0x00, /* 0x02a0 */ - 0x00, /* 0x02a1 (Hstroke) */ - 0x00, /* 0x02a2 */ - 0x00, /* 0x02a3 */ - 0x00, /* 0x02a4 */ - 0x00, /* 0x02a5 */ - 0x00, /* 0x02a6 (Hcircumflex) */ - 0x00, /* 0x02a7 */ - 0x00, /* 0x02a8 */ - 0x00, /* 0x02a9 (Iabovedot) */ - 0x00, /* 0x02aa */ - 0x00, /* 0x02ab (Gbreve) */ - 0x00, /* 0x02ac (Jcircumflex) */ - 0x00, /* 0x02ad */ - 0x00, /* 0x02ae */ - 0x00, /* 0x02af */ - 0x00, /* 0x02b0 */ - 0x00, /* 0x02b1 (hstroke) */ - 0x00, /* 0x02b2 */ - 0x00, /* 0x02b3 */ - 0x00, /* 0x02b4 */ - 0x00, /* 0x02b5 */ - 0x00, /* 0x02b6 (hcircumflex) */ - 0x00, /* 0x02b7 */ - 0x00, /* 0x02b8 */ - 0x00, /* 0x02b9 (idotless) */ - 0x00, /* 0x02ba */ - 0x00, /* 0x02bb (gbreve) */ - 0x00, /* 0x02bc (jcircumflex) */ - 0x00, /* 0x02bd */ - 0x00, /* 0x02be */ - 0x00, /* 0x02bf */ - 0x00, /* 0x02c0 */ - 0x00, /* 0x02c1 */ - 0x00, /* 0x02c2 */ - 0x00, /* 0x02c3 */ - 0x00, /* 0x02c4 */ - 0x00, /* 0x02c5 (Cabovedot) */ - 0x00, /* 0x02c6 (Ccircumflex) */ - 0x00, /* 0x02c7 */ - 0x00, /* 0x02c8 */ - 0x00, /* 0x02c9 */ - 0x00, /* 0x02ca */ - 0x00, /* 0x02cb */ - 0x00, /* 0x02cc */ - 0x00, /* 0x02cd */ - 0x00, /* 0x02ce */ - 0x00, /* 0x02cf */ - 0x00, /* 0x02d0 */ - 0x00, /* 0x02d1 */ - 0x00, /* 0x02d2 */ - 0x00, /* 0x02d3 */ - 0x00, /* 0x02d4 */ - 0x00, /* 0x02d5 (Gabovedot) */ - 0x00, /* 0x02d6 */ - 0x00, /* 0x02d7 */ - 0x00, /* 0x02d8 (Gcircumflex) */ - 0x00, /* 0x02d9 */ - 0x00, /* 0x02da */ - 0x00, /* 0x02db */ - 0x00, /* 0x02dc */ - 0x00, /* 0x02dd (Ubreve) */ - 0x00, /* 0x02de (Scircumflex) */ - 0x00, /* 0x02df */ - 0x00, /* 0x02e0 */ - 0x00, /* 0x02e1 */ - 0x00, /* 0x02e2 */ - 0x00, /* 0x02e3 */ - 0x00, /* 0x02e4 */ - 0x00, /* 0x02e5 (cabovedot) */ - 0x00, /* 0x02e6 (ccircumflex) */ - 0x00, /* 0x02e7 */ - 0x00, /* 0x02e8 */ - 0x00, /* 0x02e9 */ - 0x00, /* 0x02ea */ - 0x00, /* 0x02eb */ - 0x00, /* 0x02ec */ - 0x00, /* 0x02ed */ - 0x00, /* 0x02ee */ - 0x00, /* 0x02ef */ - 0x00, /* 0x02f0 */ - 0x00, /* 0x02f1 */ - 0x00, /* 0x02f2 */ - 0x00, /* 0x02f3 */ - 0x00, /* 0x02f4 */ - 0x00, /* 0x02f5 (gabovedot) */ - 0x00, /* 0x02f6 */ - 0x00, /* 0x02f7 */ - 0x00, /* 0x02f8 (gcircumflex) */ - 0x00, /* 0x02f9 */ - 0x00, /* 0x02fa */ - 0x00, /* 0x02fb */ - 0x00, /* 0x02fc */ - 0x00, /* 0x02fd (ubreve) */ - 0x00, /* 0x02fe (scircumflex) */ - 0x00, /* 0x02ff */ + { /* 0x0200 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0201 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0202 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0203 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0204 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0205 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0206 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0207 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0208 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0209 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x020a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x020b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x020c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x020d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x020e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x020f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0210 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0211 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0212 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0213 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0214 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0215 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0216 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0217 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0218 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0219 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x021a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x021b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x021c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x021d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x021e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x021f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0220 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0221 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0222 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0223 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0224 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0225 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0226 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0227 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0228 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0229 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x022a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x022b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x022c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x022d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x022e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x022f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0230 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0231 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0232 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0233 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0234 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0235 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0236 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0237 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0238 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0239 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x023a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x023b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x023c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x023d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x023e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x023f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0240 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0241 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0242 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0243 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0244 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0245 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0246 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0247 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0248 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0249 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x024a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x024b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x024c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x024d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x024e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x024f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0250 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0251 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0252 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0253 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0254 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0255 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0256 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0257 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0258 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0259 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x025a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x025b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x025c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x025d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x025e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x025f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0260 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0261 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0262 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0263 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0264 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0265 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0266 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0267 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0268 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0269 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x026a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x026b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x026c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x026d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x026e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x026f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0270 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0271 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0272 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0273 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0274 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0275 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0276 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0277 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0278 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0279 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x027a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x027b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x027c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x027d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x027e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x027f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0280 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0281 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0282 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0283 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0284 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0285 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0286 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0287 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0288 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0289 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x028a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x028b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x028c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x028d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x028e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x028f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0290 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0291 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0292 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0293 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0294 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0295 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0296 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0297 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0298 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0299 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x029a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x029b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x029c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x029d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x029e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x029f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02a0 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02a1 (Hstroke) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02a2 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02a3 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02a4 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02a5 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02a6 (Hcircumflex) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02a7 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02a8 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02a9 (Iabovedot) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02aa */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02ab (Gbreve) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02ac (Jcircumflex) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02ad */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02ae */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02af */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02b0 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02b1 (hstroke) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02b2 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02b3 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02b4 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02b5 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02b6 (hcircumflex) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02b7 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02b8 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02b9 (idotless) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02ba */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02bb (gbreve) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02bc (jcircumflex) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02bd */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02be */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02bf */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02c0 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02c1 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02c2 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02c3 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02c4 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02c5 (Cabovedot) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02c6 (Ccircumflex) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02c7 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02c8 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02c9 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02ca */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02cb */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02cc */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02cd */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02ce */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02cf */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02d0 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02d1 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02d2 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02d3 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02d4 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02d5 (Gabovedot) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02d6 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02d7 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02d8 (Gcircumflex) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02d9 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02da */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02db */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02dc */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02dd (Ubreve) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02de (Scircumflex) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02df */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02e0 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02e1 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02e2 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02e3 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02e4 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02e5 (cabovedot) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02e6 (ccircumflex) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02e7 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02e8 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02e9 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02ea */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02eb */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02ec */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02ed */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02ee */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02ef */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02f0 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02f1 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02f2 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02f3 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02f4 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02f5 (gabovedot) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02f6 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02f7 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02f8 (gcircumflex) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02f9 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02fa */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02fb */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02fc */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02fd (ubreve) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02fe (scircumflex) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x02ff */ + .scancode = 0x00, + .flags = 0x00 + }, + }, { /* 0x03?? */ - 0x00, /* 0x0300 */ - 0x00, /* 0x0301 */ - 0x00, /* 0x0302 */ - 0x00, /* 0x0303 */ - 0x00, /* 0x0304 */ - 0x00, /* 0x0305 */ - 0x00, /* 0x0306 */ - 0x00, /* 0x0307 */ - 0x00, /* 0x0308 */ - 0x00, /* 0x0309 */ - 0x00, /* 0x030a */ - 0x00, /* 0x030b */ - 0x00, /* 0x030c */ - 0x00, /* 0x030d */ - 0x00, /* 0x030e */ - 0x00, /* 0x030f */ - 0x00, /* 0x0310 */ - 0x00, /* 0x0311 */ - 0x00, /* 0x0312 */ - 0x00, /* 0x0313 */ - 0x00, /* 0x0314 */ - 0x00, /* 0x0315 */ - 0x00, /* 0x0316 */ - 0x00, /* 0x0317 */ - 0x00, /* 0x0318 */ - 0x00, /* 0x0319 */ - 0x00, /* 0x031a */ - 0x00, /* 0x031b */ - 0x00, /* 0x031c */ - 0x00, /* 0x031d */ - 0x00, /* 0x031e */ - 0x00, /* 0x031f */ - 0x00, /* 0x0320 */ - 0x00, /* 0x0321 */ - 0x00, /* 0x0322 */ - 0x00, /* 0x0323 */ - 0x00, /* 0x0324 */ - 0x00, /* 0x0325 */ - 0x00, /* 0x0326 */ - 0x00, /* 0x0327 */ - 0x00, /* 0x0328 */ - 0x00, /* 0x0329 */ - 0x00, /* 0x032a */ - 0x00, /* 0x032b */ - 0x00, /* 0x032c */ - 0x00, /* 0x032d */ - 0x00, /* 0x032e */ - 0x00, /* 0x032f */ - 0x00, /* 0x0330 */ - 0x00, /* 0x0331 */ - 0x00, /* 0x0332 */ - 0x00, /* 0x0333 */ - 0x00, /* 0x0334 */ - 0x00, /* 0x0335 */ - 0x00, /* 0x0336 */ - 0x00, /* 0x0337 */ - 0x00, /* 0x0338 */ - 0x00, /* 0x0339 */ - 0x00, /* 0x033a */ - 0x00, /* 0x033b */ - 0x00, /* 0x033c */ - 0x00, /* 0x033d */ - 0x00, /* 0x033e */ - 0x00, /* 0x033f */ - 0x00, /* 0x0340 */ - 0x00, /* 0x0341 */ - 0x00, /* 0x0342 */ - 0x00, /* 0x0343 */ - 0x00, /* 0x0344 */ - 0x00, /* 0x0345 */ - 0x00, /* 0x0346 */ - 0x00, /* 0x0347 */ - 0x00, /* 0x0348 */ - 0x00, /* 0x0349 */ - 0x00, /* 0x034a */ - 0x00, /* 0x034b */ - 0x00, /* 0x034c */ - 0x00, /* 0x034d */ - 0x00, /* 0x034e */ - 0x00, /* 0x034f */ - 0x00, /* 0x0350 */ - 0x00, /* 0x0351 */ - 0x00, /* 0x0352 */ - 0x00, /* 0x0353 */ - 0x00, /* 0x0354 */ - 0x00, /* 0x0355 */ - 0x00, /* 0x0356 */ - 0x00, /* 0x0357 */ - 0x00, /* 0x0358 */ - 0x00, /* 0x0359 */ - 0x00, /* 0x035a */ - 0x00, /* 0x035b */ - 0x00, /* 0x035c */ - 0x00, /* 0x035d */ - 0x00, /* 0x035e */ - 0x00, /* 0x035f */ - 0x00, /* 0x0360 */ - 0x00, /* 0x0361 */ - 0x00, /* 0x0362 */ - 0x00, /* 0x0363 */ - 0x00, /* 0x0364 */ - 0x00, /* 0x0365 */ - 0x00, /* 0x0366 */ - 0x00, /* 0x0367 */ - 0x00, /* 0x0368 */ - 0x00, /* 0x0369 */ - 0x00, /* 0x036a */ - 0x00, /* 0x036b */ - 0x00, /* 0x036c */ - 0x00, /* 0x036d */ - 0x00, /* 0x036e */ - 0x00, /* 0x036f */ - 0x00, /* 0x0370 */ - 0x00, /* 0x0371 */ - 0x00, /* 0x0372 */ - 0x00, /* 0x0373 */ - 0x00, /* 0x0374 */ - 0x00, /* 0x0375 */ - 0x00, /* 0x0376 */ - 0x00, /* 0x0377 */ - 0x00, /* 0x0378 */ - 0x00, /* 0x0379 */ - 0x00, /* 0x037a */ - 0x00, /* 0x037b */ - 0x00, /* 0x037c */ - 0x00, /* 0x037d */ - 0x00, /* 0x037e */ - 0x00, /* 0x037f */ - 0x00, /* 0x0380 */ - 0x00, /* 0x0381 */ - 0x00, /* 0x0382 */ - 0x00, /* 0x0383 */ - 0x00, /* 0x0384 */ - 0x00, /* 0x0385 */ - 0x00, /* 0x0386 */ - 0x00, /* 0x0387 */ - 0x00, /* 0x0388 */ - 0x00, /* 0x0389 */ - 0x00, /* 0x038a */ - 0x00, /* 0x038b */ - 0x00, /* 0x038c */ - 0x00, /* 0x038d */ - 0x00, /* 0x038e */ - 0x00, /* 0x038f */ - 0x00, /* 0x0390 */ - 0x00, /* 0x0391 */ - 0x00, /* 0x0392 */ - 0x00, /* 0x0393 */ - 0x00, /* 0x0394 */ - 0x00, /* 0x0395 */ - 0x00, /* 0x0396 */ - 0x00, /* 0x0397 */ - 0x00, /* 0x0398 */ - 0x00, /* 0x0399 */ - 0x00, /* 0x039a */ - 0x00, /* 0x039b */ - 0x00, /* 0x039c */ - 0x00, /* 0x039d */ - 0x00, /* 0x039e */ - 0x00, /* 0x039f */ - 0x00, /* 0x03a0 */ - 0x00, /* 0x03a1 */ - 0x00, /* 0x03a2 (kappa) */ - 0x00, /* 0x03a3 (Rcedilla) */ - 0x00, /* 0x03a4 */ - 0x00, /* 0x03a5 (Itilde) */ - 0x00, /* 0x03a6 (Lcedilla) */ - 0x00, /* 0x03a7 */ - 0x00, /* 0x03a8 */ - 0x00, /* 0x03a9 */ - 0x00, /* 0x03aa (Emacron) */ - 0x00, /* 0x03ab (Gcedilla) */ - 0x00, /* 0x03ac (Tslash) */ - 0x00, /* 0x03ad */ - 0x00, /* 0x03ae */ - 0x00, /* 0x03af */ - 0x00, /* 0x03b0 */ - 0x00, /* 0x03b1 */ - 0x00, /* 0x03b2 */ - 0x00, /* 0x03b3 (rcedilla) */ - 0x00, /* 0x03b4 */ - 0x00, /* 0x03b5 (itilde) */ - 0x00, /* 0x03b6 (lcedilla) */ - 0x00, /* 0x03b7 */ - 0x00, /* 0x03b8 */ - 0x00, /* 0x03b9 */ - 0x00, /* 0x03ba (emacron) */ - 0x00, /* 0x03bb (gcedilla) */ - 0x00, /* 0x03bc (tslash) */ - 0x00, /* 0x03bd (ENG) */ - 0x00, /* 0x03be */ - 0x00, /* 0x03bf (eng) */ - 0x00, /* 0x03c0 (Amacron) */ - 0x00, /* 0x03c1 */ - 0x00, /* 0x03c2 */ - 0x00, /* 0x03c3 */ - 0x00, /* 0x03c4 */ - 0x00, /* 0x03c5 */ - 0x00, /* 0x03c6 */ - 0x00, /* 0x03c7 (Iogonek) */ - 0x00, /* 0x03c8 */ - 0x00, /* 0x03c9 */ - 0x00, /* 0x03ca */ - 0x00, /* 0x03cb */ - 0x00, /* 0x03cc (Eabovedot) */ - 0x00, /* 0x03cd */ - 0x00, /* 0x03ce */ - 0x00, /* 0x03cf (Imacron) */ - 0x00, /* 0x03d0 */ - 0x00, /* 0x03d1 (Ncedilla) */ - 0x00, /* 0x03d2 (Omacron) */ - 0x00, /* 0x03d3 (Kcedilla) */ - 0x00, /* 0x03d4 */ - 0x00, /* 0x03d5 */ - 0x00, /* 0x03d6 */ - 0x00, /* 0x03d7 */ - 0x00, /* 0x03d8 */ - 0x00, /* 0x03d9 (Uogonek) */ - 0x00, /* 0x03da */ - 0x00, /* 0x03db */ - 0x00, /* 0x03dc */ - 0x00, /* 0x03dd (Utilde) */ - 0x00, /* 0x03de (Umacron) */ - 0x00, /* 0x03df */ - 0x00, /* 0x03e0 (amacron) */ - 0x00, /* 0x03e1 */ - 0x00, /* 0x03e2 */ - 0x00, /* 0x03e3 */ - 0x00, /* 0x03e4 */ - 0x00, /* 0x03e5 */ - 0x00, /* 0x03e6 */ - 0x00, /* 0x03e7 (iogonek) */ - 0x00, /* 0x03e8 */ - 0x00, /* 0x03e9 */ - 0x00, /* 0x03ea */ - 0x00, /* 0x03eb */ - 0x00, /* 0x03ec (eabovedot) */ - 0x00, /* 0x03ed */ - 0x00, /* 0x03ee */ - 0x00, /* 0x03ef (imacron) */ - 0x00, /* 0x03f0 */ - 0x00, /* 0x03f1 (ncedilla) */ - 0x00, /* 0x03f2 (omacron) */ - 0x00, /* 0x03f3 (kcedilla) */ - 0x00, /* 0x03f4 */ - 0x00, /* 0x03f5 */ - 0x00, /* 0x03f6 */ - 0x00, /* 0x03f7 */ - 0x00, /* 0x03f8 */ - 0x00, /* 0x03f9 (uogonek) */ - 0x00, /* 0x03fa */ - 0x00, /* 0x03fb */ - 0x00, /* 0x03fc */ - 0x00, /* 0x03fd (utilde) */ - 0x00, /* 0x03fe (umacron) */ - 0x00, /* 0x03ff */ + { /* 0x0300 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0301 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0302 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0303 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0304 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0305 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0306 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0307 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0308 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0309 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x030a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x030b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x030c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x030d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x030e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x030f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0310 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0311 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0312 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0313 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0314 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0315 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0316 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0317 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0318 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0319 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x031a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x031b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x031c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x031d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x031e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x031f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0320 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0321 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0322 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0323 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0324 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0325 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0326 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0327 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0328 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0329 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x032a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x032b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x032c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x032d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x032e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x032f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0330 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0331 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0332 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0333 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0334 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0335 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0336 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0337 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0338 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0339 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x033a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x033b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x033c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x033d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x033e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x033f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0340 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0341 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0342 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0343 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0344 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0345 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0346 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0347 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0348 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0349 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x034a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x034b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x034c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x034d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x034e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x034f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0350 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0351 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0352 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0353 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0354 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0355 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0356 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0357 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0358 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0359 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x035a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x035b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x035c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x035d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x035e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x035f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0360 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0361 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0362 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0363 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0364 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0365 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0366 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0367 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0368 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0369 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x036a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x036b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x036c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x036d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x036e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x036f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0370 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0371 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0372 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0373 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0374 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0375 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0376 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0377 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0378 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0379 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x037a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x037b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x037c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x037d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x037e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x037f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0380 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0381 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0382 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0383 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0384 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0385 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0386 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0387 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0388 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0389 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x038a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x038b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x038c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x038d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x038e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x038f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0390 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0391 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0392 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0393 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0394 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0395 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0396 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0397 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0398 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0399 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x039a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x039b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x039c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x039d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x039e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x039f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03a0 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03a1 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03a2 (kappa) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03a3 (Rcedilla) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03a4 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03a5 (Itilde) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03a6 (Lcedilla) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03a7 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03a8 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03a9 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03aa (Emacron) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03ab (Gcedilla) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03ac (Tslash) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03ad */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03ae */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03af */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03b0 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03b1 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03b2 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03b3 (rcedilla) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03b4 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03b5 (itilde) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03b6 (lcedilla) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03b7 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03b8 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03b9 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03ba (emacron) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03bb (gcedilla) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03bc (tslash) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03bd (ENG) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03be */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03bf (eng) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03c0 (Amacron) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03c1 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03c2 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03c3 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03c4 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03c5 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03c6 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03c7 (Iogonek) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03c8 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03c9 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03ca */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03cb */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03cc (Eabovedot) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03cd */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03ce */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03cf (Imacron) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03d0 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03d1 (Ncedilla) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03d2 (Omacron) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03d3 (Kcedilla) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03d4 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03d5 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03d6 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03d7 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03d8 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03d9 (Uogonek) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03da */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03db */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03dc */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03dd (Utilde) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03de (Umacron) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03df */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03e0 (amacron) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03e1 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03e2 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03e3 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03e4 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03e5 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03e6 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03e7 (iogonek) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03e8 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03e9 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03ea */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03eb */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03ec (eabovedot) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03ed */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03ee */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03ef (imacron) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03f0 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03f1 (ncedilla) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03f2 (omacron) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03f3 (kcedilla) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03f4 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03f5 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03f6 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03f7 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03f8 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03f9 (uogonek) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03fa */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03fb */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03fc */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03fd (utilde) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03fe (umacron) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x03ff */ + .scancode = 0x00, + .flags = 0x00 + }, + }, { /* 0x04?? */ - 0x00, /* 0x0400 */ - 0x00, /* 0x0401 */ - 0x00, /* 0x0402 */ - 0x00, /* 0x0403 */ - 0x00, /* 0x0404 */ - 0x00, /* 0x0405 */ - 0x00, /* 0x0406 */ - 0x00, /* 0x0407 */ - 0x00, /* 0x0408 */ - 0x00, /* 0x0409 */ - 0x00, /* 0x040a */ - 0x00, /* 0x040b */ - 0x00, /* 0x040c */ - 0x00, /* 0x040d */ - 0x00, /* 0x040e */ - 0x00, /* 0x040f */ - 0x00, /* 0x0410 */ - 0x00, /* 0x0411 */ - 0x00, /* 0x0412 */ - 0x00, /* 0x0413 */ - 0x00, /* 0x0414 */ - 0x00, /* 0x0415 */ - 0x00, /* 0x0416 */ - 0x00, /* 0x0417 */ - 0x00, /* 0x0418 */ - 0x00, /* 0x0419 */ - 0x00, /* 0x041a */ - 0x00, /* 0x041b */ - 0x00, /* 0x041c */ - 0x00, /* 0x041d */ - 0x00, /* 0x041e */ - 0x00, /* 0x041f */ - 0x00, /* 0x0420 */ - 0x00, /* 0x0421 */ - 0x00, /* 0x0422 */ - 0x00, /* 0x0423 */ - 0x00, /* 0x0424 */ - 0x00, /* 0x0425 */ - 0x00, /* 0x0426 */ - 0x00, /* 0x0427 */ - 0x00, /* 0x0428 */ - 0x00, /* 0x0429 */ - 0x00, /* 0x042a */ - 0x00, /* 0x042b */ - 0x00, /* 0x042c */ - 0x00, /* 0x042d */ - 0x00, /* 0x042e */ - 0x00, /* 0x042f */ - 0x00, /* 0x0430 */ - 0x00, /* 0x0431 */ - 0x00, /* 0x0432 */ - 0x00, /* 0x0433 */ - 0x00, /* 0x0434 */ - 0x00, /* 0x0435 */ - 0x00, /* 0x0436 */ - 0x00, /* 0x0437 */ - 0x00, /* 0x0438 */ - 0x00, /* 0x0439 */ - 0x00, /* 0x043a */ - 0x00, /* 0x043b */ - 0x00, /* 0x043c */ - 0x00, /* 0x043d */ - 0x00, /* 0x043e */ - 0x00, /* 0x043f */ - 0x00, /* 0x0440 */ - 0x00, /* 0x0441 */ - 0x00, /* 0x0442 */ - 0x00, /* 0x0443 */ - 0x00, /* 0x0444 */ - 0x00, /* 0x0445 */ - 0x00, /* 0x0446 */ - 0x00, /* 0x0447 */ - 0x00, /* 0x0448 */ - 0x00, /* 0x0449 */ - 0x00, /* 0x044a */ - 0x00, /* 0x044b */ - 0x00, /* 0x044c */ - 0x00, /* 0x044d */ - 0x00, /* 0x044e */ - 0x00, /* 0x044f */ - 0x00, /* 0x0450 */ - 0x00, /* 0x0451 */ - 0x00, /* 0x0452 */ - 0x00, /* 0x0453 */ - 0x00, /* 0x0454 */ - 0x00, /* 0x0455 */ - 0x00, /* 0x0456 */ - 0x00, /* 0x0457 */ - 0x00, /* 0x0458 */ - 0x00, /* 0x0459 */ - 0x00, /* 0x045a */ - 0x00, /* 0x045b */ - 0x00, /* 0x045c */ - 0x00, /* 0x045d */ - 0x00, /* 0x045e */ - 0x00, /* 0x045f */ - 0x00, /* 0x0460 */ - 0x00, /* 0x0461 */ - 0x00, /* 0x0462 */ - 0x00, /* 0x0463 */ - 0x00, /* 0x0464 */ - 0x00, /* 0x0465 */ - 0x00, /* 0x0466 */ - 0x00, /* 0x0467 */ - 0x00, /* 0x0468 */ - 0x00, /* 0x0469 */ - 0x00, /* 0x046a */ - 0x00, /* 0x046b */ - 0x00, /* 0x046c */ - 0x00, /* 0x046d */ - 0x00, /* 0x046e */ - 0x00, /* 0x046f */ - 0x00, /* 0x0470 */ - 0x00, /* 0x0471 */ - 0x00, /* 0x0472 */ - 0x00, /* 0x0473 */ - 0x00, /* 0x0474 */ - 0x00, /* 0x0475 */ - 0x00, /* 0x0476 */ - 0x00, /* 0x0477 */ - 0x00, /* 0x0478 */ - 0x00, /* 0x0479 */ - 0x00, /* 0x047a */ - 0x00, /* 0x047b */ - 0x00, /* 0x047c */ - 0x00, /* 0x047d */ - 0x00, /* 0x047e (overline) */ - 0x00, /* 0x047f */ - 0x00, /* 0x0480 */ - 0x00, /* 0x0481 */ - 0x00, /* 0x0482 */ - 0x00, /* 0x0483 */ - 0x00, /* 0x0484 */ - 0x00, /* 0x0485 */ - 0x00, /* 0x0486 */ - 0x00, /* 0x0487 */ - 0x00, /* 0x0488 */ - 0x00, /* 0x0489 */ - 0x00, /* 0x048a */ - 0x00, /* 0x048b */ - 0x00, /* 0x048c */ - 0x00, /* 0x048d */ - 0x00, /* 0x048e */ - 0x00, /* 0x048f */ - 0x00, /* 0x0490 */ - 0x00, /* 0x0491 */ - 0x00, /* 0x0492 */ - 0x00, /* 0x0493 */ - 0x00, /* 0x0494 */ - 0x00, /* 0x0495 */ - 0x00, /* 0x0496 */ - 0x00, /* 0x0497 */ - 0x00, /* 0x0498 */ - 0x00, /* 0x0499 */ - 0x00, /* 0x049a */ - 0x00, /* 0x049b */ - 0x00, /* 0x049c */ - 0x00, /* 0x049d */ - 0x00, /* 0x049e */ - 0x00, /* 0x049f */ - 0x00, /* 0x04a0 */ - 0x00, /* 0x04a1 (kana_fullstop) */ - 0x00, /* 0x04a2 (kana_openingbracket) */ - 0x00, /* 0x04a3 (kana_closingbracket) */ - 0x00, /* 0x04a4 (kana_comma) */ - 0x00, /* 0x04a5 (kana_middledot) */ - 0x00, /* 0x04a6 (kana_WO) */ - 0x00, /* 0x04a7 (kana_a) */ - 0x00, /* 0x04a8 (kana_i) */ - 0x00, /* 0x04a9 (kana_u) */ - 0x00, /* 0x04aa (kana_e) */ - 0x00, /* 0x04ab (kana_o) */ - 0x00, /* 0x04ac (kana_ya) */ - 0x00, /* 0x04ad (kana_yu) */ - 0x00, /* 0x04ae (kana_yo) */ - 0x00, /* 0x04af (kana_tu) */ - 0x00, /* 0x04b0 (prolongedsound) */ - 0x00, /* 0x04b1 (kana_A) */ - 0x00, /* 0x04b2 (kana_I) */ - 0x00, /* 0x04b3 (kana_U) */ - 0x00, /* 0x04b4 (kana_E) */ - 0x00, /* 0x04b5 (kana_O) */ - 0x00, /* 0x04b6 (kana_KA) */ - 0x00, /* 0x04b7 (kana_KI) */ - 0x00, /* 0x04b8 (kana_KU) */ - 0x00, /* 0x04b9 (kana_KE) */ - 0x00, /* 0x04ba (kana_KO) */ - 0x00, /* 0x04bb (kana_SA) */ - 0x00, /* 0x04bc (kana_SHI) */ - 0x00, /* 0x04bd (kana_SU) */ - 0x00, /* 0x04be (kana_SE) */ - 0x00, /* 0x04bf (kana_SO) */ - 0x00, /* 0x04c0 (kana_TA) */ - 0x00, /* 0x04c1 (kana_TI) */ - 0x00, /* 0x04c2 (kana_TU) */ - 0x00, /* 0x04c3 (kana_TE) */ - 0x00, /* 0x04c4 (kana_TO) */ - 0x00, /* 0x04c5 (kana_NA) */ - 0x00, /* 0x04c6 (kana_NI) */ - 0x00, /* 0x04c7 (kana_NU) */ - 0x00, /* 0x04c8 (kana_NE) */ - 0x00, /* 0x04c9 (kana_NO) */ - 0x00, /* 0x04ca (kana_HA) */ - 0x00, /* 0x04cb (kana_HI) */ - 0x00, /* 0x04cc (kana_HU) */ - 0x00, /* 0x04cd (kana_HE) */ - 0x00, /* 0x04ce (kana_HO) */ - 0x00, /* 0x04cf (kana_MA) */ - 0x00, /* 0x04d0 (kana_MI) */ - 0x00, /* 0x04d1 (kana_MU) */ - 0x00, /* 0x04d2 (kana_ME) */ - 0x00, /* 0x04d3 (kana_MO) */ - 0x00, /* 0x04d4 (kana_YA) */ - 0x00, /* 0x04d5 (kana_YU) */ - 0x00, /* 0x04d6 (kana_YO) */ - 0x00, /* 0x04d7 (kana_RA) */ - 0x00, /* 0x04d8 (kana_RI) */ - 0x00, /* 0x04d9 (kana_RU) */ - 0x00, /* 0x04da (kana_RE) */ - 0x00, /* 0x04db (kana_RO) */ - 0x00, /* 0x04dc (kana_WA) */ - 0x00, /* 0x04dd (kana_N) */ - 0x00, /* 0x04de (voicedsound) */ - 0x00, /* 0x04df (semivoicedsound) */ - 0x00, /* 0x04e0 */ - 0x00, /* 0x04e1 */ - 0x00, /* 0x04e2 */ - 0x00, /* 0x04e3 */ - 0x00, /* 0x04e4 */ - 0x00, /* 0x04e5 */ - 0x00, /* 0x04e6 */ - 0x00, /* 0x04e7 */ - 0x00, /* 0x04e8 */ - 0x00, /* 0x04e9 */ - 0x00, /* 0x04ea */ - 0x00, /* 0x04eb */ - 0x00, /* 0x04ec */ - 0x00, /* 0x04ed */ - 0x00, /* 0x04ee */ - 0x00, /* 0x04ef */ - 0x00, /* 0x04f0 */ - 0x00, /* 0x04f1 */ - 0x00, /* 0x04f2 */ - 0x00, /* 0x04f3 */ - 0x00, /* 0x04f4 */ - 0x00, /* 0x04f5 */ - 0x00, /* 0x04f6 */ - 0x00, /* 0x04f7 */ - 0x00, /* 0x04f8 */ - 0x00, /* 0x04f9 */ - 0x00, /* 0x04fa */ - 0x00, /* 0x04fb */ - 0x00, /* 0x04fc */ - 0x00, /* 0x04fd */ - 0x00, /* 0x04fe */ - 0x00, /* 0x04ff */ + { /* 0x0400 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0401 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0402 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0403 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0404 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0405 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0406 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0407 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0408 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0409 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x040a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x040b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x040c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x040d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x040e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x040f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0410 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0411 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0412 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0413 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0414 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0415 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0416 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0417 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0418 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0419 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x041a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x041b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x041c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x041d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x041e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x041f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0420 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0421 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0422 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0423 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0424 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0425 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0426 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0427 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0428 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0429 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x042a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x042b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x042c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x042d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x042e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x042f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0430 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0431 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0432 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0433 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0434 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0435 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0436 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0437 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0438 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0439 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x043a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x043b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x043c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x043d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x043e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x043f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0440 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0441 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0442 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0443 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0444 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0445 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0446 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0447 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0448 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0449 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x044a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x044b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x044c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x044d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x044e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x044f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0450 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0451 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0452 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0453 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0454 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0455 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0456 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0457 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0458 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0459 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x045a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x045b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x045c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x045d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x045e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x045f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0460 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0461 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0462 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0463 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0464 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0465 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0466 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0467 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0468 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0469 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x046a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x046b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x046c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x046d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x046e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x046f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0470 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0471 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0472 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0473 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0474 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0475 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0476 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0477 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0478 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0479 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x047a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x047b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x047c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x047d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x047e (overline) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x047f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0480 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0481 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0482 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0483 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0484 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0485 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0486 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0487 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0488 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0489 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x048a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x048b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x048c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x048d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x048e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x048f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0490 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0491 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0492 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0493 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0494 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0495 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0496 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0497 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0498 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0499 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x049a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x049b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x049c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x049d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x049e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x049f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04a0 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04a1 (kana_fullstop) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04a2 (kana_openingbracket) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04a3 (kana_closingbracket) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04a4 (kana_comma) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04a5 (kana_middledot) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04a6 (kana_WO) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04a7 (kana_a) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04a8 (kana_i) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04a9 (kana_u) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04aa (kana_e) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04ab (kana_o) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04ac (kana_ya) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04ad (kana_yu) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04ae (kana_yo) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04af (kana_tu) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04b0 (prolongedsound) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04b1 (kana_A) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04b2 (kana_I) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04b3 (kana_U) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04b4 (kana_E) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04b5 (kana_O) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04b6 (kana_KA) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04b7 (kana_KI) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04b8 (kana_KU) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04b9 (kana_KE) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04ba (kana_KO) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04bb (kana_SA) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04bc (kana_SHI) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04bd (kana_SU) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04be (kana_SE) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04bf (kana_SO) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04c0 (kana_TA) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04c1 (kana_TI) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04c2 (kana_TU) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04c3 (kana_TE) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04c4 (kana_TO) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04c5 (kana_NA) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04c6 (kana_NI) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04c7 (kana_NU) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04c8 (kana_NE) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04c9 (kana_NO) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04ca (kana_HA) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04cb (kana_HI) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04cc (kana_HU) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04cd (kana_HE) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04ce (kana_HO) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04cf (kana_MA) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04d0 (kana_MI) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04d1 (kana_MU) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04d2 (kana_ME) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04d3 (kana_MO) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04d4 (kana_YA) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04d5 (kana_YU) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04d6 (kana_YO) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04d7 (kana_RA) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04d8 (kana_RI) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04d9 (kana_RU) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04da (kana_RE) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04db (kana_RO) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04dc (kana_WA) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04dd (kana_N) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04de (voicedsound) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04df (semivoicedsound) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04e0 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04e1 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04e2 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04e3 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04e4 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04e5 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04e6 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04e7 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04e8 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04e9 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04ea */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04eb */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04ec */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04ed */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04ee */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04ef */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04f0 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04f1 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04f2 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04f3 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04f4 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04f5 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04f6 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04f7 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04f8 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04f9 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04fa */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04fb */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04fc */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04fd */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04fe */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x04ff */ + .scancode = 0x00, + .flags = 0x00 + }, + }, { /* 0x05?? */ - 0x00, /* 0x0500 */ - 0x00, /* 0x0501 */ - 0x00, /* 0x0502 */ - 0x00, /* 0x0503 */ - 0x00, /* 0x0504 */ - 0x00, /* 0x0505 */ - 0x00, /* 0x0506 */ - 0x00, /* 0x0507 */ - 0x00, /* 0x0508 */ - 0x00, /* 0x0509 */ - 0x00, /* 0x050a */ - 0x00, /* 0x050b */ - 0x00, /* 0x050c */ - 0x00, /* 0x050d */ - 0x00, /* 0x050e */ - 0x00, /* 0x050f */ - 0x00, /* 0x0510 */ - 0x00, /* 0x0511 */ - 0x00, /* 0x0512 */ - 0x00, /* 0x0513 */ - 0x00, /* 0x0514 */ - 0x00, /* 0x0515 */ - 0x00, /* 0x0516 */ - 0x00, /* 0x0517 */ - 0x00, /* 0x0518 */ - 0x00, /* 0x0519 */ - 0x00, /* 0x051a */ - 0x00, /* 0x051b */ - 0x00, /* 0x051c */ - 0x00, /* 0x051d */ - 0x00, /* 0x051e */ - 0x00, /* 0x051f */ - 0x00, /* 0x0520 */ - 0x00, /* 0x0521 */ - 0x00, /* 0x0522 */ - 0x00, /* 0x0523 */ - 0x00, /* 0x0524 */ - 0x00, /* 0x0525 */ - 0x00, /* 0x0526 */ - 0x00, /* 0x0527 */ - 0x00, /* 0x0528 */ - 0x00, /* 0x0529 */ - 0x00, /* 0x052a */ - 0x00, /* 0x052b */ - 0x00, /* 0x052c */ - 0x00, /* 0x052d */ - 0x00, /* 0x052e */ - 0x00, /* 0x052f */ - 0x00, /* 0x0530 */ - 0x00, /* 0x0531 */ - 0x00, /* 0x0532 */ - 0x00, /* 0x0533 */ - 0x00, /* 0x0534 */ - 0x00, /* 0x0535 */ - 0x00, /* 0x0536 */ - 0x00, /* 0x0537 */ - 0x00, /* 0x0538 */ - 0x00, /* 0x0539 */ - 0x00, /* 0x053a */ - 0x00, /* 0x053b */ - 0x00, /* 0x053c */ - 0x00, /* 0x053d */ - 0x00, /* 0x053e */ - 0x00, /* 0x053f */ - 0x00, /* 0x0540 */ - 0x00, /* 0x0541 */ - 0x00, /* 0x0542 */ - 0x00, /* 0x0543 */ - 0x00, /* 0x0544 */ - 0x00, /* 0x0545 */ - 0x00, /* 0x0546 */ - 0x00, /* 0x0547 */ - 0x00, /* 0x0548 */ - 0x00, /* 0x0549 */ - 0x00, /* 0x054a */ - 0x00, /* 0x054b */ - 0x00, /* 0x054c */ - 0x00, /* 0x054d */ - 0x00, /* 0x054e */ - 0x00, /* 0x054f */ - 0x00, /* 0x0550 */ - 0x00, /* 0x0551 */ - 0x00, /* 0x0552 */ - 0x00, /* 0x0553 */ - 0x00, /* 0x0554 */ - 0x00, /* 0x0555 */ - 0x00, /* 0x0556 */ - 0x00, /* 0x0557 */ - 0x00, /* 0x0558 */ - 0x00, /* 0x0559 */ - 0x00, /* 0x055a */ - 0x00, /* 0x055b */ - 0x00, /* 0x055c */ - 0x00, /* 0x055d */ - 0x00, /* 0x055e */ - 0x00, /* 0x055f */ - 0x00, /* 0x0560 */ - 0x00, /* 0x0561 */ - 0x00, /* 0x0562 */ - 0x00, /* 0x0563 */ - 0x00, /* 0x0564 */ - 0x00, /* 0x0565 */ - 0x00, /* 0x0566 */ - 0x00, /* 0x0567 */ - 0x00, /* 0x0568 */ - 0x00, /* 0x0569 */ - 0x00, /* 0x056a */ - 0x00, /* 0x056b */ - 0x00, /* 0x056c */ - 0x00, /* 0x056d */ - 0x00, /* 0x056e */ - 0x00, /* 0x056f */ - 0x00, /* 0x0570 */ - 0x00, /* 0x0571 */ - 0x00, /* 0x0572 */ - 0x00, /* 0x0573 */ - 0x00, /* 0x0574 */ - 0x00, /* 0x0575 */ - 0x00, /* 0x0576 */ - 0x00, /* 0x0577 */ - 0x00, /* 0x0578 */ - 0x00, /* 0x0579 */ - 0x00, /* 0x057a */ - 0x00, /* 0x057b */ - 0x00, /* 0x057c */ - 0x00, /* 0x057d */ - 0x00, /* 0x057e */ - 0x00, /* 0x057f */ - 0x00, /* 0x0580 */ - 0x00, /* 0x0581 */ - 0x00, /* 0x0582 */ - 0x00, /* 0x0583 */ - 0x00, /* 0x0584 */ - 0x00, /* 0x0585 */ - 0x00, /* 0x0586 */ - 0x00, /* 0x0587 */ - 0x00, /* 0x0588 */ - 0x00, /* 0x0589 */ - 0x00, /* 0x058a */ - 0x00, /* 0x058b */ - 0x00, /* 0x058c */ - 0x00, /* 0x058d */ - 0x00, /* 0x058e */ - 0x00, /* 0x058f */ - 0x00, /* 0x0590 */ - 0x00, /* 0x0591 */ - 0x00, /* 0x0592 */ - 0x00, /* 0x0593 */ - 0x00, /* 0x0594 */ - 0x00, /* 0x0595 */ - 0x00, /* 0x0596 */ - 0x00, /* 0x0597 */ - 0x00, /* 0x0598 */ - 0x00, /* 0x0599 */ - 0x00, /* 0x059a */ - 0x00, /* 0x059b */ - 0x00, /* 0x059c */ - 0x00, /* 0x059d */ - 0x00, /* 0x059e */ - 0x00, /* 0x059f */ - 0x00, /* 0x05a0 */ - 0x00, /* 0x05a1 */ - 0x00, /* 0x05a2 */ - 0x00, /* 0x05a3 */ - 0x00, /* 0x05a4 */ - 0x00, /* 0x05a5 */ - 0x00, /* 0x05a6 */ - 0x00, /* 0x05a7 */ - 0x00, /* 0x05a8 */ - 0x00, /* 0x05a9 */ - 0x00, /* 0x05aa */ - 0x00, /* 0x05ab */ - 0x00, /* 0x05ac (Arabic_comma) */ - 0x00, /* 0x05ad */ - 0x00, /* 0x05ae */ - 0x00, /* 0x05af */ - 0x00, /* 0x05b0 */ - 0x00, /* 0x05b1 */ - 0x00, /* 0x05b2 */ - 0x00, /* 0x05b3 */ - 0x00, /* 0x05b4 */ - 0x00, /* 0x05b5 */ - 0x00, /* 0x05b6 */ - 0x00, /* 0x05b7 */ - 0x00, /* 0x05b8 */ - 0x00, /* 0x05b9 */ - 0x00, /* 0x05ba */ - 0x00, /* 0x05bb (Arabic_semicolon) */ - 0x00, /* 0x05bc */ - 0x00, /* 0x05bd */ - 0x00, /* 0x05be */ - 0x00, /* 0x05bf (Arabic_question_mark) */ - 0x00, /* 0x05c0 */ - 0x00, /* 0x05c1 (Arabic_hamza) */ - 0x00, /* 0x05c2 (Arabic_maddaonalef) */ - 0x00, /* 0x05c3 (Arabic_hamzaonalef) */ - 0x00, /* 0x05c4 (Arabic_hamzaonwaw) */ - 0x00, /* 0x05c5 (Arabic_hamzaunderalef) */ - 0x00, /* 0x05c6 (Arabic_hamzaonyeh) */ - 0x00, /* 0x05c7 (Arabic_alef) */ - 0x00, /* 0x05c8 (Arabic_beh) */ - 0x00, /* 0x05c9 (Arabic_tehmarbuta) */ - 0x00, /* 0x05ca (Arabic_teh) */ - 0x00, /* 0x05cb (Arabic_theh) */ - 0x00, /* 0x05cc (Arabic_jeem) */ - 0x00, /* 0x05cd (Arabic_hah) */ - 0x00, /* 0x05ce (Arabic_khah) */ - 0x00, /* 0x05cf (Arabic_dal) */ - 0x00, /* 0x05d0 (Arabic_thal) */ - 0x00, /* 0x05d1 (Arabic_ra) */ - 0x00, /* 0x05d2 (Arabic_zain) */ - 0x00, /* 0x05d3 (Arabic_seen) */ - 0x00, /* 0x05d4 (Arabic_sheen) */ - 0x00, /* 0x05d5 (Arabic_sad) */ - 0x00, /* 0x05d6 (Arabic_dad) */ - 0x00, /* 0x05d7 (Arabic_tah) */ - 0x00, /* 0x05d8 (Arabic_zah) */ - 0x00, /* 0x05d9 (Arabic_ain) */ - 0x00, /* 0x05da (Arabic_ghain) */ - 0x00, /* 0x05db */ - 0x00, /* 0x05dc */ - 0x00, /* 0x05dd */ - 0x00, /* 0x05de */ - 0x00, /* 0x05df */ - 0x00, /* 0x05e0 (Arabic_tatweel) */ - 0x00, /* 0x05e1 (Arabic_feh) */ - 0x00, /* 0x05e2 (Arabic_qaf) */ - 0x00, /* 0x05e3 (Arabic_kaf) */ - 0x00, /* 0x05e4 (Arabic_lam) */ - 0x00, /* 0x05e5 (Arabic_meem) */ - 0x00, /* 0x05e6 (Arabic_noon) */ - 0x00, /* 0x05e7 (Arabic_heh) */ - 0x00, /* 0x05e8 (Arabic_waw) */ - 0x00, /* 0x05e9 (Arabic_alefmaksura) */ - 0x00, /* 0x05ea (Arabic_yeh) */ - 0x00, /* 0x05eb (Arabic_fathatan) */ - 0x00, /* 0x05ec (Arabic_dammatan) */ - 0x00, /* 0x05ed (Arabic_kasratan) */ - 0x00, /* 0x05ee (Arabic_fatha) */ - 0x00, /* 0x05ef (Arabic_damma) */ - 0x00, /* 0x05f0 (Arabic_kasra) */ - 0x00, /* 0x05f1 (Arabic_shadda) */ - 0x00, /* 0x05f2 (Arabic_sukun) */ - 0x00, /* 0x05f3 */ - 0x00, /* 0x05f4 */ - 0x00, /* 0x05f5 */ - 0x00, /* 0x05f6 */ - 0x00, /* 0x05f7 */ - 0x00, /* 0x05f8 */ - 0x00, /* 0x05f9 */ - 0x00, /* 0x05fa */ - 0x00, /* 0x05fb */ - 0x00, /* 0x05fc */ - 0x00, /* 0x05fd */ - 0x00, /* 0x05fe */ - 0x00, /* 0x05ff */ + { /* 0x0500 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0501 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0502 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0503 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0504 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0505 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0506 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0507 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0508 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0509 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x050a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x050b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x050c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x050d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x050e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x050f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0510 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0511 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0512 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0513 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0514 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0515 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0516 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0517 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0518 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0519 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x051a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x051b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x051c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x051d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x051e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x051f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0520 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0521 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0522 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0523 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0524 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0525 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0526 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0527 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0528 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0529 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x052a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x052b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x052c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x052d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x052e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x052f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0530 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0531 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0532 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0533 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0534 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0535 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0536 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0537 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0538 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0539 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x053a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x053b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x053c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x053d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x053e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x053f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0540 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0541 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0542 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0543 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0544 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0545 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0546 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0547 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0548 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0549 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x054a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x054b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x054c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x054d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x054e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x054f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0550 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0551 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0552 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0553 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0554 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0555 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0556 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0557 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0558 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0559 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x055a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x055b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x055c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x055d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x055e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x055f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0560 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0561 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0562 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0563 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0564 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0565 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0566 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0567 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0568 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0569 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x056a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x056b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x056c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x056d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x056e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x056f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0570 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0571 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0572 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0573 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0574 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0575 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0576 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0577 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0578 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0579 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x057a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x057b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x057c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x057d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x057e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x057f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0580 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0581 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0582 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0583 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0584 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0585 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0586 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0587 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0588 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0589 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x058a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x058b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x058c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x058d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x058e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x058f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0590 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0591 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0592 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0593 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0594 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0595 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0596 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0597 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0598 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0599 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x059a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x059b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x059c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x059d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x059e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x059f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05a0 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05a1 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05a2 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05a3 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05a4 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05a5 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05a6 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05a7 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05a8 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05a9 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05aa */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05ab */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05ac (Arabic_comma) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05ad */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05ae */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05af */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05b0 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05b1 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05b2 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05b3 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05b4 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05b5 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05b6 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05b7 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05b8 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05b9 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05ba */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05bb (Arabic_semicolon) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05bc */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05bd */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05be */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05bf (Arabic_question_mark) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05c0 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05c1 (Arabic_hamza) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05c2 (Arabic_maddaonalef) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05c3 (Arabic_hamzaonalef) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05c4 (Arabic_hamzaonwaw) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05c5 (Arabic_hamzaunderalef) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05c6 (Arabic_hamzaonyeh) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05c7 (Arabic_alef) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05c8 (Arabic_beh) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05c9 (Arabic_tehmarbuta) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05ca (Arabic_teh) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05cb (Arabic_theh) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05cc (Arabic_jeem) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05cd (Arabic_hah) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05ce (Arabic_khah) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05cf (Arabic_dal) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05d0 (Arabic_thal) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05d1 (Arabic_ra) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05d2 (Arabic_zain) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05d3 (Arabic_seen) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05d4 (Arabic_sheen) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05d5 (Arabic_sad) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05d6 (Arabic_dad) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05d7 (Arabic_tah) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05d8 (Arabic_zah) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05d9 (Arabic_ain) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05da (Arabic_ghain) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05db */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05dc */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05dd */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05de */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05df */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05e0 (Arabic_tatweel) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05e1 (Arabic_feh) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05e2 (Arabic_qaf) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05e3 (Arabic_kaf) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05e4 (Arabic_lam) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05e5 (Arabic_meem) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05e6 (Arabic_noon) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05e7 (Arabic_heh) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05e8 (Arabic_waw) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05e9 (Arabic_alefmaksura) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05ea (Arabic_yeh) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05eb (Arabic_fathatan) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05ec (Arabic_dammatan) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05ed (Arabic_kasratan) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05ee (Arabic_fatha) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05ef (Arabic_damma) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05f0 (Arabic_kasra) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05f1 (Arabic_shadda) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05f2 (Arabic_sukun) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05f3 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05f4 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05f5 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05f6 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05f7 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05f8 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05f9 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05fa */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05fb */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05fc */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05fd */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05fe */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x05ff */ + .scancode = 0x00, + .flags = 0x00 + }, + }, { /* 0x06?? */ - 0x00, /* 0x0600 */ - 0x00, /* 0x0601 */ - 0x00, /* 0x0602 */ - 0x00, /* 0x0603 */ - 0x00, /* 0x0604 */ - 0x00, /* 0x0605 */ - 0x00, /* 0x0606 */ - 0x00, /* 0x0607 */ - 0x00, /* 0x0608 */ - 0x00, /* 0x0609 */ - 0x00, /* 0x060a */ - 0x00, /* 0x060b */ - 0x00, /* 0x060c */ - 0x00, /* 0x060d */ - 0x00, /* 0x060e */ - 0x00, /* 0x060f */ - 0x00, /* 0x0610 */ - 0x00, /* 0x0611 */ - 0x00, /* 0x0612 */ - 0x00, /* 0x0613 */ - 0x00, /* 0x0614 */ - 0x00, /* 0x0615 */ - 0x00, /* 0x0616 */ - 0x00, /* 0x0617 */ - 0x00, /* 0x0618 */ - 0x00, /* 0x0619 */ - 0x00, /* 0x061a */ - 0x00, /* 0x061b */ - 0x00, /* 0x061c */ - 0x00, /* 0x061d */ - 0x00, /* 0x061e */ - 0x00, /* 0x061f */ - 0x00, /* 0x0620 */ - 0x00, /* 0x0621 */ - 0x00, /* 0x0622 */ - 0x00, /* 0x0623 */ - 0x00, /* 0x0624 */ - 0x00, /* 0x0625 */ - 0x00, /* 0x0626 */ - 0x00, /* 0x0627 */ - 0x00, /* 0x0628 */ - 0x00, /* 0x0629 */ - 0x00, /* 0x062a */ - 0x00, /* 0x062b */ - 0x00, /* 0x062c */ - 0x00, /* 0x062d */ - 0x00, /* 0x062e */ - 0x00, /* 0x062f */ - 0x00, /* 0x0630 */ - 0x00, /* 0x0631 */ - 0x00, /* 0x0632 */ - 0x00, /* 0x0633 */ - 0x00, /* 0x0634 */ - 0x00, /* 0x0635 */ - 0x00, /* 0x0636 */ - 0x00, /* 0x0637 */ - 0x00, /* 0x0638 */ - 0x00, /* 0x0639 */ - 0x00, /* 0x063a */ - 0x00, /* 0x063b */ - 0x00, /* 0x063c */ - 0x00, /* 0x063d */ - 0x00, /* 0x063e */ - 0x00, /* 0x063f */ - 0x00, /* 0x0640 */ - 0x00, /* 0x0641 */ - 0x00, /* 0x0642 */ - 0x00, /* 0x0643 */ - 0x00, /* 0x0644 */ - 0x00, /* 0x0645 */ - 0x00, /* 0x0646 */ - 0x00, /* 0x0647 */ - 0x00, /* 0x0648 */ - 0x00, /* 0x0649 */ - 0x00, /* 0x064a */ - 0x00, /* 0x064b */ - 0x00, /* 0x064c */ - 0x00, /* 0x064d */ - 0x00, /* 0x064e */ - 0x00, /* 0x064f */ - 0x00, /* 0x0650 */ - 0x00, /* 0x0651 */ - 0x00, /* 0x0652 */ - 0x00, /* 0x0653 */ - 0x00, /* 0x0654 */ - 0x00, /* 0x0655 */ - 0x00, /* 0x0656 */ - 0x00, /* 0x0657 */ - 0x00, /* 0x0658 */ - 0x00, /* 0x0659 */ - 0x00, /* 0x065a */ - 0x00, /* 0x065b */ - 0x00, /* 0x065c */ - 0x00, /* 0x065d */ - 0x00, /* 0x065e */ - 0x00, /* 0x065f */ - 0x00, /* 0x0660 */ - 0x00, /* 0x0661 */ - 0x00, /* 0x0662 */ - 0x00, /* 0x0663 */ - 0x00, /* 0x0664 */ - 0x00, /* 0x0665 */ - 0x00, /* 0x0666 */ - 0x00, /* 0x0667 */ - 0x00, /* 0x0668 */ - 0x00, /* 0x0669 */ - 0x00, /* 0x066a */ - 0x00, /* 0x066b */ - 0x00, /* 0x066c */ - 0x00, /* 0x066d */ - 0x00, /* 0x066e */ - 0x00, /* 0x066f */ - 0x00, /* 0x0670 */ - 0x00, /* 0x0671 */ - 0x00, /* 0x0672 */ - 0x00, /* 0x0673 */ - 0x00, /* 0x0674 */ - 0x00, /* 0x0675 */ - 0x00, /* 0x0676 */ - 0x00, /* 0x0677 */ - 0x00, /* 0x0678 */ - 0x00, /* 0x0679 */ - 0x00, /* 0x067a */ - 0x00, /* 0x067b */ - 0x00, /* 0x067c */ - 0x00, /* 0x067d */ - 0x00, /* 0x067e */ - 0x00, /* 0x067f */ - 0x00, /* 0x0680 */ - 0x00, /* 0x0681 */ - 0x00, /* 0x0682 */ - 0x00, /* 0x0683 */ - 0x00, /* 0x0684 */ - 0x00, /* 0x0685 */ - 0x00, /* 0x0686 */ - 0x00, /* 0x0687 */ - 0x00, /* 0x0688 */ - 0x00, /* 0x0689 */ - 0x00, /* 0x068a */ - 0x00, /* 0x068b */ - 0x00, /* 0x068c */ - 0x00, /* 0x068d */ - 0x00, /* 0x068e */ - 0x00, /* 0x068f */ - 0x00, /* 0x0690 */ - 0x00, /* 0x0691 */ - 0x00, /* 0x0692 */ - 0x00, /* 0x0693 */ - 0x00, /* 0x0694 */ - 0x00, /* 0x0695 */ - 0x00, /* 0x0696 */ - 0x00, /* 0x0697 */ - 0x00, /* 0x0698 */ - 0x00, /* 0x0699 */ - 0x00, /* 0x069a */ - 0x00, /* 0x069b */ - 0x00, /* 0x069c */ - 0x00, /* 0x069d */ - 0x00, /* 0x069e */ - 0x00, /* 0x069f */ - 0x00, /* 0x06a0 */ - 0x00, /* 0x06a1 (Serbian_dje) */ - 0x00, /* 0x06a2 (Macedonia_gje) */ - 0x00, /* 0x06a3 (Cyrillic_io) */ - 0x00, /* 0x06a4 (Ukranian_je) */ - 0x00, /* 0x06a5 (Macedonia_dse) */ - 0x00, /* 0x06a6 (Ukranian_i) */ - 0x00, /* 0x06a7 (Ukranian_yi) */ - 0x00, /* 0x06a8 (Serbian_je) */ - 0x00, /* 0x06a9 (Serbian_lje) */ - 0x00, /* 0x06aa (Serbian_nje) */ - 0x00, /* 0x06ab (Serbian_tshe) */ - 0x00, /* 0x06ac (Macedonia_kje) */ - 0x00, /* 0x06ad (Ukrainian_ghe_with_upturn) */ - 0x00, /* 0x06ae (Byelorussian_shortu) */ - 0x00, /* 0x06af (Serbian_dze) */ - 0x00, /* 0x06b0 (numerosign) */ - 0x00, /* 0x06b1 (Serbian_DJE) */ - 0x00, /* 0x06b2 (Macedonia_GJE) */ - 0x00, /* 0x06b3 (Cyrillic_IO) */ - 0x00, /* 0x06b4 (Ukranian_JE) */ - 0x00, /* 0x06b5 (Macedonia_DSE) */ - 0x00, /* 0x06b6 (Ukranian_I) */ - 0x00, /* 0x06b7 (Ukranian_YI) */ - 0x00, /* 0x06b8 (Serbian_JE) */ - 0x00, /* 0x06b9 (Serbian_LJE) */ - 0x00, /* 0x06ba (Serbian_NJE) */ - 0x00, /* 0x06bb (Serbian_TSHE) */ - 0x00, /* 0x06bc (Macedonia_KJE) */ - 0x00, /* 0x06bd (Ukrainian_GHE_WITH_UPTURN) */ - 0x00, /* 0x06be (Byelorussian_SHORTU) */ - 0x00, /* 0x06bf (Serbian_DZE) */ - 0x00, /* 0x06c0 (Cyrillic_yu) */ - 0x00, /* 0x06c1 (Cyrillic_a) */ - 0x00, /* 0x06c2 (Cyrillic_be) */ - 0x00, /* 0x06c3 (Cyrillic_tse) */ - 0x00, /* 0x06c4 (Cyrillic_de) */ - 0x00, /* 0x06c5 (Cyrillic_ie) */ - 0x00, /* 0x06c6 (Cyrillic_ef) */ - 0x00, /* 0x06c7 (Cyrillic_ghe) */ - 0x00, /* 0x06c8 (Cyrillic_ha) */ - 0x00, /* 0x06c9 (Cyrillic_i) */ - 0x00, /* 0x06ca (Cyrillic_shorti) */ - 0x00, /* 0x06cb (Cyrillic_ka) */ - 0x00, /* 0x06cc (Cyrillic_el) */ - 0x00, /* 0x06cd (Cyrillic_em) */ - 0x00, /* 0x06ce (Cyrillic_en) */ - 0x00, /* 0x06cf (Cyrillic_o) */ - 0x00, /* 0x06d0 (Cyrillic_pe) */ - 0x00, /* 0x06d1 (Cyrillic_ya) */ - 0x00, /* 0x06d2 (Cyrillic_er) */ - 0x00, /* 0x06d3 (Cyrillic_es) */ - 0x00, /* 0x06d4 (Cyrillic_te) */ - 0x00, /* 0x06d5 (Cyrillic_u) */ - 0x00, /* 0x06d6 (Cyrillic_zhe) */ - 0x00, /* 0x06d7 (Cyrillic_ve) */ - 0x00, /* 0x06d8 (Cyrillic_softsign) */ - 0x00, /* 0x06d9 (Cyrillic_yeru) */ - 0x00, /* 0x06da (Cyrillic_ze) */ - 0x00, /* 0x06db (Cyrillic_sha) */ - 0x00, /* 0x06dc (Cyrillic_e) */ - 0x00, /* 0x06dd (Cyrillic_shcha) */ - 0x00, /* 0x06de (Cyrillic_che) */ - 0x00, /* 0x06df (Cyrillic_hardsign) */ - 0x00, /* 0x06e0 (Cyrillic_YU) */ - 0x00, /* 0x06e1 (Cyrillic_A) */ - 0x00, /* 0x06e2 (Cyrillic_BE) */ - 0x00, /* 0x06e3 (Cyrillic_TSE) */ - 0x00, /* 0x06e4 (Cyrillic_DE) */ - 0x00, /* 0x06e5 (Cyrillic_IE) */ - 0x00, /* 0x06e6 (Cyrillic_EF) */ - 0x00, /* 0x06e7 (Cyrillic_GHE) */ - 0x00, /* 0x06e8 (Cyrillic_HA) */ - 0x00, /* 0x06e9 (Cyrillic_I) */ - 0x00, /* 0x06ea (Cyrillic_SHORTI) */ - 0x00, /* 0x06eb (Cyrillic_KA) */ - 0x00, /* 0x06ec (Cyrillic_EL) */ - 0x00, /* 0x06ed (Cyrillic_EM) */ - 0x00, /* 0x06ee (Cyrillic_EN) */ - 0x00, /* 0x06ef (Cyrillic_O) */ - 0x00, /* 0x06f0 (Cyrillic_PE) */ - 0x00, /* 0x06f1 (Cyrillic_YA) */ - 0x00, /* 0x06f2 (Cyrillic_ER) */ - 0x00, /* 0x06f3 (Cyrillic_ES) */ - 0x00, /* 0x06f4 (Cyrillic_TE) */ - 0x00, /* 0x06f5 (Cyrillic_U) */ - 0x00, /* 0x06f6 (Cyrillic_ZHE) */ - 0x00, /* 0x06f7 (Cyrillic_VE) */ - 0x00, /* 0x06f8 (Cyrillic_SOFTSIGN) */ - 0x00, /* 0x06f9 (Cyrillic_YERU) */ - 0x00, /* 0x06fa (Cyrillic_ZE) */ - 0x00, /* 0x06fb (Cyrillic_SHA) */ - 0x00, /* 0x06fc (Cyrillic_E) */ - 0x00, /* 0x06fd (Cyrillic_SHCHA) */ - 0x00, /* 0x06fe (Cyrillic_CHE) */ - 0x00, /* 0x06ff (Cyrillic_HARDSIGN) */ + { /* 0x0600 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0601 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0602 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0603 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0604 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0605 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0606 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0607 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0608 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0609 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x060a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x060b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x060c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x060d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x060e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x060f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0610 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0611 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0612 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0613 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0614 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0615 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0616 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0617 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0618 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0619 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x061a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x061b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x061c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x061d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x061e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x061f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0620 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0621 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0622 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0623 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0624 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0625 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0626 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0627 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0628 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0629 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x062a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x062b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x062c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x062d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x062e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x062f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0630 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0631 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0632 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0633 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0634 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0635 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0636 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0637 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0638 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0639 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x063a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x063b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x063c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x063d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x063e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x063f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0640 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0641 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0642 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0643 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0644 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0645 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0646 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0647 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0648 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0649 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x064a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x064b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x064c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x064d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x064e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x064f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0650 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0651 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0652 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0653 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0654 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0655 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0656 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0657 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0658 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0659 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x065a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x065b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x065c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x065d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x065e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x065f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0660 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0661 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0662 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0663 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0664 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0665 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0666 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0667 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0668 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0669 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x066a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x066b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x066c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x066d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x066e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x066f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0670 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0671 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0672 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0673 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0674 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0675 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0676 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0677 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0678 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0679 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x067a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x067b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x067c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x067d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x067e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x067f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0680 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0681 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0682 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0683 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0684 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0685 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0686 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0687 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0688 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0689 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x068a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x068b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x068c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x068d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x068e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x068f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0690 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0691 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0692 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0693 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0694 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0695 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0696 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0697 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0698 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0699 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x069a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x069b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x069c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x069d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x069e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x069f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06a0 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06a1 (Serbian_dje) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06a2 (Macedonia_gje) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06a3 (Cyrillic_io) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06a4 (Ukranian_je) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06a5 (Macedonia_dse) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06a6 (Ukranian_i) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06a7 (Ukranian_yi) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06a8 (Serbian_je) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06a9 (Serbian_lje) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06aa (Serbian_nje) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06ab (Serbian_tshe) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06ac (Macedonia_kje) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06ad (Ukrainian_ghe_with_upturn) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06ae (Byelorussian_shortu) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06af (Serbian_dze) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06b0 (numerosign) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06b1 (Serbian_DJE) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06b2 (Macedonia_GJE) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06b3 (Cyrillic_IO) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06b4 (Ukranian_JE) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06b5 (Macedonia_DSE) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06b6 (Ukranian_I) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06b7 (Ukranian_YI) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06b8 (Serbian_JE) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06b9 (Serbian_LJE) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06ba (Serbian_NJE) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06bb (Serbian_TSHE) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06bc (Macedonia_KJE) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06bd (Ukrainian_GHE_WITH_UPTURN) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06be (Byelorussian_SHORTU) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06bf (Serbian_DZE) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06c0 (Cyrillic_yu) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06c1 (Cyrillic_a) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06c2 (Cyrillic_be) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06c3 (Cyrillic_tse) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06c4 (Cyrillic_de) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06c5 (Cyrillic_ie) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06c6 (Cyrillic_ef) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06c7 (Cyrillic_ghe) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06c8 (Cyrillic_ha) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06c9 (Cyrillic_i) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06ca (Cyrillic_shorti) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06cb (Cyrillic_ka) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06cc (Cyrillic_el) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06cd (Cyrillic_em) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06ce (Cyrillic_en) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06cf (Cyrillic_o) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06d0 (Cyrillic_pe) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06d1 (Cyrillic_ya) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06d2 (Cyrillic_er) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06d3 (Cyrillic_es) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06d4 (Cyrillic_te) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06d5 (Cyrillic_u) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06d6 (Cyrillic_zhe) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06d7 (Cyrillic_ve) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06d8 (Cyrillic_softsign) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06d9 (Cyrillic_yeru) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06da (Cyrillic_ze) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06db (Cyrillic_sha) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06dc (Cyrillic_e) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06dd (Cyrillic_shcha) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06de (Cyrillic_che) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06df (Cyrillic_hardsign) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06e0 (Cyrillic_YU) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06e1 (Cyrillic_A) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06e2 (Cyrillic_BE) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06e3 (Cyrillic_TSE) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06e4 (Cyrillic_DE) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06e5 (Cyrillic_IE) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06e6 (Cyrillic_EF) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06e7 (Cyrillic_GHE) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06e8 (Cyrillic_HA) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06e9 (Cyrillic_I) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06ea (Cyrillic_SHORTI) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06eb (Cyrillic_KA) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06ec (Cyrillic_EL) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06ed (Cyrillic_EM) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06ee (Cyrillic_EN) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06ef (Cyrillic_O) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06f0 (Cyrillic_PE) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06f1 (Cyrillic_YA) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06f2 (Cyrillic_ER) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06f3 (Cyrillic_ES) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06f4 (Cyrillic_TE) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06f5 (Cyrillic_U) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06f6 (Cyrillic_ZHE) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06f7 (Cyrillic_VE) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06f8 (Cyrillic_SOFTSIGN) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06f9 (Cyrillic_YERU) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06fa (Cyrillic_ZE) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06fb (Cyrillic_SHA) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06fc (Cyrillic_E) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06fd (Cyrillic_SHCHA) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06fe (Cyrillic_CHE) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x06ff (Cyrillic_HARDSIGN) */ + .scancode = 0x00, + .flags = 0x00 + }, + }, { /* 0x07?? */ - 0x00, /* 0x0700 */ - 0x00, /* 0x0701 */ - 0x00, /* 0x0702 */ - 0x00, /* 0x0703 */ - 0x00, /* 0x0704 */ - 0x00, /* 0x0705 */ - 0x00, /* 0x0706 */ - 0x00, /* 0x0707 */ - 0x00, /* 0x0708 */ - 0x00, /* 0x0709 */ - 0x00, /* 0x070a */ - 0x00, /* 0x070b */ - 0x00, /* 0x070c */ - 0x00, /* 0x070d */ - 0x00, /* 0x070e */ - 0x00, /* 0x070f */ - 0x00, /* 0x0710 */ - 0x00, /* 0x0711 */ - 0x00, /* 0x0712 */ - 0x00, /* 0x0713 */ - 0x00, /* 0x0714 */ - 0x00, /* 0x0715 */ - 0x00, /* 0x0716 */ - 0x00, /* 0x0717 */ - 0x00, /* 0x0718 */ - 0x00, /* 0x0719 */ - 0x00, /* 0x071a */ - 0x00, /* 0x071b */ - 0x00, /* 0x071c */ - 0x00, /* 0x071d */ - 0x00, /* 0x071e */ - 0x00, /* 0x071f */ - 0x00, /* 0x0720 */ - 0x00, /* 0x0721 */ - 0x00, /* 0x0722 */ - 0x00, /* 0x0723 */ - 0x00, /* 0x0724 */ - 0x00, /* 0x0725 */ - 0x00, /* 0x0726 */ - 0x00, /* 0x0727 */ - 0x00, /* 0x0728 */ - 0x00, /* 0x0729 */ - 0x00, /* 0x072a */ - 0x00, /* 0x072b */ - 0x00, /* 0x072c */ - 0x00, /* 0x072d */ - 0x00, /* 0x072e */ - 0x00, /* 0x072f */ - 0x00, /* 0x0730 */ - 0x00, /* 0x0731 */ - 0x00, /* 0x0732 */ - 0x00, /* 0x0733 */ - 0x00, /* 0x0734 */ - 0x00, /* 0x0735 */ - 0x00, /* 0x0736 */ - 0x00, /* 0x0737 */ - 0x00, /* 0x0738 */ - 0x00, /* 0x0739 */ - 0x00, /* 0x073a */ - 0x00, /* 0x073b */ - 0x00, /* 0x073c */ - 0x00, /* 0x073d */ - 0x00, /* 0x073e */ - 0x00, /* 0x073f */ - 0x00, /* 0x0740 */ - 0x00, /* 0x0741 */ - 0x00, /* 0x0742 */ - 0x00, /* 0x0743 */ - 0x00, /* 0x0744 */ - 0x00, /* 0x0745 */ - 0x00, /* 0x0746 */ - 0x00, /* 0x0747 */ - 0x00, /* 0x0748 */ - 0x00, /* 0x0749 */ - 0x00, /* 0x074a */ - 0x00, /* 0x074b */ - 0x00, /* 0x074c */ - 0x00, /* 0x074d */ - 0x00, /* 0x074e */ - 0x00, /* 0x074f */ - 0x00, /* 0x0750 */ - 0x00, /* 0x0751 */ - 0x00, /* 0x0752 */ - 0x00, /* 0x0753 */ - 0x00, /* 0x0754 */ - 0x00, /* 0x0755 */ - 0x00, /* 0x0756 */ - 0x00, /* 0x0757 */ - 0x00, /* 0x0758 */ - 0x00, /* 0x0759 */ - 0x00, /* 0x075a */ - 0x00, /* 0x075b */ - 0x00, /* 0x075c */ - 0x00, /* 0x075d */ - 0x00, /* 0x075e */ - 0x00, /* 0x075f */ - 0x00, /* 0x0760 */ - 0x00, /* 0x0761 */ - 0x00, /* 0x0762 */ - 0x00, /* 0x0763 */ - 0x00, /* 0x0764 */ - 0x00, /* 0x0765 */ - 0x00, /* 0x0766 */ - 0x00, /* 0x0767 */ - 0x00, /* 0x0768 */ - 0x00, /* 0x0769 */ - 0x00, /* 0x076a */ - 0x00, /* 0x076b */ - 0x00, /* 0x076c */ - 0x00, /* 0x076d */ - 0x00, /* 0x076e */ - 0x00, /* 0x076f */ - 0x00, /* 0x0770 */ - 0x00, /* 0x0771 */ - 0x00, /* 0x0772 */ - 0x00, /* 0x0773 */ - 0x00, /* 0x0774 */ - 0x00, /* 0x0775 */ - 0x00, /* 0x0776 */ - 0x00, /* 0x0777 */ - 0x00, /* 0x0778 */ - 0x00, /* 0x0779 */ - 0x00, /* 0x077a */ - 0x00, /* 0x077b */ - 0x00, /* 0x077c */ - 0x00, /* 0x077d */ - 0x00, /* 0x077e */ - 0x00, /* 0x077f */ - 0x00, /* 0x0780 */ - 0x00, /* 0x0781 */ - 0x00, /* 0x0782 */ - 0x00, /* 0x0783 */ - 0x00, /* 0x0784 */ - 0x00, /* 0x0785 */ - 0x00, /* 0x0786 */ - 0x00, /* 0x0787 */ - 0x00, /* 0x0788 */ - 0x00, /* 0x0789 */ - 0x00, /* 0x078a */ - 0x00, /* 0x078b */ - 0x00, /* 0x078c */ - 0x00, /* 0x078d */ - 0x00, /* 0x078e */ - 0x00, /* 0x078f */ - 0x00, /* 0x0790 */ - 0x00, /* 0x0791 */ - 0x00, /* 0x0792 */ - 0x00, /* 0x0793 */ - 0x00, /* 0x0794 */ - 0x00, /* 0x0795 */ - 0x00, /* 0x0796 */ - 0x00, /* 0x0797 */ - 0x00, /* 0x0798 */ - 0x00, /* 0x0799 */ - 0x00, /* 0x079a */ - 0x00, /* 0x079b */ - 0x00, /* 0x079c */ - 0x00, /* 0x079d */ - 0x00, /* 0x079e */ - 0x00, /* 0x079f */ - 0x00, /* 0x07a0 */ - 0x00, /* 0x07a1 (Greek_ALPHAaccent) */ - 0x00, /* 0x07a2 (Greek_EPSILONaccent) */ - 0x00, /* 0x07a3 (Greek_ETAaccent) */ - 0x00, /* 0x07a4 (Greek_IOTAaccent) */ - 0x00, /* 0x07a5 (Greek_IOTAdiaeresis) */ - 0x00, /* 0x07a6 */ - 0x00, /* 0x07a7 (Greek_OMICRONaccent) */ - 0x00, /* 0x07a8 (Greek_UPSILONaccent) */ - 0x00, /* 0x07a9 (Greek_UPSILONdieresis) */ - 0x00, /* 0x07aa */ - 0x00, /* 0x07ab (Greek_OMEGAaccent) */ - 0x00, /* 0x07ac */ - 0x00, /* 0x07ad */ - 0x00, /* 0x07ae (Greek_accentdieresis) */ - 0x00, /* 0x07af (Greek_horizbar) */ - 0x00, /* 0x07b0 */ - 0x00, /* 0x07b1 (Greek_alphaaccent) */ - 0x00, /* 0x07b2 (Greek_epsilonaccent) */ - 0x00, /* 0x07b3 (Greek_etaaccent) */ - 0x00, /* 0x07b4 (Greek_iotaaccent) */ - 0x00, /* 0x07b5 (Greek_iotadieresis) */ - 0x00, /* 0x07b6 (Greek_iotaaccentdieresis) */ - 0x00, /* 0x07b7 (Greek_omicronaccent) */ - 0x00, /* 0x07b8 (Greek_upsilonaccent) */ - 0x00, /* 0x07b9 (Greek_upsilondieresis) */ - 0x00, /* 0x07ba (Greek_upsilonaccentdieresis) */ - 0x00, /* 0x07bb (Greek_omegaaccent) */ - 0x00, /* 0x07bc */ - 0x00, /* 0x07bd */ - 0x00, /* 0x07be */ - 0x00, /* 0x07bf */ - 0x00, /* 0x07c0 */ - 0x00, /* 0x07c1 (Greek_ALPHA) */ - 0x00, /* 0x07c2 (Greek_BETA) */ - 0x00, /* 0x07c3 (Greek_GAMMA) */ - 0x00, /* 0x07c4 (Greek_DELTA) */ - 0x00, /* 0x07c5 (Greek_EPSILON) */ - 0x00, /* 0x07c6 (Greek_ZETA) */ - 0x00, /* 0x07c7 (Greek_ETA) */ - 0x00, /* 0x07c8 (Greek_THETA) */ - 0x00, /* 0x07c9 (Greek_IOTA) */ - 0x00, /* 0x07ca (Greek_KAPPA) */ - 0x00, /* 0x07cb (Greek_LAMBDA) */ - 0x00, /* 0x07cc (Greek_MU) */ - 0x00, /* 0x07cd (Greek_NU) */ - 0x00, /* 0x07ce (Greek_XI) */ - 0x00, /* 0x07cf (Greek_OMICRON) */ - 0x00, /* 0x07d0 (Greek_PI) */ - 0x00, /* 0x07d1 (Greek_RHO) */ - 0x00, /* 0x07d2 (Greek_SIGMA) */ - 0x00, /* 0x07d3 */ - 0x00, /* 0x07d4 (Greek_TAU) */ - 0x00, /* 0x07d5 (Greek_UPSILON) */ - 0x00, /* 0x07d6 (Greek_PHI) */ - 0x00, /* 0x07d7 (Greek_CHI) */ - 0x00, /* 0x07d8 (Greek_PSI) */ - 0x00, /* 0x07d9 (Greek_OMEGA) */ - 0x00, /* 0x07da */ - 0x00, /* 0x07db */ - 0x00, /* 0x07dc */ - 0x00, /* 0x07dd */ - 0x00, /* 0x07de */ - 0x00, /* 0x07df */ - 0x00, /* 0x07e0 */ - 0x00, /* 0x07e1 (Greek_alpha) */ - 0x00, /* 0x07e2 (Greek_beta) */ - 0x00, /* 0x07e3 (Greek_gamma) */ - 0x00, /* 0x07e4 (Greek_delta) */ - 0x00, /* 0x07e5 (Greek_epsilon) */ - 0x00, /* 0x07e6 (Greek_zeta) */ - 0x00, /* 0x07e7 (Greek_eta) */ - 0x00, /* 0x07e8 (Greek_theta) */ - 0x00, /* 0x07e9 (Greek_iota) */ - 0x00, /* 0x07ea (Greek_kappa) */ - 0x00, /* 0x07eb (Greek_lambda) */ - 0x00, /* 0x07ec (Greek_mu) */ - 0x00, /* 0x07ed (Greek_nu) */ - 0x00, /* 0x07ee (Greek_xi) */ - 0x00, /* 0x07ef (Greek_omicron) */ - 0x00, /* 0x07f0 (Greek_pi) */ - 0x00, /* 0x07f1 (Greek_rho) */ - 0x00, /* 0x07f2 (Greek_sigma) */ - 0x00, /* 0x07f3 (Greek_finalsmallsigma) */ - 0x00, /* 0x07f4 (Greek_tau) */ - 0x00, /* 0x07f5 (Greek_upsilon) */ - 0x00, /* 0x07f6 (Greek_phi) */ - 0x00, /* 0x07f7 (Greek_chi) */ - 0x00, /* 0x07f8 (Greek_psi) */ - 0x00, /* 0x07f9 (Greek_omega) */ - 0x00, /* 0x07fa */ - 0x00, /* 0x07fb */ - 0x00, /* 0x07fc */ - 0x00, /* 0x07fd */ - 0x00, /* 0x07fe */ - 0x00, /* 0x07ff */ + { /* 0x0700 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0701 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0702 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0703 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0704 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0705 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0706 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0707 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0708 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0709 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x070a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x070b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x070c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x070d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x070e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x070f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0710 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0711 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0712 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0713 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0714 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0715 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0716 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0717 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0718 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0719 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x071a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x071b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x071c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x071d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x071e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x071f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0720 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0721 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0722 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0723 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0724 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0725 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0726 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0727 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0728 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0729 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x072a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x072b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x072c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x072d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x072e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x072f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0730 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0731 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0732 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0733 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0734 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0735 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0736 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0737 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0738 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0739 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x073a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x073b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x073c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x073d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x073e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x073f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0740 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0741 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0742 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0743 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0744 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0745 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0746 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0747 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0748 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0749 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x074a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x074b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x074c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x074d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x074e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x074f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0750 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0751 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0752 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0753 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0754 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0755 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0756 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0757 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0758 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0759 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x075a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x075b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x075c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x075d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x075e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x075f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0760 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0761 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0762 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0763 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0764 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0765 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0766 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0767 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0768 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0769 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x076a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x076b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x076c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x076d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x076e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x076f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0770 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0771 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0772 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0773 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0774 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0775 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0776 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0777 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0778 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0779 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x077a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x077b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x077c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x077d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x077e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x077f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0780 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0781 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0782 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0783 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0784 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0785 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0786 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0787 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0788 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0789 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x078a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x078b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x078c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x078d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x078e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x078f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0790 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0791 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0792 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0793 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0794 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0795 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0796 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0797 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0798 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0799 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x079a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x079b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x079c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x079d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x079e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x079f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07a0 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07a1 (Greek_ALPHAaccent) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07a2 (Greek_EPSILONaccent) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07a3 (Greek_ETAaccent) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07a4 (Greek_IOTAaccent) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07a5 (Greek_IOTAdiaeresis) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07a6 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07a7 (Greek_OMICRONaccent) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07a8 (Greek_UPSILONaccent) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07a9 (Greek_UPSILONdieresis) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07aa */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07ab (Greek_OMEGAaccent) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07ac */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07ad */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07ae (Greek_accentdieresis) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07af (Greek_horizbar) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07b0 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07b1 (Greek_alphaaccent) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07b2 (Greek_epsilonaccent) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07b3 (Greek_etaaccent) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07b4 (Greek_iotaaccent) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07b5 (Greek_iotadieresis) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07b6 (Greek_iotaaccentdieresis) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07b7 (Greek_omicronaccent) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07b8 (Greek_upsilonaccent) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07b9 (Greek_upsilondieresis) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07ba (Greek_upsilonaccentdieresis) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07bb (Greek_omegaaccent) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07bc */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07bd */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07be */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07bf */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07c0 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07c1 (Greek_ALPHA) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07c2 (Greek_BETA) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07c3 (Greek_GAMMA) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07c4 (Greek_DELTA) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07c5 (Greek_EPSILON) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07c6 (Greek_ZETA) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07c7 (Greek_ETA) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07c8 (Greek_THETA) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07c9 (Greek_IOTA) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07ca (Greek_KAPPA) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07cb (Greek_LAMBDA) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07cc (Greek_MU) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07cd (Greek_NU) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07ce (Greek_XI) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07cf (Greek_OMICRON) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07d0 (Greek_PI) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07d1 (Greek_RHO) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07d2 (Greek_SIGMA) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07d3 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07d4 (Greek_TAU) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07d5 (Greek_UPSILON) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07d6 (Greek_PHI) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07d7 (Greek_CHI) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07d8 (Greek_PSI) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07d9 (Greek_OMEGA) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07da */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07db */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07dc */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07dd */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07de */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07df */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07e0 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07e1 (Greek_alpha) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07e2 (Greek_beta) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07e3 (Greek_gamma) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07e4 (Greek_delta) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07e5 (Greek_epsilon) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07e6 (Greek_zeta) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07e7 (Greek_eta) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07e8 (Greek_theta) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07e9 (Greek_iota) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07ea (Greek_kappa) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07eb (Greek_lambda) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07ec (Greek_mu) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07ed (Greek_nu) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07ee (Greek_xi) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07ef (Greek_omicron) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07f0 (Greek_pi) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07f1 (Greek_rho) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07f2 (Greek_sigma) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07f3 (Greek_finalsmallsigma) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07f4 (Greek_tau) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07f5 (Greek_upsilon) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07f6 (Greek_phi) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07f7 (Greek_chi) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07f8 (Greek_psi) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07f9 (Greek_omega) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07fa */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07fb */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07fc */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07fd */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07fe */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x07ff */ + .scancode = 0x00, + .flags = 0x00 + }, + }, { /* 0x08?? */ - 0x00, /* 0x0800 */ - 0x00, /* 0x0801 */ - 0x00, /* 0x0802 */ - 0x00, /* 0x0803 */ - 0x00, /* 0x0804 */ - 0x00, /* 0x0805 */ - 0x00, /* 0x0806 */ - 0x00, /* 0x0807 */ - 0x00, /* 0x0808 */ - 0x00, /* 0x0809 */ - 0x00, /* 0x080a */ - 0x00, /* 0x080b */ - 0x00, /* 0x080c */ - 0x00, /* 0x080d */ - 0x00, /* 0x080e */ - 0x00, /* 0x080f */ - 0x00, /* 0x0810 */ - 0x00, /* 0x0811 */ - 0x00, /* 0x0812 */ - 0x00, /* 0x0813 */ - 0x00, /* 0x0814 */ - 0x00, /* 0x0815 */ - 0x00, /* 0x0816 */ - 0x00, /* 0x0817 */ - 0x00, /* 0x0818 */ - 0x00, /* 0x0819 */ - 0x00, /* 0x081a */ - 0x00, /* 0x081b */ - 0x00, /* 0x081c */ - 0x00, /* 0x081d */ - 0x00, /* 0x081e */ - 0x00, /* 0x081f */ - 0x00, /* 0x0820 */ - 0x00, /* 0x0821 */ - 0x00, /* 0x0822 */ - 0x00, /* 0x0823 */ - 0x00, /* 0x0824 */ - 0x00, /* 0x0825 */ - 0x00, /* 0x0826 */ - 0x00, /* 0x0827 */ - 0x00, /* 0x0828 */ - 0x00, /* 0x0829 */ - 0x00, /* 0x082a */ - 0x00, /* 0x082b */ - 0x00, /* 0x082c */ - 0x00, /* 0x082d */ - 0x00, /* 0x082e */ - 0x00, /* 0x082f */ - 0x00, /* 0x0830 */ - 0x00, /* 0x0831 */ - 0x00, /* 0x0832 */ - 0x00, /* 0x0833 */ - 0x00, /* 0x0834 */ - 0x00, /* 0x0835 */ - 0x00, /* 0x0836 */ - 0x00, /* 0x0837 */ - 0x00, /* 0x0838 */ - 0x00, /* 0x0839 */ - 0x00, /* 0x083a */ - 0x00, /* 0x083b */ - 0x00, /* 0x083c */ - 0x00, /* 0x083d */ - 0x00, /* 0x083e */ - 0x00, /* 0x083f */ - 0x00, /* 0x0840 */ - 0x00, /* 0x0841 */ - 0x00, /* 0x0842 */ - 0x00, /* 0x0843 */ - 0x00, /* 0x0844 */ - 0x00, /* 0x0845 */ - 0x00, /* 0x0846 */ - 0x00, /* 0x0847 */ - 0x00, /* 0x0848 */ - 0x00, /* 0x0849 */ - 0x00, /* 0x084a */ - 0x00, /* 0x084b */ - 0x00, /* 0x084c */ - 0x00, /* 0x084d */ - 0x00, /* 0x084e */ - 0x00, /* 0x084f */ - 0x00, /* 0x0850 */ - 0x00, /* 0x0851 */ - 0x00, /* 0x0852 */ - 0x00, /* 0x0853 */ - 0x00, /* 0x0854 */ - 0x00, /* 0x0855 */ - 0x00, /* 0x0856 */ - 0x00, /* 0x0857 */ - 0x00, /* 0x0858 */ - 0x00, /* 0x0859 */ - 0x00, /* 0x085a */ - 0x00, /* 0x085b */ - 0x00, /* 0x085c */ - 0x00, /* 0x085d */ - 0x00, /* 0x085e */ - 0x00, /* 0x085f */ - 0x00, /* 0x0860 */ - 0x00, /* 0x0861 */ - 0x00, /* 0x0862 */ - 0x00, /* 0x0863 */ - 0x00, /* 0x0864 */ - 0x00, /* 0x0865 */ - 0x00, /* 0x0866 */ - 0x00, /* 0x0867 */ - 0x00, /* 0x0868 */ - 0x00, /* 0x0869 */ - 0x00, /* 0x086a */ - 0x00, /* 0x086b */ - 0x00, /* 0x086c */ - 0x00, /* 0x086d */ - 0x00, /* 0x086e */ - 0x00, /* 0x086f */ - 0x00, /* 0x0870 */ - 0x00, /* 0x0871 */ - 0x00, /* 0x0872 */ - 0x00, /* 0x0873 */ - 0x00, /* 0x0874 */ - 0x00, /* 0x0875 */ - 0x00, /* 0x0876 */ - 0x00, /* 0x0877 */ - 0x00, /* 0x0878 */ - 0x00, /* 0x0879 */ - 0x00, /* 0x087a */ - 0x00, /* 0x087b */ - 0x00, /* 0x087c */ - 0x00, /* 0x087d */ - 0x00, /* 0x087e */ - 0x00, /* 0x087f */ - 0x00, /* 0x0880 */ - 0x00, /* 0x0881 */ - 0x00, /* 0x0882 */ - 0x00, /* 0x0883 */ - 0x00, /* 0x0884 */ - 0x00, /* 0x0885 */ - 0x00, /* 0x0886 */ - 0x00, /* 0x0887 */ - 0x00, /* 0x0888 */ - 0x00, /* 0x0889 */ - 0x00, /* 0x088a */ - 0x00, /* 0x088b */ - 0x00, /* 0x088c */ - 0x00, /* 0x088d */ - 0x00, /* 0x088e */ - 0x00, /* 0x088f */ - 0x00, /* 0x0890 */ - 0x00, /* 0x0891 */ - 0x00, /* 0x0892 */ - 0x00, /* 0x0893 */ - 0x00, /* 0x0894 */ - 0x00, /* 0x0895 */ - 0x00, /* 0x0896 */ - 0x00, /* 0x0897 */ - 0x00, /* 0x0898 */ - 0x00, /* 0x0899 */ - 0x00, /* 0x089a */ - 0x00, /* 0x089b */ - 0x00, /* 0x089c */ - 0x00, /* 0x089d */ - 0x00, /* 0x089e */ - 0x00, /* 0x089f */ - 0x00, /* 0x08a0 */ - 0x00, /* 0x08a1 (leftradical) */ - 0x00, /* 0x08a2 (topleftradical) */ - 0x00, /* 0x08a3 (horizconnector) */ - 0x00, /* 0x08a4 (topintegral) */ - 0x00, /* 0x08a5 (botintegral) */ - 0x00, /* 0x08a6 (vertconnector) */ - 0x00, /* 0x08a7 (topleftsqbracket) */ - 0x00, /* 0x08a8 (botleftsqbracket) */ - 0x00, /* 0x08a9 (toprightsqbracket) */ - 0x00, /* 0x08aa (botrightsqbracket) */ - 0x00, /* 0x08ab (topleftparens) */ - 0x00, /* 0x08ac (botleftparens) */ - 0x00, /* 0x08ad (toprightparens) */ - 0x00, /* 0x08ae (botrightparens) */ - 0x00, /* 0x08af (leftmiddlecurlybrace) */ - 0x00, /* 0x08b0 (rightmiddlecurlybrace) */ - 0x00, /* 0x08b1 (topleftsummation) */ - 0x00, /* 0x08b2 (botleftsummation) */ - 0x00, /* 0x08b3 (topvertsummationconnector) */ - 0x00, /* 0x08b4 (botvertsummationconnector) */ - 0x00, /* 0x08b5 (toprightsummation) */ - 0x00, /* 0x08b6 (botrightsummation) */ - 0x00, /* 0x08b7 (rightmiddlesummation) */ - 0x00, /* 0x08b8 */ - 0x00, /* 0x08b9 */ - 0x00, /* 0x08ba */ - 0x00, /* 0x08bb */ - 0x00, /* 0x08bc (lessthanequal) */ - 0x00, /* 0x08bd (notequal) */ - 0x00, /* 0x08be (greaterthanequal) */ - 0x00, /* 0x08bf (integral) */ - 0x00, /* 0x08c0 (therefore) */ - 0x00, /* 0x08c1 (variation) */ - 0x00, /* 0x08c2 (infinity) */ - 0x00, /* 0x08c3 */ - 0x00, /* 0x08c4 */ - 0x00, /* 0x08c5 (nabla) */ - 0x00, /* 0x08c6 */ - 0x00, /* 0x08c7 */ - 0x00, /* 0x08c8 (approximate) */ - 0x00, /* 0x08c9 (similarequal) */ - 0x00, /* 0x08ca */ - 0x00, /* 0x08cb */ - 0x00, /* 0x08cc */ - 0x00, /* 0x08cd (ifonlyif) */ - 0x00, /* 0x08ce (implies) */ - 0x00, /* 0x08cf (identical) */ - 0x00, /* 0x08d0 */ - 0x00, /* 0x08d1 */ - 0x00, /* 0x08d2 */ - 0x00, /* 0x08d3 */ - 0x00, /* 0x08d4 */ - 0x00, /* 0x08d5 */ - 0x00, /* 0x08d6 (radical) */ - 0x00, /* 0x08d7 */ - 0x00, /* 0x08d8 */ - 0x00, /* 0x08d9 */ - 0x00, /* 0x08da (includedin) */ - 0x00, /* 0x08db (includes) */ - 0x00, /* 0x08dc (intersection) */ - 0x00, /* 0x08dd (union) */ - 0x00, /* 0x08de (logicaland) */ - 0x00, /* 0x08df (logicalor) */ - 0x00, /* 0x08e0 */ - 0x00, /* 0x08e1 */ - 0x00, /* 0x08e2 */ - 0x00, /* 0x08e3 */ - 0x00, /* 0x08e4 */ - 0x00, /* 0x08e5 */ - 0x00, /* 0x08e6 */ - 0x00, /* 0x08e7 */ - 0x00, /* 0x08e8 */ - 0x00, /* 0x08e9 */ - 0x00, /* 0x08ea */ - 0x00, /* 0x08eb */ - 0x00, /* 0x08ec */ - 0x00, /* 0x08ed */ - 0x00, /* 0x08ee */ - 0x00, /* 0x08ef (partialderivative) */ - 0x00, /* 0x08f0 */ - 0x00, /* 0x08f1 */ - 0x00, /* 0x08f2 */ - 0x00, /* 0x08f3 */ - 0x00, /* 0x08f4 */ - 0x00, /* 0x08f5 */ - 0x00, /* 0x08f6 (function) */ - 0x00, /* 0x08f7 */ - 0x00, /* 0x08f8 */ - 0x00, /* 0x08f9 */ - 0x00, /* 0x08fa */ - 0x00, /* 0x08fb (leftarrow) */ - 0x00, /* 0x08fc (uparrow) */ - 0x00, /* 0x08fd (rightarrow) */ - 0x00, /* 0x08fe (downarrow) */ - 0x00, /* 0x08ff */ + { /* 0x0800 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0801 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0802 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0803 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0804 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0805 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0806 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0807 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0808 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0809 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x080a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x080b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x080c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x080d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x080e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x080f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0810 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0811 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0812 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0813 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0814 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0815 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0816 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0817 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0818 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0819 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x081a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x081b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x081c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x081d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x081e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x081f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0820 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0821 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0822 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0823 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0824 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0825 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0826 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0827 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0828 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0829 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x082a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x082b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x082c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x082d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x082e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x082f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0830 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0831 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0832 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0833 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0834 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0835 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0836 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0837 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0838 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0839 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x083a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x083b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x083c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x083d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x083e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x083f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0840 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0841 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0842 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0843 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0844 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0845 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0846 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0847 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0848 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0849 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x084a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x084b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x084c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x084d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x084e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x084f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0850 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0851 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0852 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0853 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0854 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0855 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0856 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0857 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0858 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0859 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x085a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x085b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x085c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x085d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x085e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x085f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0860 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0861 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0862 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0863 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0864 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0865 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0866 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0867 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0868 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0869 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x086a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x086b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x086c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x086d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x086e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x086f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0870 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0871 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0872 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0873 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0874 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0875 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0876 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0877 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0878 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0879 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x087a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x087b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x087c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x087d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x087e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x087f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0880 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0881 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0882 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0883 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0884 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0885 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0886 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0887 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0888 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0889 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x088a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x088b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x088c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x088d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x088e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x088f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0890 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0891 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0892 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0893 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0894 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0895 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0896 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0897 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0898 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0899 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x089a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x089b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x089c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x089d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x089e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x089f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08a0 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08a1 (leftradical) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08a2 (topleftradical) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08a3 (horizconnector) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08a4 (topintegral) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08a5 (botintegral) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08a6 (vertconnector) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08a7 (topleftsqbracket) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08a8 (botleftsqbracket) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08a9 (toprightsqbracket) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08aa (botrightsqbracket) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08ab (topleftparens) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08ac (botleftparens) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08ad (toprightparens) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08ae (botrightparens) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08af (leftmiddlecurlybrace) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08b0 (rightmiddlecurlybrace) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08b1 (topleftsummation) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08b2 (botleftsummation) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08b3 (topvertsummationconnector) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08b4 (botvertsummationconnector) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08b5 (toprightsummation) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08b6 (botrightsummation) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08b7 (rightmiddlesummation) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08b8 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08b9 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08ba */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08bb */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08bc (lessthanequal) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08bd (notequal) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08be (greaterthanequal) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08bf (integral) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08c0 (therefore) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08c1 (variation) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08c2 (infinity) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08c3 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08c4 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08c5 (nabla) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08c6 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08c7 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08c8 (approximate) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08c9 (similarequal) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08ca */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08cb */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08cc */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08cd (ifonlyif) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08ce (implies) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08cf (identical) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08d0 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08d1 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08d2 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08d3 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08d4 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08d5 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08d6 (radical) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08d7 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08d8 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08d9 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08da (includedin) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08db (includes) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08dc (intersection) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08dd (union) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08de (logicaland) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08df (logicalor) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08e0 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08e1 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08e2 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08e3 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08e4 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08e5 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08e6 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08e7 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08e8 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08e9 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08ea */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08eb */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08ec */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08ed */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08ee */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08ef (partialderivative) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08f0 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08f1 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08f2 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08f3 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08f4 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08f5 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08f6 (function) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08f7 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08f8 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08f9 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08fa */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x08fb (leftarrow) */ + .scancode = 0x4B, + .flags = KBD_FLAG_EXT + }, + + { /* 0x08fc (uparrow) */ + .scancode = 0x48, + .flags = KBD_FLAG_EXT + }, + + { /* 0x08fd (rightarrow) */ + .scancode = 0x4D, + .flags = KBD_FLAG_EXT + }, + + { /* 0x08fe (downarrow) */ + .scancode = 0x50, + .flags = KBD_FLAG_EXT + }, + + { /* 0x08ff */ + .scancode = 0x00, + .flags = 0x00 + }, + }, { /* 0x09?? */ - 0x00, /* 0x0900 */ - 0x00, /* 0x0901 */ - 0x00, /* 0x0902 */ - 0x00, /* 0x0903 */ - 0x00, /* 0x0904 */ - 0x00, /* 0x0905 */ - 0x00, /* 0x0906 */ - 0x00, /* 0x0907 */ - 0x00, /* 0x0908 */ - 0x00, /* 0x0909 */ - 0x00, /* 0x090a */ - 0x00, /* 0x090b */ - 0x00, /* 0x090c */ - 0x00, /* 0x090d */ - 0x00, /* 0x090e */ - 0x00, /* 0x090f */ - 0x00, /* 0x0910 */ - 0x00, /* 0x0911 */ - 0x00, /* 0x0912 */ - 0x00, /* 0x0913 */ - 0x00, /* 0x0914 */ - 0x00, /* 0x0915 */ - 0x00, /* 0x0916 */ - 0x00, /* 0x0917 */ - 0x00, /* 0x0918 */ - 0x00, /* 0x0919 */ - 0x00, /* 0x091a */ - 0x00, /* 0x091b */ - 0x00, /* 0x091c */ - 0x00, /* 0x091d */ - 0x00, /* 0x091e */ - 0x00, /* 0x091f */ - 0x00, /* 0x0920 */ - 0x00, /* 0x0921 */ - 0x00, /* 0x0922 */ - 0x00, /* 0x0923 */ - 0x00, /* 0x0924 */ - 0x00, /* 0x0925 */ - 0x00, /* 0x0926 */ - 0x00, /* 0x0927 */ - 0x00, /* 0x0928 */ - 0x00, /* 0x0929 */ - 0x00, /* 0x092a */ - 0x00, /* 0x092b */ - 0x00, /* 0x092c */ - 0x00, /* 0x092d */ - 0x00, /* 0x092e */ - 0x00, /* 0x092f */ - 0x00, /* 0x0930 */ - 0x00, /* 0x0931 */ - 0x00, /* 0x0932 */ - 0x00, /* 0x0933 */ - 0x00, /* 0x0934 */ - 0x00, /* 0x0935 */ - 0x00, /* 0x0936 */ - 0x00, /* 0x0937 */ - 0x00, /* 0x0938 */ - 0x00, /* 0x0939 */ - 0x00, /* 0x093a */ - 0x00, /* 0x093b */ - 0x00, /* 0x093c */ - 0x00, /* 0x093d */ - 0x00, /* 0x093e */ - 0x00, /* 0x093f */ - 0x00, /* 0x0940 */ - 0x00, /* 0x0941 */ - 0x00, /* 0x0942 */ - 0x00, /* 0x0943 */ - 0x00, /* 0x0944 */ - 0x00, /* 0x0945 */ - 0x00, /* 0x0946 */ - 0x00, /* 0x0947 */ - 0x00, /* 0x0948 */ - 0x00, /* 0x0949 */ - 0x00, /* 0x094a */ - 0x00, /* 0x094b */ - 0x00, /* 0x094c */ - 0x00, /* 0x094d */ - 0x00, /* 0x094e */ - 0x00, /* 0x094f */ - 0x00, /* 0x0950 */ - 0x00, /* 0x0951 */ - 0x00, /* 0x0952 */ - 0x00, /* 0x0953 */ - 0x00, /* 0x0954 */ - 0x00, /* 0x0955 */ - 0x00, /* 0x0956 */ - 0x00, /* 0x0957 */ - 0x00, /* 0x0958 */ - 0x00, /* 0x0959 */ - 0x00, /* 0x095a */ - 0x00, /* 0x095b */ - 0x00, /* 0x095c */ - 0x00, /* 0x095d */ - 0x00, /* 0x095e */ - 0x00, /* 0x095f */ - 0x00, /* 0x0960 */ - 0x00, /* 0x0961 */ - 0x00, /* 0x0962 */ - 0x00, /* 0x0963 */ - 0x00, /* 0x0964 */ - 0x00, /* 0x0965 */ - 0x00, /* 0x0966 */ - 0x00, /* 0x0967 */ - 0x00, /* 0x0968 */ - 0x00, /* 0x0969 */ - 0x00, /* 0x096a */ - 0x00, /* 0x096b */ - 0x00, /* 0x096c */ - 0x00, /* 0x096d */ - 0x00, /* 0x096e */ - 0x00, /* 0x096f */ - 0x00, /* 0x0970 */ - 0x00, /* 0x0971 */ - 0x00, /* 0x0972 */ - 0x00, /* 0x0973 */ - 0x00, /* 0x0974 */ - 0x00, /* 0x0975 */ - 0x00, /* 0x0976 */ - 0x00, /* 0x0977 */ - 0x00, /* 0x0978 */ - 0x00, /* 0x0979 */ - 0x00, /* 0x097a */ - 0x00, /* 0x097b */ - 0x00, /* 0x097c */ - 0x00, /* 0x097d */ - 0x00, /* 0x097e */ - 0x00, /* 0x097f */ - 0x00, /* 0x0980 */ - 0x00, /* 0x0981 */ - 0x00, /* 0x0982 */ - 0x00, /* 0x0983 */ - 0x00, /* 0x0984 */ - 0x00, /* 0x0985 */ - 0x00, /* 0x0986 */ - 0x00, /* 0x0987 */ - 0x00, /* 0x0988 */ - 0x00, /* 0x0989 */ - 0x00, /* 0x098a */ - 0x00, /* 0x098b */ - 0x00, /* 0x098c */ - 0x00, /* 0x098d */ - 0x00, /* 0x098e */ - 0x00, /* 0x098f */ - 0x00, /* 0x0990 */ - 0x00, /* 0x0991 */ - 0x00, /* 0x0992 */ - 0x00, /* 0x0993 */ - 0x00, /* 0x0994 */ - 0x00, /* 0x0995 */ - 0x00, /* 0x0996 */ - 0x00, /* 0x0997 */ - 0x00, /* 0x0998 */ - 0x00, /* 0x0999 */ - 0x00, /* 0x099a */ - 0x00, /* 0x099b */ - 0x00, /* 0x099c */ - 0x00, /* 0x099d */ - 0x00, /* 0x099e */ - 0x00, /* 0x099f */ - 0x00, /* 0x09a0 */ - 0x00, /* 0x09a1 */ - 0x00, /* 0x09a2 */ - 0x00, /* 0x09a3 */ - 0x00, /* 0x09a4 */ - 0x00, /* 0x09a5 */ - 0x00, /* 0x09a6 */ - 0x00, /* 0x09a7 */ - 0x00, /* 0x09a8 */ - 0x00, /* 0x09a9 */ - 0x00, /* 0x09aa */ - 0x00, /* 0x09ab */ - 0x00, /* 0x09ac */ - 0x00, /* 0x09ad */ - 0x00, /* 0x09ae */ - 0x00, /* 0x09af */ - 0x00, /* 0x09b0 */ - 0x00, /* 0x09b1 */ - 0x00, /* 0x09b2 */ - 0x00, /* 0x09b3 */ - 0x00, /* 0x09b4 */ - 0x00, /* 0x09b5 */ - 0x00, /* 0x09b6 */ - 0x00, /* 0x09b7 */ - 0x00, /* 0x09b8 */ - 0x00, /* 0x09b9 */ - 0x00, /* 0x09ba */ - 0x00, /* 0x09bb */ - 0x00, /* 0x09bc */ - 0x00, /* 0x09bd */ - 0x00, /* 0x09be */ - 0x00, /* 0x09bf */ - 0x00, /* 0x09c0 */ - 0x00, /* 0x09c1 */ - 0x00, /* 0x09c2 */ - 0x00, /* 0x09c3 */ - 0x00, /* 0x09c4 */ - 0x00, /* 0x09c5 */ - 0x00, /* 0x09c6 */ - 0x00, /* 0x09c7 */ - 0x00, /* 0x09c8 */ - 0x00, /* 0x09c9 */ - 0x00, /* 0x09ca */ - 0x00, /* 0x09cb */ - 0x00, /* 0x09cc */ - 0x00, /* 0x09cd */ - 0x00, /* 0x09ce */ - 0x00, /* 0x09cf */ - 0x00, /* 0x09d0 */ - 0x00, /* 0x09d1 */ - 0x00, /* 0x09d2 */ - 0x00, /* 0x09d3 */ - 0x00, /* 0x09d4 */ - 0x00, /* 0x09d5 */ - 0x00, /* 0x09d6 */ - 0x00, /* 0x09d7 */ - 0x00, /* 0x09d8 */ - 0x00, /* 0x09d9 */ - 0x00, /* 0x09da */ - 0x00, /* 0x09db */ - 0x00, /* 0x09dc */ - 0x00, /* 0x09dd */ - 0x00, /* 0x09de */ - 0x00, /* 0x09df (blank) */ - 0x00, /* 0x09e0 (soliddiamond) */ - 0x00, /* 0x09e1 (checkerboard) */ - 0x00, /* 0x09e2 (ht) */ - 0x00, /* 0x09e3 (ff) */ - 0x00, /* 0x09e4 (cr) */ - 0x00, /* 0x09e5 (lf) */ - 0x00, /* 0x09e6 */ - 0x00, /* 0x09e7 */ - 0x00, /* 0x09e8 (nl) */ - 0x00, /* 0x09e9 (vt) */ - 0x00, /* 0x09ea (lowrightcorner) */ - 0x00, /* 0x09eb (uprightcorner) */ - 0x00, /* 0x09ec (upleftcorner) */ - 0x00, /* 0x09ed (lowleftcorner) */ - 0x00, /* 0x09ee (crossinglines) */ - 0x00, /* 0x09ef (horizlinescan1) */ - 0x00, /* 0x09f0 (horizlinescan3) */ - 0x00, /* 0x09f1 (horizlinescan5) */ - 0x00, /* 0x09f2 (horizlinescan7) */ - 0x00, /* 0x09f3 (horizlinescan9) */ - 0x00, /* 0x09f4 (leftt) */ - 0x00, /* 0x09f5 (rightt) */ - 0x00, /* 0x09f6 (bott) */ - 0x00, /* 0x09f7 (topt) */ - 0x00, /* 0x09f8 (vertbar) */ - 0x00, /* 0x09f9 */ - 0x00, /* 0x09fa */ - 0x00, /* 0x09fb */ - 0x00, /* 0x09fc */ - 0x00, /* 0x09fd */ - 0x00, /* 0x09fe */ - 0x00, /* 0x09ff */ + { /* 0x0900 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0901 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0902 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0903 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0904 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0905 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0906 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0907 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0908 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0909 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x090a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x090b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x090c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x090d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x090e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x090f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0910 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0911 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0912 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0913 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0914 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0915 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0916 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0917 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0918 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0919 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x091a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x091b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x091c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x091d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x091e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x091f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0920 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0921 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0922 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0923 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0924 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0925 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0926 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0927 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0928 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0929 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x092a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x092b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x092c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x092d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x092e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x092f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0930 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0931 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0932 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0933 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0934 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0935 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0936 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0937 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0938 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0939 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x093a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x093b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x093c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x093d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x093e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x093f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0940 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0941 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0942 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0943 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0944 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0945 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0946 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0947 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0948 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0949 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x094a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x094b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x094c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x094d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x094e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x094f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0950 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0951 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0952 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0953 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0954 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0955 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0956 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0957 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0958 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0959 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x095a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x095b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x095c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x095d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x095e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x095f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0960 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0961 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0962 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0963 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0964 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0965 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0966 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0967 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0968 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0969 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x096a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x096b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x096c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x096d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x096e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x096f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0970 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0971 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0972 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0973 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0974 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0975 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0976 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0977 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0978 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0979 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x097a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x097b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x097c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x097d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x097e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x097f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0980 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0981 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0982 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0983 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0984 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0985 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0986 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0987 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0988 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0989 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x098a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x098b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x098c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x098d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x098e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x098f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0990 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0991 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0992 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0993 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0994 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0995 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0996 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0997 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0998 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0999 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x099a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x099b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x099c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x099d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x099e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x099f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09a0 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09a1 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09a2 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09a3 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09a4 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09a5 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09a6 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09a7 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09a8 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09a9 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09aa */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09ab */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09ac */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09ad */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09ae */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09af */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09b0 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09b1 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09b2 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09b3 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09b4 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09b5 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09b6 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09b7 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09b8 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09b9 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09ba */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09bb */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09bc */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09bd */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09be */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09bf */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09c0 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09c1 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09c2 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09c3 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09c4 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09c5 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09c6 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09c7 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09c8 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09c9 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09ca */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09cb */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09cc */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09cd */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09ce */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09cf */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09d0 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09d1 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09d2 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09d3 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09d4 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09d5 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09d6 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09d7 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09d8 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09d9 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09da */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09db */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09dc */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09dd */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09de */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09df (blank) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09e0 (soliddiamond) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09e1 (checkerboard) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09e2 (ht) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09e3 (ff) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09e4 (cr) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09e5 (lf) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09e6 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09e7 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09e8 (nl) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09e9 (vt) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09ea (lowrightcorner) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09eb (uprightcorner) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09ec (upleftcorner) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09ed (lowleftcorner) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09ee (crossinglines) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09ef (horizlinescan1) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09f0 (horizlinescan3) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09f1 (horizlinescan5) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09f2 (horizlinescan7) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09f3 (horizlinescan9) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09f4 (leftt) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09f5 (rightt) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09f6 (bott) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09f7 (topt) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09f8 (vertbar) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09f9 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09fa */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09fb */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09fc */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09fd */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09fe */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x09ff */ + .scancode = 0x00, + .flags = 0x00 + }, + }, { /* 0x0a?? */ - 0x00, /* 0x0a00 */ - 0x00, /* 0x0a01 */ - 0x00, /* 0x0a02 */ - 0x00, /* 0x0a03 */ - 0x00, /* 0x0a04 */ - 0x00, /* 0x0a05 */ - 0x00, /* 0x0a06 */ - 0x00, /* 0x0a07 */ - 0x00, /* 0x0a08 */ - 0x00, /* 0x0a09 */ - 0x00, /* 0x0a0a */ - 0x00, /* 0x0a0b */ - 0x00, /* 0x0a0c */ - 0x00, /* 0x0a0d */ - 0x00, /* 0x0a0e */ - 0x00, /* 0x0a0f */ - 0x00, /* 0x0a10 */ - 0x00, /* 0x0a11 */ - 0x00, /* 0x0a12 */ - 0x00, /* 0x0a13 */ - 0x00, /* 0x0a14 */ - 0x00, /* 0x0a15 */ - 0x00, /* 0x0a16 */ - 0x00, /* 0x0a17 */ - 0x00, /* 0x0a18 */ - 0x00, /* 0x0a19 */ - 0x00, /* 0x0a1a */ - 0x00, /* 0x0a1b */ - 0x00, /* 0x0a1c */ - 0x00, /* 0x0a1d */ - 0x00, /* 0x0a1e */ - 0x00, /* 0x0a1f */ - 0x00, /* 0x0a20 */ - 0x00, /* 0x0a21 */ - 0x00, /* 0x0a22 */ - 0x00, /* 0x0a23 */ - 0x00, /* 0x0a24 */ - 0x00, /* 0x0a25 */ - 0x00, /* 0x0a26 */ - 0x00, /* 0x0a27 */ - 0x00, /* 0x0a28 */ - 0x00, /* 0x0a29 */ - 0x00, /* 0x0a2a */ - 0x00, /* 0x0a2b */ - 0x00, /* 0x0a2c */ - 0x00, /* 0x0a2d */ - 0x00, /* 0x0a2e */ - 0x00, /* 0x0a2f */ - 0x00, /* 0x0a30 */ - 0x00, /* 0x0a31 */ - 0x00, /* 0x0a32 */ - 0x00, /* 0x0a33 */ - 0x00, /* 0x0a34 */ - 0x00, /* 0x0a35 */ - 0x00, /* 0x0a36 */ - 0x00, /* 0x0a37 */ - 0x00, /* 0x0a38 */ - 0x00, /* 0x0a39 */ - 0x00, /* 0x0a3a */ - 0x00, /* 0x0a3b */ - 0x00, /* 0x0a3c */ - 0x00, /* 0x0a3d */ - 0x00, /* 0x0a3e */ - 0x00, /* 0x0a3f */ - 0x00, /* 0x0a40 */ - 0x00, /* 0x0a41 */ - 0x00, /* 0x0a42 */ - 0x00, /* 0x0a43 */ - 0x00, /* 0x0a44 */ - 0x00, /* 0x0a45 */ - 0x00, /* 0x0a46 */ - 0x00, /* 0x0a47 */ - 0x00, /* 0x0a48 */ - 0x00, /* 0x0a49 */ - 0x00, /* 0x0a4a */ - 0x00, /* 0x0a4b */ - 0x00, /* 0x0a4c */ - 0x00, /* 0x0a4d */ - 0x00, /* 0x0a4e */ - 0x00, /* 0x0a4f */ - 0x00, /* 0x0a50 */ - 0x00, /* 0x0a51 */ - 0x00, /* 0x0a52 */ - 0x00, /* 0x0a53 */ - 0x00, /* 0x0a54 */ - 0x00, /* 0x0a55 */ - 0x00, /* 0x0a56 */ - 0x00, /* 0x0a57 */ - 0x00, /* 0x0a58 */ - 0x00, /* 0x0a59 */ - 0x00, /* 0x0a5a */ - 0x00, /* 0x0a5b */ - 0x00, /* 0x0a5c */ - 0x00, /* 0x0a5d */ - 0x00, /* 0x0a5e */ - 0x00, /* 0x0a5f */ - 0x00, /* 0x0a60 */ - 0x00, /* 0x0a61 */ - 0x00, /* 0x0a62 */ - 0x00, /* 0x0a63 */ - 0x00, /* 0x0a64 */ - 0x00, /* 0x0a65 */ - 0x00, /* 0x0a66 */ - 0x00, /* 0x0a67 */ - 0x00, /* 0x0a68 */ - 0x00, /* 0x0a69 */ - 0x00, /* 0x0a6a */ - 0x00, /* 0x0a6b */ - 0x00, /* 0x0a6c */ - 0x00, /* 0x0a6d */ - 0x00, /* 0x0a6e */ - 0x00, /* 0x0a6f */ - 0x00, /* 0x0a70 */ - 0x00, /* 0x0a71 */ - 0x00, /* 0x0a72 */ - 0x00, /* 0x0a73 */ - 0x00, /* 0x0a74 */ - 0x00, /* 0x0a75 */ - 0x00, /* 0x0a76 */ - 0x00, /* 0x0a77 */ - 0x00, /* 0x0a78 */ - 0x00, /* 0x0a79 */ - 0x00, /* 0x0a7a */ - 0x00, /* 0x0a7b */ - 0x00, /* 0x0a7c */ - 0x00, /* 0x0a7d */ - 0x00, /* 0x0a7e */ - 0x00, /* 0x0a7f */ - 0x00, /* 0x0a80 */ - 0x00, /* 0x0a81 */ - 0x00, /* 0x0a82 */ - 0x00, /* 0x0a83 */ - 0x00, /* 0x0a84 */ - 0x00, /* 0x0a85 */ - 0x00, /* 0x0a86 */ - 0x00, /* 0x0a87 */ - 0x00, /* 0x0a88 */ - 0x00, /* 0x0a89 */ - 0x00, /* 0x0a8a */ - 0x00, /* 0x0a8b */ - 0x00, /* 0x0a8c */ - 0x00, /* 0x0a8d */ - 0x00, /* 0x0a8e */ - 0x00, /* 0x0a8f */ - 0x00, /* 0x0a90 */ - 0x00, /* 0x0a91 */ - 0x00, /* 0x0a92 */ - 0x00, /* 0x0a93 */ - 0x00, /* 0x0a94 */ - 0x00, /* 0x0a95 */ - 0x00, /* 0x0a96 */ - 0x00, /* 0x0a97 */ - 0x00, /* 0x0a98 */ - 0x00, /* 0x0a99 */ - 0x00, /* 0x0a9a */ - 0x00, /* 0x0a9b */ - 0x00, /* 0x0a9c */ - 0x00, /* 0x0a9d */ - 0x00, /* 0x0a9e */ - 0x00, /* 0x0a9f */ - 0x00, /* 0x0aa0 */ - 0x00, /* 0x0aa1 (emspace) */ - 0x00, /* 0x0aa2 (enspace) */ - 0x00, /* 0x0aa3 (em3space) */ - 0x00, /* 0x0aa4 (em4space) */ - 0x00, /* 0x0aa5 (digitspace) */ - 0x00, /* 0x0aa6 (punctspace) */ - 0x00, /* 0x0aa7 (thinspace) */ - 0x00, /* 0x0aa8 (hairspace) */ - 0x00, /* 0x0aa9 (emdash) */ - 0x00, /* 0x0aaa (endash) */ - 0x00, /* 0x0aab */ - 0x00, /* 0x0aac (signifblank) */ - 0x00, /* 0x0aad */ - 0x00, /* 0x0aae (ellipsis) */ - 0x00, /* 0x0aaf (doubbaselinedot) */ - 0x00, /* 0x0ab0 (onethird) */ - 0x00, /* 0x0ab1 (twothirds) */ - 0x00, /* 0x0ab2 (onefifth) */ - 0x00, /* 0x0ab3 (twofifths) */ - 0x00, /* 0x0ab4 (threefifths) */ - 0x00, /* 0x0ab5 (fourfifths) */ - 0x00, /* 0x0ab6 (onesixth) */ - 0x00, /* 0x0ab7 (fivesixths) */ - 0x00, /* 0x0ab8 (careof) */ - 0x00, /* 0x0ab9 */ - 0x00, /* 0x0aba */ - 0x00, /* 0x0abb (figdash) */ - 0x00, /* 0x0abc (leftanglebracket) */ - 0x00, /* 0x0abd (decimalpoint) */ - 0x00, /* 0x0abe (rightanglebracket) */ - 0x00, /* 0x0abf (marker) */ - 0x00, /* 0x0ac0 */ - 0x00, /* 0x0ac1 */ - 0x00, /* 0x0ac2 */ - 0x00, /* 0x0ac3 (oneeighth) */ - 0x00, /* 0x0ac4 (threeeighths) */ - 0x00, /* 0x0ac5 (fiveeighths) */ - 0x00, /* 0x0ac6 (seveneighths) */ - 0x00, /* 0x0ac7 */ - 0x00, /* 0x0ac8 */ - 0x00, /* 0x0ac9 (trademark) */ - 0x00, /* 0x0aca (signaturemark) */ - 0x00, /* 0x0acb (trademarkincircle) */ - 0x00, /* 0x0acc (leftopentriangle) */ - 0x00, /* 0x0acd (rightopentriangle) */ - 0x00, /* 0x0ace (emopencircle) */ - 0x00, /* 0x0acf (emopenrectangle) */ - 0x00, /* 0x0ad0 (leftsinglequotemark) */ - 0x00, /* 0x0ad1 (rightsinglequotemark) */ - 0x00, /* 0x0ad2 (leftdoublequotemark) */ - 0x00, /* 0x0ad3 (rightdoublequotemark) */ - 0x00, /* 0x0ad4 (prescription) */ - 0x00, /* 0x0ad5 */ - 0x00, /* 0x0ad6 (minutes) */ - 0x00, /* 0x0ad7 (seconds) */ - 0x00, /* 0x0ad8 */ - 0x00, /* 0x0ad9 (latincross) */ - 0x00, /* 0x0ada (hexagram) */ - 0x00, /* 0x0adb (filledrectbullet) */ - 0x00, /* 0x0adc (filledlefttribullet) */ - 0x00, /* 0x0add (filledrighttribullet) */ - 0x00, /* 0x0ade (emfilledcircle) */ - 0x00, /* 0x0adf (emfilledrect) */ - 0x00, /* 0x0ae0 (enopencircbullet) */ - 0x00, /* 0x0ae1 (enopensquarebullet) */ - 0x00, /* 0x0ae2 (openrectbullet) */ - 0x00, /* 0x0ae3 (opentribulletup) */ - 0x00, /* 0x0ae4 (opentribulletdown) */ - 0x00, /* 0x0ae5 (openstar) */ - 0x00, /* 0x0ae6 (enfilledcircbullet) */ - 0x00, /* 0x0ae7 (enfilledsqbullet) */ - 0x00, /* 0x0ae8 (filledtribulletup) */ - 0x00, /* 0x0ae9 (filledtribulletdown) */ - 0x00, /* 0x0aea (leftpointer) */ - 0x00, /* 0x0aeb (rightpointer) */ - 0x00, /* 0x0aec (club) */ - 0x00, /* 0x0aed (diamond) */ - 0x00, /* 0x0aee (heart) */ - 0x00, /* 0x0aef */ - 0x00, /* 0x0af0 (maltesecross) */ - 0x00, /* 0x0af1 (dagger) */ - 0x00, /* 0x0af2 (doubledagger) */ - 0x00, /* 0x0af3 (checkmark) */ - 0x00, /* 0x0af4 (ballotcross) */ - 0x00, /* 0x0af5 (musicalsharp) */ - 0x00, /* 0x0af6 (musicalflat) */ - 0x00, /* 0x0af7 (malesymbol) */ - 0x00, /* 0x0af8 (femalesymbol) */ - 0x00, /* 0x0af9 (telephone) */ - 0x00, /* 0x0afa (telephonerecorder) */ - 0x00, /* 0x0afb (phonographcopyright) */ - 0x00, /* 0x0afc (caret) */ - 0x00, /* 0x0afd (singlelowquotemark) */ - 0x00, /* 0x0afe (doublelowquotemark) */ - 0x00, /* 0x0aff (cursor) */ + { /* 0x0a00 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a01 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a02 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a03 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a04 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a05 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a06 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a07 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a08 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a09 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a0a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a0b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a0c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a0d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a0e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a0f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a10 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a11 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a12 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a13 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a14 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a15 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a16 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a17 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a18 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a19 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a1a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a1b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a1c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a1d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a1e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a1f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a20 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a21 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a22 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a23 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a24 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a25 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a26 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a27 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a28 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a29 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a2a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a2b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a2c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a2d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a2e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a2f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a30 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a31 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a32 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a33 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a34 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a35 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a36 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a37 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a38 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a39 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a3a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a3b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a3c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a3d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a3e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a3f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a40 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a41 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a42 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a43 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a44 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a45 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a46 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a47 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a48 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a49 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a4a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a4b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a4c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a4d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a4e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a4f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a50 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a51 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a52 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a53 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a54 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a55 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a56 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a57 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a58 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a59 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a5a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a5b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a5c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a5d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a5e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a5f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a60 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a61 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a62 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a63 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a64 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a65 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a66 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a67 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a68 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a69 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a6a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a6b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a6c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a6d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a6e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a6f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a70 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a71 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a72 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a73 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a74 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a75 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a76 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a77 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a78 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a79 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a7a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a7b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a7c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a7d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a7e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a7f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a80 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a81 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a82 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a83 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a84 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a85 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a86 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a87 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a88 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a89 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a8a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a8b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a8c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a8d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a8e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a8f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a90 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a91 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a92 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a93 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a94 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a95 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a96 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a97 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a98 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a99 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a9a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a9b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a9c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a9d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a9e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0a9f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0aa0 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0aa1 (emspace) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0aa2 (enspace) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0aa3 (em3space) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0aa4 (em4space) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0aa5 (digitspace) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0aa6 (punctspace) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0aa7 (thinspace) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0aa8 (hairspace) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0aa9 (emdash) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0aaa (endash) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0aab */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0aac (signifblank) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0aad */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0aae (ellipsis) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0aaf (doubbaselinedot) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ab0 (onethird) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ab1 (twothirds) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ab2 (onefifth) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ab3 (twofifths) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ab4 (threefifths) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ab5 (fourfifths) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ab6 (onesixth) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ab7 (fivesixths) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ab8 (careof) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ab9 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0aba */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0abb (figdash) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0abc (leftanglebracket) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0abd (decimalpoint) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0abe (rightanglebracket) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0abf (marker) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ac0 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ac1 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ac2 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ac3 (oneeighth) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ac4 (threeeighths) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ac5 (fiveeighths) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ac6 (seveneighths) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ac7 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ac8 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ac9 (trademark) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0aca (signaturemark) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0acb (trademarkincircle) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0acc (leftopentriangle) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0acd (rightopentriangle) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ace (emopencircle) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0acf (emopenrectangle) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ad0 (leftsinglequotemark) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ad1 (rightsinglequotemark) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ad2 (leftdoublequotemark) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ad3 (rightdoublequotemark) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ad4 (prescription) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ad5 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ad6 (minutes) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ad7 (seconds) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ad8 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ad9 (latincross) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ada (hexagram) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0adb (filledrectbullet) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0adc (filledlefttribullet) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0add (filledrighttribullet) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ade (emfilledcircle) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0adf (emfilledrect) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ae0 (enopencircbullet) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ae1 (enopensquarebullet) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ae2 (openrectbullet) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ae3 (opentribulletup) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ae4 (opentribulletdown) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ae5 (openstar) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ae6 (enfilledcircbullet) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ae7 (enfilledsqbullet) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ae8 (filledtribulletup) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ae9 (filledtribulletdown) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0aea (leftpointer) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0aeb (rightpointer) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0aec (club) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0aed (diamond) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0aee (heart) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0aef */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0af0 (maltesecross) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0af1 (dagger) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0af2 (doubledagger) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0af3 (checkmark) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0af4 (ballotcross) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0af5 (musicalsharp) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0af6 (musicalflat) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0af7 (malesymbol) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0af8 (femalesymbol) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0af9 (telephone) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0afa (telephonerecorder) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0afb (phonographcopyright) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0afc (caret) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0afd (singlelowquotemark) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0afe (doublelowquotemark) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0aff (cursor) */ + .scancode = 0x00, + .flags = 0x00 + }, + }, { /* 0x0b?? */ - 0x00, /* 0x0b00 */ - 0x00, /* 0x0b01 */ - 0x00, /* 0x0b02 */ - 0x00, /* 0x0b03 */ - 0x00, /* 0x0b04 */ - 0x00, /* 0x0b05 */ - 0x00, /* 0x0b06 */ - 0x00, /* 0x0b07 */ - 0x00, /* 0x0b08 */ - 0x00, /* 0x0b09 */ - 0x00, /* 0x0b0a */ - 0x00, /* 0x0b0b */ - 0x00, /* 0x0b0c */ - 0x00, /* 0x0b0d */ - 0x00, /* 0x0b0e */ - 0x00, /* 0x0b0f */ - 0x00, /* 0x0b10 */ - 0x00, /* 0x0b11 */ - 0x00, /* 0x0b12 */ - 0x00, /* 0x0b13 */ - 0x00, /* 0x0b14 */ - 0x00, /* 0x0b15 */ - 0x00, /* 0x0b16 */ - 0x00, /* 0x0b17 */ - 0x00, /* 0x0b18 */ - 0x00, /* 0x0b19 */ - 0x00, /* 0x0b1a */ - 0x00, /* 0x0b1b */ - 0x00, /* 0x0b1c */ - 0x00, /* 0x0b1d */ - 0x00, /* 0x0b1e */ - 0x00, /* 0x0b1f */ - 0x00, /* 0x0b20 */ - 0x00, /* 0x0b21 */ - 0x00, /* 0x0b22 */ - 0x00, /* 0x0b23 */ - 0x00, /* 0x0b24 */ - 0x00, /* 0x0b25 */ - 0x00, /* 0x0b26 */ - 0x00, /* 0x0b27 */ - 0x00, /* 0x0b28 */ - 0x00, /* 0x0b29 */ - 0x00, /* 0x0b2a */ - 0x00, /* 0x0b2b */ - 0x00, /* 0x0b2c */ - 0x00, /* 0x0b2d */ - 0x00, /* 0x0b2e */ - 0x00, /* 0x0b2f */ - 0x00, /* 0x0b30 */ - 0x00, /* 0x0b31 */ - 0x00, /* 0x0b32 */ - 0x00, /* 0x0b33 */ - 0x00, /* 0x0b34 */ - 0x00, /* 0x0b35 */ - 0x00, /* 0x0b36 */ - 0x00, /* 0x0b37 */ - 0x00, /* 0x0b38 */ - 0x00, /* 0x0b39 */ - 0x00, /* 0x0b3a */ - 0x00, /* 0x0b3b */ - 0x00, /* 0x0b3c */ - 0x00, /* 0x0b3d */ - 0x00, /* 0x0b3e */ - 0x00, /* 0x0b3f */ - 0x00, /* 0x0b40 */ - 0x00, /* 0x0b41 */ - 0x00, /* 0x0b42 */ - 0x00, /* 0x0b43 */ - 0x00, /* 0x0b44 */ - 0x00, /* 0x0b45 */ - 0x00, /* 0x0b46 */ - 0x00, /* 0x0b47 */ - 0x00, /* 0x0b48 */ - 0x00, /* 0x0b49 */ - 0x00, /* 0x0b4a */ - 0x00, /* 0x0b4b */ - 0x00, /* 0x0b4c */ - 0x00, /* 0x0b4d */ - 0x00, /* 0x0b4e */ - 0x00, /* 0x0b4f */ - 0x00, /* 0x0b50 */ - 0x00, /* 0x0b51 */ - 0x00, /* 0x0b52 */ - 0x00, /* 0x0b53 */ - 0x00, /* 0x0b54 */ - 0x00, /* 0x0b55 */ - 0x00, /* 0x0b56 */ - 0x00, /* 0x0b57 */ - 0x00, /* 0x0b58 */ - 0x00, /* 0x0b59 */ - 0x00, /* 0x0b5a */ - 0x00, /* 0x0b5b */ - 0x00, /* 0x0b5c */ - 0x00, /* 0x0b5d */ - 0x00, /* 0x0b5e */ - 0x00, /* 0x0b5f */ - 0x00, /* 0x0b60 */ - 0x00, /* 0x0b61 */ - 0x00, /* 0x0b62 */ - 0x00, /* 0x0b63 */ - 0x00, /* 0x0b64 */ - 0x00, /* 0x0b65 */ - 0x00, /* 0x0b66 */ - 0x00, /* 0x0b67 */ - 0x00, /* 0x0b68 */ - 0x00, /* 0x0b69 */ - 0x00, /* 0x0b6a */ - 0x00, /* 0x0b6b */ - 0x00, /* 0x0b6c */ - 0x00, /* 0x0b6d */ - 0x00, /* 0x0b6e */ - 0x00, /* 0x0b6f */ - 0x00, /* 0x0b70 */ - 0x00, /* 0x0b71 */ - 0x00, /* 0x0b72 */ - 0x00, /* 0x0b73 */ - 0x00, /* 0x0b74 */ - 0x00, /* 0x0b75 */ - 0x00, /* 0x0b76 */ - 0x00, /* 0x0b77 */ - 0x00, /* 0x0b78 */ - 0x00, /* 0x0b79 */ - 0x00, /* 0x0b7a */ - 0x00, /* 0x0b7b */ - 0x00, /* 0x0b7c */ - 0x00, /* 0x0b7d */ - 0x00, /* 0x0b7e */ - 0x00, /* 0x0b7f */ - 0x00, /* 0x0b80 */ - 0x00, /* 0x0b81 */ - 0x00, /* 0x0b82 */ - 0x00, /* 0x0b83 */ - 0x00, /* 0x0b84 */ - 0x00, /* 0x0b85 */ - 0x00, /* 0x0b86 */ - 0x00, /* 0x0b87 */ - 0x00, /* 0x0b88 */ - 0x00, /* 0x0b89 */ - 0x00, /* 0x0b8a */ - 0x00, /* 0x0b8b */ - 0x00, /* 0x0b8c */ - 0x00, /* 0x0b8d */ - 0x00, /* 0x0b8e */ - 0x00, /* 0x0b8f */ - 0x00, /* 0x0b90 */ - 0x00, /* 0x0b91 */ - 0x00, /* 0x0b92 */ - 0x00, /* 0x0b93 */ - 0x00, /* 0x0b94 */ - 0x00, /* 0x0b95 */ - 0x00, /* 0x0b96 */ - 0x00, /* 0x0b97 */ - 0x00, /* 0x0b98 */ - 0x00, /* 0x0b99 */ - 0x00, /* 0x0b9a */ - 0x00, /* 0x0b9b */ - 0x00, /* 0x0b9c */ - 0x00, /* 0x0b9d */ - 0x00, /* 0x0b9e */ - 0x00, /* 0x0b9f */ - 0x00, /* 0x0ba0 */ - 0x00, /* 0x0ba1 */ - 0x00, /* 0x0ba2 */ - 0x00, /* 0x0ba3 (leftcaret) */ - 0x00, /* 0x0ba4 */ - 0x00, /* 0x0ba5 */ - 0x00, /* 0x0ba6 (rightcaret) */ - 0x00, /* 0x0ba7 */ - 0x00, /* 0x0ba8 (downcaret) */ - 0x00, /* 0x0ba9 (upcaret) */ - 0x00, /* 0x0baa */ - 0x00, /* 0x0bab */ - 0x00, /* 0x0bac */ - 0x00, /* 0x0bad */ - 0x00, /* 0x0bae */ - 0x00, /* 0x0baf */ - 0x00, /* 0x0bb0 */ - 0x00, /* 0x0bb1 */ - 0x00, /* 0x0bb2 */ - 0x00, /* 0x0bb3 */ - 0x00, /* 0x0bb4 */ - 0x00, /* 0x0bb5 */ - 0x00, /* 0x0bb6 */ - 0x00, /* 0x0bb7 */ - 0x00, /* 0x0bb8 */ - 0x00, /* 0x0bb9 */ - 0x00, /* 0x0bba */ - 0x00, /* 0x0bbb */ - 0x00, /* 0x0bbc */ - 0x00, /* 0x0bbd */ - 0x00, /* 0x0bbe */ - 0x00, /* 0x0bbf */ - 0x00, /* 0x0bc0 (overbar) */ - 0x00, /* 0x0bc1 */ - 0x00, /* 0x0bc2 (downtack) */ - 0x00, /* 0x0bc3 (upshoe) */ - 0x00, /* 0x0bc4 (downstile) */ - 0x00, /* 0x0bc5 */ - 0x00, /* 0x0bc6 (underbar) */ - 0x00, /* 0x0bc7 */ - 0x00, /* 0x0bc8 */ - 0x00, /* 0x0bc9 */ - 0x00, /* 0x0bca (jot) */ - 0x00, /* 0x0bcb */ - 0x00, /* 0x0bcc (quad) */ - 0x00, /* 0x0bcd */ - 0x00, /* 0x0bce (uptack) */ - 0x00, /* 0x0bcf (circle) */ - 0x00, /* 0x0bd0 */ - 0x00, /* 0x0bd1 */ - 0x00, /* 0x0bd2 */ - 0x00, /* 0x0bd3 (upstile) */ - 0x00, /* 0x0bd4 */ - 0x00, /* 0x0bd5 */ - 0x00, /* 0x0bd6 (downshoe) */ - 0x00, /* 0x0bd7 */ - 0x00, /* 0x0bd8 (rightshoe) */ - 0x00, /* 0x0bd9 */ - 0x00, /* 0x0bda (leftshoe) */ - 0x00, /* 0x0bdb */ - 0x00, /* 0x0bdc (lefttack) */ - 0x00, /* 0x0bdd */ - 0x00, /* 0x0bde */ - 0x00, /* 0x0bdf */ - 0x00, /* 0x0be0 */ - 0x00, /* 0x0be1 */ - 0x00, /* 0x0be2 */ - 0x00, /* 0x0be3 */ - 0x00, /* 0x0be4 */ - 0x00, /* 0x0be5 */ - 0x00, /* 0x0be6 */ - 0x00, /* 0x0be7 */ - 0x00, /* 0x0be8 */ - 0x00, /* 0x0be9 */ - 0x00, /* 0x0bea */ - 0x00, /* 0x0beb */ - 0x00, /* 0x0bec */ - 0x00, /* 0x0bed */ - 0x00, /* 0x0bee */ - 0x00, /* 0x0bef */ - 0x00, /* 0x0bf0 */ - 0x00, /* 0x0bf1 */ - 0x00, /* 0x0bf2 */ - 0x00, /* 0x0bf3 */ - 0x00, /* 0x0bf4 */ - 0x00, /* 0x0bf5 */ - 0x00, /* 0x0bf6 */ - 0x00, /* 0x0bf7 */ - 0x00, /* 0x0bf8 */ - 0x00, /* 0x0bf9 */ - 0x00, /* 0x0bfa */ - 0x00, /* 0x0bfb */ - 0x00, /* 0x0bfc (righttack) */ - 0x00, /* 0x0bfd */ - 0x00, /* 0x0bfe */ - 0x00, /* 0x0bff */ + { /* 0x0b00 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b01 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b02 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b03 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b04 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b05 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b06 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b07 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b08 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b09 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b0a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b0b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b0c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b0d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b0e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b0f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b10 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b11 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b12 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b13 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b14 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b15 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b16 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b17 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b18 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b19 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b1a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b1b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b1c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b1d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b1e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b1f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b20 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b21 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b22 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b23 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b24 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b25 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b26 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b27 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b28 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b29 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b2a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b2b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b2c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b2d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b2e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b2f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b30 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b31 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b32 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b33 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b34 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b35 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b36 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b37 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b38 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b39 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b3a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b3b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b3c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b3d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b3e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b3f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b40 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b41 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b42 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b43 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b44 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b45 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b46 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b47 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b48 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b49 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b4a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b4b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b4c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b4d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b4e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b4f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b50 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b51 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b52 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b53 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b54 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b55 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b56 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b57 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b58 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b59 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b5a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b5b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b5c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b5d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b5e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b5f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b60 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b61 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b62 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b63 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b64 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b65 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b66 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b67 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b68 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b69 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b6a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b6b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b6c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b6d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b6e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b6f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b70 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b71 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b72 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b73 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b74 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b75 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b76 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b77 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b78 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b79 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b7a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b7b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b7c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b7d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b7e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b7f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b80 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b81 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b82 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b83 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b84 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b85 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b86 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b87 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b88 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b89 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b8a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b8b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b8c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b8d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b8e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b8f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b90 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b91 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b92 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b93 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b94 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b95 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b96 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b97 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b98 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b99 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b9a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b9b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b9c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b9d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b9e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0b9f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ba0 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ba1 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ba2 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ba3 (leftcaret) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ba4 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ba5 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ba6 (rightcaret) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ba7 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ba8 (downcaret) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ba9 (upcaret) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0baa */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0bab */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0bac */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0bad */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0bae */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0baf */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0bb0 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0bb1 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0bb2 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0bb3 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0bb4 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0bb5 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0bb6 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0bb7 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0bb8 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0bb9 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0bba */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0bbb */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0bbc */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0bbd */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0bbe */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0bbf */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0bc0 (overbar) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0bc1 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0bc2 (downtack) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0bc3 (upshoe) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0bc4 (downstile) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0bc5 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0bc6 (underbar) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0bc7 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0bc8 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0bc9 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0bca (jot) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0bcb */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0bcc (quad) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0bcd */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0bce (uptack) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0bcf (circle) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0bd0 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0bd1 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0bd2 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0bd3 (upstile) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0bd4 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0bd5 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0bd6 (downshoe) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0bd7 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0bd8 (rightshoe) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0bd9 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0bda (leftshoe) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0bdb */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0bdc (lefttack) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0bdd */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0bde */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0bdf */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0be0 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0be1 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0be2 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0be3 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0be4 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0be5 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0be6 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0be7 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0be8 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0be9 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0bea */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0beb */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0bec */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0bed */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0bee */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0bef */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0bf0 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0bf1 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0bf2 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0bf3 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0bf4 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0bf5 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0bf6 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0bf7 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0bf8 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0bf9 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0bfa */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0bfb */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0bfc (righttack) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0bfd */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0bfe */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0bff */ + .scancode = 0x00, + .flags = 0x00 + }, + }, { /* 0x0c?? */ - 0x00, /* 0x0c00 */ - 0x00, /* 0x0c01 */ - 0x00, /* 0x0c02 */ - 0x00, /* 0x0c03 */ - 0x00, /* 0x0c04 */ - 0x00, /* 0x0c05 */ - 0x00, /* 0x0c06 */ - 0x00, /* 0x0c07 */ - 0x00, /* 0x0c08 */ - 0x00, /* 0x0c09 */ - 0x00, /* 0x0c0a */ - 0x00, /* 0x0c0b */ - 0x00, /* 0x0c0c */ - 0x00, /* 0x0c0d */ - 0x00, /* 0x0c0e */ - 0x00, /* 0x0c0f */ - 0x00, /* 0x0c10 */ - 0x00, /* 0x0c11 */ - 0x00, /* 0x0c12 */ - 0x00, /* 0x0c13 */ - 0x00, /* 0x0c14 */ - 0x00, /* 0x0c15 */ - 0x00, /* 0x0c16 */ - 0x00, /* 0x0c17 */ - 0x00, /* 0x0c18 */ - 0x00, /* 0x0c19 */ - 0x00, /* 0x0c1a */ - 0x00, /* 0x0c1b */ - 0x00, /* 0x0c1c */ - 0x00, /* 0x0c1d */ - 0x00, /* 0x0c1e */ - 0x00, /* 0x0c1f */ - 0x00, /* 0x0c20 */ - 0x00, /* 0x0c21 */ - 0x00, /* 0x0c22 */ - 0x00, /* 0x0c23 */ - 0x00, /* 0x0c24 */ - 0x00, /* 0x0c25 */ - 0x00, /* 0x0c26 */ - 0x00, /* 0x0c27 */ - 0x00, /* 0x0c28 */ - 0x00, /* 0x0c29 */ - 0x00, /* 0x0c2a */ - 0x00, /* 0x0c2b */ - 0x00, /* 0x0c2c */ - 0x00, /* 0x0c2d */ - 0x00, /* 0x0c2e */ - 0x00, /* 0x0c2f */ - 0x00, /* 0x0c30 */ - 0x00, /* 0x0c31 */ - 0x00, /* 0x0c32 */ - 0x00, /* 0x0c33 */ - 0x00, /* 0x0c34 */ - 0x00, /* 0x0c35 */ - 0x00, /* 0x0c36 */ - 0x00, /* 0x0c37 */ - 0x00, /* 0x0c38 */ - 0x00, /* 0x0c39 */ - 0x00, /* 0x0c3a */ - 0x00, /* 0x0c3b */ - 0x00, /* 0x0c3c */ - 0x00, /* 0x0c3d */ - 0x00, /* 0x0c3e */ - 0x00, /* 0x0c3f */ - 0x00, /* 0x0c40 */ - 0x00, /* 0x0c41 */ - 0x00, /* 0x0c42 */ - 0x00, /* 0x0c43 */ - 0x00, /* 0x0c44 */ - 0x00, /* 0x0c45 */ - 0x00, /* 0x0c46 */ - 0x00, /* 0x0c47 */ - 0x00, /* 0x0c48 */ - 0x00, /* 0x0c49 */ - 0x00, /* 0x0c4a */ - 0x00, /* 0x0c4b */ - 0x00, /* 0x0c4c */ - 0x00, /* 0x0c4d */ - 0x00, /* 0x0c4e */ - 0x00, /* 0x0c4f */ - 0x00, /* 0x0c50 */ - 0x00, /* 0x0c51 */ - 0x00, /* 0x0c52 */ - 0x00, /* 0x0c53 */ - 0x00, /* 0x0c54 */ - 0x00, /* 0x0c55 */ - 0x00, /* 0x0c56 */ - 0x00, /* 0x0c57 */ - 0x00, /* 0x0c58 */ - 0x00, /* 0x0c59 */ - 0x00, /* 0x0c5a */ - 0x00, /* 0x0c5b */ - 0x00, /* 0x0c5c */ - 0x00, /* 0x0c5d */ - 0x00, /* 0x0c5e */ - 0x00, /* 0x0c5f */ - 0x00, /* 0x0c60 */ - 0x00, /* 0x0c61 */ - 0x00, /* 0x0c62 */ - 0x00, /* 0x0c63 */ - 0x00, /* 0x0c64 */ - 0x00, /* 0x0c65 */ - 0x00, /* 0x0c66 */ - 0x00, /* 0x0c67 */ - 0x00, /* 0x0c68 */ - 0x00, /* 0x0c69 */ - 0x00, /* 0x0c6a */ - 0x00, /* 0x0c6b */ - 0x00, /* 0x0c6c */ - 0x00, /* 0x0c6d */ - 0x00, /* 0x0c6e */ - 0x00, /* 0x0c6f */ - 0x00, /* 0x0c70 */ - 0x00, /* 0x0c71 */ - 0x00, /* 0x0c72 */ - 0x00, /* 0x0c73 */ - 0x00, /* 0x0c74 */ - 0x00, /* 0x0c75 */ - 0x00, /* 0x0c76 */ - 0x00, /* 0x0c77 */ - 0x00, /* 0x0c78 */ - 0x00, /* 0x0c79 */ - 0x00, /* 0x0c7a */ - 0x00, /* 0x0c7b */ - 0x00, /* 0x0c7c */ - 0x00, /* 0x0c7d */ - 0x00, /* 0x0c7e */ - 0x00, /* 0x0c7f */ - 0x00, /* 0x0c80 */ - 0x00, /* 0x0c81 */ - 0x00, /* 0x0c82 */ - 0x00, /* 0x0c83 */ - 0x00, /* 0x0c84 */ - 0x00, /* 0x0c85 */ - 0x00, /* 0x0c86 */ - 0x00, /* 0x0c87 */ - 0x00, /* 0x0c88 */ - 0x00, /* 0x0c89 */ - 0x00, /* 0x0c8a */ - 0x00, /* 0x0c8b */ - 0x00, /* 0x0c8c */ - 0x00, /* 0x0c8d */ - 0x00, /* 0x0c8e */ - 0x00, /* 0x0c8f */ - 0x00, /* 0x0c90 */ - 0x00, /* 0x0c91 */ - 0x00, /* 0x0c92 */ - 0x00, /* 0x0c93 */ - 0x00, /* 0x0c94 */ - 0x00, /* 0x0c95 */ - 0x00, /* 0x0c96 */ - 0x00, /* 0x0c97 */ - 0x00, /* 0x0c98 */ - 0x00, /* 0x0c99 */ - 0x00, /* 0x0c9a */ - 0x00, /* 0x0c9b */ - 0x00, /* 0x0c9c */ - 0x00, /* 0x0c9d */ - 0x00, /* 0x0c9e */ - 0x00, /* 0x0c9f */ - 0x00, /* 0x0ca0 */ - 0x00, /* 0x0ca1 */ - 0x00, /* 0x0ca2 */ - 0x00, /* 0x0ca3 */ - 0x00, /* 0x0ca4 */ - 0x00, /* 0x0ca5 */ - 0x00, /* 0x0ca6 */ - 0x00, /* 0x0ca7 */ - 0x00, /* 0x0ca8 */ - 0x00, /* 0x0ca9 */ - 0x00, /* 0x0caa */ - 0x00, /* 0x0cab */ - 0x00, /* 0x0cac */ - 0x00, /* 0x0cad */ - 0x00, /* 0x0cae */ - 0x00, /* 0x0caf */ - 0x00, /* 0x0cb0 */ - 0x00, /* 0x0cb1 */ - 0x00, /* 0x0cb2 */ - 0x00, /* 0x0cb3 */ - 0x00, /* 0x0cb4 */ - 0x00, /* 0x0cb5 */ - 0x00, /* 0x0cb6 */ - 0x00, /* 0x0cb7 */ - 0x00, /* 0x0cb8 */ - 0x00, /* 0x0cb9 */ - 0x00, /* 0x0cba */ - 0x00, /* 0x0cbb */ - 0x00, /* 0x0cbc */ - 0x00, /* 0x0cbd */ - 0x00, /* 0x0cbe */ - 0x00, /* 0x0cbf */ - 0x00, /* 0x0cc0 */ - 0x00, /* 0x0cc1 */ - 0x00, /* 0x0cc2 */ - 0x00, /* 0x0cc3 */ - 0x00, /* 0x0cc4 */ - 0x00, /* 0x0cc5 */ - 0x00, /* 0x0cc6 */ - 0x00, /* 0x0cc7 */ - 0x00, /* 0x0cc8 */ - 0x00, /* 0x0cc9 */ - 0x00, /* 0x0cca */ - 0x00, /* 0x0ccb */ - 0x00, /* 0x0ccc */ - 0x00, /* 0x0ccd */ - 0x00, /* 0x0cce */ - 0x00, /* 0x0ccf */ - 0x00, /* 0x0cd0 */ - 0x00, /* 0x0cd1 */ - 0x00, /* 0x0cd2 */ - 0x00, /* 0x0cd3 */ - 0x00, /* 0x0cd4 */ - 0x00, /* 0x0cd5 */ - 0x00, /* 0x0cd6 */ - 0x00, /* 0x0cd7 */ - 0x00, /* 0x0cd8 */ - 0x00, /* 0x0cd9 */ - 0x00, /* 0x0cda */ - 0x00, /* 0x0cdb */ - 0x00, /* 0x0cdc */ - 0x00, /* 0x0cdd */ - 0x00, /* 0x0cde */ - 0x00, /* 0x0cdf (hebrew_doublelowline) */ - 0x00, /* 0x0ce0 (hebrew_aleph) */ - 0x00, /* 0x0ce1 (hebrew_beth) */ - 0x00, /* 0x0ce2 (hebrew_gimmel) */ - 0x00, /* 0x0ce3 (hebrew_daleth) */ - 0x00, /* 0x0ce4 (hebrew_he) */ - 0x00, /* 0x0ce5 (hebrew_waw) */ - 0x00, /* 0x0ce6 (hebrew_zayin) */ - 0x00, /* 0x0ce7 (hebrew_het) */ - 0x00, /* 0x0ce8 (hebrew_teth) */ - 0x00, /* 0x0ce9 (hebrew_yod) */ - 0x00, /* 0x0cea (hebrew_finalkaph) */ - 0x00, /* 0x0ceb (hebrew_kaph) */ - 0x00, /* 0x0cec (hebrew_lamed) */ - 0x00, /* 0x0ced (hebrew_finalmem) */ - 0x00, /* 0x0cee (hebrew_mem) */ - 0x00, /* 0x0cef (hebrew_finalnun) */ - 0x00, /* 0x0cf0 (hebrew_nun) */ - 0x00, /* 0x0cf1 (hebrew_samekh) */ - 0x00, /* 0x0cf2 (hebrew_ayin) */ - 0x00, /* 0x0cf3 (hebrew_finalpe) */ - 0x00, /* 0x0cf4 (hebrew_pe) */ - 0x00, /* 0x0cf5 (hebrew_finalzadi) */ - 0x00, /* 0x0cf6 (hebrew_zadi) */ - 0x00, /* 0x0cf7 (hebrew_kuf) */ - 0x00, /* 0x0cf8 (hebrew_resh) */ - 0x00, /* 0x0cf9 (hebrew_shin) */ - 0x00, /* 0x0cfa (hebrew_taf) */ - 0x00, /* 0x0cfb */ - 0x00, /* 0x0cfc */ - 0x00, /* 0x0cfd */ - 0x00, /* 0x0cfe */ - 0x00, /* 0x0cff */ + { /* 0x0c00 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c01 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c02 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c03 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c04 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c05 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c06 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c07 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c08 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c09 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c0a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c0b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c0c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c0d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c0e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c0f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c10 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c11 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c12 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c13 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c14 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c15 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c16 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c17 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c18 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c19 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c1a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c1b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c1c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c1d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c1e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c1f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c20 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c21 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c22 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c23 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c24 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c25 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c26 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c27 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c28 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c29 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c2a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c2b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c2c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c2d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c2e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c2f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c30 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c31 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c32 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c33 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c34 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c35 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c36 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c37 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c38 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c39 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c3a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c3b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c3c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c3d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c3e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c3f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c40 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c41 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c42 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c43 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c44 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c45 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c46 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c47 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c48 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c49 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c4a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c4b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c4c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c4d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c4e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c4f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c50 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c51 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c52 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c53 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c54 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c55 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c56 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c57 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c58 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c59 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c5a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c5b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c5c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c5d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c5e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c5f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c60 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c61 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c62 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c63 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c64 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c65 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c66 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c67 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c68 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c69 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c6a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c6b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c6c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c6d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c6e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c6f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c70 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c71 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c72 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c73 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c74 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c75 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c76 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c77 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c78 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c79 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c7a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c7b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c7c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c7d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c7e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c7f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c80 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c81 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c82 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c83 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c84 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c85 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c86 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c87 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c88 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c89 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c8a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c8b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c8c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c8d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c8e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c8f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c90 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c91 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c92 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c93 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c94 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c95 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c96 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c97 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c98 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c99 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c9a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c9b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c9c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c9d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c9e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0c9f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ca0 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ca1 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ca2 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ca3 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ca4 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ca5 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ca6 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ca7 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ca8 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ca9 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0caa */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0cab */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0cac */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0cad */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0cae */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0caf */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0cb0 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0cb1 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0cb2 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0cb3 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0cb4 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0cb5 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0cb6 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0cb7 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0cb8 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0cb9 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0cba */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0cbb */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0cbc */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0cbd */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0cbe */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0cbf */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0cc0 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0cc1 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0cc2 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0cc3 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0cc4 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0cc5 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0cc6 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0cc7 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0cc8 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0cc9 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0cca */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ccb */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ccc */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ccd */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0cce */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ccf */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0cd0 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0cd1 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0cd2 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0cd3 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0cd4 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0cd5 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0cd6 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0cd7 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0cd8 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0cd9 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0cda */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0cdb */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0cdc */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0cdd */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0cde */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0cdf (hebrew_doublelowline) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ce0 (hebrew_aleph) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ce1 (hebrew_beth) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ce2 (hebrew_gimmel) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ce3 (hebrew_daleth) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ce4 (hebrew_he) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ce5 (hebrew_waw) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ce6 (hebrew_zayin) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ce7 (hebrew_het) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ce8 (hebrew_teth) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ce9 (hebrew_yod) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0cea (hebrew_finalkaph) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ceb (hebrew_kaph) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0cec (hebrew_lamed) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ced (hebrew_finalmem) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0cee (hebrew_mem) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0cef (hebrew_finalnun) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0cf0 (hebrew_nun) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0cf1 (hebrew_samekh) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0cf2 (hebrew_ayin) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0cf3 (hebrew_finalpe) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0cf4 (hebrew_pe) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0cf5 (hebrew_finalzadi) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0cf6 (hebrew_zadi) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0cf7 (hebrew_kuf) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0cf8 (hebrew_resh) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0cf9 (hebrew_shin) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0cfa (hebrew_taf) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0cfb */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0cfc */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0cfd */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0cfe */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0cff */ + .scancode = 0x00, + .flags = 0x00 + }, + }, { /* 0x0d?? */ - 0x00, /* 0x0d00 */ - 0x00, /* 0x0d01 */ - 0x00, /* 0x0d02 */ - 0x00, /* 0x0d03 */ - 0x00, /* 0x0d04 */ - 0x00, /* 0x0d05 */ - 0x00, /* 0x0d06 */ - 0x00, /* 0x0d07 */ - 0x00, /* 0x0d08 */ - 0x00, /* 0x0d09 */ - 0x00, /* 0x0d0a */ - 0x00, /* 0x0d0b */ - 0x00, /* 0x0d0c */ - 0x00, /* 0x0d0d */ - 0x00, /* 0x0d0e */ - 0x00, /* 0x0d0f */ - 0x00, /* 0x0d10 */ - 0x00, /* 0x0d11 */ - 0x00, /* 0x0d12 */ - 0x00, /* 0x0d13 */ - 0x00, /* 0x0d14 */ - 0x00, /* 0x0d15 */ - 0x00, /* 0x0d16 */ - 0x00, /* 0x0d17 */ - 0x00, /* 0x0d18 */ - 0x00, /* 0x0d19 */ - 0x00, /* 0x0d1a */ - 0x00, /* 0x0d1b */ - 0x00, /* 0x0d1c */ - 0x00, /* 0x0d1d */ - 0x00, /* 0x0d1e */ - 0x00, /* 0x0d1f */ - 0x00, /* 0x0d20 */ - 0x00, /* 0x0d21 */ - 0x00, /* 0x0d22 */ - 0x00, /* 0x0d23 */ - 0x00, /* 0x0d24 */ - 0x00, /* 0x0d25 */ - 0x00, /* 0x0d26 */ - 0x00, /* 0x0d27 */ - 0x00, /* 0x0d28 */ - 0x00, /* 0x0d29 */ - 0x00, /* 0x0d2a */ - 0x00, /* 0x0d2b */ - 0x00, /* 0x0d2c */ - 0x00, /* 0x0d2d */ - 0x00, /* 0x0d2e */ - 0x00, /* 0x0d2f */ - 0x00, /* 0x0d30 */ - 0x00, /* 0x0d31 */ - 0x00, /* 0x0d32 */ - 0x00, /* 0x0d33 */ - 0x00, /* 0x0d34 */ - 0x00, /* 0x0d35 */ - 0x00, /* 0x0d36 */ - 0x00, /* 0x0d37 */ - 0x00, /* 0x0d38 */ - 0x00, /* 0x0d39 */ - 0x00, /* 0x0d3a */ - 0x00, /* 0x0d3b */ - 0x00, /* 0x0d3c */ - 0x00, /* 0x0d3d */ - 0x00, /* 0x0d3e */ - 0x00, /* 0x0d3f */ - 0x00, /* 0x0d40 */ - 0x00, /* 0x0d41 */ - 0x00, /* 0x0d42 */ - 0x00, /* 0x0d43 */ - 0x00, /* 0x0d44 */ - 0x00, /* 0x0d45 */ - 0x00, /* 0x0d46 */ - 0x00, /* 0x0d47 */ - 0x00, /* 0x0d48 */ - 0x00, /* 0x0d49 */ - 0x00, /* 0x0d4a */ - 0x00, /* 0x0d4b */ - 0x00, /* 0x0d4c */ - 0x00, /* 0x0d4d */ - 0x00, /* 0x0d4e */ - 0x00, /* 0x0d4f */ - 0x00, /* 0x0d50 */ - 0x00, /* 0x0d51 */ - 0x00, /* 0x0d52 */ - 0x00, /* 0x0d53 */ - 0x00, /* 0x0d54 */ - 0x00, /* 0x0d55 */ - 0x00, /* 0x0d56 */ - 0x00, /* 0x0d57 */ - 0x00, /* 0x0d58 */ - 0x00, /* 0x0d59 */ - 0x00, /* 0x0d5a */ - 0x00, /* 0x0d5b */ - 0x00, /* 0x0d5c */ - 0x00, /* 0x0d5d */ - 0x00, /* 0x0d5e */ - 0x00, /* 0x0d5f */ - 0x00, /* 0x0d60 */ - 0x00, /* 0x0d61 */ - 0x00, /* 0x0d62 */ - 0x00, /* 0x0d63 */ - 0x00, /* 0x0d64 */ - 0x00, /* 0x0d65 */ - 0x00, /* 0x0d66 */ - 0x00, /* 0x0d67 */ - 0x00, /* 0x0d68 */ - 0x00, /* 0x0d69 */ - 0x00, /* 0x0d6a */ - 0x00, /* 0x0d6b */ - 0x00, /* 0x0d6c */ - 0x00, /* 0x0d6d */ - 0x00, /* 0x0d6e */ - 0x00, /* 0x0d6f */ - 0x00, /* 0x0d70 */ - 0x00, /* 0x0d71 */ - 0x00, /* 0x0d72 */ - 0x00, /* 0x0d73 */ - 0x00, /* 0x0d74 */ - 0x00, /* 0x0d75 */ - 0x00, /* 0x0d76 */ - 0x00, /* 0x0d77 */ - 0x00, /* 0x0d78 */ - 0x00, /* 0x0d79 */ - 0x00, /* 0x0d7a */ - 0x00, /* 0x0d7b */ - 0x00, /* 0x0d7c */ - 0x00, /* 0x0d7d */ - 0x00, /* 0x0d7e */ - 0x00, /* 0x0d7f */ - 0x00, /* 0x0d80 */ - 0x00, /* 0x0d81 */ - 0x00, /* 0x0d82 */ - 0x00, /* 0x0d83 */ - 0x00, /* 0x0d84 */ - 0x00, /* 0x0d85 */ - 0x00, /* 0x0d86 */ - 0x00, /* 0x0d87 */ - 0x00, /* 0x0d88 */ - 0x00, /* 0x0d89 */ - 0x00, /* 0x0d8a */ - 0x00, /* 0x0d8b */ - 0x00, /* 0x0d8c */ - 0x00, /* 0x0d8d */ - 0x00, /* 0x0d8e */ - 0x00, /* 0x0d8f */ - 0x00, /* 0x0d90 */ - 0x00, /* 0x0d91 */ - 0x00, /* 0x0d92 */ - 0x00, /* 0x0d93 */ - 0x00, /* 0x0d94 */ - 0x00, /* 0x0d95 */ - 0x00, /* 0x0d96 */ - 0x00, /* 0x0d97 */ - 0x00, /* 0x0d98 */ - 0x00, /* 0x0d99 */ - 0x00, /* 0x0d9a */ - 0x00, /* 0x0d9b */ - 0x00, /* 0x0d9c */ - 0x00, /* 0x0d9d */ - 0x00, /* 0x0d9e */ - 0x00, /* 0x0d9f */ - 0x00, /* 0x0da0 */ - 0x00, /* 0x0da1 (Thai_kokai) */ - 0x00, /* 0x0da2 (Thai_khokhai) */ - 0x00, /* 0x0da3 (Thai_khokhuat) */ - 0x00, /* 0x0da4 (Thai_khokhwai) */ - 0x00, /* 0x0da5 (Thai_khokhon) */ - 0x00, /* 0x0da6 (Thai_khorakhang) */ - 0x00, /* 0x0da7 (Thai_ngongu) */ - 0x00, /* 0x0da8 (Thai_chochan) */ - 0x00, /* 0x0da9 (Thai_choching) */ - 0x00, /* 0x0daa (Thai_chochang) */ - 0x00, /* 0x0dab (Thai_soso) */ - 0x00, /* 0x0dac (Thai_chochoe) */ - 0x00, /* 0x0dad (Thai_yoying) */ - 0x00, /* 0x0dae (Thai_dochada) */ - 0x00, /* 0x0daf (Thai_topatak) */ - 0x00, /* 0x0db0 (Thai_thothan) */ - 0x00, /* 0x0db1 (Thai_thonangmontho) */ - 0x00, /* 0x0db2 (Thai_thophuthao) */ - 0x00, /* 0x0db3 (Thai_nonen) */ - 0x00, /* 0x0db4 (Thai_dodek) */ - 0x00, /* 0x0db5 (Thai_totao) */ - 0x00, /* 0x0db6 (Thai_thothung) */ - 0x00, /* 0x0db7 (Thai_thothahan) */ - 0x00, /* 0x0db8 (Thai_thothong) */ - 0x00, /* 0x0db9 (Thai_nonu) */ - 0x00, /* 0x0dba (Thai_bobaimai) */ - 0x00, /* 0x0dbb (Thai_popla) */ - 0x00, /* 0x0dbc (Thai_phophung) */ - 0x00, /* 0x0dbd (Thai_fofa) */ - 0x00, /* 0x0dbe (Thai_phophan) */ - 0x00, /* 0x0dbf (Thai_fofan) */ - 0x00, /* 0x0dc0 (Thai_phosamphao) */ - 0x00, /* 0x0dc1 (Thai_moma) */ - 0x00, /* 0x0dc2 (Thai_yoyak) */ - 0x00, /* 0x0dc3 (Thai_rorua) */ - 0x00, /* 0x0dc4 (Thai_ru) */ - 0x00, /* 0x0dc5 (Thai_loling) */ - 0x00, /* 0x0dc6 (Thai_lu) */ - 0x00, /* 0x0dc7 (Thai_wowaen) */ - 0x00, /* 0x0dc8 (Thai_sosala) */ - 0x00, /* 0x0dc9 (Thai_sorusi) */ - 0x00, /* 0x0dca (Thai_sosua) */ - 0x00, /* 0x0dcb (Thai_hohip) */ - 0x00, /* 0x0dcc (Thai_lochula) */ - 0x00, /* 0x0dcd (Thai_oang) */ - 0x00, /* 0x0dce (Thai_honokhuk) */ - 0x00, /* 0x0dcf (Thai_paiyannoi) */ - 0x00, /* 0x0dd0 (Thai_saraa) */ - 0x00, /* 0x0dd1 (Thai_maihanakat) */ - 0x00, /* 0x0dd2 (Thai_saraaa) */ - 0x00, /* 0x0dd3 (Thai_saraam) */ - 0x00, /* 0x0dd4 (Thai_sarai) */ - 0x00, /* 0x0dd5 (Thai_saraii) */ - 0x00, /* 0x0dd6 (Thai_saraue) */ - 0x00, /* 0x0dd7 (Thai_sarauee) */ - 0x00, /* 0x0dd8 (Thai_sarau) */ - 0x00, /* 0x0dd9 (Thai_sarauu) */ - 0x00, /* 0x0dda (Thai_phinthu) */ - 0x00, /* 0x0ddb */ - 0x00, /* 0x0ddc */ - 0x00, /* 0x0ddd */ - 0x00, /* 0x0dde (Thai_maihanakat_maitho) */ - 0x00, /* 0x0ddf (Thai_baht) */ - 0x00, /* 0x0de0 (Thai_sarae) */ - 0x00, /* 0x0de1 (Thai_saraae) */ - 0x00, /* 0x0de2 (Thai_sarao) */ - 0x00, /* 0x0de3 (Thai_saraaimaimuan) */ - 0x00, /* 0x0de4 (Thai_saraaimaimalai) */ - 0x00, /* 0x0de5 (Thai_lakkhangyao) */ - 0x00, /* 0x0de6 (Thai_maiyamok) */ - 0x00, /* 0x0de7 (Thai_maitaikhu) */ - 0x00, /* 0x0de8 (Thai_maiek) */ - 0x00, /* 0x0de9 (Thai_maitho) */ - 0x00, /* 0x0dea (Thai_maitri) */ - 0x00, /* 0x0deb (Thai_maichattawa) */ - 0x00, /* 0x0dec (Thai_thanthakhat) */ - 0x00, /* 0x0ded (Thai_nikhahit) */ - 0x00, /* 0x0dee */ - 0x00, /* 0x0def */ - 0x00, /* 0x0df0 (Thai_leksun) */ - 0x00, /* 0x0df1 (Thai_leknung) */ - 0x00, /* 0x0df2 (Thai_leksong) */ - 0x00, /* 0x0df3 (Thai_leksam) */ - 0x00, /* 0x0df4 (Thai_leksi) */ - 0x00, /* 0x0df5 (Thai_lekha) */ - 0x00, /* 0x0df6 (Thai_lekhok) */ - 0x00, /* 0x0df7 (Thai_lekchet) */ - 0x00, /* 0x0df8 (Thai_lekpaet) */ - 0x00, /* 0x0df9 (Thai_lekkao) */ - 0x00, /* 0x0dfa */ - 0x00, /* 0x0dfb */ - 0x00, /* 0x0dfc */ - 0x00, /* 0x0dfd */ - 0x00, /* 0x0dfe */ - 0x00, /* 0x0dff */ + { /* 0x0d00 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d01 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d02 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d03 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d04 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d05 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d06 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d07 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d08 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d09 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d0a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d0b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d0c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d0d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d0e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d0f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d10 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d11 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d12 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d13 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d14 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d15 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d16 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d17 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d18 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d19 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d1a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d1b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d1c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d1d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d1e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d1f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d20 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d21 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d22 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d23 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d24 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d25 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d26 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d27 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d28 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d29 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d2a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d2b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d2c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d2d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d2e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d2f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d30 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d31 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d32 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d33 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d34 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d35 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d36 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d37 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d38 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d39 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d3a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d3b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d3c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d3d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d3e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d3f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d40 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d41 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d42 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d43 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d44 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d45 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d46 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d47 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d48 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d49 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d4a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d4b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d4c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d4d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d4e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d4f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d50 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d51 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d52 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d53 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d54 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d55 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d56 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d57 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d58 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d59 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d5a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d5b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d5c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d5d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d5e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d5f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d60 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d61 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d62 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d63 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d64 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d65 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d66 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d67 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d68 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d69 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d6a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d6b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d6c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d6d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d6e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d6f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d70 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d71 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d72 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d73 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d74 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d75 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d76 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d77 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d78 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d79 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d7a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d7b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d7c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d7d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d7e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d7f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d80 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d81 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d82 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d83 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d84 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d85 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d86 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d87 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d88 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d89 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d8a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d8b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d8c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d8d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d8e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d8f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d90 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d91 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d92 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d93 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d94 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d95 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d96 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d97 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d98 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d99 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d9a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d9b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d9c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d9d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d9e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0d9f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0da0 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0da1 (Thai_kokai) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0da2 (Thai_khokhai) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0da3 (Thai_khokhuat) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0da4 (Thai_khokhwai) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0da5 (Thai_khokhon) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0da6 (Thai_khorakhang) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0da7 (Thai_ngongu) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0da8 (Thai_chochan) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0da9 (Thai_choching) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0daa (Thai_chochang) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0dab (Thai_soso) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0dac (Thai_chochoe) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0dad (Thai_yoying) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0dae (Thai_dochada) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0daf (Thai_topatak) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0db0 (Thai_thothan) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0db1 (Thai_thonangmontho) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0db2 (Thai_thophuthao) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0db3 (Thai_nonen) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0db4 (Thai_dodek) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0db5 (Thai_totao) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0db6 (Thai_thothung) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0db7 (Thai_thothahan) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0db8 (Thai_thothong) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0db9 (Thai_nonu) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0dba (Thai_bobaimai) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0dbb (Thai_popla) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0dbc (Thai_phophung) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0dbd (Thai_fofa) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0dbe (Thai_phophan) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0dbf (Thai_fofan) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0dc0 (Thai_phosamphao) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0dc1 (Thai_moma) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0dc2 (Thai_yoyak) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0dc3 (Thai_rorua) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0dc4 (Thai_ru) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0dc5 (Thai_loling) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0dc6 (Thai_lu) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0dc7 (Thai_wowaen) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0dc8 (Thai_sosala) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0dc9 (Thai_sorusi) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0dca (Thai_sosua) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0dcb (Thai_hohip) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0dcc (Thai_lochula) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0dcd (Thai_oang) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0dce (Thai_honokhuk) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0dcf (Thai_paiyannoi) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0dd0 (Thai_saraa) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0dd1 (Thai_maihanakat) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0dd2 (Thai_saraaa) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0dd3 (Thai_saraam) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0dd4 (Thai_sarai) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0dd5 (Thai_saraii) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0dd6 (Thai_saraue) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0dd7 (Thai_sarauee) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0dd8 (Thai_sarau) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0dd9 (Thai_sarauu) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0dda (Thai_phinthu) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ddb */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ddc */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ddd */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0dde (Thai_maihanakat_maitho) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ddf (Thai_baht) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0de0 (Thai_sarae) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0de1 (Thai_saraae) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0de2 (Thai_sarao) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0de3 (Thai_saraaimaimuan) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0de4 (Thai_saraaimaimalai) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0de5 (Thai_lakkhangyao) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0de6 (Thai_maiyamok) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0de7 (Thai_maitaikhu) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0de8 (Thai_maiek) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0de9 (Thai_maitho) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0dea (Thai_maitri) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0deb (Thai_maichattawa) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0dec (Thai_thanthakhat) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ded (Thai_nikhahit) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0dee */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0def */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0df0 (Thai_leksun) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0df1 (Thai_leknung) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0df2 (Thai_leksong) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0df3 (Thai_leksam) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0df4 (Thai_leksi) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0df5 (Thai_lekha) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0df6 (Thai_lekhok) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0df7 (Thai_lekchet) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0df8 (Thai_lekpaet) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0df9 (Thai_lekkao) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0dfa */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0dfb */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0dfc */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0dfd */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0dfe */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0dff */ + .scancode = 0x00, + .flags = 0x00 + }, + }, { /* 0x0e?? */ - 0x00, /* 0x0e00 */ - 0x00, /* 0x0e01 */ - 0x00, /* 0x0e02 */ - 0x00, /* 0x0e03 */ - 0x00, /* 0x0e04 */ - 0x00, /* 0x0e05 */ - 0x00, /* 0x0e06 */ - 0x00, /* 0x0e07 */ - 0x00, /* 0x0e08 */ - 0x00, /* 0x0e09 */ - 0x00, /* 0x0e0a */ - 0x00, /* 0x0e0b */ - 0x00, /* 0x0e0c */ - 0x00, /* 0x0e0d */ - 0x00, /* 0x0e0e */ - 0x00, /* 0x0e0f */ - 0x00, /* 0x0e10 */ - 0x00, /* 0x0e11 */ - 0x00, /* 0x0e12 */ - 0x00, /* 0x0e13 */ - 0x00, /* 0x0e14 */ - 0x00, /* 0x0e15 */ - 0x00, /* 0x0e16 */ - 0x00, /* 0x0e17 */ - 0x00, /* 0x0e18 */ - 0x00, /* 0x0e19 */ - 0x00, /* 0x0e1a */ - 0x00, /* 0x0e1b */ - 0x00, /* 0x0e1c */ - 0x00, /* 0x0e1d */ - 0x00, /* 0x0e1e */ - 0x00, /* 0x0e1f */ - 0x00, /* 0x0e20 */ - 0x00, /* 0x0e21 */ - 0x00, /* 0x0e22 */ - 0x00, /* 0x0e23 */ - 0x00, /* 0x0e24 */ - 0x00, /* 0x0e25 */ - 0x00, /* 0x0e26 */ - 0x00, /* 0x0e27 */ - 0x00, /* 0x0e28 */ - 0x00, /* 0x0e29 */ - 0x00, /* 0x0e2a */ - 0x00, /* 0x0e2b */ - 0x00, /* 0x0e2c */ - 0x00, /* 0x0e2d */ - 0x00, /* 0x0e2e */ - 0x00, /* 0x0e2f */ - 0x00, /* 0x0e30 */ - 0x00, /* 0x0e31 */ - 0x00, /* 0x0e32 */ - 0x00, /* 0x0e33 */ - 0x00, /* 0x0e34 */ - 0x00, /* 0x0e35 */ - 0x00, /* 0x0e36 */ - 0x00, /* 0x0e37 */ - 0x00, /* 0x0e38 */ - 0x00, /* 0x0e39 */ - 0x00, /* 0x0e3a */ - 0x00, /* 0x0e3b */ - 0x00, /* 0x0e3c */ - 0x00, /* 0x0e3d */ - 0x00, /* 0x0e3e */ - 0x00, /* 0x0e3f */ - 0x00, /* 0x0e40 */ - 0x00, /* 0x0e41 */ - 0x00, /* 0x0e42 */ - 0x00, /* 0x0e43 */ - 0x00, /* 0x0e44 */ - 0x00, /* 0x0e45 */ - 0x00, /* 0x0e46 */ - 0x00, /* 0x0e47 */ - 0x00, /* 0x0e48 */ - 0x00, /* 0x0e49 */ - 0x00, /* 0x0e4a */ - 0x00, /* 0x0e4b */ - 0x00, /* 0x0e4c */ - 0x00, /* 0x0e4d */ - 0x00, /* 0x0e4e */ - 0x00, /* 0x0e4f */ - 0x00, /* 0x0e50 */ - 0x00, /* 0x0e51 */ - 0x00, /* 0x0e52 */ - 0x00, /* 0x0e53 */ - 0x00, /* 0x0e54 */ - 0x00, /* 0x0e55 */ - 0x00, /* 0x0e56 */ - 0x00, /* 0x0e57 */ - 0x00, /* 0x0e58 */ - 0x00, /* 0x0e59 */ - 0x00, /* 0x0e5a */ - 0x00, /* 0x0e5b */ - 0x00, /* 0x0e5c */ - 0x00, /* 0x0e5d */ - 0x00, /* 0x0e5e */ - 0x00, /* 0x0e5f */ - 0x00, /* 0x0e60 */ - 0x00, /* 0x0e61 */ - 0x00, /* 0x0e62 */ - 0x00, /* 0x0e63 */ - 0x00, /* 0x0e64 */ - 0x00, /* 0x0e65 */ - 0x00, /* 0x0e66 */ - 0x00, /* 0x0e67 */ - 0x00, /* 0x0e68 */ - 0x00, /* 0x0e69 */ - 0x00, /* 0x0e6a */ - 0x00, /* 0x0e6b */ - 0x00, /* 0x0e6c */ - 0x00, /* 0x0e6d */ - 0x00, /* 0x0e6e */ - 0x00, /* 0x0e6f */ - 0x00, /* 0x0e70 */ - 0x00, /* 0x0e71 */ - 0x00, /* 0x0e72 */ - 0x00, /* 0x0e73 */ - 0x00, /* 0x0e74 */ - 0x00, /* 0x0e75 */ - 0x00, /* 0x0e76 */ - 0x00, /* 0x0e77 */ - 0x00, /* 0x0e78 */ - 0x00, /* 0x0e79 */ - 0x00, /* 0x0e7a */ - 0x00, /* 0x0e7b */ - 0x00, /* 0x0e7c */ - 0x00, /* 0x0e7d */ - 0x00, /* 0x0e7e */ - 0x00, /* 0x0e7f */ - 0x00, /* 0x0e80 */ - 0x00, /* 0x0e81 */ - 0x00, /* 0x0e82 */ - 0x00, /* 0x0e83 */ - 0x00, /* 0x0e84 */ - 0x00, /* 0x0e85 */ - 0x00, /* 0x0e86 */ - 0x00, /* 0x0e87 */ - 0x00, /* 0x0e88 */ - 0x00, /* 0x0e89 */ - 0x00, /* 0x0e8a */ - 0x00, /* 0x0e8b */ - 0x00, /* 0x0e8c */ - 0x00, /* 0x0e8d */ - 0x00, /* 0x0e8e */ - 0x00, /* 0x0e8f */ - 0x00, /* 0x0e90 */ - 0x00, /* 0x0e91 */ - 0x00, /* 0x0e92 */ - 0x00, /* 0x0e93 */ - 0x00, /* 0x0e94 */ - 0x00, /* 0x0e95 */ - 0x00, /* 0x0e96 */ - 0x00, /* 0x0e97 */ - 0x00, /* 0x0e98 */ - 0x00, /* 0x0e99 */ - 0x00, /* 0x0e9a */ - 0x00, /* 0x0e9b */ - 0x00, /* 0x0e9c */ - 0x00, /* 0x0e9d */ - 0x00, /* 0x0e9e */ - 0x00, /* 0x0e9f */ - 0x00, /* 0x0ea0 */ - 0x00, /* 0x0ea1 (Hangul_Kiyeog) */ - 0x00, /* 0x0ea2 (Hangul_SsangKiyeog) */ - 0x00, /* 0x0ea3 (Hangul_KiyeogSios) */ - 0x00, /* 0x0ea4 (Hangul_Nieun) */ - 0x00, /* 0x0ea5 (Hangul_NieunJieuj) */ - 0x00, /* 0x0ea6 (Hangul_NieunHieuh) */ - 0x00, /* 0x0ea7 (Hangul_Dikeud) */ - 0x00, /* 0x0ea8 (Hangul_SsangDikeud) */ - 0x00, /* 0x0ea9 (Hangul_Rieul) */ - 0x00, /* 0x0eaa (Hangul_RieulKiyeog) */ - 0x00, /* 0x0eab (Hangul_RieulMieum) */ - 0x00, /* 0x0eac (Hangul_RieulPieub) */ - 0x00, /* 0x0ead (Hangul_RieulSios) */ - 0x00, /* 0x0eae (Hangul_RieulTieut) */ - 0x00, /* 0x0eaf (Hangul_RieulPhieuf) */ - 0x00, /* 0x0eb0 (Hangul_RieulHieuh) */ - 0x00, /* 0x0eb1 (Hangul_Mieum) */ - 0x00, /* 0x0eb2 (Hangul_Pieub) */ - 0x00, /* 0x0eb3 (Hangul_SsangPieub) */ - 0x00, /* 0x0eb4 (Hangul_PieubSios) */ - 0x00, /* 0x0eb5 (Hangul_Sios) */ - 0x00, /* 0x0eb6 (Hangul_SsangSios) */ - 0x00, /* 0x0eb7 (Hangul_Ieung) */ - 0x00, /* 0x0eb8 (Hangul_Jieuj) */ - 0x00, /* 0x0eb9 (Hangul_SsangJieuj) */ - 0x00, /* 0x0eba (Hangul_Cieuc) */ - 0x00, /* 0x0ebb (Hangul_Khieuq) */ - 0x00, /* 0x0ebc (Hangul_Tieut) */ - 0x00, /* 0x0ebd (Hangul_Phieuf) */ - 0x00, /* 0x0ebe (Hangul_Hieuh) */ - 0x00, /* 0x0ebf (Hangul_A) */ - 0x00, /* 0x0ec0 (Hangul_AE) */ - 0x00, /* 0x0ec1 (Hangul_YA) */ - 0x00, /* 0x0ec2 (Hangul_YAE) */ - 0x00, /* 0x0ec3 (Hangul_EO) */ - 0x00, /* 0x0ec4 (Hangul_E) */ - 0x00, /* 0x0ec5 (Hangul_YEO) */ - 0x00, /* 0x0ec6 (Hangul_YE) */ - 0x00, /* 0x0ec7 (Hangul_O) */ - 0x00, /* 0x0ec8 (Hangul_WA) */ - 0x00, /* 0x0ec9 (Hangul_WAE) */ - 0x00, /* 0x0eca (Hangul_OE) */ - 0x00, /* 0x0ecb (Hangul_YO) */ - 0x00, /* 0x0ecc (Hangul_U) */ - 0x00, /* 0x0ecd (Hangul_WEO) */ - 0x00, /* 0x0ece (Hangul_WE) */ - 0x00, /* 0x0ecf (Hangul_WI) */ - 0x00, /* 0x0ed0 (Hangul_YU) */ - 0x00, /* 0x0ed1 (Hangul_EU) */ - 0x00, /* 0x0ed2 (Hangul_YI) */ - 0x00, /* 0x0ed3 (Hangul_I) */ - 0x00, /* 0x0ed4 (Hangul_J_Kiyeog) */ - 0x00, /* 0x0ed5 (Hangul_J_SsangKiyeog) */ - 0x00, /* 0x0ed6 (Hangul_J_KiyeogSios) */ - 0x00, /* 0x0ed7 (Hangul_J_Nieun) */ - 0x00, /* 0x0ed8 (Hangul_J_NieunJieuj) */ - 0x00, /* 0x0ed9 (Hangul_J_NieunHieuh) */ - 0x00, /* 0x0eda (Hangul_J_Dikeud) */ - 0x00, /* 0x0edb (Hangul_J_Rieul) */ - 0x00, /* 0x0edc (Hangul_J_RieulKiyeog) */ - 0x00, /* 0x0edd (Hangul_J_RieulMieum) */ - 0x00, /* 0x0ede (Hangul_J_RieulPieub) */ - 0x00, /* 0x0edf (Hangul_J_RieulSios) */ - 0x00, /* 0x0ee0 (Hangul_J_RieulTieut) */ - 0x00, /* 0x0ee1 (Hangul_J_RieulPhieuf) */ - 0x00, /* 0x0ee2 (Hangul_J_RieulHieuh) */ - 0x00, /* 0x0ee3 (Hangul_J_Mieum) */ - 0x00, /* 0x0ee4 (Hangul_J_Pieub) */ - 0x00, /* 0x0ee5 (Hangul_J_PieubSios) */ - 0x00, /* 0x0ee6 (Hangul_J_Sios) */ - 0x00, /* 0x0ee7 (Hangul_J_SsangSios) */ - 0x00, /* 0x0ee8 (Hangul_J_Ieung) */ - 0x00, /* 0x0ee9 (Hangul_J_Jieuj) */ - 0x00, /* 0x0eea (Hangul_J_Cieuc) */ - 0x00, /* 0x0eeb (Hangul_J_Khieuq) */ - 0x00, /* 0x0eec (Hangul_J_Tieut) */ - 0x00, /* 0x0eed (Hangul_J_Phieuf) */ - 0x00, /* 0x0eee (Hangul_J_Hieuh) */ - 0x00, /* 0x0eef (Hangul_RieulYeorinHieuh) */ - 0x00, /* 0x0ef0 (Hangul_SunkyeongeumMieum) */ - 0x00, /* 0x0ef1 (Hangul_SunkyeongeumPieub) */ - 0x00, /* 0x0ef2 (Hangul_PanSios) */ - 0x00, /* 0x0ef3 (Hangul_KkogjiDalrinIeung) */ - 0x00, /* 0x0ef4 (Hangul_SunkyeongeumPhieuf) */ - 0x00, /* 0x0ef5 (Hangul_YeorinHieuh) */ - 0x00, /* 0x0ef6 (Hangul_AraeA) */ - 0x00, /* 0x0ef7 (Hangul_AraeAE) */ - 0x00, /* 0x0ef8 (Hangul_J_PanSios) */ - 0x00, /* 0x0ef9 (Hangul_J_KkogjiDalrinIeung) */ - 0x00, /* 0x0efa (Hangul_J_YeorinHieuh) */ - 0x00, /* 0x0efb */ - 0x00, /* 0x0efc */ - 0x00, /* 0x0efd */ - 0x00, /* 0x0efe */ - 0x00, /* 0x0eff (Korean_Won) */ + { /* 0x0e00 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e01 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e02 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e03 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e04 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e05 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e06 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e07 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e08 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e09 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e0a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e0b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e0c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e0d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e0e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e0f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e10 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e11 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e12 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e13 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e14 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e15 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e16 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e17 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e18 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e19 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e1a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e1b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e1c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e1d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e1e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e1f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e20 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e21 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e22 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e23 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e24 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e25 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e26 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e27 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e28 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e29 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e2a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e2b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e2c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e2d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e2e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e2f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e30 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e31 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e32 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e33 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e34 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e35 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e36 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e37 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e38 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e39 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e3a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e3b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e3c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e3d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e3e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e3f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e40 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e41 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e42 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e43 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e44 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e45 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e46 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e47 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e48 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e49 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e4a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e4b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e4c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e4d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e4e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e4f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e50 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e51 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e52 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e53 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e54 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e55 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e56 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e57 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e58 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e59 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e5a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e5b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e5c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e5d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e5e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e5f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e60 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e61 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e62 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e63 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e64 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e65 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e66 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e67 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e68 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e69 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e6a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e6b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e6c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e6d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e6e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e6f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e70 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e71 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e72 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e73 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e74 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e75 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e76 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e77 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e78 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e79 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e7a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e7b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e7c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e7d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e7e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e7f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e80 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e81 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e82 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e83 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e84 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e85 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e86 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e87 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e88 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e89 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e8a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e8b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e8c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e8d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e8e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e8f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e90 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e91 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e92 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e93 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e94 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e95 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e96 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e97 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e98 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e99 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e9a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e9b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e9c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e9d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e9e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0e9f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ea0 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ea1 (Hangul_Kiyeog) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ea2 (Hangul_SsangKiyeog) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ea3 (Hangul_KiyeogSios) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ea4 (Hangul_Nieun) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ea5 (Hangul_NieunJieuj) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ea6 (Hangul_NieunHieuh) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ea7 (Hangul_Dikeud) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ea8 (Hangul_SsangDikeud) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ea9 (Hangul_Rieul) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0eaa (Hangul_RieulKiyeog) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0eab (Hangul_RieulMieum) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0eac (Hangul_RieulPieub) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ead (Hangul_RieulSios) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0eae (Hangul_RieulTieut) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0eaf (Hangul_RieulPhieuf) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0eb0 (Hangul_RieulHieuh) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0eb1 (Hangul_Mieum) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0eb2 (Hangul_Pieub) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0eb3 (Hangul_SsangPieub) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0eb4 (Hangul_PieubSios) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0eb5 (Hangul_Sios) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0eb6 (Hangul_SsangSios) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0eb7 (Hangul_Ieung) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0eb8 (Hangul_Jieuj) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0eb9 (Hangul_SsangJieuj) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0eba (Hangul_Cieuc) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ebb (Hangul_Khieuq) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ebc (Hangul_Tieut) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ebd (Hangul_Phieuf) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ebe (Hangul_Hieuh) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ebf (Hangul_A) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ec0 (Hangul_AE) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ec1 (Hangul_YA) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ec2 (Hangul_YAE) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ec3 (Hangul_EO) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ec4 (Hangul_E) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ec5 (Hangul_YEO) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ec6 (Hangul_YE) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ec7 (Hangul_O) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ec8 (Hangul_WA) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ec9 (Hangul_WAE) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0eca (Hangul_OE) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ecb (Hangul_YO) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ecc (Hangul_U) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ecd (Hangul_WEO) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ece (Hangul_WE) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ecf (Hangul_WI) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ed0 (Hangul_YU) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ed1 (Hangul_EU) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ed2 (Hangul_YI) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ed3 (Hangul_I) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ed4 (Hangul_J_Kiyeog) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ed5 (Hangul_J_SsangKiyeog) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ed6 (Hangul_J_KiyeogSios) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ed7 (Hangul_J_Nieun) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ed8 (Hangul_J_NieunJieuj) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ed9 (Hangul_J_NieunHieuh) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0eda (Hangul_J_Dikeud) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0edb (Hangul_J_Rieul) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0edc (Hangul_J_RieulKiyeog) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0edd (Hangul_J_RieulMieum) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ede (Hangul_J_RieulPieub) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0edf (Hangul_J_RieulSios) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ee0 (Hangul_J_RieulTieut) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ee1 (Hangul_J_RieulPhieuf) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ee2 (Hangul_J_RieulHieuh) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ee3 (Hangul_J_Mieum) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ee4 (Hangul_J_Pieub) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ee5 (Hangul_J_PieubSios) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ee6 (Hangul_J_Sios) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ee7 (Hangul_J_SsangSios) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ee8 (Hangul_J_Ieung) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ee9 (Hangul_J_Jieuj) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0eea (Hangul_J_Cieuc) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0eeb (Hangul_J_Khieuq) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0eec (Hangul_J_Tieut) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0eed (Hangul_J_Phieuf) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0eee (Hangul_J_Hieuh) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0eef (Hangul_RieulYeorinHieuh) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ef0 (Hangul_SunkyeongeumMieum) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ef1 (Hangul_SunkyeongeumPieub) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ef2 (Hangul_PanSios) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ef3 (Hangul_KkogjiDalrinIeung) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ef4 (Hangul_SunkyeongeumPhieuf) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ef5 (Hangul_YeorinHieuh) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ef6 (Hangul_AraeA) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ef7 (Hangul_AraeAE) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ef8 (Hangul_J_PanSios) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0ef9 (Hangul_J_KkogjiDalrinIeung) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0efa (Hangul_J_YeorinHieuh) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0efb */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0efc */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0efd */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0efe */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x0eff (Korean_Won) */ + .scancode = 0x00, + .flags = 0x00 + }, + }, - {0}, /* 0x0f?? */ - {0}, /* 0x10?? */ - {0}, /* 0x11?? */ - {0}, /* 0x12?? */ + {{0}}, /* 0x0f?? */ + {{0}}, /* 0x10?? */ + {{0}}, /* 0x11?? */ + {{0}}, /* 0x12?? */ { /* 0x13?? */ - 0x00, /* 0x1300 */ - 0x00, /* 0x1301 */ - 0x00, /* 0x1302 */ - 0x00, /* 0x1303 */ - 0x00, /* 0x1304 */ - 0x00, /* 0x1305 */ - 0x00, /* 0x1306 */ - 0x00, /* 0x1307 */ - 0x00, /* 0x1308 */ - 0x00, /* 0x1309 */ - 0x00, /* 0x130a */ - 0x00, /* 0x130b */ - 0x00, /* 0x130c */ - 0x00, /* 0x130d */ - 0x00, /* 0x130e */ - 0x00, /* 0x130f */ - 0x00, /* 0x1310 */ - 0x00, /* 0x1311 */ - 0x00, /* 0x1312 */ - 0x00, /* 0x1313 */ - 0x00, /* 0x1314 */ - 0x00, /* 0x1315 */ - 0x00, /* 0x1316 */ - 0x00, /* 0x1317 */ - 0x00, /* 0x1318 */ - 0x00, /* 0x1319 */ - 0x00, /* 0x131a */ - 0x00, /* 0x131b */ - 0x00, /* 0x131c */ - 0x00, /* 0x131d */ - 0x00, /* 0x131e */ - 0x00, /* 0x131f */ - 0x00, /* 0x1320 */ - 0x00, /* 0x1321 */ - 0x00, /* 0x1322 */ - 0x00, /* 0x1323 */ - 0x00, /* 0x1324 */ - 0x00, /* 0x1325 */ - 0x00, /* 0x1326 */ - 0x00, /* 0x1327 */ - 0x00, /* 0x1328 */ - 0x00, /* 0x1329 */ - 0x00, /* 0x132a */ - 0x00, /* 0x132b */ - 0x00, /* 0x132c */ - 0x00, /* 0x132d */ - 0x00, /* 0x132e */ - 0x00, /* 0x132f */ - 0x00, /* 0x1330 */ - 0x00, /* 0x1331 */ - 0x00, /* 0x1332 */ - 0x00, /* 0x1333 */ - 0x00, /* 0x1334 */ - 0x00, /* 0x1335 */ - 0x00, /* 0x1336 */ - 0x00, /* 0x1337 */ - 0x00, /* 0x1338 */ - 0x00, /* 0x1339 */ - 0x00, /* 0x133a */ - 0x00, /* 0x133b */ - 0x00, /* 0x133c */ - 0x00, /* 0x133d */ - 0x00, /* 0x133e */ - 0x00, /* 0x133f */ - 0x00, /* 0x1340 */ - 0x00, /* 0x1341 */ - 0x00, /* 0x1342 */ - 0x00, /* 0x1343 */ - 0x00, /* 0x1344 */ - 0x00, /* 0x1345 */ - 0x00, /* 0x1346 */ - 0x00, /* 0x1347 */ - 0x00, /* 0x1348 */ - 0x00, /* 0x1349 */ - 0x00, /* 0x134a */ - 0x00, /* 0x134b */ - 0x00, /* 0x134c */ - 0x00, /* 0x134d */ - 0x00, /* 0x134e */ - 0x00, /* 0x134f */ - 0x00, /* 0x1350 */ - 0x00, /* 0x1351 */ - 0x00, /* 0x1352 */ - 0x00, /* 0x1353 */ - 0x00, /* 0x1354 */ - 0x00, /* 0x1355 */ - 0x00, /* 0x1356 */ - 0x00, /* 0x1357 */ - 0x00, /* 0x1358 */ - 0x00, /* 0x1359 */ - 0x00, /* 0x135a */ - 0x00, /* 0x135b */ - 0x00, /* 0x135c */ - 0x00, /* 0x135d */ - 0x00, /* 0x135e */ - 0x00, /* 0x135f */ - 0x00, /* 0x1360 */ - 0x00, /* 0x1361 */ - 0x00, /* 0x1362 */ - 0x00, /* 0x1363 */ - 0x00, /* 0x1364 */ - 0x00, /* 0x1365 */ - 0x00, /* 0x1366 */ - 0x00, /* 0x1367 */ - 0x00, /* 0x1368 */ - 0x00, /* 0x1369 */ - 0x00, /* 0x136a */ - 0x00, /* 0x136b */ - 0x00, /* 0x136c */ - 0x00, /* 0x136d */ - 0x00, /* 0x136e */ - 0x00, /* 0x136f */ - 0x00, /* 0x1370 */ - 0x00, /* 0x1371 */ - 0x00, /* 0x1372 */ - 0x00, /* 0x1373 */ - 0x00, /* 0x1374 */ - 0x00, /* 0x1375 */ - 0x00, /* 0x1376 */ - 0x00, /* 0x1377 */ - 0x00, /* 0x1378 */ - 0x00, /* 0x1379 */ - 0x00, /* 0x137a */ - 0x00, /* 0x137b */ - 0x00, /* 0x137c */ - 0x00, /* 0x137d */ - 0x00, /* 0x137e */ - 0x00, /* 0x137f */ - 0x00, /* 0x1380 */ - 0x00, /* 0x1381 */ - 0x00, /* 0x1382 */ - 0x00, /* 0x1383 */ - 0x00, /* 0x1384 */ - 0x00, /* 0x1385 */ - 0x00, /* 0x1386 */ - 0x00, /* 0x1387 */ - 0x00, /* 0x1388 */ - 0x00, /* 0x1389 */ - 0x00, /* 0x138a */ - 0x00, /* 0x138b */ - 0x00, /* 0x138c */ - 0x00, /* 0x138d */ - 0x00, /* 0x138e */ - 0x00, /* 0x138f */ - 0x00, /* 0x1390 */ - 0x00, /* 0x1391 */ - 0x00, /* 0x1392 */ - 0x00, /* 0x1393 */ - 0x00, /* 0x1394 */ - 0x00, /* 0x1395 */ - 0x00, /* 0x1396 */ - 0x00, /* 0x1397 */ - 0x00, /* 0x1398 */ - 0x00, /* 0x1399 */ - 0x00, /* 0x139a */ - 0x00, /* 0x139b */ - 0x00, /* 0x139c */ - 0x00, /* 0x139d */ - 0x00, /* 0x139e */ - 0x00, /* 0x139f */ - 0x00, /* 0x13a0 */ - 0x00, /* 0x13a1 */ - 0x00, /* 0x13a2 */ - 0x00, /* 0x13a3 */ - 0x00, /* 0x13a4 */ - 0x00, /* 0x13a5 */ - 0x00, /* 0x13a6 */ - 0x00, /* 0x13a7 */ - 0x00, /* 0x13a8 */ - 0x00, /* 0x13a9 */ - 0x00, /* 0x13aa */ - 0x00, /* 0x13ab */ - 0x00, /* 0x13ac */ - 0x00, /* 0x13ad */ - 0x00, /* 0x13ae */ - 0x00, /* 0x13af */ - 0x00, /* 0x13b0 */ - 0x00, /* 0x13b1 */ - 0x00, /* 0x13b2 */ - 0x00, /* 0x13b3 */ - 0x00, /* 0x13b4 */ - 0x00, /* 0x13b5 */ - 0x00, /* 0x13b6 */ - 0x00, /* 0x13b7 */ - 0x00, /* 0x13b8 */ - 0x00, /* 0x13b9 */ - 0x00, /* 0x13ba */ - 0x00, /* 0x13bb */ - 0x00, /* 0x13bc (OE) */ - 0x00, /* 0x13bd (oe) */ - 0x00, /* 0x13be (Ydiaeresis) */ - 0x00, /* 0x13bf */ - 0x00, /* 0x13c0 */ - 0x00, /* 0x13c1 */ - 0x00, /* 0x13c2 */ - 0x00, /* 0x13c3 */ - 0x00, /* 0x13c4 */ - 0x00, /* 0x13c5 */ - 0x00, /* 0x13c6 */ - 0x00, /* 0x13c7 */ - 0x00, /* 0x13c8 */ - 0x00, /* 0x13c9 */ - 0x00, /* 0x13ca */ - 0x00, /* 0x13cb */ - 0x00, /* 0x13cc */ - 0x00, /* 0x13cd */ - 0x00, /* 0x13ce */ - 0x00, /* 0x13cf */ - 0x00, /* 0x13d0 */ - 0x00, /* 0x13d1 */ - 0x00, /* 0x13d2 */ - 0x00, /* 0x13d3 */ - 0x00, /* 0x13d4 */ - 0x00, /* 0x13d5 */ - 0x00, /* 0x13d6 */ - 0x00, /* 0x13d7 */ - 0x00, /* 0x13d8 */ - 0x00, /* 0x13d9 */ - 0x00, /* 0x13da */ - 0x00, /* 0x13db */ - 0x00, /* 0x13dc */ - 0x00, /* 0x13dd */ - 0x00, /* 0x13de */ - 0x00, /* 0x13df */ - 0x00, /* 0x13e0 */ - 0x00, /* 0x13e1 */ - 0x00, /* 0x13e2 */ - 0x00, /* 0x13e3 */ - 0x00, /* 0x13e4 */ - 0x00, /* 0x13e5 */ - 0x00, /* 0x13e6 */ - 0x00, /* 0x13e7 */ - 0x00, /* 0x13e8 */ - 0x00, /* 0x13e9 */ - 0x00, /* 0x13ea */ - 0x00, /* 0x13eb */ - 0x00, /* 0x13ec */ - 0x00, /* 0x13ed */ - 0x00, /* 0x13ee */ - 0x00, /* 0x13ef */ - 0x00, /* 0x13f0 */ - 0x00, /* 0x13f1 */ - 0x00, /* 0x13f2 */ - 0x00, /* 0x13f3 */ - 0x00, /* 0x13f4 */ - 0x00, /* 0x13f5 */ - 0x00, /* 0x13f6 */ - 0x00, /* 0x13f7 */ - 0x00, /* 0x13f8 */ - 0x00, /* 0x13f9 */ - 0x00, /* 0x13fa */ - 0x00, /* 0x13fb */ - 0x00, /* 0x13fc */ - 0x00, /* 0x13fd */ - 0x00, /* 0x13fe */ - 0x00, /* 0x13ff */ + { /* 0x1300 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1301 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1302 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1303 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1304 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1305 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1306 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1307 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1308 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1309 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x130a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x130b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x130c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x130d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x130e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x130f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1310 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1311 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1312 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1313 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1314 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1315 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1316 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1317 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1318 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1319 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x131a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x131b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x131c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x131d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x131e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x131f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1320 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1321 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1322 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1323 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1324 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1325 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1326 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1327 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1328 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1329 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x132a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x132b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x132c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x132d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x132e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x132f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1330 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1331 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1332 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1333 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1334 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1335 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1336 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1337 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1338 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1339 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x133a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x133b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x133c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x133d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x133e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x133f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1340 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1341 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1342 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1343 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1344 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1345 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1346 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1347 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1348 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1349 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x134a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x134b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x134c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x134d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x134e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x134f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1350 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1351 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1352 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1353 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1354 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1355 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1356 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1357 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1358 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1359 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x135a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x135b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x135c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x135d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x135e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x135f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1360 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1361 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1362 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1363 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1364 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1365 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1366 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1367 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1368 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1369 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x136a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x136b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x136c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x136d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x136e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x136f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1370 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1371 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1372 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1373 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1374 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1375 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1376 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1377 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1378 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1379 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x137a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x137b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x137c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x137d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x137e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x137f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1380 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1381 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1382 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1383 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1384 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1385 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1386 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1387 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1388 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1389 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x138a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x138b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x138c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x138d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x138e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x138f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1390 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1391 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1392 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1393 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1394 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1395 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1396 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1397 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1398 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x1399 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x139a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x139b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x139c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x139d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x139e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x139f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13a0 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13a1 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13a2 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13a3 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13a4 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13a5 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13a6 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13a7 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13a8 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13a9 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13aa */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13ab */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13ac */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13ad */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13ae */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13af */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13b0 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13b1 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13b2 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13b3 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13b4 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13b5 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13b6 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13b7 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13b8 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13b9 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13ba */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13bb */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13bc (OE) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13bd (oe) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13be (Ydiaeresis) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13bf */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13c0 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13c1 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13c2 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13c3 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13c4 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13c5 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13c6 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13c7 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13c8 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13c9 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13ca */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13cb */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13cc */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13cd */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13ce */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13cf */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13d0 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13d1 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13d2 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13d3 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13d4 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13d5 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13d6 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13d7 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13d8 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13d9 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13da */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13db */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13dc */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13dd */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13de */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13df */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13e0 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13e1 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13e2 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13e3 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13e4 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13e5 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13e6 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13e7 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13e8 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13e9 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13ea */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13eb */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13ec */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13ed */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13ee */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13ef */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13f0 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13f1 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13f2 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13f3 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13f4 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13f5 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13f6 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13f7 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13f8 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13f9 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13fa */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13fb */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13fc */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13fd */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13fe */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x13ff */ + .scancode = 0x00, + .flags = 0x00 + }, + }, - {0}, /* 0x14?? */ - {0}, /* 0x15?? */ - {0}, /* 0x16?? */ - {0}, /* 0x17?? */ - {0}, /* 0x18?? */ - {0}, /* 0x19?? */ - {0}, /* 0x1a?? */ - {0}, /* 0x1b?? */ - {0}, /* 0x1c?? */ - {0}, /* 0x1d?? */ - {0}, /* 0x1e?? */ - {0}, /* 0x1f?? */ + {{0}}, /* 0x14?? */ + {{0}}, /* 0x15?? */ + {{0}}, /* 0x16?? */ + {{0}}, /* 0x17?? */ + {{0}}, /* 0x18?? */ + {{0}}, /* 0x19?? */ + {{0}}, /* 0x1a?? */ + {{0}}, /* 0x1b?? */ + {{0}}, /* 0x1c?? */ + {{0}}, /* 0x1d?? */ + {{0}}, /* 0x1e?? */ + {{0}}, /* 0x1f?? */ { /* 0x20?? */ - 0x00, /* 0x2000 */ - 0x00, /* 0x2001 */ - 0x00, /* 0x2002 */ - 0x00, /* 0x2003 */ - 0x00, /* 0x2004 */ - 0x00, /* 0x2005 */ - 0x00, /* 0x2006 */ - 0x00, /* 0x2007 */ - 0x00, /* 0x2008 */ - 0x00, /* 0x2009 */ - 0x00, /* 0x200a */ - 0x00, /* 0x200b */ - 0x00, /* 0x200c */ - 0x00, /* 0x200d */ - 0x00, /* 0x200e */ - 0x00, /* 0x200f */ - 0x00, /* 0x2010 */ - 0x00, /* 0x2011 */ - 0x00, /* 0x2012 */ - 0x00, /* 0x2013 */ - 0x00, /* 0x2014 */ - 0x00, /* 0x2015 */ - 0x00, /* 0x2016 */ - 0x00, /* 0x2017 */ - 0x00, /* 0x2018 */ - 0x00, /* 0x2019 */ - 0x00, /* 0x201a */ - 0x00, /* 0x201b */ - 0x00, /* 0x201c */ - 0x00, /* 0x201d */ - 0x00, /* 0x201e */ - 0x00, /* 0x201f */ - 0x00, /* 0x2020 */ - 0x00, /* 0x2021 */ - 0x00, /* 0x2022 */ - 0x00, /* 0x2023 */ - 0x00, /* 0x2024 */ - 0x00, /* 0x2025 */ - 0x00, /* 0x2026 */ - 0x00, /* 0x2027 */ - 0x00, /* 0x2028 */ - 0x00, /* 0x2029 */ - 0x00, /* 0x202a */ - 0x00, /* 0x202b */ - 0x00, /* 0x202c */ - 0x00, /* 0x202d */ - 0x00, /* 0x202e */ - 0x00, /* 0x202f */ - 0x00, /* 0x2030 */ - 0x00, /* 0x2031 */ - 0x00, /* 0x2032 */ - 0x00, /* 0x2033 */ - 0x00, /* 0x2034 */ - 0x00, /* 0x2035 */ - 0x00, /* 0x2036 */ - 0x00, /* 0x2037 */ - 0x00, /* 0x2038 */ - 0x00, /* 0x2039 */ - 0x00, /* 0x203a */ - 0x00, /* 0x203b */ - 0x00, /* 0x203c */ - 0x00, /* 0x203d */ - 0x00, /* 0x203e */ - 0x00, /* 0x203f */ - 0x00, /* 0x2040 */ - 0x00, /* 0x2041 */ - 0x00, /* 0x2042 */ - 0x00, /* 0x2043 */ - 0x00, /* 0x2044 */ - 0x00, /* 0x2045 */ - 0x00, /* 0x2046 */ - 0x00, /* 0x2047 */ - 0x00, /* 0x2048 */ - 0x00, /* 0x2049 */ - 0x00, /* 0x204a */ - 0x00, /* 0x204b */ - 0x00, /* 0x204c */ - 0x00, /* 0x204d */ - 0x00, /* 0x204e */ - 0x00, /* 0x204f */ - 0x00, /* 0x2050 */ - 0x00, /* 0x2051 */ - 0x00, /* 0x2052 */ - 0x00, /* 0x2053 */ - 0x00, /* 0x2054 */ - 0x00, /* 0x2055 */ - 0x00, /* 0x2056 */ - 0x00, /* 0x2057 */ - 0x00, /* 0x2058 */ - 0x00, /* 0x2059 */ - 0x00, /* 0x205a */ - 0x00, /* 0x205b */ - 0x00, /* 0x205c */ - 0x00, /* 0x205d */ - 0x00, /* 0x205e */ - 0x00, /* 0x205f */ - 0x00, /* 0x2060 */ - 0x00, /* 0x2061 */ - 0x00, /* 0x2062 */ - 0x00, /* 0x2063 */ - 0x00, /* 0x2064 */ - 0x00, /* 0x2065 */ - 0x00, /* 0x2066 */ - 0x00, /* 0x2067 */ - 0x00, /* 0x2068 */ - 0x00, /* 0x2069 */ - 0x00, /* 0x206a */ - 0x00, /* 0x206b */ - 0x00, /* 0x206c */ - 0x00, /* 0x206d */ - 0x00, /* 0x206e */ - 0x00, /* 0x206f */ - 0x00, /* 0x2070 */ - 0x00, /* 0x2071 */ - 0x00, /* 0x2072 */ - 0x00, /* 0x2073 */ - 0x00, /* 0x2074 */ - 0x00, /* 0x2075 */ - 0x00, /* 0x2076 */ - 0x00, /* 0x2077 */ - 0x00, /* 0x2078 */ - 0x00, /* 0x2079 */ - 0x00, /* 0x207a */ - 0x00, /* 0x207b */ - 0x00, /* 0x207c */ - 0x00, /* 0x207d */ - 0x00, /* 0x207e */ - 0x00, /* 0x207f */ - 0x00, /* 0x2080 */ - 0x00, /* 0x2081 */ - 0x00, /* 0x2082 */ - 0x00, /* 0x2083 */ - 0x00, /* 0x2084 */ - 0x00, /* 0x2085 */ - 0x00, /* 0x2086 */ - 0x00, /* 0x2087 */ - 0x00, /* 0x2088 */ - 0x00, /* 0x2089 */ - 0x00, /* 0x208a */ - 0x00, /* 0x208b */ - 0x00, /* 0x208c */ - 0x00, /* 0x208d */ - 0x00, /* 0x208e */ - 0x00, /* 0x208f */ - 0x00, /* 0x2090 */ - 0x00, /* 0x2091 */ - 0x00, /* 0x2092 */ - 0x00, /* 0x2093 */ - 0x00, /* 0x2094 */ - 0x00, /* 0x2095 */ - 0x00, /* 0x2096 */ - 0x00, /* 0x2097 */ - 0x00, /* 0x2098 */ - 0x00, /* 0x2099 */ - 0x00, /* 0x209a */ - 0x00, /* 0x209b */ - 0x00, /* 0x209c */ - 0x00, /* 0x209d */ - 0x00, /* 0x209e */ - 0x00, /* 0x209f */ - 0x00, /* 0x20a0 */ - 0x00, /* 0x20a1 */ - 0x00, /* 0x20a2 */ - 0x00, /* 0x20a3 */ - 0x00, /* 0x20a4 */ - 0x00, /* 0x20a5 */ - 0x00, /* 0x20a6 */ - 0x00, /* 0x20a7 */ - 0x00, /* 0x20a8 */ - 0x00, /* 0x20a9 */ - 0x00, /* 0x20aa */ - 0x00, /* 0x20ab */ - 0x00, /* 0x20ac (EuroSign) */ - 0x00, /* 0x20ad */ - 0x00, /* 0x20ae */ - 0x00, /* 0x20af */ - 0x00, /* 0x20b0 */ - 0x00, /* 0x20b1 */ - 0x00, /* 0x20b2 */ - 0x00, /* 0x20b3 */ - 0x00, /* 0x20b4 */ - 0x00, /* 0x20b5 */ - 0x00, /* 0x20b6 */ - 0x00, /* 0x20b7 */ - 0x00, /* 0x20b8 */ - 0x00, /* 0x20b9 */ - 0x00, /* 0x20ba */ - 0x00, /* 0x20bb */ - 0x00, /* 0x20bc */ - 0x00, /* 0x20bd */ - 0x00, /* 0x20be */ - 0x00, /* 0x20bf */ - 0x00, /* 0x20c0 */ - 0x00, /* 0x20c1 */ - 0x00, /* 0x20c2 */ - 0x00, /* 0x20c3 */ - 0x00, /* 0x20c4 */ - 0x00, /* 0x20c5 */ - 0x00, /* 0x20c6 */ - 0x00, /* 0x20c7 */ - 0x00, /* 0x20c8 */ - 0x00, /* 0x20c9 */ - 0x00, /* 0x20ca */ - 0x00, /* 0x20cb */ - 0x00, /* 0x20cc */ - 0x00, /* 0x20cd */ - 0x00, /* 0x20ce */ - 0x00, /* 0x20cf */ - 0x00, /* 0x20d0 */ - 0x00, /* 0x20d1 */ - 0x00, /* 0x20d2 */ - 0x00, /* 0x20d3 */ - 0x00, /* 0x20d4 */ - 0x00, /* 0x20d5 */ - 0x00, /* 0x20d6 */ - 0x00, /* 0x20d7 */ - 0x00, /* 0x20d8 */ - 0x00, /* 0x20d9 */ - 0x00, /* 0x20da */ - 0x00, /* 0x20db */ - 0x00, /* 0x20dc */ - 0x00, /* 0x20dd */ - 0x00, /* 0x20de */ - 0x00, /* 0x20df */ - 0x00, /* 0x20e0 */ - 0x00, /* 0x20e1 */ - 0x00, /* 0x20e2 */ - 0x00, /* 0x20e3 */ - 0x00, /* 0x20e4 */ - 0x00, /* 0x20e5 */ - 0x00, /* 0x20e6 */ - 0x00, /* 0x20e7 */ - 0x00, /* 0x20e8 */ - 0x00, /* 0x20e9 */ - 0x00, /* 0x20ea */ - 0x00, /* 0x20eb */ - 0x00, /* 0x20ec */ - 0x00, /* 0x20ed */ - 0x00, /* 0x20ee */ - 0x00, /* 0x20ef */ - 0x00, /* 0x20f0 */ - 0x00, /* 0x20f1 */ - 0x00, /* 0x20f2 */ - 0x00, /* 0x20f3 */ - 0x00, /* 0x20f4 */ - 0x00, /* 0x20f5 */ - 0x00, /* 0x20f6 */ - 0x00, /* 0x20f7 */ - 0x00, /* 0x20f8 */ - 0x00, /* 0x20f9 */ - 0x00, /* 0x20fa */ - 0x00, /* 0x20fb */ - 0x00, /* 0x20fc */ - 0x00, /* 0x20fd */ - 0x00, /* 0x20fe */ - 0x00, /* 0x20ff */ + { /* 0x2000 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2001 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2002 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2003 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2004 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2005 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2006 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2007 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2008 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2009 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x200a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x200b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x200c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x200d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x200e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x200f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2010 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2011 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2012 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2013 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2014 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2015 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2016 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2017 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2018 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2019 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x201a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x201b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x201c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x201d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x201e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x201f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2020 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2021 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2022 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2023 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2024 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2025 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2026 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2027 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2028 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2029 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x202a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x202b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x202c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x202d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x202e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x202f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2030 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2031 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2032 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2033 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2034 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2035 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2036 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2037 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2038 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2039 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x203a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x203b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x203c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x203d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x203e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x203f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2040 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2041 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2042 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2043 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2044 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2045 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2046 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2047 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2048 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2049 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x204a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x204b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x204c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x204d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x204e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x204f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2050 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2051 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2052 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2053 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2054 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2055 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2056 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2057 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2058 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2059 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x205a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x205b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x205c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x205d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x205e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x205f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2060 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2061 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2062 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2063 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2064 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2065 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2066 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2067 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2068 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2069 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x206a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x206b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x206c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x206d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x206e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x206f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2070 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2071 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2072 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2073 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2074 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2075 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2076 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2077 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2078 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2079 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x207a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x207b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x207c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x207d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x207e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x207f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2080 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2081 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2082 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2083 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2084 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2085 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2086 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2087 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2088 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2089 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x208a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x208b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x208c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x208d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x208e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x208f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2090 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2091 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2092 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2093 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2094 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2095 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2096 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2097 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2098 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x2099 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x209a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x209b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x209c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x209d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x209e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x209f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20a0 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20a1 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20a2 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20a3 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20a4 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20a5 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20a6 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20a7 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20a8 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20a9 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20aa */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20ab */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20ac (EuroSign) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20ad */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20ae */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20af */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20b0 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20b1 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20b2 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20b3 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20b4 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20b5 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20b6 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20b7 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20b8 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20b9 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20ba */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20bb */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20bc */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20bd */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20be */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20bf */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20c0 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20c1 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20c2 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20c3 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20c4 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20c5 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20c6 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20c7 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20c8 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20c9 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20ca */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20cb */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20cc */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20cd */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20ce */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20cf */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20d0 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20d1 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20d2 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20d3 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20d4 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20d5 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20d6 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20d7 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20d8 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20d9 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20da */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20db */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20dc */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20dd */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20de */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20df */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20e0 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20e1 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20e2 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20e3 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20e4 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20e5 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20e6 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20e7 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20e8 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20e9 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20ea */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20eb */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20ec */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20ed */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20ee */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20ef */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20f0 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20f1 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20f2 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20f3 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20f4 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20f5 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20f6 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20f7 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20f8 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20f9 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20fa */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20fb */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20fc */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20fd */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20fe */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0x20ff */ + .scancode = 0x00, + .flags = 0x00 + }, + }, - {0}, /* 0x21?? */ - {0}, /* 0x22?? */ - {0}, /* 0x23?? */ - {0}, /* 0x24?? */ - {0}, /* 0x25?? */ - {0}, /* 0x26?? */ - {0}, /* 0x27?? */ - {0}, /* 0x28?? */ - {0}, /* 0x29?? */ - {0}, /* 0x2a?? */ - {0}, /* 0x2b?? */ - {0}, /* 0x2c?? */ - {0}, /* 0x2d?? */ - {0}, /* 0x2e?? */ - {0}, /* 0x2f?? */ - {0}, /* 0x30?? */ - {0}, /* 0x31?? */ - {0}, /* 0x32?? */ - {0}, /* 0x33?? */ - {0}, /* 0x34?? */ - {0}, /* 0x35?? */ - {0}, /* 0x36?? */ - {0}, /* 0x37?? */ - {0}, /* 0x38?? */ - {0}, /* 0x39?? */ - {0}, /* 0x3a?? */ - {0}, /* 0x3b?? */ - {0}, /* 0x3c?? */ - {0}, /* 0x3d?? */ - {0}, /* 0x3e?? */ - {0}, /* 0x3f?? */ - {0}, /* 0x40?? */ - {0}, /* 0x41?? */ - {0}, /* 0x42?? */ - {0}, /* 0x43?? */ - {0}, /* 0x44?? */ - {0}, /* 0x45?? */ - {0}, /* 0x46?? */ - {0}, /* 0x47?? */ - {0}, /* 0x48?? */ - {0}, /* 0x49?? */ - {0}, /* 0x4a?? */ - {0}, /* 0x4b?? */ - {0}, /* 0x4c?? */ - {0}, /* 0x4d?? */ - {0}, /* 0x4e?? */ - {0}, /* 0x4f?? */ - {0}, /* 0x50?? */ - {0}, /* 0x51?? */ - {0}, /* 0x52?? */ - {0}, /* 0x53?? */ - {0}, /* 0x54?? */ - {0}, /* 0x55?? */ - {0}, /* 0x56?? */ - {0}, /* 0x57?? */ - {0}, /* 0x58?? */ - {0}, /* 0x59?? */ - {0}, /* 0x5a?? */ - {0}, /* 0x5b?? */ - {0}, /* 0x5c?? */ - {0}, /* 0x5d?? */ - {0}, /* 0x5e?? */ - {0}, /* 0x5f?? */ - {0}, /* 0x60?? */ - {0}, /* 0x61?? */ - {0}, /* 0x62?? */ - {0}, /* 0x63?? */ - {0}, /* 0x64?? */ - {0}, /* 0x65?? */ - {0}, /* 0x66?? */ - {0}, /* 0x67?? */ - {0}, /* 0x68?? */ - {0}, /* 0x69?? */ - {0}, /* 0x6a?? */ - {0}, /* 0x6b?? */ - {0}, /* 0x6c?? */ - {0}, /* 0x6d?? */ - {0}, /* 0x6e?? */ - {0}, /* 0x6f?? */ - {0}, /* 0x70?? */ - {0}, /* 0x71?? */ - {0}, /* 0x72?? */ - {0}, /* 0x73?? */ - {0}, /* 0x74?? */ - {0}, /* 0x75?? */ - {0}, /* 0x76?? */ - {0}, /* 0x77?? */ - {0}, /* 0x78?? */ - {0}, /* 0x79?? */ - {0}, /* 0x7a?? */ - {0}, /* 0x7b?? */ - {0}, /* 0x7c?? */ - {0}, /* 0x7d?? */ - {0}, /* 0x7e?? */ - {0}, /* 0x7f?? */ - {0}, /* 0x80?? */ - {0}, /* 0x81?? */ - {0}, /* 0x82?? */ - {0}, /* 0x83?? */ - {0}, /* 0x84?? */ - {0}, /* 0x85?? */ - {0}, /* 0x86?? */ - {0}, /* 0x87?? */ - {0}, /* 0x88?? */ - {0}, /* 0x89?? */ - {0}, /* 0x8a?? */ - {0}, /* 0x8b?? */ - {0}, /* 0x8c?? */ - {0}, /* 0x8d?? */ - {0}, /* 0x8e?? */ - {0}, /* 0x8f?? */ - {0}, /* 0x90?? */ - {0}, /* 0x91?? */ - {0}, /* 0x92?? */ - {0}, /* 0x93?? */ - {0}, /* 0x94?? */ - {0}, /* 0x95?? */ - {0}, /* 0x96?? */ - {0}, /* 0x97?? */ - {0}, /* 0x98?? */ - {0}, /* 0x99?? */ - {0}, /* 0x9a?? */ - {0}, /* 0x9b?? */ - {0}, /* 0x9c?? */ - {0}, /* 0x9d?? */ - {0}, /* 0x9e?? */ - {0}, /* 0x9f?? */ - {0}, /* 0xa0?? */ - {0}, /* 0xa1?? */ - {0}, /* 0xa2?? */ - {0}, /* 0xa3?? */ - {0}, /* 0xa4?? */ - {0}, /* 0xa5?? */ - {0}, /* 0xa6?? */ - {0}, /* 0xa7?? */ - {0}, /* 0xa8?? */ - {0}, /* 0xa9?? */ - {0}, /* 0xaa?? */ - {0}, /* 0xab?? */ - {0}, /* 0xac?? */ - {0}, /* 0xad?? */ - {0}, /* 0xae?? */ - {0}, /* 0xaf?? */ - {0}, /* 0xb0?? */ - {0}, /* 0xb1?? */ - {0}, /* 0xb2?? */ - {0}, /* 0xb3?? */ - {0}, /* 0xb4?? */ - {0}, /* 0xb5?? */ - {0}, /* 0xb6?? */ - {0}, /* 0xb7?? */ - {0}, /* 0xb8?? */ - {0}, /* 0xb9?? */ - {0}, /* 0xba?? */ - {0}, /* 0xbb?? */ - {0}, /* 0xbc?? */ - {0}, /* 0xbd?? */ - {0}, /* 0xbe?? */ - {0}, /* 0xbf?? */ - {0}, /* 0xc0?? */ - {0}, /* 0xc1?? */ - {0}, /* 0xc2?? */ - {0}, /* 0xc3?? */ - {0}, /* 0xc4?? */ - {0}, /* 0xc5?? */ - {0}, /* 0xc6?? */ - {0}, /* 0xc7?? */ - {0}, /* 0xc8?? */ - {0}, /* 0xc9?? */ - {0}, /* 0xca?? */ - {0}, /* 0xcb?? */ - {0}, /* 0xcc?? */ - {0}, /* 0xcd?? */ - {0}, /* 0xce?? */ - {0}, /* 0xcf?? */ - {0}, /* 0xd0?? */ - {0}, /* 0xd1?? */ - {0}, /* 0xd2?? */ - {0}, /* 0xd3?? */ - {0}, /* 0xd4?? */ - {0}, /* 0xd5?? */ - {0}, /* 0xd6?? */ - {0}, /* 0xd7?? */ - {0}, /* 0xd8?? */ - {0}, /* 0xd9?? */ - {0}, /* 0xda?? */ - {0}, /* 0xdb?? */ - {0}, /* 0xdc?? */ - {0}, /* 0xdd?? */ - {0}, /* 0xde?? */ - {0}, /* 0xdf?? */ - {0}, /* 0xe0?? */ - {0}, /* 0xe1?? */ - {0}, /* 0xe2?? */ - {0}, /* 0xe3?? */ - {0}, /* 0xe4?? */ - {0}, /* 0xe5?? */ - {0}, /* 0xe6?? */ - {0}, /* 0xe7?? */ - {0}, /* 0xe8?? */ - {0}, /* 0xe9?? */ - {0}, /* 0xea?? */ - {0}, /* 0xeb?? */ - {0}, /* 0xec?? */ - {0}, /* 0xed?? */ - {0}, /* 0xee?? */ - {0}, /* 0xef?? */ - {0}, /* 0xf0?? */ - {0}, /* 0xf1?? */ - {0}, /* 0xf2?? */ - {0}, /* 0xf3?? */ - {0}, /* 0xf4?? */ - {0}, /* 0xf5?? */ - {0}, /* 0xf6?? */ - {0}, /* 0xf7?? */ - {0}, /* 0xf8?? */ - {0}, /* 0xf9?? */ - {0}, /* 0xfa?? */ - {0}, /* 0xfb?? */ - {0}, /* 0xfc?? */ + {{0}}, /* 0x21?? */ + {{0}}, /* 0x22?? */ + {{0}}, /* 0x23?? */ + {{0}}, /* 0x24?? */ + {{0}}, /* 0x25?? */ + {{0}}, /* 0x26?? */ + {{0}}, /* 0x27?? */ + {{0}}, /* 0x28?? */ + {{0}}, /* 0x29?? */ + {{0}}, /* 0x2a?? */ + {{0}}, /* 0x2b?? */ + {{0}}, /* 0x2c?? */ + {{0}}, /* 0x2d?? */ + {{0}}, /* 0x2e?? */ + {{0}}, /* 0x2f?? */ + {{0}}, /* 0x30?? */ + {{0}}, /* 0x31?? */ + {{0}}, /* 0x32?? */ + {{0}}, /* 0x33?? */ + {{0}}, /* 0x34?? */ + {{0}}, /* 0x35?? */ + {{0}}, /* 0x36?? */ + {{0}}, /* 0x37?? */ + {{0}}, /* 0x38?? */ + {{0}}, /* 0x39?? */ + {{0}}, /* 0x3a?? */ + {{0}}, /* 0x3b?? */ + {{0}}, /* 0x3c?? */ + {{0}}, /* 0x3d?? */ + {{0}}, /* 0x3e?? */ + {{0}}, /* 0x3f?? */ + {{0}}, /* 0x40?? */ + {{0}}, /* 0x41?? */ + {{0}}, /* 0x42?? */ + {{0}}, /* 0x43?? */ + {{0}}, /* 0x44?? */ + {{0}}, /* 0x45?? */ + {{0}}, /* 0x46?? */ + {{0}}, /* 0x47?? */ + {{0}}, /* 0x48?? */ + {{0}}, /* 0x49?? */ + {{0}}, /* 0x4a?? */ + {{0}}, /* 0x4b?? */ + {{0}}, /* 0x4c?? */ + {{0}}, /* 0x4d?? */ + {{0}}, /* 0x4e?? */ + {{0}}, /* 0x4f?? */ + {{0}}, /* 0x50?? */ + {{0}}, /* 0x51?? */ + {{0}}, /* 0x52?? */ + {{0}}, /* 0x53?? */ + {{0}}, /* 0x54?? */ + {{0}}, /* 0x55?? */ + {{0}}, /* 0x56?? */ + {{0}}, /* 0x57?? */ + {{0}}, /* 0x58?? */ + {{0}}, /* 0x59?? */ + {{0}}, /* 0x5a?? */ + {{0}}, /* 0x5b?? */ + {{0}}, /* 0x5c?? */ + {{0}}, /* 0x5d?? */ + {{0}}, /* 0x5e?? */ + {{0}}, /* 0x5f?? */ + {{0}}, /* 0x60?? */ + {{0}}, /* 0x61?? */ + {{0}}, /* 0x62?? */ + {{0}}, /* 0x63?? */ + {{0}}, /* 0x64?? */ + {{0}}, /* 0x65?? */ + {{0}}, /* 0x66?? */ + {{0}}, /* 0x67?? */ + {{0}}, /* 0x68?? */ + {{0}}, /* 0x69?? */ + {{0}}, /* 0x6a?? */ + {{0}}, /* 0x6b?? */ + {{0}}, /* 0x6c?? */ + {{0}}, /* 0x6d?? */ + {{0}}, /* 0x6e?? */ + {{0}}, /* 0x6f?? */ + {{0}}, /* 0x70?? */ + {{0}}, /* 0x71?? */ + {{0}}, /* 0x72?? */ + {{0}}, /* 0x73?? */ + {{0}}, /* 0x74?? */ + {{0}}, /* 0x75?? */ + {{0}}, /* 0x76?? */ + {{0}}, /* 0x77?? */ + {{0}}, /* 0x78?? */ + {{0}}, /* 0x79?? */ + {{0}}, /* 0x7a?? */ + {{0}}, /* 0x7b?? */ + {{0}}, /* 0x7c?? */ + {{0}}, /* 0x7d?? */ + {{0}}, /* 0x7e?? */ + {{0}}, /* 0x7f?? */ + {{0}}, /* 0x80?? */ + {{0}}, /* 0x81?? */ + {{0}}, /* 0x82?? */ + {{0}}, /* 0x83?? */ + {{0}}, /* 0x84?? */ + {{0}}, /* 0x85?? */ + {{0}}, /* 0x86?? */ + {{0}}, /* 0x87?? */ + {{0}}, /* 0x88?? */ + {{0}}, /* 0x89?? */ + {{0}}, /* 0x8a?? */ + {{0}}, /* 0x8b?? */ + {{0}}, /* 0x8c?? */ + {{0}}, /* 0x8d?? */ + {{0}}, /* 0x8e?? */ + {{0}}, /* 0x8f?? */ + {{0}}, /* 0x90?? */ + {{0}}, /* 0x91?? */ + {{0}}, /* 0x92?? */ + {{0}}, /* 0x93?? */ + {{0}}, /* 0x94?? */ + {{0}}, /* 0x95?? */ + {{0}}, /* 0x96?? */ + {{0}}, /* 0x97?? */ + {{0}}, /* 0x98?? */ + {{0}}, /* 0x99?? */ + {{0}}, /* 0x9a?? */ + {{0}}, /* 0x9b?? */ + {{0}}, /* 0x9c?? */ + {{0}}, /* 0x9d?? */ + {{0}}, /* 0x9e?? */ + {{0}}, /* 0x9f?? */ + {{0}}, /* 0xa0?? */ + {{0}}, /* 0xa1?? */ + {{0}}, /* 0xa2?? */ + {{0}}, /* 0xa3?? */ + {{0}}, /* 0xa4?? */ + {{0}}, /* 0xa5?? */ + {{0}}, /* 0xa6?? */ + {{0}}, /* 0xa7?? */ + {{0}}, /* 0xa8?? */ + {{0}}, /* 0xa9?? */ + {{0}}, /* 0xaa?? */ + {{0}}, /* 0xab?? */ + {{0}}, /* 0xac?? */ + {{0}}, /* 0xad?? */ + {{0}}, /* 0xae?? */ + {{0}}, /* 0xaf?? */ + {{0}}, /* 0xb0?? */ + {{0}}, /* 0xb1?? */ + {{0}}, /* 0xb2?? */ + {{0}}, /* 0xb3?? */ + {{0}}, /* 0xb4?? */ + {{0}}, /* 0xb5?? */ + {{0}}, /* 0xb6?? */ + {{0}}, /* 0xb7?? */ + {{0}}, /* 0xb8?? */ + {{0}}, /* 0xb9?? */ + {{0}}, /* 0xba?? */ + {{0}}, /* 0xbb?? */ + {{0}}, /* 0xbc?? */ + {{0}}, /* 0xbd?? */ + {{0}}, /* 0xbe?? */ + {{0}}, /* 0xbf?? */ + {{0}}, /* 0xc0?? */ + {{0}}, /* 0xc1?? */ + {{0}}, /* 0xc2?? */ + {{0}}, /* 0xc3?? */ + {{0}}, /* 0xc4?? */ + {{0}}, /* 0xc5?? */ + {{0}}, /* 0xc6?? */ + {{0}}, /* 0xc7?? */ + {{0}}, /* 0xc8?? */ + {{0}}, /* 0xc9?? */ + {{0}}, /* 0xca?? */ + {{0}}, /* 0xcb?? */ + {{0}}, /* 0xcc?? */ + {{0}}, /* 0xcd?? */ + {{0}}, /* 0xce?? */ + {{0}}, /* 0xcf?? */ + {{0}}, /* 0xd0?? */ + {{0}}, /* 0xd1?? */ + {{0}}, /* 0xd2?? */ + {{0}}, /* 0xd3?? */ + {{0}}, /* 0xd4?? */ + {{0}}, /* 0xd5?? */ + {{0}}, /* 0xd6?? */ + {{0}}, /* 0xd7?? */ + {{0}}, /* 0xd8?? */ + {{0}}, /* 0xd9?? */ + {{0}}, /* 0xda?? */ + {{0}}, /* 0xdb?? */ + {{0}}, /* 0xdc?? */ + {{0}}, /* 0xdd?? */ + {{0}}, /* 0xde?? */ + {{0}}, /* 0xdf?? */ + {{0}}, /* 0xe0?? */ + {{0}}, /* 0xe1?? */ + {{0}}, /* 0xe2?? */ + {{0}}, /* 0xe3?? */ + {{0}}, /* 0xe4?? */ + {{0}}, /* 0xe5?? */ + {{0}}, /* 0xe6?? */ + {{0}}, /* 0xe7?? */ + {{0}}, /* 0xe8?? */ + {{0}}, /* 0xe9?? */ + {{0}}, /* 0xea?? */ + {{0}}, /* 0xeb?? */ + {{0}}, /* 0xec?? */ + {{0}}, /* 0xed?? */ + {{0}}, /* 0xee?? */ + {{0}}, /* 0xef?? */ + {{0}}, /* 0xf0?? */ + {{0}}, /* 0xf1?? */ + {{0}}, /* 0xf2?? */ + {{0}}, /* 0xf3?? */ + {{0}}, /* 0xf4?? */ + {{0}}, /* 0xf5?? */ + {{0}}, /* 0xf6?? */ + {{0}}, /* 0xf7?? */ + {{0}}, /* 0xf8?? */ + {{0}}, /* 0xf9?? */ + {{0}}, /* 0xfa?? */ + {{0}}, /* 0xfb?? */ + {{0}}, /* 0xfc?? */ { /* 0xfd?? */ - 0x00, /* 0xfd00 */ - 0x00, /* 0xfd01 (3270_Duplicate) */ - 0x00, /* 0xfd02 (3270_FieldMark) */ - 0x00, /* 0xfd03 (3270_Right2) */ - 0x00, /* 0xfd04 (3270_Left2) */ - 0x00, /* 0xfd05 (3270_BackTab) */ - 0x00, /* 0xfd06 (3270_EraseEOF) */ - 0x00, /* 0xfd07 (3270_EraseInput) */ - 0x00, /* 0xfd08 (3270_Reset) */ - 0x00, /* 0xfd09 (3270_Quit) */ - 0x00, /* 0xfd0a (3270_PA1) */ - 0x00, /* 0xfd0b (3270_PA2) */ - 0x00, /* 0xfd0c (3270_PA3) */ - 0x00, /* 0xfd0d (3270_Test) */ - 0x00, /* 0xfd0e (3270_Attn) */ - 0x00, /* 0xfd0f (3270_CursorBlink) */ - 0x00, /* 0xfd10 (3270_AltCursor) */ - 0x00, /* 0xfd11 (3270_KeyClick) */ - 0x00, /* 0xfd12 (3270_Jump) */ - 0x00, /* 0xfd13 (3270_Ident) */ - 0x00, /* 0xfd14 (3270_Rule) */ - 0x00, /* 0xfd15 (3270_Copy) */ - 0x00, /* 0xfd16 (3270_Play) */ - 0x00, /* 0xfd17 (3270_Setup) */ - 0x00, /* 0xfd18 (3270_Record) */ - 0x00, /* 0xfd19 (3270_ChangeScreen) */ - 0x00, /* 0xfd1a (3270_DeleteWord) */ - 0x00, /* 0xfd1b (3270_ExSelect) */ - 0x00, /* 0xfd1c (3270_CursorSelect) */ - 0x00, /* 0xfd1d (3270_PrintScreen) */ - 0x00, /* 0xfd1e (3270_Enter) */ - 0x00, /* 0xfd1f */ - 0x00, /* 0xfd20 */ - 0x00, /* 0xfd21 */ - 0x00, /* 0xfd22 */ - 0x00, /* 0xfd23 */ - 0x00, /* 0xfd24 */ - 0x00, /* 0xfd25 */ - 0x00, /* 0xfd26 */ - 0x00, /* 0xfd27 */ - 0x00, /* 0xfd28 */ - 0x00, /* 0xfd29 */ - 0x00, /* 0xfd2a */ - 0x00, /* 0xfd2b */ - 0x00, /* 0xfd2c */ - 0x00, /* 0xfd2d */ - 0x00, /* 0xfd2e */ - 0x00, /* 0xfd2f */ - 0x00, /* 0xfd30 */ - 0x00, /* 0xfd31 */ - 0x00, /* 0xfd32 */ - 0x00, /* 0xfd33 */ - 0x00, /* 0xfd34 */ - 0x00, /* 0xfd35 */ - 0x00, /* 0xfd36 */ - 0x00, /* 0xfd37 */ - 0x00, /* 0xfd38 */ - 0x00, /* 0xfd39 */ - 0x00, /* 0xfd3a */ - 0x00, /* 0xfd3b */ - 0x00, /* 0xfd3c */ - 0x00, /* 0xfd3d */ - 0x00, /* 0xfd3e */ - 0x00, /* 0xfd3f */ - 0x00, /* 0xfd40 */ - 0x00, /* 0xfd41 */ - 0x00, /* 0xfd42 */ - 0x00, /* 0xfd43 */ - 0x00, /* 0xfd44 */ - 0x00, /* 0xfd45 */ - 0x00, /* 0xfd46 */ - 0x00, /* 0xfd47 */ - 0x00, /* 0xfd48 */ - 0x00, /* 0xfd49 */ - 0x00, /* 0xfd4a */ - 0x00, /* 0xfd4b */ - 0x00, /* 0xfd4c */ - 0x00, /* 0xfd4d */ - 0x00, /* 0xfd4e */ - 0x00, /* 0xfd4f */ - 0x00, /* 0xfd50 */ - 0x00, /* 0xfd51 */ - 0x00, /* 0xfd52 */ - 0x00, /* 0xfd53 */ - 0x00, /* 0xfd54 */ - 0x00, /* 0xfd55 */ - 0x00, /* 0xfd56 */ - 0x00, /* 0xfd57 */ - 0x00, /* 0xfd58 */ - 0x00, /* 0xfd59 */ - 0x00, /* 0xfd5a */ - 0x00, /* 0xfd5b */ - 0x00, /* 0xfd5c */ - 0x00, /* 0xfd5d */ - 0x00, /* 0xfd5e */ - 0x00, /* 0xfd5f */ - 0x00, /* 0xfd60 */ - 0x00, /* 0xfd61 */ - 0x00, /* 0xfd62 */ - 0x00, /* 0xfd63 */ - 0x00, /* 0xfd64 */ - 0x00, /* 0xfd65 */ - 0x00, /* 0xfd66 */ - 0x00, /* 0xfd67 */ - 0x00, /* 0xfd68 */ - 0x00, /* 0xfd69 */ - 0x00, /* 0xfd6a */ - 0x00, /* 0xfd6b */ - 0x00, /* 0xfd6c */ - 0x00, /* 0xfd6d */ - 0x00, /* 0xfd6e */ - 0x00, /* 0xfd6f */ - 0x00, /* 0xfd70 */ - 0x00, /* 0xfd71 */ - 0x00, /* 0xfd72 */ - 0x00, /* 0xfd73 */ - 0x00, /* 0xfd74 */ - 0x00, /* 0xfd75 */ - 0x00, /* 0xfd76 */ - 0x00, /* 0xfd77 */ - 0x00, /* 0xfd78 */ - 0x00, /* 0xfd79 */ - 0x00, /* 0xfd7a */ - 0x00, /* 0xfd7b */ - 0x00, /* 0xfd7c */ - 0x00, /* 0xfd7d */ - 0x00, /* 0xfd7e */ - 0x00, /* 0xfd7f */ - 0x00, /* 0xfd80 */ - 0x00, /* 0xfd81 */ - 0x00, /* 0xfd82 */ - 0x00, /* 0xfd83 */ - 0x00, /* 0xfd84 */ - 0x00, /* 0xfd85 */ - 0x00, /* 0xfd86 */ - 0x00, /* 0xfd87 */ - 0x00, /* 0xfd88 */ - 0x00, /* 0xfd89 */ - 0x00, /* 0xfd8a */ - 0x00, /* 0xfd8b */ - 0x00, /* 0xfd8c */ - 0x00, /* 0xfd8d */ - 0x00, /* 0xfd8e */ - 0x00, /* 0xfd8f */ - 0x00, /* 0xfd90 */ - 0x00, /* 0xfd91 */ - 0x00, /* 0xfd92 */ - 0x00, /* 0xfd93 */ - 0x00, /* 0xfd94 */ - 0x00, /* 0xfd95 */ - 0x00, /* 0xfd96 */ - 0x00, /* 0xfd97 */ - 0x00, /* 0xfd98 */ - 0x00, /* 0xfd99 */ - 0x00, /* 0xfd9a */ - 0x00, /* 0xfd9b */ - 0x00, /* 0xfd9c */ - 0x00, /* 0xfd9d */ - 0x00, /* 0xfd9e */ - 0x00, /* 0xfd9f */ - 0x00, /* 0xfda0 */ - 0x00, /* 0xfda1 */ - 0x00, /* 0xfda2 */ - 0x00, /* 0xfda3 */ - 0x00, /* 0xfda4 */ - 0x00, /* 0xfda5 */ - 0x00, /* 0xfda6 */ - 0x00, /* 0xfda7 */ - 0x00, /* 0xfda8 */ - 0x00, /* 0xfda9 */ - 0x00, /* 0xfdaa */ - 0x00, /* 0xfdab */ - 0x00, /* 0xfdac */ - 0x00, /* 0xfdad */ - 0x00, /* 0xfdae */ - 0x00, /* 0xfdaf */ - 0x00, /* 0xfdb0 */ - 0x00, /* 0xfdb1 */ - 0x00, /* 0xfdb2 */ - 0x00, /* 0xfdb3 */ - 0x00, /* 0xfdb4 */ - 0x00, /* 0xfdb5 */ - 0x00, /* 0xfdb6 */ - 0x00, /* 0xfdb7 */ - 0x00, /* 0xfdb8 */ - 0x00, /* 0xfdb9 */ - 0x00, /* 0xfdba */ - 0x00, /* 0xfdbb */ - 0x00, /* 0xfdbc */ - 0x00, /* 0xfdbd */ - 0x00, /* 0xfdbe */ - 0x00, /* 0xfdbf */ - 0x00, /* 0xfdc0 */ - 0x00, /* 0xfdc1 */ - 0x00, /* 0xfdc2 */ - 0x00, /* 0xfdc3 */ - 0x00, /* 0xfdc4 */ - 0x00, /* 0xfdc5 */ - 0x00, /* 0xfdc6 */ - 0x00, /* 0xfdc7 */ - 0x00, /* 0xfdc8 */ - 0x00, /* 0xfdc9 */ - 0x00, /* 0xfdca */ - 0x00, /* 0xfdcb */ - 0x00, /* 0xfdcc */ - 0x00, /* 0xfdcd */ - 0x00, /* 0xfdce */ - 0x00, /* 0xfdcf */ - 0x00, /* 0xfdd0 */ - 0x00, /* 0xfdd1 */ - 0x00, /* 0xfdd2 */ - 0x00, /* 0xfdd3 */ - 0x00, /* 0xfdd4 */ - 0x00, /* 0xfdd5 */ - 0x00, /* 0xfdd6 */ - 0x00, /* 0xfdd7 */ - 0x00, /* 0xfdd8 */ - 0x00, /* 0xfdd9 */ - 0x00, /* 0xfdda */ - 0x00, /* 0xfddb */ - 0x00, /* 0xfddc */ - 0x00, /* 0xfddd */ - 0x00, /* 0xfdde */ - 0x00, /* 0xfddf */ - 0x00, /* 0xfde0 */ - 0x00, /* 0xfde1 */ - 0x00, /* 0xfde2 */ - 0x00, /* 0xfde3 */ - 0x00, /* 0xfde4 */ - 0x00, /* 0xfde5 */ - 0x00, /* 0xfde6 */ - 0x00, /* 0xfde7 */ - 0x00, /* 0xfde8 */ - 0x00, /* 0xfde9 */ - 0x00, /* 0xfdea */ - 0x00, /* 0xfdeb */ - 0x00, /* 0xfdec */ - 0x00, /* 0xfded */ - 0x00, /* 0xfdee */ - 0x00, /* 0xfdef */ - 0x00, /* 0xfdf0 */ - 0x00, /* 0xfdf1 */ - 0x00, /* 0xfdf2 */ - 0x00, /* 0xfdf3 */ - 0x00, /* 0xfdf4 */ - 0x00, /* 0xfdf5 */ - 0x00, /* 0xfdf6 */ - 0x00, /* 0xfdf7 */ - 0x00, /* 0xfdf8 */ - 0x00, /* 0xfdf9 */ - 0x00, /* 0xfdfa */ - 0x00, /* 0xfdfb */ - 0x00, /* 0xfdfc */ - 0x00, /* 0xfdfd */ - 0x00, /* 0xfdfe */ - 0x00, /* 0xfdff */ + { /* 0xfd00 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd01 (3270_Duplicate) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd02 (3270_FieldMark) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd03 (3270_Right2) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd04 (3270_Left2) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd05 (3270_BackTab) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd06 (3270_EraseEOF) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd07 (3270_EraseInput) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd08 (3270_Reset) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd09 (3270_Quit) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd0a (3270_PA1) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd0b (3270_PA2) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd0c (3270_PA3) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd0d (3270_Test) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd0e (3270_Attn) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd0f (3270_CursorBlink) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd10 (3270_AltCursor) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd11 (3270_KeyClick) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd12 (3270_Jump) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd13 (3270_Ident) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd14 (3270_Rule) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd15 (3270_Copy) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd16 (3270_Play) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd17 (3270_Setup) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd18 (3270_Record) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd19 (3270_ChangeScreen) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd1a (3270_DeleteWord) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd1b (3270_ExSelect) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd1c (3270_CursorSelect) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd1d (3270_PrintScreen) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd1e (3270_Enter) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd1f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd20 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd21 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd22 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd23 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd24 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd25 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd26 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd27 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd28 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd29 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd2a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd2b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd2c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd2d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd2e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd2f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd30 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd31 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd32 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd33 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd34 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd35 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd36 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd37 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd38 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd39 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd3a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd3b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd3c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd3d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd3e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd3f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd40 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd41 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd42 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd43 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd44 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd45 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd46 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd47 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd48 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd49 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd4a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd4b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd4c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd4d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd4e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd4f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd50 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd51 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd52 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd53 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd54 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd55 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd56 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd57 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd58 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd59 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd5a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd5b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd5c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd5d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd5e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd5f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd60 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd61 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd62 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd63 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd64 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd65 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd66 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd67 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd68 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd69 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd6a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd6b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd6c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd6d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd6e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd6f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd70 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd71 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd72 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd73 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd74 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd75 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd76 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd77 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd78 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd79 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd7a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd7b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd7c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd7d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd7e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd7f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd80 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd81 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd82 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd83 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd84 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd85 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd86 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd87 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd88 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd89 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd8a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd8b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd8c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd8d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd8e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd8f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd90 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd91 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd92 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd93 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd94 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd95 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd96 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd97 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd98 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd99 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd9a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd9b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd9c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd9d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd9e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfd9f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfda0 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfda1 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfda2 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfda3 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfda4 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfda5 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfda6 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfda7 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfda8 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfda9 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfdaa */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfdab */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfdac */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfdad */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfdae */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfdaf */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfdb0 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfdb1 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfdb2 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfdb3 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfdb4 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfdb5 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfdb6 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfdb7 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfdb8 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfdb9 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfdba */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfdbb */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfdbc */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfdbd */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfdbe */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfdbf */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfdc0 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfdc1 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfdc2 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfdc3 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfdc4 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfdc5 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfdc6 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfdc7 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfdc8 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfdc9 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfdca */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfdcb */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfdcc */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfdcd */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfdce */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfdcf */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfdd0 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfdd1 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfdd2 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfdd3 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfdd4 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfdd5 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfdd6 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfdd7 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfdd8 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfdd9 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfdda */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfddb */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfddc */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfddd */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfdde */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfddf */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfde0 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfde1 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfde2 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfde3 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfde4 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfde5 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfde6 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfde7 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfde8 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfde9 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfdea */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfdeb */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfdec */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfded */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfdee */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfdef */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfdf0 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfdf1 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfdf2 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfdf3 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfdf4 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfdf5 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfdf6 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfdf7 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfdf8 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfdf9 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfdfa */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfdfb */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfdfc */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfdfd */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfdfe */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfdff */ + .scancode = 0x00, + .flags = 0x00 + }, + }, { /* 0xfe?? */ - 0x00, /* 0xfe00 */ - 0x00, /* 0xfe01 (ISO_Lock) */ - 0x00, /* 0xfe02 (ISO_Level2_Latch) */ - 0x00, /* 0xfe03 (ISO_Level3_Shift) */ - 0x00, /* 0xfe04 (ISO_Level3_Latch) */ - 0x00, /* 0xfe05 (ISO_Level3_Lock) */ - 0x00, /* 0xfe06 (ISO_Group_Latch) */ - 0x00, /* 0xfe07 (ISO_Group_Lock) */ - 0x00, /* 0xfe08 (ISO_Next_Group) */ - 0x00, /* 0xfe09 (ISO_Next_Group_Lock) */ - 0x00, /* 0xfe0a (ISO_Prev_Group) */ - 0x00, /* 0xfe0b (ISO_Prev_Group_Lock) */ - 0x00, /* 0xfe0c (ISO_First_Group) */ - 0x00, /* 0xfe0d (ISO_First_Group_Lock) */ - 0x00, /* 0xfe0e (ISO_Last_Group) */ - 0x00, /* 0xfe0f (ISO_Last_Group_Lock) */ - 0x00, /* 0xfe10 */ - 0x00, /* 0xfe11 (ISO_Level5_Shift) */ - 0x00, /* 0xfe12 (ISO_Level5_Latch) */ - 0x00, /* 0xfe13 (ISO_Level5_Lock) */ - 0x00, /* 0xfe14 */ - 0x00, /* 0xfe15 */ - 0x00, /* 0xfe16 */ - 0x00, /* 0xfe17 */ - 0x00, /* 0xfe18 */ - 0x00, /* 0xfe19 */ - 0x00, /* 0xfe1a */ - 0x00, /* 0xfe1b */ - 0x00, /* 0xfe1c */ - 0x00, /* 0xfe1d */ - 0x00, /* 0xfe1e */ - 0x00, /* 0xfe1f */ - 0x00, /* 0xfe20 (ISO_Left_Tab) */ - 0x00, /* 0xfe21 (ISO_Move_Line_Up) */ - 0x00, /* 0xfe22 (ISO_Move_Line_Down) */ - 0x00, /* 0xfe23 (ISO_Partial_Line_Up) */ - 0x00, /* 0xfe24 (ISO_Partial_Line_Down) */ - 0x00, /* 0xfe25 (ISO_Partial_Space_Left) */ - 0x00, /* 0xfe26 (ISO_Partial_Space_Right) */ - 0x00, /* 0xfe27 (ISO_Set_Margin_Left) */ - 0x00, /* 0xfe28 (ISO_Set_Margin_Right) */ - 0x00, /* 0xfe29 (ISO_Release_Margin_Left) */ - 0x00, /* 0xfe2a (ISO_Release_Margin_Right) */ - 0x00, /* 0xfe2b (ISO_Release_Both_Margins) */ - 0x00, /* 0xfe2c (ISO_Fast_Cursor_Left) */ - 0x00, /* 0xfe2d (ISO_Fast_Cursor_Right) */ - 0x00, /* 0xfe2e (ISO_Fast_Cursor_Up) */ - 0x00, /* 0xfe2f (ISO_Fast_Cursor_Down) */ - 0x00, /* 0xfe30 (ISO_Continuous_Underline) */ - 0x00, /* 0xfe31 (ISO_Discontinuous_Underline) */ - 0x00, /* 0xfe32 (ISO_Emphasize) */ - 0x00, /* 0xfe33 (ISO_Center_Object) */ - 0x00, /* 0xfe34 (ISO_Enter) */ - 0x00, /* 0xfe35 */ - 0x00, /* 0xfe36 */ - 0x00, /* 0xfe37 */ - 0x00, /* 0xfe38 */ - 0x00, /* 0xfe39 */ - 0x00, /* 0xfe3a */ - 0x00, /* 0xfe3b */ - 0x00, /* 0xfe3c */ - 0x00, /* 0xfe3d */ - 0x00, /* 0xfe3e */ - 0x00, /* 0xfe3f */ - 0x00, /* 0xfe40 */ - 0x00, /* 0xfe41 */ - 0x00, /* 0xfe42 */ - 0x00, /* 0xfe43 */ - 0x00, /* 0xfe44 */ - 0x00, /* 0xfe45 */ - 0x00, /* 0xfe46 */ - 0x00, /* 0xfe47 */ - 0x00, /* 0xfe48 */ - 0x00, /* 0xfe49 */ - 0x00, /* 0xfe4a */ - 0x00, /* 0xfe4b */ - 0x00, /* 0xfe4c */ - 0x00, /* 0xfe4d */ - 0x00, /* 0xfe4e */ - 0x00, /* 0xfe4f */ - 0x00, /* 0xfe50 (dead_grave) */ - 0x00, /* 0xfe51 (dead_acute) */ - 0x00, /* 0xfe52 (dead_circumflex) */ - 0x00, /* 0xfe53 (dead_perispomeni) */ - 0x00, /* 0xfe54 (dead_macron) */ - 0x00, /* 0xfe55 (dead_breve) */ - 0x00, /* 0xfe56 (dead_abovedot) */ - 0x00, /* 0xfe57 (dead_diaeresis) */ - 0x00, /* 0xfe58 (dead_abovering) */ - 0x00, /* 0xfe59 (dead_doubleacute) */ - 0x00, /* 0xfe5a (dead_caron) */ - 0x00, /* 0xfe5b (dead_cedilla) */ - 0x00, /* 0xfe5c (dead_ogonek) */ - 0x00, /* 0xfe5d (dead_iota) */ - 0x00, /* 0xfe5e (dead_voiced_sound) */ - 0x00, /* 0xfe5f (dead_semivoiced_sound) */ - 0x00, /* 0xfe60 (dead_belowdot) */ - 0x00, /* 0xfe61 (dead_hook) */ - 0x00, /* 0xfe62 (dead_horn) */ - 0x00, /* 0xfe63 (dead_stroke) */ - 0x00, /* 0xfe64 (dead_psili) */ - 0x00, /* 0xfe65 (dead_dasia) */ - 0x00, /* 0xfe66 (dead_doublegrave) */ - 0x00, /* 0xfe67 (dead_belowring) */ - 0x00, /* 0xfe68 (dead_belowmacron) */ - 0x00, /* 0xfe69 (dead_belowcircumflex) */ - 0x00, /* 0xfe6a (dead_belowtilde) */ - 0x00, /* 0xfe6b (dead_belowbreve) */ - 0x00, /* 0xfe6c (dead_belowdiaeresis) */ - 0x00, /* 0xfe6d (dead_invertedbreve) */ - 0x00, /* 0xfe6e (dead_belowcomma) */ - 0x00, /* 0xfe6f (dead_currency) */ - 0x00, /* 0xfe70 (AccessX_Enable) */ - 0x00, /* 0xfe71 (AccessX_Feedback_Enable) */ - 0x00, /* 0xfe72 (RepeatKeys_Enable) */ - 0x00, /* 0xfe73 (SlowKeys_Enable) */ - 0x00, /* 0xfe74 (BounceKeys_Enable) */ - 0x00, /* 0xfe75 (StickyKeys_Enable) */ - 0x00, /* 0xfe76 (MouseKeys_Enable) */ - 0x00, /* 0xfe77 (MouseKeys_Accel_Enable) */ - 0x00, /* 0xfe78 (Overlay1_Enable) */ - 0x00, /* 0xfe79 (Overlay2_Enable) */ - 0x00, /* 0xfe7a (AudibleBell_Enable) */ - 0x00, /* 0xfe7b */ - 0x00, /* 0xfe7c */ - 0x00, /* 0xfe7d */ - 0x00, /* 0xfe7e */ - 0x00, /* 0xfe7f */ - 0x00, /* 0xfe80 (dead_a) */ - 0x00, /* 0xfe81 (dead_A) */ - 0x00, /* 0xfe82 (dead_e) */ - 0x00, /* 0xfe83 (dead_E) */ - 0x00, /* 0xfe84 (dead_i) */ - 0x00, /* 0xfe85 (dead_I) */ - 0x00, /* 0xfe86 (dead_o) */ - 0x00, /* 0xfe87 (dead_O) */ - 0x00, /* 0xfe88 (dead_u) */ - 0x00, /* 0xfe89 (dead_U) */ - 0x00, /* 0xfe8a (dead_small_schwa) */ - 0x00, /* 0xfe8b (dead_capital_schwa) */ - 0x00, /* 0xfe8c */ - 0x00, /* 0xfe8d */ - 0x00, /* 0xfe8e */ - 0x00, /* 0xfe8f */ - 0x00, /* 0xfe90 */ - 0x00, /* 0xfe91 */ - 0x00, /* 0xfe92 */ - 0x00, /* 0xfe93 */ - 0x00, /* 0xfe94 */ - 0x00, /* 0xfe95 */ - 0x00, /* 0xfe96 */ - 0x00, /* 0xfe97 */ - 0x00, /* 0xfe98 */ - 0x00, /* 0xfe99 */ - 0x00, /* 0xfe9a */ - 0x00, /* 0xfe9b */ - 0x00, /* 0xfe9c */ - 0x00, /* 0xfe9d */ - 0x00, /* 0xfe9e */ - 0x00, /* 0xfe9f */ - 0x00, /* 0xfea0 */ - 0x00, /* 0xfea1 */ - 0x00, /* 0xfea2 */ - 0x00, /* 0xfea3 */ - 0x00, /* 0xfea4 */ - 0x00, /* 0xfea5 */ - 0x00, /* 0xfea6 */ - 0x00, /* 0xfea7 */ - 0x00, /* 0xfea8 */ - 0x00, /* 0xfea9 */ - 0x00, /* 0xfeaa */ - 0x00, /* 0xfeab */ - 0x00, /* 0xfeac */ - 0x00, /* 0xfead */ - 0x00, /* 0xfeae */ - 0x00, /* 0xfeaf */ - 0x00, /* 0xfeb0 */ - 0x00, /* 0xfeb1 */ - 0x00, /* 0xfeb2 */ - 0x00, /* 0xfeb3 */ - 0x00, /* 0xfeb4 */ - 0x00, /* 0xfeb5 */ - 0x00, /* 0xfeb6 */ - 0x00, /* 0xfeb7 */ - 0x00, /* 0xfeb8 */ - 0x00, /* 0xfeb9 */ - 0x00, /* 0xfeba */ - 0x00, /* 0xfebb */ - 0x00, /* 0xfebc */ - 0x00, /* 0xfebd */ - 0x00, /* 0xfebe */ - 0x00, /* 0xfebf */ - 0x00, /* 0xfec0 */ - 0x00, /* 0xfec1 */ - 0x00, /* 0xfec2 */ - 0x00, /* 0xfec3 */ - 0x00, /* 0xfec4 */ - 0x00, /* 0xfec5 */ - 0x00, /* 0xfec6 */ - 0x00, /* 0xfec7 */ - 0x00, /* 0xfec8 */ - 0x00, /* 0xfec9 */ - 0x00, /* 0xfeca */ - 0x00, /* 0xfecb */ - 0x00, /* 0xfecc */ - 0x00, /* 0xfecd */ - 0x00, /* 0xfece */ - 0x00, /* 0xfecf */ - 0x00, /* 0xfed0 (First_Virtual_Screen) */ - 0x00, /* 0xfed1 (Prev_Virtual_Screen) */ - 0x00, /* 0xfed2 (Next_Virtual_Screen) */ - 0x00, /* 0xfed3 */ - 0x00, /* 0xfed4 (Last_Virtual_Screen) */ - 0x00, /* 0xfed5 (Terminate_Server) */ - 0x00, /* 0xfed6 */ - 0x00, /* 0xfed7 */ - 0x00, /* 0xfed8 */ - 0x00, /* 0xfed9 */ - 0x00, /* 0xfeda */ - 0x00, /* 0xfedb */ - 0x00, /* 0xfedc */ - 0x00, /* 0xfedd */ - 0x00, /* 0xfede */ - 0x00, /* 0xfedf */ - 0x00, /* 0xfee0 (Pointer_Left) */ - 0x00, /* 0xfee1 (Pointer_Right) */ - 0x00, /* 0xfee2 (Pointer_Up) */ - 0x00, /* 0xfee3 (Pointer_Down) */ - 0x00, /* 0xfee4 (Pointer_UpLeft) */ - 0x00, /* 0xfee5 (Pointer_UpRight) */ - 0x00, /* 0xfee6 (Pointer_DownLeft) */ - 0x00, /* 0xfee7 (Pointer_DownRight) */ - 0x00, /* 0xfee8 (Pointer_Button_Dflt) */ - 0x00, /* 0xfee9 (Pointer_Button1) */ - 0x00, /* 0xfeea (Pointer_Button2) */ - 0x00, /* 0xfeeb (Pointer_Button3) */ - 0x00, /* 0xfeec (Pointer_Button4) */ - 0x00, /* 0xfeed (Pointer_Button5) */ - 0x00, /* 0xfeee (Pointer_DblClick_Dflt) */ - 0x00, /* 0xfeef (Pointer_DblClick1) */ - 0x00, /* 0xfef0 (Pointer_DblClick2) */ - 0x00, /* 0xfef1 (Pointer_DblClick3) */ - 0x00, /* 0xfef2 (Pointer_DblClick4) */ - 0x00, /* 0xfef3 (Pointer_DblClick5) */ - 0x00, /* 0xfef4 (Pointer_Drag_Dflt) */ - 0x00, /* 0xfef5 (Pointer_Drag1) */ - 0x00, /* 0xfef6 (Pointer_Drag2) */ - 0x00, /* 0xfef7 (Pointer_Drag3) */ - 0x00, /* 0xfef8 (Pointer_Drag4) */ - 0x00, /* 0xfef9 (Pointer_EnableKeys) */ - 0x00, /* 0xfefa (Pointer_Accelerate) */ - 0x00, /* 0xfefb (Pointer_DfltBtnNext) */ - 0x00, /* 0xfefc (Pointer_DfltBtnPrev) */ - 0x00, /* 0xfefd (Pointer_Drag5) */ - 0x00, /* 0xfefe */ - 0x00, /* 0xfeff */ + { /* 0xfe00 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe01 (ISO_Lock) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe02 (ISO_Level2_Latch) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe03 (ISO_Level3_Shift) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe04 (ISO_Level3_Latch) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe05 (ISO_Level3_Lock) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe06 (ISO_Group_Latch) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe07 (ISO_Group_Lock) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe08 (ISO_Next_Group) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe09 (ISO_Next_Group_Lock) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe0a (ISO_Prev_Group) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe0b (ISO_Prev_Group_Lock) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe0c (ISO_First_Group) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe0d (ISO_First_Group_Lock) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe0e (ISO_Last_Group) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe0f (ISO_Last_Group_Lock) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe10 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe11 (ISO_Level5_Shift) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe12 (ISO_Level5_Latch) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe13 (ISO_Level5_Lock) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe14 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe15 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe16 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe17 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe18 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe19 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe1a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe1b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe1c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe1d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe1e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe1f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe20 (ISO_Left_Tab) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe21 (ISO_Move_Line_Up) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe22 (ISO_Move_Line_Down) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe23 (ISO_Partial_Line_Up) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe24 (ISO_Partial_Line_Down) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe25 (ISO_Partial_Space_Left) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe26 (ISO_Partial_Space_Right) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe27 (ISO_Set_Margin_Left) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe28 (ISO_Set_Margin_Right) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe29 (ISO_Release_Margin_Left) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe2a (ISO_Release_Margin_Right) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe2b (ISO_Release_Both_Margins) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe2c (ISO_Fast_Cursor_Left) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe2d (ISO_Fast_Cursor_Right) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe2e (ISO_Fast_Cursor_Up) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe2f (ISO_Fast_Cursor_Down) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe30 (ISO_Continuous_Underline) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe31 (ISO_Discontinuous_Underline) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe32 (ISO_Emphasize) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe33 (ISO_Center_Object) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe34 (ISO_Enter) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe35 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe36 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe37 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe38 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe39 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe3a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe3b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe3c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe3d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe3e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe3f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe40 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe41 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe42 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe43 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe44 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe45 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe46 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe47 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe48 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe49 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe4a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe4b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe4c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe4d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe4e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe4f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe50 (dead_grave) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe51 (dead_acute) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe52 (dead_circumflex) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe53 (dead_perispomeni) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe54 (dead_macron) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe55 (dead_breve) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe56 (dead_abovedot) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe57 (dead_diaeresis) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe58 (dead_abovering) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe59 (dead_doubleacute) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe5a (dead_caron) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe5b (dead_cedilla) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe5c (dead_ogonek) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe5d (dead_iota) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe5e (dead_voiced_sound) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe5f (dead_semivoiced_sound) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe60 (dead_belowdot) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe61 (dead_hook) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe62 (dead_horn) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe63 (dead_stroke) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe64 (dead_psili) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe65 (dead_dasia) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe66 (dead_doublegrave) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe67 (dead_belowring) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe68 (dead_belowmacron) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe69 (dead_belowcircumflex) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe6a (dead_belowtilde) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe6b (dead_belowbreve) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe6c (dead_belowdiaeresis) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe6d (dead_invertedbreve) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe6e (dead_belowcomma) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe6f (dead_currency) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe70 (AccessX_Enable) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe71 (AccessX_Feedback_Enable) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe72 (RepeatKeys_Enable) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe73 (SlowKeys_Enable) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe74 (BounceKeys_Enable) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe75 (StickyKeys_Enable) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe76 (MouseKeys_Enable) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe77 (MouseKeys_Accel_Enable) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe78 (Overlay1_Enable) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe79 (Overlay2_Enable) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe7a (AudibleBell_Enable) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe7b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe7c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe7d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe7e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe7f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe80 (dead_a) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe81 (dead_A) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe82 (dead_e) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe83 (dead_E) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe84 (dead_i) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe85 (dead_I) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe86 (dead_o) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe87 (dead_O) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe88 (dead_u) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe89 (dead_U) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe8a (dead_small_schwa) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe8b (dead_capital_schwa) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe8c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe8d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe8e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe8f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe90 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe91 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe92 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe93 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe94 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe95 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe96 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe97 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe98 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe99 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe9a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe9b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe9c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe9d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe9e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfe9f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfea0 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfea1 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfea2 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfea3 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfea4 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfea5 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfea6 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfea7 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfea8 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfea9 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfeaa */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfeab */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfeac */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfead */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfeae */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfeaf */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfeb0 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfeb1 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfeb2 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfeb3 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfeb4 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfeb5 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfeb6 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfeb7 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfeb8 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfeb9 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfeba */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfebb */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfebc */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfebd */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfebe */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfebf */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfec0 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfec1 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfec2 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfec3 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfec4 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfec5 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfec6 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfec7 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfec8 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfec9 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfeca */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfecb */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfecc */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfecd */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfece */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfecf */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfed0 (First_Virtual_Screen) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfed1 (Prev_Virtual_Screen) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfed2 (Next_Virtual_Screen) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfed3 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfed4 (Last_Virtual_Screen) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfed5 (Terminate_Server) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfed6 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfed7 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfed8 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfed9 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfeda */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfedb */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfedc */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfedd */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfede */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfedf */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfee0 (Pointer_Left) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfee1 (Pointer_Right) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfee2 (Pointer_Up) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfee3 (Pointer_Down) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfee4 (Pointer_UpLeft) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfee5 (Pointer_UpRight) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfee6 (Pointer_DownLeft) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfee7 (Pointer_DownRight) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfee8 (Pointer_Button_Dflt) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfee9 (Pointer_Button1) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfeea (Pointer_Button2) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfeeb (Pointer_Button3) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfeec (Pointer_Button4) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfeed (Pointer_Button5) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfeee (Pointer_DblClick_Dflt) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfeef (Pointer_DblClick1) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfef0 (Pointer_DblClick2) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfef1 (Pointer_DblClick3) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfef2 (Pointer_DblClick4) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfef3 (Pointer_DblClick5) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfef4 (Pointer_Drag_Dflt) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfef5 (Pointer_Drag1) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfef6 (Pointer_Drag2) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfef7 (Pointer_Drag3) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfef8 (Pointer_Drag4) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfef9 (Pointer_EnableKeys) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfefa (Pointer_Accelerate) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfefb (Pointer_DfltBtnNext) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfefc (Pointer_DfltBtnPrev) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfefd (Pointer_Drag5) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfefe */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfeff */ + .scancode = 0x00, + .flags = 0x00 + }, + }, { /* 0xff?? */ - 0x00, /* 0xff00 */ - 0x00, /* 0xff01 */ - 0x00, /* 0xff02 */ - 0x00, /* 0xff03 */ - 0x00, /* 0xff04 */ - 0x00, /* 0xff05 */ - 0x00, /* 0xff06 */ - 0x00, /* 0xff07 */ - 0x0E, /* 0xff08 (BackSpace) */ - 0x0F, /* 0xff09 (Tab) */ - 0x00, /* 0xff0a (Linefeed) */ - 0x00, /* 0xff0b (Clear) */ - 0x00, /* 0xff0c */ - 0x1C, /* 0xff0d (Return) */ - 0x00, /* 0xff0e */ - 0x00, /* 0xff0f */ - 0x00, /* 0xff10 */ - 0x00, /* 0xff11 */ - 0x00, /* 0xff12 */ - 0x00, /* 0xff13 (Pause) */ - 0x00, /* 0xff14 (Scroll_Lock) */ - 0x00, /* 0xff15 (Sys_Req) */ - 0x00, /* 0xff16 */ - 0x00, /* 0xff17 */ - 0x00, /* 0xff18 */ - 0x00, /* 0xff19 */ - 0x00, /* 0xff1a */ - 0x00, /* 0xff1b (Escape) */ - 0x00, /* 0xff1c */ - 0x00, /* 0xff1d */ - 0x00, /* 0xff1e */ - 0x00, /* 0xff1f */ - 0x00, /* 0xff20 (Multi_key) */ - 0x00, /* 0xff21 (Kanji) */ - 0x00, /* 0xff22 (Muhenkan) */ - 0x00, /* 0xff23 (Henkan) */ - 0x00, /* 0xff24 (Romaji) */ - 0x00, /* 0xff25 (Hiragana) */ - 0x00, /* 0xff26 (Katakana) */ - 0x00, /* 0xff27 (Hiragana_Katakana) */ - 0x00, /* 0xff28 (Zenkaku) */ - 0x00, /* 0xff29 (Hankaku) */ - 0x00, /* 0xff2a (Zenkaku_Hankaku) */ - 0x00, /* 0xff2b (Touroku) */ - 0x00, /* 0xff2c (Massyo) */ - 0x00, /* 0xff2d (Kana_Lock) */ - 0x00, /* 0xff2e (Kana_Shift) */ - 0x00, /* 0xff2f (Eisu_Shift) */ - 0x00, /* 0xff30 (Eisu_toggle) */ - 0x00, /* 0xff31 (Hangul) */ - 0x00, /* 0xff32 (Hangul_Start) */ - 0x00, /* 0xff33 (Hangul_End) */ - 0x00, /* 0xff34 (Hangul_Hanja) */ - 0x00, /* 0xff35 (Hangul_Jamo) */ - 0x00, /* 0xff36 (Hangul_Romaja) */ - 0x00, /* 0xff37 (Hangul_Codeinput) */ - 0x00, /* 0xff38 (Hangul_Jeonja) */ - 0x00, /* 0xff39 (Hangul_Banja) */ - 0x00, /* 0xff3a (Hangul_PreHanja) */ - 0x00, /* 0xff3b (Hangul_PostHanja) */ - 0x00, /* 0xff3c (Hangul_SingleCandidate) */ - 0x00, /* 0xff3d (Hangul_MultipleCandidate) */ - 0x00, /* 0xff3e (Hangul_PreviousCandidate) */ - 0x00, /* 0xff3f (Hangul_Special) */ - 0x00, /* 0xff40 */ - 0x00, /* 0xff41 */ - 0x00, /* 0xff42 */ - 0x00, /* 0xff43 */ - 0x00, /* 0xff44 */ - 0x00, /* 0xff45 */ - 0x00, /* 0xff46 */ - 0x00, /* 0xff47 */ - 0x00, /* 0xff48 */ - 0x00, /* 0xff49 */ - 0x00, /* 0xff4a */ - 0x00, /* 0xff4b */ - 0x00, /* 0xff4c */ - 0x00, /* 0xff4d */ - 0x00, /* 0xff4e */ - 0x00, /* 0xff4f */ - 0x00, /* 0xff50 (Home) */ - 0x00, /* 0xff51 (Left) */ - 0x00, /* 0xff52 (Up) */ - 0x00, /* 0xff53 (Right) */ - 0x00, /* 0xff54 (Down) */ - 0x00, /* 0xff55 (Page_Up) */ - 0x00, /* 0xff56 (Page_Down) */ - 0x00, /* 0xff57 (End) */ - 0x00, /* 0xff58 (Begin) */ - 0x00, /* 0xff59 */ - 0x00, /* 0xff5a */ - 0x00, /* 0xff5b */ - 0x00, /* 0xff5c */ - 0x00, /* 0xff5d */ - 0x00, /* 0xff5e */ - 0x00, /* 0xff5f */ - 0x00, /* 0xff60 (Select) */ - 0x00, /* 0xff61 (Print) */ - 0x00, /* 0xff62 (Execute) */ - 0x00, /* 0xff63 (Insert) */ - 0x00, /* 0xff64 */ - 0x00, /* 0xff65 (Undo) */ - 0x00, /* 0xff66 (Redo) */ - 0x00, /* 0xff67 (Menu) */ - 0x00, /* 0xff68 (Find) */ - 0x00, /* 0xff69 (Cancel) */ - 0x00, /* 0xff6a (Help) */ - 0x00, /* 0xff6b (Break) */ - 0x00, /* 0xff6c */ - 0x00, /* 0xff6d */ - 0x00, /* 0xff6e */ - 0x00, /* 0xff6f */ - 0x00, /* 0xff70 */ - 0x00, /* 0xff71 */ - 0x00, /* 0xff72 */ - 0x00, /* 0xff73 */ - 0x00, /* 0xff74 */ - 0x00, /* 0xff75 */ - 0x00, /* 0xff76 */ - 0x00, /* 0xff77 */ - 0x00, /* 0xff78 */ - 0x00, /* 0xff79 */ - 0x00, /* 0xff7a */ - 0x00, /* 0xff7b */ - 0x00, /* 0xff7c */ - 0x00, /* 0xff7d */ - 0x00, /* 0xff7e (Hangul_switch) */ - 0x00, /* 0xff7f (Num_Lock) */ - 0x00, /* 0xff80 (KP_Space) */ - 0x00, /* 0xff81 */ - 0x00, /* 0xff82 */ - 0x00, /* 0xff83 */ - 0x00, /* 0xff84 */ - 0x00, /* 0xff85 */ - 0x00, /* 0xff86 */ - 0x00, /* 0xff87 */ - 0x00, /* 0xff88 */ - 0x00, /* 0xff89 (KP_Tab) */ - 0x00, /* 0xff8a */ - 0x00, /* 0xff8b */ - 0x00, /* 0xff8c */ - 0x00, /* 0xff8d (KP_Enter) */ - 0x00, /* 0xff8e */ - 0x00, /* 0xff8f */ - 0x00, /* 0xff90 */ - 0x00, /* 0xff91 (KP_F1) */ - 0x00, /* 0xff92 (KP_F2) */ - 0x00, /* 0xff93 (KP_F3) */ - 0x00, /* 0xff94 (KP_F4) */ - 0x00, /* 0xff95 (KP_Home) */ - 0x00, /* 0xff96 (KP_Left) */ - 0x00, /* 0xff97 (KP_Up) */ - 0x00, /* 0xff98 (KP_Right) */ - 0x00, /* 0xff99 (KP_Down) */ - 0x00, /* 0xff9a (KP_Page_Up) */ - 0x00, /* 0xff9b (KP_Page_Down) */ - 0x00, /* 0xff9c (KP_End) */ - 0x00, /* 0xff9d (KP_Begin) */ - 0x00, /* 0xff9e (KP_Insert) */ - 0x00, /* 0xff9f (KP_Delete) */ - 0x00, /* 0xffa0 */ - 0x00, /* 0xffa1 */ - 0x00, /* 0xffa2 */ - 0x00, /* 0xffa3 */ - 0x00, /* 0xffa4 */ - 0x00, /* 0xffa5 */ - 0x00, /* 0xffa6 */ - 0x00, /* 0xffa7 */ - 0x00, /* 0xffa8 */ - 0x00, /* 0xffa9 */ - 0x00, /* 0xffaa (KP_Multiply) */ - 0x00, /* 0xffab (KP_Add) */ - 0x00, /* 0xffac (KP_Separator) */ - 0x00, /* 0xffad (KP_Subtract) */ - 0x00, /* 0xffae (KP_Decimal) */ - 0x00, /* 0xffaf (KP_Divide) */ - 0x00, /* 0xffb0 (KP_0) */ - 0x00, /* 0xffb1 (KP_1) */ - 0x00, /* 0xffb2 (KP_2) */ - 0x00, /* 0xffb3 (KP_3) */ - 0x00, /* 0xffb4 (KP_4) */ - 0x00, /* 0xffb5 (KP_5) */ - 0x00, /* 0xffb6 (KP_6) */ - 0x00, /* 0xffb7 (KP_7) */ - 0x00, /* 0xffb8 (KP_8) */ - 0x00, /* 0xffb9 (KP_9) */ - 0x00, /* 0xffba */ - 0x00, /* 0xffbb */ - 0x00, /* 0xffbc */ - 0x00, /* 0xffbd (KP_Equal) */ - 0x00, /* 0xffbe (F1) */ - 0x00, /* 0xffbf (F2) */ - 0x00, /* 0xffc0 (F3) */ - 0x00, /* 0xffc1 (F4) */ - 0x00, /* 0xffc2 (F5) */ - 0x00, /* 0xffc3 (F6) */ - 0x00, /* 0xffc4 (F7) */ - 0x00, /* 0xffc5 (F8) */ - 0x00, /* 0xffc6 (F9) */ - 0x00, /* 0xffc7 (F10) */ - 0x00, /* 0xffc8 (L1) */ - 0x00, /* 0xffc9 (L2) */ - 0x00, /* 0xffca (L3) */ - 0x00, /* 0xffcb (L4) */ - 0x00, /* 0xffcc (L5) */ - 0x00, /* 0xffcd (L6) */ - 0x00, /* 0xffce (L7) */ - 0x00, /* 0xffcf (L8) */ - 0x00, /* 0xffd0 (L9) */ - 0x00, /* 0xffd1 (L10) */ - 0x00, /* 0xffd2 (R1) */ - 0x00, /* 0xffd3 (R2) */ - 0x00, /* 0xffd4 (R3) */ - 0x00, /* 0xffd5 (R4) */ - 0x00, /* 0xffd6 (R5) */ - 0x00, /* 0xffd7 (R6) */ - 0x00, /* 0xffd8 (R7) */ - 0x00, /* 0xffd9 (R8) */ - 0x00, /* 0xffda (R9) */ - 0x00, /* 0xffdb (R10) */ - 0x00, /* 0xffdc (R11) */ - 0x00, /* 0xffdd (R12) */ - 0x00, /* 0xffde (R13) */ - 0x00, /* 0xffdf (R14) */ - 0x00, /* 0xffe0 (R15) */ - 0x2A, /* 0xffe1 (Shift_L) */ - 0x36, /* 0xffe2 (Shift_R) */ - 0x1D, /* 0xffe3 (Control_L) */ - 0x1D, /* 0xffe4 (Control_R) */ - 0x00, /* 0xffe5 (Caps_Lock) */ - 0x00, /* 0xffe6 (Shift_Lock) */ - 0x00, /* 0xffe7 (Meta_L) */ - 0x00, /* 0xffe8 (Meta_R) */ - 0x00, /* 0xffe9 (Alt_L) */ - 0x00, /* 0xffea (Alt_R) */ - 0x00, /* 0xffeb (Super_L) */ - 0x00, /* 0xffec (Super_R) */ - 0x00, /* 0xffed (Hyper_L) */ - 0x00, /* 0xffee (Hyper_R) */ - 0x00, /* 0xffef */ - 0x00, /* 0xfff0 */ - 0x00, /* 0xfff1 (braille_dot_1) */ - 0x00, /* 0xfff2 (braille_dot_2) */ - 0x00, /* 0xfff3 (braille_dot_3) */ - 0x00, /* 0xfff4 (braille_dot_4) */ - 0x00, /* 0xfff5 (braille_dot_5) */ - 0x00, /* 0xfff6 (braille_dot_6) */ - 0x00, /* 0xfff7 (braille_dot_7) */ - 0x00, /* 0xfff8 (braille_dot_8) */ - 0x00, /* 0xfff9 (braille_dot_9) */ - 0x00, /* 0xfffa (braille_dot_10) */ - 0x00, /* 0xfffb */ - 0x00, /* 0xfffc */ - 0x00, /* 0xfffd */ - 0x00, /* 0xfffe */ - 0x2E, /* 0xffff (Delete) */ + { /* 0xff00 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff01 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff02 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff03 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff04 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff05 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff06 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff07 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff08 (BackSpace) */ + .scancode = 0x0E, + .flags = 0x00 + }, + + { /* 0xff09 (Tab) */ + .scancode = 0x0F, + .flags = 0x00 + }, + + { /* 0xff0a (Linefeed) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff0b (Clear) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff0c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff0d (Return) */ + .scancode = 0x1C, + .flags = 0x00 + }, + + { /* 0xff0e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff0f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff10 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff11 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff12 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff13 (Pause) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff14 (Scroll_Lock) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff15 (Sys_Req) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff16 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff17 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff18 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff19 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff1a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff1b (Escape) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff1c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff1d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff1e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff1f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff20 (Multi_key) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff21 (Kanji) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff22 (Muhenkan) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff23 (Henkan) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff24 (Romaji) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff25 (Hiragana) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff26 (Katakana) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff27 (Hiragana_Katakana) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff28 (Zenkaku) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff29 (Hankaku) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff2a (Zenkaku_Hankaku) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff2b (Touroku) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff2c (Massyo) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff2d (Kana_Lock) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff2e (Kana_Shift) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff2f (Eisu_Shift) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff30 (Eisu_toggle) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff31 (Hangul) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff32 (Hangul_Start) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff33 (Hangul_End) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff34 (Hangul_Hanja) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff35 (Hangul_Jamo) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff36 (Hangul_Romaja) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff37 (Hangul_Codeinput) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff38 (Hangul_Jeonja) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff39 (Hangul_Banja) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff3a (Hangul_PreHanja) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff3b (Hangul_PostHanja) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff3c (Hangul_SingleCandidate) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff3d (Hangul_MultipleCandidate) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff3e (Hangul_PreviousCandidate) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff3f (Hangul_Special) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff40 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff41 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff42 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff43 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff44 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff45 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff46 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff47 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff48 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff49 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff4a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff4b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff4c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff4d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff4e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff4f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff50 (Home) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff51 (Left) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff52 (Up) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff53 (Right) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff54 (Down) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff55 (Page_Up) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff56 (Page_Down) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff57 (End) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff58 (Begin) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff59 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff5a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff5b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff5c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff5d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff5e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff5f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff60 (Select) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff61 (Print) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff62 (Execute) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff63 (Insert) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff64 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff65 (Undo) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff66 (Redo) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff67 (Menu) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff68 (Find) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff69 (Cancel) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff6a (Help) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff6b (Break) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff6c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff6d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff6e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff6f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff70 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff71 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff72 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff73 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff74 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff75 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff76 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff77 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff78 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff79 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff7a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff7b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff7c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff7d */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff7e (Hangul_switch) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff7f (Num_Lock) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff80 (KP_Space) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff81 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff82 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff83 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff84 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff85 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff86 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff87 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff88 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff89 (KP_Tab) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff8a */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff8b */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff8c */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff8d (KP_Enter) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff8e */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff8f */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff90 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff91 (KP_F1) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff92 (KP_F2) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff93 (KP_F3) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff94 (KP_F4) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff95 (KP_Home) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff96 (KP_Left) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff97 (KP_Up) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff98 (KP_Right) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff99 (KP_Down) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff9a (KP_Page_Up) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff9b (KP_Page_Down) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff9c (KP_End) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff9d (KP_Begin) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff9e (KP_Insert) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xff9f (KP_Delete) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xffa0 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xffa1 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xffa2 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xffa3 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xffa4 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xffa5 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xffa6 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xffa7 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xffa8 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xffa9 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xffaa (KP_Multiply) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xffab (KP_Add) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xffac (KP_Separator) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xffad (KP_Subtract) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xffae (KP_Decimal) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xffaf (KP_Divide) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xffb0 (KP_0) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xffb1 (KP_1) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xffb2 (KP_2) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xffb3 (KP_3) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xffb4 (KP_4) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xffb5 (KP_5) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xffb6 (KP_6) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xffb7 (KP_7) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xffb8 (KP_8) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xffb9 (KP_9) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xffba */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xffbb */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xffbc */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xffbd (KP_Equal) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xffbe (F1) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xffbf (F2) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xffc0 (F3) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xffc1 (F4) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xffc2 (F5) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xffc3 (F6) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xffc4 (F7) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xffc5 (F8) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xffc6 (F9) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xffc7 (F10) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xffc8 (L1) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xffc9 (L2) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xffca (L3) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xffcb (L4) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xffcc (L5) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xffcd (L6) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xffce (L7) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xffcf (L8) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xffd0 (L9) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xffd1 (L10) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xffd2 (R1) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xffd3 (R2) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xffd4 (R3) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xffd5 (R4) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xffd6 (R5) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xffd7 (R6) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xffd8 (R7) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xffd9 (R8) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xffda (R9) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xffdb (R10) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xffdc (R11) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xffdd (R12) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xffde (R13) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xffdf (R14) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xffe0 (R15) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xffe1 (Shift_L) */ + .scancode = 0x2A, + .flags = 0x00 + }, + + { /* 0xffe2 (Shift_R) */ + .scancode = 0x36, + .flags = 0x00 + }, + + { /* 0xffe3 (Control_L) */ + .scancode = 0x1D, + .flags = 0x00 + }, + + { /* 0xffe4 (Control_R) */ + .scancode = 0x1D, + .flags = 0x00 + }, + + { /* 0xffe5 (Caps_Lock) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xffe6 (Shift_Lock) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xffe7 (Meta_L) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xffe8 (Meta_R) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xffe9 (Alt_L) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xffea (Alt_R) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xffeb (Super_L) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xffec (Super_R) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xffed (Hyper_L) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xffee (Hyper_R) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xffef */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfff0 */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfff1 (braille_dot_1) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfff2 (braille_dot_2) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfff3 (braille_dot_3) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfff4 (braille_dot_4) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfff5 (braille_dot_5) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfff6 (braille_dot_6) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfff7 (braille_dot_7) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfff8 (braille_dot_8) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfff9 (braille_dot_9) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfffa (braille_dot_10) */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfffb */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfffc */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfffd */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xfffe */ + .scancode = 0x00, + .flags = 0x00 + }, + + { /* 0xffff (Delete) */ + .scancode = 0x53, + .flags = KBD_FLAG_EXT + }, + }, }; From 2c09b070c090ee45300b3a0e5f598fd2fe882ce5 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Mon, 25 Jul 2011 13:37:09 -0700 Subject: [PATCH 021/253] Cleaned up keymap. --- protocols/rdp/src/rdp_keymap.c | 30760 ++++++------------------------- 1 file changed, 5140 insertions(+), 25620 deletions(-) diff --git a/protocols/rdp/src/rdp_keymap.c b/protocols/rdp/src/rdp_keymap.c index dfa0aff7..6dee9aa8 100644 --- a/protocols/rdp/src/rdp_keymap.c +++ b/protocols/rdp/src/rdp_keymap.c @@ -40,20521 +40,4137 @@ #include "rdp_keymap.h" const guac_rdp_keymap guac_rdp_keysym_scancode[256][256] = { - { /* 0x00?? */ - { /* 0x0000 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0001 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0002 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0003 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0004 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0005 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0006 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0007 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0008 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0009 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x000a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x000b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x000c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x000d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x000e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x000f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0010 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0011 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0012 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0013 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0014 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0015 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0016 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0017 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0018 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0019 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x001a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x001b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x001c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x001d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x001e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x001f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0020 (space) */ - .scancode = 0x39, - .flags = 0x00 - }, - - { /* 0x0021 (exclam) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0022 (quotedbl) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0023 (numbersign) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0024 (dollar) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0025 (percent) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0026 (ampersand) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0027 (quoteright) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0028 (parenleft) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0029 (parenright) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x002a (asterisk) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x002b (plus) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x002c (comma) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x002d (minus) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x002e (period) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x002f (slash) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0030 (0) */ - .scancode = 0x0B, - .flags = 0x00 - }, - - { /* 0x0031 (1) */ - .scancode = 0x02, - .flags = 0x00 - }, - - { /* 0x0032 (2) */ - .scancode = 0x03, - .flags = 0x00 - }, - - { /* 0x0033 (3) */ - .scancode = 0x04, - .flags = 0x00 - }, - - { /* 0x0034 (4) */ - .scancode = 0x05, - .flags = 0x00 - }, - - { /* 0x0035 (5) */ - .scancode = 0x06, - .flags = 0x00 - }, - - { /* 0x0036 (6) */ - .scancode = 0x07, - .flags = 0x00 - }, - - { /* 0x0037 (7) */ - .scancode = 0x08, - .flags = 0x00 - }, - - { /* 0x0038 (8) */ - .scancode = 0x09, - .flags = 0x00 - }, - - { /* 0x0039 (9) */ - .scancode = 0x0A, - .flags = 0x00 - }, - - { /* 0x003a (colon) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x003b (semicolon) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x003c (less) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x003d (equal) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x003e (greater) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x003f (question) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0040 (at) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0041 (A) */ - .scancode = 0x1E, - .flags = 0x00 - }, - - { /* 0x0042 (B) */ - .scancode = 0x30, - .flags = 0x00 - }, - - { /* 0x0043 (C) */ - .scancode = 0x2E, - .flags = 0x00 - }, - - { /* 0x0044 (D) */ - .scancode = 0x20, - .flags = 0x00 - }, - - { /* 0x0045 (E) */ - .scancode = 0x12, - .flags = 0x00 - }, - - { /* 0x0046 (F) */ - .scancode = 0x21, - .flags = 0x00 - }, - - { /* 0x0047 (G) */ - .scancode = 0x22, - .flags = 0x00 - }, - - { /* 0x0048 (H) */ - .scancode = 0x23, - .flags = 0x00 - }, - - { /* 0x0049 (I) */ - .scancode = 0x17, - .flags = 0x00 - }, - - { /* 0x004a (J) */ - .scancode = 0x24, - .flags = 0x00 - }, - - { /* 0x004b (K) */ - .scancode = 0x25, - .flags = 0x00 - }, - - { /* 0x004c (L) */ - .scancode = 0x26, - .flags = 0x00 - }, - - { /* 0x004d (M) */ - .scancode = 0x32, - .flags = 0x00 - }, - - { /* 0x004e (N) */ - .scancode = 0x31, - .flags = 0x00 - }, - - { /* 0x004f (O) */ - .scancode = 0x18, - .flags = 0x00 - }, - - { /* 0x0050 (P) */ - .scancode = 0x19, - .flags = 0x00 - }, - - { /* 0x0051 (Q) */ - .scancode = 0x10, - .flags = 0x00 - }, - - { /* 0x0052 (R) */ - .scancode = 0x13, - .flags = 0x00 - }, - - { /* 0x0053 (S) */ - .scancode = 0x1F, - .flags = 0x00 - }, - - { /* 0x0054 (T) */ - .scancode = 0x14, - .flags = 0x00 - }, - - { /* 0x0055 (U) */ - .scancode = 0x16, - .flags = 0x00 - }, - - { /* 0x0056 (V) */ - .scancode = 0x2F, - .flags = 0x00 - }, - - { /* 0x0057 (W) */ - .scancode = 0x11, - .flags = 0x00 - }, - - { /* 0x0058 (X) */ - .scancode = 0x2D, - .flags = 0x00 - }, - - { /* 0x0059 (Y) */ - .scancode = 0x15, - .flags = 0x00 - }, - - { /* 0x005a (Z) */ - .scancode = 0x2C, - .flags = 0x00 - }, - - { /* 0x005b (bracketleft) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x005c (backslash) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x005d (bracketright) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x005e (asciicircum) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x005f (underscore) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0060 (quoteleft) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0061 (a) */ - .scancode = 0x1E, - .flags = 0x00 - }, - - { /* 0x0062 (b) */ - .scancode = 0x30, - .flags = 0x00 - }, - - { /* 0x0063 (c) */ - .scancode = 0x2E, - .flags = 0x00 - }, - - { /* 0x0064 (d) */ - .scancode = 0x20, - .flags = 0x00 - }, - - { /* 0x0065 (e) */ - .scancode = 0x12, - .flags = 0x00 - }, - - { /* 0x0066 (f) */ - .scancode = 0x21, - .flags = 0x00 - }, - - { /* 0x0067 (g) */ - .scancode = 0x22, - .flags = 0x00 - }, - - { /* 0x0068 (h) */ - .scancode = 0x23, - .flags = 0x00 - }, - - { /* 0x0069 (i) */ - .scancode = 0x17, - .flags = 0x00 - }, - - { /* 0x006a (j) */ - .scancode = 0x24, - .flags = 0x00 - }, - - { /* 0x006b (k) */ - .scancode = 0x25, - .flags = 0x00 - }, - - { /* 0x006c (l) */ - .scancode = 0x26, - .flags = 0x00 - }, - - { /* 0x006d (m) */ - .scancode = 0x32, - .flags = 0x00 - }, - - { /* 0x006e (n) */ - .scancode = 0x31, - .flags = 0x00 - }, - - { /* 0x006f (o) */ - .scancode = 0x18, - .flags = 0x00 - }, - - { /* 0x0070 (p) */ - .scancode = 0x19, - .flags = 0x00 - }, - - { /* 0x0071 (q) */ - .scancode = 0x10, - .flags = 0x00 - }, - - { /* 0x0072 (r) */ - .scancode = 0x13, - .flags = 0x00 - }, - - { /* 0x0073 (s) */ - .scancode = 0x1F, - .flags = 0x00 - }, - - { /* 0x0074 (t) */ - .scancode = 0x14, - .flags = 0x00 - }, - - { /* 0x0075 (u) */ - .scancode = 0x16, - .flags = 0x00 - }, - - { /* 0x0076 (v) */ - .scancode = 0x2F, - .flags = 0x00 - }, - - { /* 0x0077 (w) */ - .scancode = 0x11, - .flags = 0x00 - }, - - { /* 0x0078 (x) */ - .scancode = 0x2D, - .flags = 0x00 - }, - - { /* 0x0079 (y) */ - .scancode = 0x15, - .flags = 0x00 - }, - - { /* 0x007a (z) */ - .scancode = 0x2C, - .flags = 0x00 - }, - - { /* 0x007b (braceleft) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x007c (bar) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x007d (braceright) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x007e (asciitilde) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x007f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0080 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0081 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0082 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0083 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0084 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0085 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0086 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0087 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0088 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0089 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x008a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x008b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x008c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x008d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x008e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x008f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0090 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0091 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0092 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0093 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0094 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0095 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0096 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0097 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0098 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0099 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x009a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x009b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x009c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x009d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x009e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x009f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00a0 (nobreakspace) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00a1 (exclamdown) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00a2 (cent) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00a3 (sterling) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00a4 (currency) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00a5 (yen) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00a6 (brokenbar) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00a7 (section) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00a8 (diaeresis) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00a9 (copyright) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00aa (ordfeminine) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00ab (guillemotleft) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00ac (notsign) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00ad (hyphen) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00ae (registered) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00af (macron) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00b0 (degree) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00b1 (plusminus) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00b2 (twosuperior) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00b3 (threesuperior) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00b4 (acute) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00b5 (mu) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00b6 (paragraph) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00b7 (periodcentered) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00b8 (cedilla) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00b9 (onesuperior) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00ba (masculine) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00bb (guillemotright) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00bc (onequarter) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00bd (onehalf) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00be (threequarters) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00bf (questiondown) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00c0 (Agrave) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00c1 (Aacute) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00c2 (Acircumflex) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00c3 (Atilde) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00c4 (Adiaeresis) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00c5 (Aring) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00c6 (AE) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00c7 (Ccedilla) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00c8 (Egrave) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00c9 (Eacute) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00ca (Ecircumflex) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00cb (Ediaeresis) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00cc (Igrave) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00cd (Iacute) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00ce (Icircumflex) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00cf (Idiaeresis) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00d0 (Eth) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00d1 (Ntilde) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00d2 (Ograve) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00d3 (Oacute) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00d4 (Ocircumflex) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00d5 (Otilde) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00d6 (Odiaeresis) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00d7 (multiply) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00d8 (Ooblique) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00d9 (Ugrave) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00da (Uacute) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00db (Ucircumflex) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00dc (Udiaeresis) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00dd (Yacute) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00de (Thorn) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00df (ssharp) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00e0 (agrave) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00e1 (aacute) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00e2 (acircumflex) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00e3 (atilde) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00e4 (adiaeresis) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00e5 (aring) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00e6 (ae) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00e7 (ccedilla) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00e8 (egrave) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00e9 (eacute) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00ea (ecircumflex) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00eb (ediaeresis) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00ec (igrave) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00ed (iacute) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00ee (icircumflex) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00ef (idiaeresis) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00f0 (eth) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00f1 (ntilde) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00f2 (ograve) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00f3 (oacute) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00f4 (ocircumflex) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00f5 (otilde) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00f6 (odiaeresis) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00f7 (division) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00f8 (ooblique) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00f9 (ugrave) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00fa (uacute) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00fb (ucircumflex) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00fc (udiaeresis) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00fd (yacute) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00fe (thorn) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x00ff (ydiaeresis) */ - .scancode = 0x00, - .flags = 0x00 - }, - + { /* 0x00?? */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0000 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0001 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0002 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0003 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0004 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0005 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0006 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0007 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0008 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0009 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x000a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x000b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x000c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x000d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x000e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x000f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0010 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0011 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0012 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0013 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0014 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0015 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0016 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0017 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0018 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0019 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x001a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x001b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x001c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x001d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x001e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x001f */ + { .scancode = 0x39, .flags = 0x00 }, /* 0x0020 (space) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0021 (exclam) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0022 (quotedbl) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0023 (numbersign) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0024 (dollar) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0025 (percent) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0026 (ampersand) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0027 (quoteright) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0028 (parenleft) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0029 (parenright) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x002a (asterisk) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x002b (plus) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x002c (comma) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x002d (minus) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x002e (period) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x002f (slash) */ + { .scancode = 0x0B, .flags = 0x00 }, /* 0x0030 (0) */ + { .scancode = 0x02, .flags = 0x00 }, /* 0x0031 (1) */ + { .scancode = 0x03, .flags = 0x00 }, /* 0x0032 (2) */ + { .scancode = 0x04, .flags = 0x00 }, /* 0x0033 (3) */ + { .scancode = 0x05, .flags = 0x00 }, /* 0x0034 (4) */ + { .scancode = 0x06, .flags = 0x00 }, /* 0x0035 (5) */ + { .scancode = 0x07, .flags = 0x00 }, /* 0x0036 (6) */ + { .scancode = 0x08, .flags = 0x00 }, /* 0x0037 (7) */ + { .scancode = 0x09, .flags = 0x00 }, /* 0x0038 (8) */ + { .scancode = 0x0A, .flags = 0x00 }, /* 0x0039 (9) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x003a (colon) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x003b (semicolon) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x003c (less) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x003d (equal) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x003e (greater) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x003f (question) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0040 (at) */ + { .scancode = 0x1E, .flags = 0x00 }, /* 0x0041 (A) */ + { .scancode = 0x30, .flags = 0x00 }, /* 0x0042 (B) */ + { .scancode = 0x2E, .flags = 0x00 }, /* 0x0043 (C) */ + { .scancode = 0x20, .flags = 0x00 }, /* 0x0044 (D) */ + { .scancode = 0x12, .flags = 0x00 }, /* 0x0045 (E) */ + { .scancode = 0x21, .flags = 0x00 }, /* 0x0046 (F) */ + { .scancode = 0x22, .flags = 0x00 }, /* 0x0047 (G) */ + { .scancode = 0x23, .flags = 0x00 }, /* 0x0048 (H) */ + { .scancode = 0x17, .flags = 0x00 }, /* 0x0049 (I) */ + { .scancode = 0x24, .flags = 0x00 }, /* 0x004a (J) */ + { .scancode = 0x25, .flags = 0x00 }, /* 0x004b (K) */ + { .scancode = 0x26, .flags = 0x00 }, /* 0x004c (L) */ + { .scancode = 0x32, .flags = 0x00 }, /* 0x004d (M) */ + { .scancode = 0x31, .flags = 0x00 }, /* 0x004e (N) */ + { .scancode = 0x18, .flags = 0x00 }, /* 0x004f (O) */ + { .scancode = 0x19, .flags = 0x00 }, /* 0x0050 (P) */ + { .scancode = 0x10, .flags = 0x00 }, /* 0x0051 (Q) */ + { .scancode = 0x13, .flags = 0x00 }, /* 0x0052 (R) */ + { .scancode = 0x1F, .flags = 0x00 }, /* 0x0053 (S) */ + { .scancode = 0x14, .flags = 0x00 }, /* 0x0054 (T) */ + { .scancode = 0x16, .flags = 0x00 }, /* 0x0055 (U) */ + { .scancode = 0x2F, .flags = 0x00 }, /* 0x0056 (V) */ + { .scancode = 0x11, .flags = 0x00 }, /* 0x0057 (W) */ + { .scancode = 0x2D, .flags = 0x00 }, /* 0x0058 (X) */ + { .scancode = 0x15, .flags = 0x00 }, /* 0x0059 (Y) */ + { .scancode = 0x2C, .flags = 0x00 }, /* 0x005a (Z) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x005b (bracketleft) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x005c (backslash) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x005d (bracketright) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x005e (asciicircum) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x005f (underscore) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0060 (quoteleft) */ + { .scancode = 0x1E, .flags = 0x00 }, /* 0x0061 (a) */ + { .scancode = 0x30, .flags = 0x00 }, /* 0x0062 (b) */ + { .scancode = 0x2E, .flags = 0x00 }, /* 0x0063 (c) */ + { .scancode = 0x20, .flags = 0x00 }, /* 0x0064 (d) */ + { .scancode = 0x12, .flags = 0x00 }, /* 0x0065 (e) */ + { .scancode = 0x21, .flags = 0x00 }, /* 0x0066 (f) */ + { .scancode = 0x22, .flags = 0x00 }, /* 0x0067 (g) */ + { .scancode = 0x23, .flags = 0x00 }, /* 0x0068 (h) */ + { .scancode = 0x17, .flags = 0x00 }, /* 0x0069 (i) */ + { .scancode = 0x24, .flags = 0x00 }, /* 0x006a (j) */ + { .scancode = 0x25, .flags = 0x00 }, /* 0x006b (k) */ + { .scancode = 0x26, .flags = 0x00 }, /* 0x006c (l) */ + { .scancode = 0x32, .flags = 0x00 }, /* 0x006d (m) */ + { .scancode = 0x31, .flags = 0x00 }, /* 0x006e (n) */ + { .scancode = 0x18, .flags = 0x00 }, /* 0x006f (o) */ + { .scancode = 0x19, .flags = 0x00 }, /* 0x0070 (p) */ + { .scancode = 0x10, .flags = 0x00 }, /* 0x0071 (q) */ + { .scancode = 0x13, .flags = 0x00 }, /* 0x0072 (r) */ + { .scancode = 0x1F, .flags = 0x00 }, /* 0x0073 (s) */ + { .scancode = 0x14, .flags = 0x00 }, /* 0x0074 (t) */ + { .scancode = 0x16, .flags = 0x00 }, /* 0x0075 (u) */ + { .scancode = 0x2F, .flags = 0x00 }, /* 0x0076 (v) */ + { .scancode = 0x11, .flags = 0x00 }, /* 0x0077 (w) */ + { .scancode = 0x2D, .flags = 0x00 }, /* 0x0078 (x) */ + { .scancode = 0x15, .flags = 0x00 }, /* 0x0079 (y) */ + { .scancode = 0x2C, .flags = 0x00 }, /* 0x007a (z) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x007b (braceleft) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x007c (bar) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x007d (braceright) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x007e (asciitilde) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x007f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0080 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0081 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0082 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0083 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0084 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0085 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0086 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0087 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0088 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0089 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x008a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x008b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x008c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x008d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x008e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x008f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0090 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0091 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0092 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0093 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0094 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0095 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0096 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0097 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0098 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0099 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x009a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x009b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x009c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x009d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x009e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x009f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00a0 (nobreakspace) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00a1 (exclamdown) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00a2 (cent) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00a3 (sterling) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00a4 (currency) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00a5 (yen) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00a6 (brokenbar) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00a7 (section) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00a8 (diaeresis) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00a9 (copyright) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00aa (ordfeminine) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00ab (guillemotleft) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00ac (notsign) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00ad (hyphen) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00ae (registered) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00af (macron) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00b0 (degree) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00b1 (plusminus) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00b2 (twosuperior) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00b3 (threesuperior) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00b4 (acute) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00b5 (mu) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00b6 (paragraph) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00b7 (periodcentered) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00b8 (cedilla) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00b9 (onesuperior) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00ba (masculine) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00bb (guillemotright) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00bc (onequarter) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00bd (onehalf) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00be (threequarters) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00bf (questiondown) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00c0 (Agrave) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00c1 (Aacute) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00c2 (Acircumflex) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00c3 (Atilde) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00c4 (Adiaeresis) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00c5 (Aring) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00c6 (AE) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00c7 (Ccedilla) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00c8 (Egrave) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00c9 (Eacute) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00ca (Ecircumflex) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00cb (Ediaeresis) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00cc (Igrave) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00cd (Iacute) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00ce (Icircumflex) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00cf (Idiaeresis) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00d0 (Eth) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00d1 (Ntilde) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00d2 (Ograve) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00d3 (Oacute) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00d4 (Ocircumflex) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00d5 (Otilde) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00d6 (Odiaeresis) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00d7 (multiply) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00d8 (Ooblique) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00d9 (Ugrave) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00da (Uacute) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00db (Ucircumflex) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00dc (Udiaeresis) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00dd (Yacute) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00de (Thorn) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00df (ssharp) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00e0 (agrave) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00e1 (aacute) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00e2 (acircumflex) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00e3 (atilde) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00e4 (adiaeresis) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00e5 (aring) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00e6 (ae) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00e7 (ccedilla) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00e8 (egrave) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00e9 (eacute) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00ea (ecircumflex) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00eb (ediaeresis) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00ec (igrave) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00ed (iacute) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00ee (icircumflex) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00ef (idiaeresis) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00f0 (eth) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00f1 (ntilde) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00f2 (ograve) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00f3 (oacute) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00f4 (ocircumflex) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00f5 (otilde) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00f6 (odiaeresis) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00f7 (division) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00f8 (ooblique) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00f9 (ugrave) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00fa (uacute) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00fb (ucircumflex) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00fc (udiaeresis) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00fd (yacute) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00fe (thorn) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x00ff (ydiaeresis) */ }, - { /* 0x01?? */ - { /* 0x0100 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0101 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0102 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0103 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0104 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0105 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0106 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0107 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0108 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0109 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x010a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x010b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x010c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x010d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x010e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x010f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0110 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0111 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0112 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0113 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0114 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0115 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0116 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0117 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0118 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0119 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x011a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x011b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x011c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x011d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x011e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x011f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0120 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0121 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0122 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0123 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0124 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0125 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0126 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0127 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0128 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0129 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x012a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x012b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x012c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x012d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x012e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x012f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0130 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0131 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0132 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0133 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0134 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0135 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0136 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0137 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0138 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0139 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x013a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x013b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x013c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x013d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x013e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x013f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0140 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0141 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0142 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0143 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0144 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0145 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0146 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0147 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0148 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0149 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x014a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x014b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x014c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x014d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x014e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x014f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0150 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0151 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0152 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0153 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0154 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0155 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0156 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0157 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0158 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0159 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x015a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x015b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x015c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x015d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x015e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x015f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0160 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0161 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0162 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0163 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0164 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0165 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0166 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0167 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0168 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0169 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x016a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x016b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x016c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x016d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x016e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x016f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0170 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0171 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0172 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0173 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0174 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0175 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0176 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0177 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0178 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0179 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x017a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x017b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x017c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x017d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x017e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x017f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0180 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0181 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0182 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0183 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0184 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0185 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0186 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0187 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0188 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0189 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x018a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x018b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x018c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x018d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x018e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x018f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0190 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0191 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0192 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0193 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0194 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0195 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0196 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0197 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0198 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0199 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x019a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x019b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x019c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x019d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x019e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x019f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01a0 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01a1 (Aogonek) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01a2 (breve) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01a3 (Lstroke) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01a4 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01a5 (Lcaron) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01a6 (Sacute) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01a7 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01a8 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01a9 (Scaron) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01aa (Scedilla) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01ab (Tcaron) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01ac (Zacute) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01ad */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01ae (Zcaron) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01af (Zabovedot) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01b0 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01b1 (aogonek) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01b2 (ogonek) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01b3 (lstroke) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01b4 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01b5 (lcaron) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01b6 (sacute) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01b7 (caron) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01b8 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01b9 (scaron) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01ba (scedilla) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01bb (tcaron) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01bc (zacute) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01bd (doubleacute) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01be (zcaron) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01bf (zabovedot) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01c0 (Racute) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01c1 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01c2 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01c3 (Abreve) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01c4 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01c5 (Lacute) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01c6 (Cacute) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01c7 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01c8 (Ccaron) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01c9 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01ca (Eogonek) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01cb */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01cc (Ecaron) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01cd */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01ce */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01cf (Dcaron) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01d0 (Dstroke) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01d1 (Nacute) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01d2 (Ncaron) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01d3 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01d4 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01d5 (Odoubleacute) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01d6 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01d7 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01d8 (Rcaron) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01d9 (Uring) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01da */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01db (Udoubleacute) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01dc */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01dd */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01de (Tcedilla) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01df */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01e0 (racute) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01e1 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01e2 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01e3 (abreve) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01e4 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01e5 (lacute) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01e6 (cacute) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01e7 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01e8 (ccaron) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01e9 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01ea (eogonek) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01eb */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01ec (ecaron) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01ed */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01ee */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01ef (dcaron) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01f0 (dstroke) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01f1 (nacute) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01f2 (ncaron) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01f3 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01f4 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01f5 (odoubleacute) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01f6 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01f7 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01f8 (rcaron) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01f9 (uring) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01fa */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01fb (udoubleacute) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01fc */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01fd */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01fe (tcedilla) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x01ff (abovedot) */ - .scancode = 0x00, - .flags = 0x00 - }, - + { /* 0x01?? */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0100 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0101 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0102 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0103 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0104 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0105 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0106 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0107 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0108 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0109 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x010a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x010b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x010c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x010d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x010e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x010f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0110 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0111 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0112 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0113 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0114 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0115 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0116 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0117 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0118 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0119 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x011a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x011b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x011c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x011d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x011e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x011f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0120 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0121 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0122 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0123 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0124 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0125 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0126 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0127 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0128 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0129 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x012a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x012b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x012c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x012d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x012e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x012f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0130 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0131 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0132 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0133 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0134 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0135 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0136 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0137 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0138 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0139 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x013a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x013b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x013c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x013d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x013e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x013f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0140 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0141 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0142 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0143 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0144 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0145 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0146 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0147 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0148 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0149 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x014a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x014b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x014c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x014d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x014e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x014f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0150 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0151 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0152 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0153 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0154 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0155 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0156 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0157 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0158 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0159 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x015a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x015b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x015c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x015d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x015e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x015f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0160 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0161 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0162 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0163 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0164 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0165 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0166 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0167 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0168 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0169 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x016a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x016b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x016c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x016d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x016e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x016f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0170 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0171 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0172 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0173 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0174 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0175 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0176 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0177 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0178 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0179 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x017a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x017b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x017c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x017d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x017e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x017f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0180 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0181 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0182 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0183 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0184 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0185 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0186 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0187 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0188 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0189 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x018a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x018b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x018c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x018d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x018e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x018f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0190 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0191 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0192 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0193 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0194 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0195 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0196 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0197 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0198 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0199 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x019a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x019b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x019c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x019d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x019e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x019f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01a0 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01a1 (Aogonek) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01a2 (breve) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01a3 (Lstroke) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01a4 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01a5 (Lcaron) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01a6 (Sacute) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01a7 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01a8 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01a9 (Scaron) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01aa (Scedilla) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01ab (Tcaron) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01ac (Zacute) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01ad */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01ae (Zcaron) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01af (Zabovedot) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01b0 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01b1 (aogonek) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01b2 (ogonek) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01b3 (lstroke) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01b4 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01b5 (lcaron) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01b6 (sacute) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01b7 (caron) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01b8 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01b9 (scaron) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01ba (scedilla) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01bb (tcaron) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01bc (zacute) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01bd (doubleacute) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01be (zcaron) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01bf (zabovedot) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01c0 (Racute) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01c1 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01c2 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01c3 (Abreve) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01c4 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01c5 (Lacute) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01c6 (Cacute) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01c7 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01c8 (Ccaron) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01c9 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01ca (Eogonek) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01cb */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01cc (Ecaron) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01cd */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01ce */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01cf (Dcaron) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01d0 (Dstroke) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01d1 (Nacute) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01d2 (Ncaron) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01d3 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01d4 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01d5 (Odoubleacute) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01d6 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01d7 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01d8 (Rcaron) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01d9 (Uring) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01da */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01db (Udoubleacute) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01dc */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01dd */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01de (Tcedilla) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01df */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01e0 (racute) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01e1 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01e2 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01e3 (abreve) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01e4 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01e5 (lacute) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01e6 (cacute) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01e7 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01e8 (ccaron) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01e9 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01ea (eogonek) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01eb */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01ec (ecaron) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01ed */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01ee */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01ef (dcaron) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01f0 (dstroke) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01f1 (nacute) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01f2 (ncaron) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01f3 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01f4 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01f5 (odoubleacute) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01f6 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01f7 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01f8 (rcaron) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01f9 (uring) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01fa */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01fb (udoubleacute) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01fc */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01fd */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01fe (tcedilla) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x01ff (abovedot) */ }, - { /* 0x02?? */ - { /* 0x0200 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0201 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0202 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0203 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0204 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0205 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0206 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0207 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0208 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0209 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x020a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x020b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x020c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x020d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x020e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x020f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0210 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0211 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0212 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0213 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0214 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0215 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0216 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0217 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0218 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0219 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x021a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x021b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x021c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x021d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x021e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x021f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0220 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0221 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0222 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0223 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0224 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0225 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0226 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0227 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0228 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0229 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x022a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x022b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x022c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x022d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x022e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x022f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0230 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0231 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0232 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0233 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0234 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0235 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0236 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0237 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0238 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0239 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x023a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x023b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x023c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x023d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x023e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x023f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0240 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0241 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0242 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0243 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0244 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0245 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0246 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0247 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0248 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0249 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x024a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x024b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x024c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x024d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x024e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x024f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0250 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0251 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0252 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0253 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0254 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0255 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0256 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0257 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0258 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0259 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x025a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x025b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x025c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x025d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x025e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x025f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0260 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0261 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0262 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0263 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0264 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0265 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0266 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0267 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0268 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0269 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x026a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x026b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x026c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x026d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x026e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x026f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0270 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0271 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0272 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0273 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0274 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0275 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0276 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0277 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0278 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0279 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x027a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x027b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x027c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x027d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x027e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x027f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0280 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0281 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0282 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0283 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0284 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0285 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0286 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0287 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0288 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0289 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x028a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x028b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x028c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x028d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x028e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x028f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0290 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0291 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0292 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0293 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0294 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0295 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0296 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0297 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0298 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0299 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x029a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x029b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x029c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x029d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x029e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x029f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02a0 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02a1 (Hstroke) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02a2 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02a3 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02a4 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02a5 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02a6 (Hcircumflex) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02a7 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02a8 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02a9 (Iabovedot) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02aa */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02ab (Gbreve) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02ac (Jcircumflex) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02ad */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02ae */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02af */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02b0 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02b1 (hstroke) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02b2 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02b3 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02b4 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02b5 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02b6 (hcircumflex) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02b7 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02b8 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02b9 (idotless) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02ba */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02bb (gbreve) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02bc (jcircumflex) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02bd */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02be */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02bf */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02c0 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02c1 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02c2 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02c3 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02c4 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02c5 (Cabovedot) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02c6 (Ccircumflex) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02c7 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02c8 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02c9 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02ca */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02cb */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02cc */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02cd */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02ce */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02cf */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02d0 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02d1 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02d2 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02d3 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02d4 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02d5 (Gabovedot) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02d6 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02d7 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02d8 (Gcircumflex) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02d9 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02da */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02db */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02dc */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02dd (Ubreve) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02de (Scircumflex) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02df */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02e0 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02e1 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02e2 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02e3 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02e4 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02e5 (cabovedot) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02e6 (ccircumflex) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02e7 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02e8 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02e9 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02ea */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02eb */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02ec */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02ed */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02ee */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02ef */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02f0 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02f1 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02f2 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02f3 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02f4 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02f5 (gabovedot) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02f6 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02f7 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02f8 (gcircumflex) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02f9 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02fa */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02fb */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02fc */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02fd (ubreve) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02fe (scircumflex) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x02ff */ - .scancode = 0x00, - .flags = 0x00 - }, - + { /* 0x02?? */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0200 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0201 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0202 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0203 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0204 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0205 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0206 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0207 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0208 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0209 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x020a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x020b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x020c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x020d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x020e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x020f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0210 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0211 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0212 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0213 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0214 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0215 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0216 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0217 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0218 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0219 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x021a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x021b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x021c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x021d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x021e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x021f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0220 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0221 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0222 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0223 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0224 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0225 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0226 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0227 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0228 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0229 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x022a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x022b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x022c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x022d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x022e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x022f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0230 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0231 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0232 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0233 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0234 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0235 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0236 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0237 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0238 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0239 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x023a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x023b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x023c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x023d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x023e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x023f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0240 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0241 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0242 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0243 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0244 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0245 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0246 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0247 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0248 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0249 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x024a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x024b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x024c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x024d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x024e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x024f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0250 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0251 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0252 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0253 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0254 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0255 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0256 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0257 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0258 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0259 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x025a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x025b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x025c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x025d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x025e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x025f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0260 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0261 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0262 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0263 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0264 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0265 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0266 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0267 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0268 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0269 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x026a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x026b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x026c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x026d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x026e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x026f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0270 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0271 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0272 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0273 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0274 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0275 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0276 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0277 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0278 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0279 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x027a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x027b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x027c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x027d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x027e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x027f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0280 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0281 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0282 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0283 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0284 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0285 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0286 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0287 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0288 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0289 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x028a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x028b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x028c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x028d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x028e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x028f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0290 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0291 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0292 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0293 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0294 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0295 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0296 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0297 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0298 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0299 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x029a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x029b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x029c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x029d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x029e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x029f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02a0 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02a1 (Hstroke) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02a2 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02a3 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02a4 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02a5 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02a6 (Hcircumflex) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02a7 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02a8 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02a9 (Iabovedot) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02aa */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02ab (Gbreve) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02ac (Jcircumflex) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02ad */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02ae */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02af */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02b0 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02b1 (hstroke) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02b2 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02b3 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02b4 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02b5 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02b6 (hcircumflex) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02b7 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02b8 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02b9 (idotless) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02ba */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02bb (gbreve) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02bc (jcircumflex) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02bd */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02be */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02bf */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02c0 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02c1 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02c2 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02c3 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02c4 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02c5 (Cabovedot) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02c6 (Ccircumflex) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02c7 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02c8 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02c9 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02ca */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02cb */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02cc */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02cd */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02ce */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02cf */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02d0 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02d1 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02d2 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02d3 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02d4 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02d5 (Gabovedot) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02d6 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02d7 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02d8 (Gcircumflex) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02d9 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02da */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02db */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02dc */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02dd (Ubreve) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02de (Scircumflex) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02df */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02e0 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02e1 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02e2 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02e3 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02e4 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02e5 (cabovedot) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02e6 (ccircumflex) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02e7 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02e8 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02e9 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02ea */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02eb */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02ec */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02ed */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02ee */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02ef */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02f0 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02f1 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02f2 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02f3 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02f4 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02f5 (gabovedot) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02f6 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02f7 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02f8 (gcircumflex) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02f9 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02fa */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02fb */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02fc */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02fd (ubreve) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02fe (scircumflex) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x02ff */ }, - { /* 0x03?? */ - { /* 0x0300 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0301 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0302 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0303 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0304 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0305 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0306 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0307 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0308 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0309 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x030a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x030b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x030c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x030d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x030e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x030f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0310 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0311 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0312 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0313 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0314 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0315 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0316 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0317 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0318 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0319 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x031a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x031b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x031c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x031d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x031e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x031f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0320 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0321 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0322 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0323 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0324 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0325 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0326 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0327 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0328 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0329 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x032a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x032b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x032c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x032d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x032e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x032f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0330 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0331 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0332 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0333 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0334 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0335 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0336 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0337 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0338 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0339 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x033a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x033b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x033c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x033d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x033e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x033f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0340 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0341 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0342 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0343 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0344 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0345 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0346 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0347 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0348 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0349 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x034a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x034b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x034c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x034d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x034e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x034f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0350 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0351 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0352 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0353 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0354 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0355 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0356 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0357 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0358 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0359 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x035a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x035b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x035c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x035d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x035e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x035f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0360 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0361 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0362 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0363 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0364 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0365 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0366 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0367 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0368 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0369 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x036a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x036b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x036c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x036d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x036e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x036f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0370 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0371 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0372 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0373 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0374 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0375 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0376 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0377 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0378 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0379 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x037a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x037b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x037c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x037d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x037e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x037f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0380 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0381 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0382 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0383 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0384 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0385 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0386 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0387 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0388 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0389 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x038a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x038b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x038c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x038d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x038e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x038f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0390 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0391 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0392 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0393 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0394 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0395 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0396 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0397 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0398 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0399 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x039a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x039b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x039c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x039d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x039e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x039f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03a0 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03a1 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03a2 (kappa) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03a3 (Rcedilla) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03a4 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03a5 (Itilde) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03a6 (Lcedilla) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03a7 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03a8 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03a9 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03aa (Emacron) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03ab (Gcedilla) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03ac (Tslash) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03ad */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03ae */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03af */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03b0 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03b1 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03b2 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03b3 (rcedilla) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03b4 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03b5 (itilde) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03b6 (lcedilla) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03b7 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03b8 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03b9 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03ba (emacron) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03bb (gcedilla) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03bc (tslash) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03bd (ENG) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03be */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03bf (eng) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03c0 (Amacron) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03c1 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03c2 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03c3 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03c4 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03c5 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03c6 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03c7 (Iogonek) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03c8 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03c9 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03ca */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03cb */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03cc (Eabovedot) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03cd */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03ce */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03cf (Imacron) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03d0 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03d1 (Ncedilla) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03d2 (Omacron) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03d3 (Kcedilla) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03d4 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03d5 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03d6 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03d7 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03d8 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03d9 (Uogonek) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03da */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03db */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03dc */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03dd (Utilde) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03de (Umacron) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03df */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03e0 (amacron) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03e1 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03e2 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03e3 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03e4 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03e5 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03e6 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03e7 (iogonek) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03e8 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03e9 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03ea */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03eb */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03ec (eabovedot) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03ed */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03ee */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03ef (imacron) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03f0 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03f1 (ncedilla) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03f2 (omacron) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03f3 (kcedilla) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03f4 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03f5 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03f6 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03f7 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03f8 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03f9 (uogonek) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03fa */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03fb */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03fc */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03fd (utilde) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03fe (umacron) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x03ff */ - .scancode = 0x00, - .flags = 0x00 - }, - + { /* 0x03?? */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0300 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0301 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0302 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0303 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0304 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0305 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0306 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0307 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0308 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0309 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x030a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x030b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x030c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x030d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x030e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x030f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0310 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0311 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0312 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0313 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0314 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0315 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0316 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0317 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0318 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0319 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x031a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x031b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x031c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x031d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x031e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x031f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0320 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0321 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0322 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0323 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0324 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0325 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0326 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0327 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0328 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0329 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x032a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x032b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x032c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x032d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x032e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x032f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0330 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0331 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0332 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0333 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0334 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0335 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0336 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0337 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0338 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0339 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x033a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x033b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x033c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x033d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x033e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x033f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0340 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0341 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0342 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0343 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0344 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0345 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0346 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0347 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0348 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0349 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x034a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x034b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x034c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x034d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x034e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x034f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0350 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0351 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0352 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0353 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0354 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0355 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0356 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0357 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0358 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0359 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x035a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x035b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x035c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x035d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x035e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x035f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0360 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0361 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0362 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0363 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0364 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0365 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0366 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0367 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0368 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0369 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x036a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x036b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x036c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x036d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x036e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x036f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0370 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0371 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0372 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0373 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0374 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0375 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0376 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0377 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0378 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0379 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x037a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x037b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x037c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x037d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x037e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x037f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0380 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0381 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0382 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0383 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0384 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0385 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0386 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0387 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0388 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0389 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x038a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x038b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x038c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x038d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x038e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x038f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0390 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0391 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0392 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0393 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0394 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0395 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0396 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0397 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0398 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0399 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x039a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x039b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x039c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x039d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x039e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x039f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03a0 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03a1 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03a2 (kappa) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03a3 (Rcedilla) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03a4 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03a5 (Itilde) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03a6 (Lcedilla) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03a7 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03a8 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03a9 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03aa (Emacron) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03ab (Gcedilla) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03ac (Tslash) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03ad */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03ae */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03af */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03b0 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03b1 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03b2 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03b3 (rcedilla) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03b4 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03b5 (itilde) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03b6 (lcedilla) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03b7 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03b8 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03b9 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03ba (emacron) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03bb (gcedilla) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03bc (tslash) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03bd (ENG) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03be */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03bf (eng) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03c0 (Amacron) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03c1 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03c2 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03c3 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03c4 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03c5 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03c6 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03c7 (Iogonek) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03c8 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03c9 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03ca */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03cb */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03cc (Eabovedot) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03cd */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03ce */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03cf (Imacron) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03d0 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03d1 (Ncedilla) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03d2 (Omacron) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03d3 (Kcedilla) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03d4 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03d5 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03d6 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03d7 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03d8 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03d9 (Uogonek) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03da */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03db */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03dc */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03dd (Utilde) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03de (Umacron) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03df */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03e0 (amacron) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03e1 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03e2 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03e3 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03e4 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03e5 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03e6 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03e7 (iogonek) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03e8 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03e9 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03ea */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03eb */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03ec (eabovedot) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03ed */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03ee */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03ef (imacron) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03f0 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03f1 (ncedilla) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03f2 (omacron) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03f3 (kcedilla) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03f4 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03f5 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03f6 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03f7 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03f8 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03f9 (uogonek) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03fa */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03fb */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03fc */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03fd (utilde) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03fe (umacron) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x03ff */ }, - { /* 0x04?? */ - { /* 0x0400 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0401 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0402 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0403 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0404 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0405 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0406 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0407 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0408 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0409 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x040a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x040b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x040c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x040d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x040e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x040f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0410 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0411 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0412 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0413 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0414 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0415 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0416 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0417 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0418 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0419 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x041a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x041b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x041c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x041d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x041e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x041f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0420 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0421 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0422 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0423 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0424 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0425 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0426 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0427 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0428 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0429 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x042a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x042b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x042c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x042d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x042e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x042f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0430 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0431 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0432 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0433 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0434 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0435 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0436 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0437 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0438 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0439 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x043a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x043b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x043c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x043d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x043e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x043f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0440 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0441 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0442 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0443 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0444 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0445 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0446 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0447 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0448 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0449 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x044a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x044b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x044c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x044d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x044e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x044f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0450 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0451 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0452 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0453 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0454 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0455 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0456 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0457 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0458 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0459 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x045a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x045b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x045c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x045d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x045e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x045f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0460 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0461 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0462 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0463 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0464 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0465 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0466 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0467 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0468 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0469 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x046a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x046b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x046c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x046d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x046e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x046f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0470 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0471 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0472 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0473 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0474 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0475 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0476 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0477 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0478 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0479 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x047a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x047b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x047c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x047d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x047e (overline) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x047f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0480 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0481 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0482 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0483 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0484 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0485 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0486 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0487 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0488 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0489 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x048a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x048b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x048c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x048d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x048e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x048f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0490 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0491 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0492 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0493 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0494 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0495 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0496 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0497 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0498 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0499 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x049a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x049b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x049c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x049d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x049e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x049f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04a0 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04a1 (kana_fullstop) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04a2 (kana_openingbracket) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04a3 (kana_closingbracket) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04a4 (kana_comma) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04a5 (kana_middledot) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04a6 (kana_WO) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04a7 (kana_a) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04a8 (kana_i) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04a9 (kana_u) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04aa (kana_e) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04ab (kana_o) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04ac (kana_ya) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04ad (kana_yu) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04ae (kana_yo) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04af (kana_tu) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04b0 (prolongedsound) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04b1 (kana_A) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04b2 (kana_I) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04b3 (kana_U) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04b4 (kana_E) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04b5 (kana_O) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04b6 (kana_KA) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04b7 (kana_KI) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04b8 (kana_KU) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04b9 (kana_KE) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04ba (kana_KO) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04bb (kana_SA) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04bc (kana_SHI) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04bd (kana_SU) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04be (kana_SE) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04bf (kana_SO) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04c0 (kana_TA) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04c1 (kana_TI) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04c2 (kana_TU) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04c3 (kana_TE) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04c4 (kana_TO) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04c5 (kana_NA) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04c6 (kana_NI) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04c7 (kana_NU) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04c8 (kana_NE) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04c9 (kana_NO) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04ca (kana_HA) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04cb (kana_HI) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04cc (kana_HU) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04cd (kana_HE) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04ce (kana_HO) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04cf (kana_MA) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04d0 (kana_MI) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04d1 (kana_MU) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04d2 (kana_ME) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04d3 (kana_MO) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04d4 (kana_YA) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04d5 (kana_YU) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04d6 (kana_YO) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04d7 (kana_RA) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04d8 (kana_RI) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04d9 (kana_RU) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04da (kana_RE) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04db (kana_RO) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04dc (kana_WA) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04dd (kana_N) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04de (voicedsound) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04df (semivoicedsound) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04e0 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04e1 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04e2 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04e3 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04e4 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04e5 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04e6 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04e7 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04e8 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04e9 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04ea */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04eb */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04ec */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04ed */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04ee */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04ef */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04f0 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04f1 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04f2 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04f3 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04f4 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04f5 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04f6 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04f7 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04f8 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04f9 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04fa */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04fb */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04fc */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04fd */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04fe */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x04ff */ - .scancode = 0x00, - .flags = 0x00 - }, - + { /* 0x04?? */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0400 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0401 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0402 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0403 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0404 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0405 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0406 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0407 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0408 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0409 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x040a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x040b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x040c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x040d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x040e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x040f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0410 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0411 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0412 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0413 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0414 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0415 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0416 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0417 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0418 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0419 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x041a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x041b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x041c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x041d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x041e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x041f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0420 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0421 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0422 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0423 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0424 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0425 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0426 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0427 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0428 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0429 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x042a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x042b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x042c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x042d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x042e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x042f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0430 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0431 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0432 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0433 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0434 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0435 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0436 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0437 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0438 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0439 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x043a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x043b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x043c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x043d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x043e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x043f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0440 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0441 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0442 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0443 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0444 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0445 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0446 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0447 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0448 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0449 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x044a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x044b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x044c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x044d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x044e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x044f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0450 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0451 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0452 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0453 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0454 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0455 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0456 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0457 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0458 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0459 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x045a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x045b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x045c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x045d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x045e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x045f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0460 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0461 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0462 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0463 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0464 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0465 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0466 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0467 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0468 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0469 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x046a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x046b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x046c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x046d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x046e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x046f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0470 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0471 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0472 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0473 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0474 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0475 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0476 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0477 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0478 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0479 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x047a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x047b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x047c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x047d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x047e (overline) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x047f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0480 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0481 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0482 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0483 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0484 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0485 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0486 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0487 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0488 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0489 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x048a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x048b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x048c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x048d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x048e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x048f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0490 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0491 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0492 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0493 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0494 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0495 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0496 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0497 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0498 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0499 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x049a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x049b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x049c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x049d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x049e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x049f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04a0 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04a1 (kana_fullstop) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04a2 (kana_openingbracket) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04a3 (kana_closingbracket) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04a4 (kana_comma) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04a5 (kana_middledot) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04a6 (kana_WO) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04a7 (kana_a) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04a8 (kana_i) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04a9 (kana_u) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04aa (kana_e) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04ab (kana_o) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04ac (kana_ya) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04ad (kana_yu) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04ae (kana_yo) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04af (kana_tu) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04b0 (prolongedsound) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04b1 (kana_A) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04b2 (kana_I) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04b3 (kana_U) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04b4 (kana_E) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04b5 (kana_O) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04b6 (kana_KA) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04b7 (kana_KI) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04b8 (kana_KU) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04b9 (kana_KE) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04ba (kana_KO) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04bb (kana_SA) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04bc (kana_SHI) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04bd (kana_SU) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04be (kana_SE) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04bf (kana_SO) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04c0 (kana_TA) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04c1 (kana_TI) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04c2 (kana_TU) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04c3 (kana_TE) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04c4 (kana_TO) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04c5 (kana_NA) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04c6 (kana_NI) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04c7 (kana_NU) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04c8 (kana_NE) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04c9 (kana_NO) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04ca (kana_HA) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04cb (kana_HI) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04cc (kana_HU) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04cd (kana_HE) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04ce (kana_HO) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04cf (kana_MA) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04d0 (kana_MI) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04d1 (kana_MU) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04d2 (kana_ME) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04d3 (kana_MO) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04d4 (kana_YA) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04d5 (kana_YU) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04d6 (kana_YO) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04d7 (kana_RA) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04d8 (kana_RI) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04d9 (kana_RU) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04da (kana_RE) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04db (kana_RO) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04dc (kana_WA) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04dd (kana_N) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04de (voicedsound) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04df (semivoicedsound) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04e0 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04e1 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04e2 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04e3 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04e4 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04e5 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04e6 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04e7 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04e8 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04e9 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04ea */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04eb */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04ec */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04ed */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04ee */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04ef */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04f0 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04f1 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04f2 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04f3 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04f4 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04f5 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04f6 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04f7 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04f8 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04f9 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04fa */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04fb */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04fc */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04fd */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04fe */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x04ff */ }, - { /* 0x05?? */ - { /* 0x0500 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0501 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0502 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0503 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0504 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0505 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0506 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0507 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0508 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0509 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x050a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x050b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x050c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x050d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x050e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x050f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0510 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0511 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0512 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0513 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0514 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0515 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0516 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0517 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0518 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0519 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x051a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x051b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x051c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x051d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x051e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x051f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0520 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0521 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0522 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0523 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0524 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0525 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0526 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0527 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0528 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0529 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x052a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x052b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x052c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x052d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x052e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x052f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0530 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0531 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0532 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0533 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0534 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0535 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0536 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0537 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0538 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0539 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x053a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x053b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x053c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x053d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x053e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x053f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0540 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0541 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0542 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0543 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0544 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0545 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0546 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0547 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0548 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0549 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x054a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x054b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x054c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x054d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x054e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x054f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0550 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0551 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0552 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0553 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0554 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0555 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0556 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0557 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0558 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0559 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x055a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x055b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x055c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x055d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x055e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x055f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0560 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0561 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0562 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0563 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0564 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0565 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0566 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0567 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0568 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0569 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x056a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x056b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x056c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x056d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x056e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x056f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0570 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0571 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0572 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0573 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0574 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0575 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0576 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0577 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0578 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0579 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x057a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x057b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x057c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x057d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x057e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x057f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0580 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0581 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0582 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0583 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0584 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0585 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0586 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0587 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0588 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0589 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x058a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x058b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x058c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x058d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x058e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x058f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0590 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0591 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0592 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0593 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0594 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0595 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0596 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0597 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0598 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0599 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x059a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x059b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x059c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x059d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x059e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x059f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05a0 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05a1 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05a2 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05a3 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05a4 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05a5 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05a6 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05a7 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05a8 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05a9 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05aa */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05ab */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05ac (Arabic_comma) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05ad */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05ae */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05af */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05b0 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05b1 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05b2 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05b3 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05b4 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05b5 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05b6 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05b7 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05b8 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05b9 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05ba */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05bb (Arabic_semicolon) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05bc */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05bd */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05be */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05bf (Arabic_question_mark) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05c0 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05c1 (Arabic_hamza) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05c2 (Arabic_maddaonalef) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05c3 (Arabic_hamzaonalef) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05c4 (Arabic_hamzaonwaw) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05c5 (Arabic_hamzaunderalef) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05c6 (Arabic_hamzaonyeh) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05c7 (Arabic_alef) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05c8 (Arabic_beh) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05c9 (Arabic_tehmarbuta) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05ca (Arabic_teh) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05cb (Arabic_theh) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05cc (Arabic_jeem) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05cd (Arabic_hah) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05ce (Arabic_khah) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05cf (Arabic_dal) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05d0 (Arabic_thal) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05d1 (Arabic_ra) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05d2 (Arabic_zain) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05d3 (Arabic_seen) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05d4 (Arabic_sheen) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05d5 (Arabic_sad) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05d6 (Arabic_dad) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05d7 (Arabic_tah) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05d8 (Arabic_zah) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05d9 (Arabic_ain) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05da (Arabic_ghain) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05db */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05dc */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05dd */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05de */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05df */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05e0 (Arabic_tatweel) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05e1 (Arabic_feh) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05e2 (Arabic_qaf) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05e3 (Arabic_kaf) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05e4 (Arabic_lam) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05e5 (Arabic_meem) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05e6 (Arabic_noon) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05e7 (Arabic_heh) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05e8 (Arabic_waw) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05e9 (Arabic_alefmaksura) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05ea (Arabic_yeh) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05eb (Arabic_fathatan) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05ec (Arabic_dammatan) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05ed (Arabic_kasratan) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05ee (Arabic_fatha) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05ef (Arabic_damma) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05f0 (Arabic_kasra) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05f1 (Arabic_shadda) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05f2 (Arabic_sukun) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05f3 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05f4 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05f5 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05f6 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05f7 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05f8 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05f9 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05fa */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05fb */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05fc */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05fd */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05fe */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x05ff */ - .scancode = 0x00, - .flags = 0x00 - }, - + { /* 0x05?? */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0500 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0501 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0502 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0503 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0504 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0505 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0506 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0507 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0508 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0509 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x050a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x050b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x050c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x050d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x050e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x050f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0510 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0511 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0512 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0513 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0514 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0515 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0516 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0517 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0518 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0519 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x051a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x051b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x051c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x051d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x051e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x051f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0520 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0521 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0522 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0523 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0524 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0525 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0526 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0527 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0528 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0529 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x052a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x052b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x052c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x052d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x052e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x052f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0530 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0531 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0532 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0533 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0534 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0535 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0536 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0537 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0538 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0539 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x053a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x053b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x053c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x053d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x053e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x053f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0540 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0541 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0542 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0543 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0544 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0545 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0546 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0547 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0548 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0549 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x054a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x054b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x054c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x054d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x054e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x054f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0550 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0551 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0552 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0553 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0554 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0555 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0556 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0557 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0558 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0559 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x055a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x055b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x055c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x055d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x055e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x055f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0560 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0561 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0562 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0563 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0564 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0565 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0566 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0567 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0568 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0569 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x056a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x056b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x056c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x056d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x056e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x056f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0570 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0571 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0572 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0573 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0574 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0575 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0576 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0577 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0578 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0579 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x057a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x057b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x057c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x057d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x057e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x057f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0580 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0581 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0582 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0583 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0584 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0585 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0586 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0587 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0588 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0589 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x058a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x058b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x058c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x058d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x058e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x058f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0590 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0591 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0592 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0593 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0594 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0595 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0596 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0597 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0598 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0599 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x059a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x059b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x059c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x059d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x059e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x059f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05a0 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05a1 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05a2 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05a3 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05a4 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05a5 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05a6 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05a7 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05a8 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05a9 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05aa */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05ab */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05ac (Arabic_comma) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05ad */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05ae */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05af */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05b0 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05b1 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05b2 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05b3 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05b4 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05b5 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05b6 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05b7 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05b8 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05b9 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05ba */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05bb (Arabic_semicolon) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05bc */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05bd */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05be */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05bf (Arabic_question_mark) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05c0 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05c1 (Arabic_hamza) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05c2 (Arabic_maddaonalef) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05c3 (Arabic_hamzaonalef) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05c4 (Arabic_hamzaonwaw) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05c5 (Arabic_hamzaunderalef) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05c6 (Arabic_hamzaonyeh) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05c7 (Arabic_alef) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05c8 (Arabic_beh) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05c9 (Arabic_tehmarbuta) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05ca (Arabic_teh) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05cb (Arabic_theh) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05cc (Arabic_jeem) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05cd (Arabic_hah) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05ce (Arabic_khah) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05cf (Arabic_dal) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05d0 (Arabic_thal) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05d1 (Arabic_ra) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05d2 (Arabic_zain) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05d3 (Arabic_seen) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05d4 (Arabic_sheen) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05d5 (Arabic_sad) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05d6 (Arabic_dad) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05d7 (Arabic_tah) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05d8 (Arabic_zah) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05d9 (Arabic_ain) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05da (Arabic_ghain) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05db */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05dc */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05dd */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05de */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05df */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05e0 (Arabic_tatweel) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05e1 (Arabic_feh) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05e2 (Arabic_qaf) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05e3 (Arabic_kaf) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05e4 (Arabic_lam) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05e5 (Arabic_meem) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05e6 (Arabic_noon) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05e7 (Arabic_heh) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05e8 (Arabic_waw) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05e9 (Arabic_alefmaksura) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05ea (Arabic_yeh) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05eb (Arabic_fathatan) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05ec (Arabic_dammatan) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05ed (Arabic_kasratan) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05ee (Arabic_fatha) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05ef (Arabic_damma) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05f0 (Arabic_kasra) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05f1 (Arabic_shadda) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05f2 (Arabic_sukun) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05f3 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05f4 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05f5 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05f6 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05f7 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05f8 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05f9 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05fa */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05fb */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05fc */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05fd */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05fe */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x05ff */ }, - { /* 0x06?? */ - { /* 0x0600 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0601 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0602 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0603 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0604 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0605 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0606 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0607 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0608 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0609 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x060a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x060b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x060c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x060d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x060e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x060f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0610 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0611 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0612 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0613 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0614 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0615 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0616 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0617 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0618 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0619 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x061a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x061b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x061c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x061d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x061e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x061f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0620 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0621 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0622 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0623 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0624 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0625 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0626 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0627 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0628 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0629 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x062a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x062b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x062c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x062d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x062e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x062f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0630 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0631 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0632 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0633 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0634 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0635 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0636 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0637 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0638 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0639 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x063a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x063b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x063c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x063d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x063e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x063f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0640 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0641 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0642 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0643 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0644 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0645 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0646 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0647 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0648 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0649 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x064a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x064b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x064c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x064d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x064e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x064f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0650 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0651 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0652 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0653 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0654 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0655 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0656 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0657 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0658 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0659 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x065a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x065b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x065c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x065d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x065e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x065f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0660 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0661 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0662 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0663 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0664 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0665 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0666 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0667 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0668 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0669 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x066a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x066b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x066c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x066d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x066e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x066f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0670 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0671 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0672 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0673 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0674 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0675 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0676 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0677 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0678 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0679 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x067a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x067b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x067c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x067d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x067e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x067f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0680 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0681 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0682 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0683 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0684 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0685 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0686 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0687 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0688 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0689 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x068a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x068b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x068c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x068d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x068e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x068f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0690 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0691 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0692 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0693 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0694 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0695 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0696 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0697 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0698 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0699 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x069a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x069b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x069c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x069d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x069e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x069f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06a0 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06a1 (Serbian_dje) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06a2 (Macedonia_gje) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06a3 (Cyrillic_io) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06a4 (Ukranian_je) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06a5 (Macedonia_dse) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06a6 (Ukranian_i) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06a7 (Ukranian_yi) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06a8 (Serbian_je) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06a9 (Serbian_lje) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06aa (Serbian_nje) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06ab (Serbian_tshe) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06ac (Macedonia_kje) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06ad (Ukrainian_ghe_with_upturn) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06ae (Byelorussian_shortu) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06af (Serbian_dze) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06b0 (numerosign) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06b1 (Serbian_DJE) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06b2 (Macedonia_GJE) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06b3 (Cyrillic_IO) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06b4 (Ukranian_JE) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06b5 (Macedonia_DSE) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06b6 (Ukranian_I) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06b7 (Ukranian_YI) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06b8 (Serbian_JE) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06b9 (Serbian_LJE) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06ba (Serbian_NJE) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06bb (Serbian_TSHE) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06bc (Macedonia_KJE) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06bd (Ukrainian_GHE_WITH_UPTURN) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06be (Byelorussian_SHORTU) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06bf (Serbian_DZE) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06c0 (Cyrillic_yu) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06c1 (Cyrillic_a) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06c2 (Cyrillic_be) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06c3 (Cyrillic_tse) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06c4 (Cyrillic_de) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06c5 (Cyrillic_ie) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06c6 (Cyrillic_ef) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06c7 (Cyrillic_ghe) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06c8 (Cyrillic_ha) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06c9 (Cyrillic_i) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06ca (Cyrillic_shorti) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06cb (Cyrillic_ka) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06cc (Cyrillic_el) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06cd (Cyrillic_em) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06ce (Cyrillic_en) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06cf (Cyrillic_o) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06d0 (Cyrillic_pe) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06d1 (Cyrillic_ya) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06d2 (Cyrillic_er) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06d3 (Cyrillic_es) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06d4 (Cyrillic_te) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06d5 (Cyrillic_u) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06d6 (Cyrillic_zhe) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06d7 (Cyrillic_ve) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06d8 (Cyrillic_softsign) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06d9 (Cyrillic_yeru) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06da (Cyrillic_ze) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06db (Cyrillic_sha) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06dc (Cyrillic_e) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06dd (Cyrillic_shcha) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06de (Cyrillic_che) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06df (Cyrillic_hardsign) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06e0 (Cyrillic_YU) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06e1 (Cyrillic_A) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06e2 (Cyrillic_BE) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06e3 (Cyrillic_TSE) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06e4 (Cyrillic_DE) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06e5 (Cyrillic_IE) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06e6 (Cyrillic_EF) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06e7 (Cyrillic_GHE) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06e8 (Cyrillic_HA) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06e9 (Cyrillic_I) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06ea (Cyrillic_SHORTI) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06eb (Cyrillic_KA) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06ec (Cyrillic_EL) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06ed (Cyrillic_EM) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06ee (Cyrillic_EN) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06ef (Cyrillic_O) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06f0 (Cyrillic_PE) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06f1 (Cyrillic_YA) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06f2 (Cyrillic_ER) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06f3 (Cyrillic_ES) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06f4 (Cyrillic_TE) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06f5 (Cyrillic_U) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06f6 (Cyrillic_ZHE) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06f7 (Cyrillic_VE) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06f8 (Cyrillic_SOFTSIGN) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06f9 (Cyrillic_YERU) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06fa (Cyrillic_ZE) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06fb (Cyrillic_SHA) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06fc (Cyrillic_E) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06fd (Cyrillic_SHCHA) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06fe (Cyrillic_CHE) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x06ff (Cyrillic_HARDSIGN) */ - .scancode = 0x00, - .flags = 0x00 - }, - + { /* 0x06?? */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0600 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0601 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0602 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0603 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0604 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0605 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0606 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0607 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0608 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0609 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x060a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x060b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x060c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x060d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x060e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x060f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0610 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0611 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0612 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0613 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0614 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0615 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0616 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0617 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0618 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0619 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x061a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x061b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x061c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x061d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x061e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x061f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0620 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0621 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0622 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0623 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0624 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0625 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0626 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0627 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0628 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0629 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x062a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x062b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x062c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x062d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x062e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x062f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0630 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0631 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0632 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0633 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0634 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0635 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0636 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0637 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0638 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0639 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x063a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x063b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x063c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x063d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x063e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x063f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0640 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0641 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0642 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0643 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0644 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0645 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0646 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0647 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0648 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0649 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x064a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x064b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x064c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x064d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x064e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x064f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0650 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0651 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0652 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0653 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0654 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0655 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0656 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0657 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0658 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0659 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x065a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x065b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x065c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x065d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x065e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x065f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0660 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0661 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0662 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0663 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0664 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0665 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0666 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0667 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0668 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0669 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x066a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x066b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x066c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x066d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x066e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x066f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0670 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0671 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0672 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0673 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0674 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0675 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0676 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0677 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0678 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0679 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x067a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x067b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x067c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x067d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x067e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x067f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0680 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0681 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0682 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0683 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0684 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0685 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0686 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0687 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0688 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0689 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x068a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x068b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x068c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x068d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x068e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x068f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0690 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0691 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0692 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0693 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0694 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0695 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0696 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0697 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0698 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0699 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x069a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x069b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x069c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x069d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x069e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x069f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06a0 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06a1 (Serbian_dje) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06a2 (Macedonia_gje) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06a3 (Cyrillic_io) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06a4 (Ukranian_je) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06a5 (Macedonia_dse) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06a6 (Ukranian_i) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06a7 (Ukranian_yi) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06a8 (Serbian_je) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06a9 (Serbian_lje) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06aa (Serbian_nje) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06ab (Serbian_tshe) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06ac (Macedonia_kje) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06ad (Ukrainian_ghe_with_upturn) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06ae (Byelorussian_shortu) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06af (Serbian_dze) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06b0 (numerosign) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06b1 (Serbian_DJE) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06b2 (Macedonia_GJE) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06b3 (Cyrillic_IO) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06b4 (Ukranian_JE) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06b5 (Macedonia_DSE) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06b6 (Ukranian_I) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06b7 (Ukranian_YI) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06b8 (Serbian_JE) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06b9 (Serbian_LJE) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06ba (Serbian_NJE) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06bb (Serbian_TSHE) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06bc (Macedonia_KJE) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06bd (Ukrainian_GHE_WITH_UPTURN) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06be (Byelorussian_SHORTU) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06bf (Serbian_DZE) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06c0 (Cyrillic_yu) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06c1 (Cyrillic_a) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06c2 (Cyrillic_be) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06c3 (Cyrillic_tse) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06c4 (Cyrillic_de) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06c5 (Cyrillic_ie) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06c6 (Cyrillic_ef) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06c7 (Cyrillic_ghe) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06c8 (Cyrillic_ha) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06c9 (Cyrillic_i) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06ca (Cyrillic_shorti) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06cb (Cyrillic_ka) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06cc (Cyrillic_el) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06cd (Cyrillic_em) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06ce (Cyrillic_en) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06cf (Cyrillic_o) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06d0 (Cyrillic_pe) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06d1 (Cyrillic_ya) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06d2 (Cyrillic_er) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06d3 (Cyrillic_es) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06d4 (Cyrillic_te) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06d5 (Cyrillic_u) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06d6 (Cyrillic_zhe) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06d7 (Cyrillic_ve) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06d8 (Cyrillic_softsign) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06d9 (Cyrillic_yeru) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06da (Cyrillic_ze) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06db (Cyrillic_sha) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06dc (Cyrillic_e) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06dd (Cyrillic_shcha) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06de (Cyrillic_che) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06df (Cyrillic_hardsign) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06e0 (Cyrillic_YU) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06e1 (Cyrillic_A) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06e2 (Cyrillic_BE) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06e3 (Cyrillic_TSE) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06e4 (Cyrillic_DE) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06e5 (Cyrillic_IE) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06e6 (Cyrillic_EF) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06e7 (Cyrillic_GHE) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06e8 (Cyrillic_HA) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06e9 (Cyrillic_I) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06ea (Cyrillic_SHORTI) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06eb (Cyrillic_KA) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06ec (Cyrillic_EL) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06ed (Cyrillic_EM) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06ee (Cyrillic_EN) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06ef (Cyrillic_O) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06f0 (Cyrillic_PE) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06f1 (Cyrillic_YA) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06f2 (Cyrillic_ER) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06f3 (Cyrillic_ES) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06f4 (Cyrillic_TE) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06f5 (Cyrillic_U) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06f6 (Cyrillic_ZHE) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06f7 (Cyrillic_VE) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06f8 (Cyrillic_SOFTSIGN) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06f9 (Cyrillic_YERU) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06fa (Cyrillic_ZE) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06fb (Cyrillic_SHA) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06fc (Cyrillic_E) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06fd (Cyrillic_SHCHA) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06fe (Cyrillic_CHE) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x06ff (Cyrillic_HARDSIGN) */ }, - { /* 0x07?? */ - { /* 0x0700 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0701 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0702 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0703 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0704 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0705 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0706 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0707 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0708 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0709 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x070a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x070b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x070c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x070d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x070e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x070f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0710 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0711 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0712 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0713 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0714 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0715 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0716 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0717 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0718 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0719 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x071a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x071b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x071c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x071d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x071e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x071f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0720 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0721 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0722 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0723 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0724 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0725 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0726 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0727 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0728 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0729 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x072a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x072b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x072c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x072d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x072e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x072f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0730 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0731 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0732 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0733 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0734 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0735 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0736 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0737 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0738 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0739 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x073a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x073b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x073c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x073d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x073e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x073f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0740 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0741 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0742 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0743 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0744 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0745 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0746 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0747 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0748 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0749 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x074a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x074b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x074c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x074d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x074e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x074f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0750 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0751 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0752 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0753 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0754 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0755 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0756 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0757 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0758 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0759 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x075a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x075b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x075c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x075d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x075e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x075f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0760 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0761 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0762 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0763 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0764 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0765 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0766 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0767 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0768 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0769 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x076a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x076b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x076c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x076d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x076e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x076f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0770 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0771 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0772 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0773 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0774 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0775 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0776 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0777 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0778 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0779 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x077a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x077b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x077c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x077d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x077e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x077f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0780 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0781 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0782 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0783 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0784 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0785 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0786 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0787 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0788 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0789 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x078a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x078b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x078c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x078d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x078e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x078f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0790 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0791 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0792 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0793 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0794 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0795 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0796 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0797 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0798 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0799 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x079a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x079b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x079c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x079d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x079e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x079f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07a0 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07a1 (Greek_ALPHAaccent) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07a2 (Greek_EPSILONaccent) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07a3 (Greek_ETAaccent) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07a4 (Greek_IOTAaccent) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07a5 (Greek_IOTAdiaeresis) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07a6 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07a7 (Greek_OMICRONaccent) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07a8 (Greek_UPSILONaccent) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07a9 (Greek_UPSILONdieresis) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07aa */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07ab (Greek_OMEGAaccent) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07ac */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07ad */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07ae (Greek_accentdieresis) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07af (Greek_horizbar) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07b0 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07b1 (Greek_alphaaccent) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07b2 (Greek_epsilonaccent) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07b3 (Greek_etaaccent) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07b4 (Greek_iotaaccent) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07b5 (Greek_iotadieresis) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07b6 (Greek_iotaaccentdieresis) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07b7 (Greek_omicronaccent) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07b8 (Greek_upsilonaccent) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07b9 (Greek_upsilondieresis) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07ba (Greek_upsilonaccentdieresis) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07bb (Greek_omegaaccent) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07bc */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07bd */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07be */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07bf */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07c0 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07c1 (Greek_ALPHA) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07c2 (Greek_BETA) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07c3 (Greek_GAMMA) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07c4 (Greek_DELTA) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07c5 (Greek_EPSILON) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07c6 (Greek_ZETA) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07c7 (Greek_ETA) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07c8 (Greek_THETA) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07c9 (Greek_IOTA) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07ca (Greek_KAPPA) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07cb (Greek_LAMBDA) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07cc (Greek_MU) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07cd (Greek_NU) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07ce (Greek_XI) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07cf (Greek_OMICRON) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07d0 (Greek_PI) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07d1 (Greek_RHO) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07d2 (Greek_SIGMA) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07d3 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07d4 (Greek_TAU) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07d5 (Greek_UPSILON) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07d6 (Greek_PHI) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07d7 (Greek_CHI) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07d8 (Greek_PSI) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07d9 (Greek_OMEGA) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07da */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07db */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07dc */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07dd */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07de */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07df */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07e0 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07e1 (Greek_alpha) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07e2 (Greek_beta) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07e3 (Greek_gamma) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07e4 (Greek_delta) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07e5 (Greek_epsilon) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07e6 (Greek_zeta) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07e7 (Greek_eta) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07e8 (Greek_theta) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07e9 (Greek_iota) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07ea (Greek_kappa) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07eb (Greek_lambda) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07ec (Greek_mu) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07ed (Greek_nu) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07ee (Greek_xi) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07ef (Greek_omicron) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07f0 (Greek_pi) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07f1 (Greek_rho) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07f2 (Greek_sigma) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07f3 (Greek_finalsmallsigma) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07f4 (Greek_tau) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07f5 (Greek_upsilon) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07f6 (Greek_phi) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07f7 (Greek_chi) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07f8 (Greek_psi) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07f9 (Greek_omega) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07fa */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07fb */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07fc */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07fd */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07fe */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x07ff */ - .scancode = 0x00, - .flags = 0x00 - }, - + { /* 0x07?? */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0700 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0701 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0702 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0703 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0704 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0705 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0706 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0707 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0708 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0709 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x070a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x070b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x070c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x070d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x070e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x070f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0710 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0711 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0712 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0713 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0714 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0715 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0716 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0717 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0718 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0719 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x071a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x071b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x071c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x071d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x071e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x071f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0720 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0721 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0722 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0723 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0724 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0725 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0726 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0727 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0728 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0729 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x072a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x072b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x072c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x072d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x072e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x072f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0730 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0731 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0732 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0733 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0734 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0735 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0736 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0737 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0738 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0739 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x073a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x073b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x073c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x073d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x073e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x073f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0740 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0741 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0742 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0743 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0744 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0745 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0746 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0747 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0748 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0749 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x074a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x074b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x074c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x074d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x074e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x074f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0750 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0751 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0752 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0753 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0754 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0755 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0756 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0757 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0758 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0759 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x075a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x075b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x075c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x075d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x075e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x075f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0760 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0761 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0762 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0763 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0764 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0765 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0766 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0767 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0768 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0769 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x076a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x076b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x076c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x076d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x076e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x076f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0770 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0771 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0772 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0773 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0774 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0775 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0776 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0777 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0778 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0779 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x077a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x077b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x077c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x077d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x077e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x077f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0780 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0781 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0782 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0783 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0784 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0785 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0786 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0787 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0788 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0789 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x078a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x078b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x078c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x078d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x078e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x078f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0790 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0791 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0792 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0793 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0794 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0795 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0796 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0797 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0798 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0799 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x079a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x079b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x079c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x079d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x079e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x079f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07a0 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07a1 (Greek_ALPHAaccent) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07a2 (Greek_EPSILONaccent) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07a3 (Greek_ETAaccent) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07a4 (Greek_IOTAaccent) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07a5 (Greek_IOTAdiaeresis) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07a6 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07a7 (Greek_OMICRONaccent) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07a8 (Greek_UPSILONaccent) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07a9 (Greek_UPSILONdieresis) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07aa */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07ab (Greek_OMEGAaccent) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07ac */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07ad */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07ae (Greek_accentdieresis) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07af (Greek_horizbar) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07b0 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07b1 (Greek_alphaaccent) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07b2 (Greek_epsilonaccent) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07b3 (Greek_etaaccent) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07b4 (Greek_iotaaccent) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07b5 (Greek_iotadieresis) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07b6 (Greek_iotaaccentdieresis) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07b7 (Greek_omicronaccent) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07b8 (Greek_upsilonaccent) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07b9 (Greek_upsilondieresis) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07ba (Greek_upsilonaccentdieresis) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07bb (Greek_omegaaccent) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07bc */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07bd */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07be */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07bf */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07c0 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07c1 (Greek_ALPHA) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07c2 (Greek_BETA) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07c3 (Greek_GAMMA) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07c4 (Greek_DELTA) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07c5 (Greek_EPSILON) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07c6 (Greek_ZETA) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07c7 (Greek_ETA) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07c8 (Greek_THETA) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07c9 (Greek_IOTA) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07ca (Greek_KAPPA) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07cb (Greek_LAMBDA) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07cc (Greek_MU) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07cd (Greek_NU) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07ce (Greek_XI) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07cf (Greek_OMICRON) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07d0 (Greek_PI) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07d1 (Greek_RHO) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07d2 (Greek_SIGMA) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07d3 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07d4 (Greek_TAU) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07d5 (Greek_UPSILON) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07d6 (Greek_PHI) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07d7 (Greek_CHI) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07d8 (Greek_PSI) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07d9 (Greek_OMEGA) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07da */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07db */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07dc */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07dd */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07de */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07df */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07e0 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07e1 (Greek_alpha) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07e2 (Greek_beta) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07e3 (Greek_gamma) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07e4 (Greek_delta) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07e5 (Greek_epsilon) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07e6 (Greek_zeta) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07e7 (Greek_eta) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07e8 (Greek_theta) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07e9 (Greek_iota) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07ea (Greek_kappa) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07eb (Greek_lambda) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07ec (Greek_mu) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07ed (Greek_nu) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07ee (Greek_xi) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07ef (Greek_omicron) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07f0 (Greek_pi) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07f1 (Greek_rho) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07f2 (Greek_sigma) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07f3 (Greek_finalsmallsigma) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07f4 (Greek_tau) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07f5 (Greek_upsilon) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07f6 (Greek_phi) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07f7 (Greek_chi) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07f8 (Greek_psi) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07f9 (Greek_omega) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07fa */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07fb */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07fc */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07fd */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07fe */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x07ff */ }, - { /* 0x08?? */ - { /* 0x0800 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0801 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0802 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0803 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0804 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0805 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0806 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0807 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0808 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0809 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x080a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x080b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x080c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x080d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x080e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x080f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0810 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0811 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0812 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0813 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0814 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0815 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0816 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0817 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0818 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0819 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x081a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x081b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x081c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x081d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x081e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x081f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0820 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0821 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0822 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0823 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0824 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0825 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0826 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0827 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0828 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0829 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x082a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x082b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x082c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x082d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x082e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x082f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0830 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0831 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0832 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0833 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0834 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0835 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0836 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0837 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0838 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0839 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x083a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x083b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x083c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x083d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x083e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x083f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0840 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0841 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0842 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0843 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0844 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0845 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0846 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0847 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0848 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0849 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x084a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x084b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x084c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x084d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x084e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x084f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0850 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0851 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0852 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0853 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0854 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0855 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0856 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0857 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0858 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0859 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x085a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x085b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x085c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x085d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x085e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x085f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0860 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0861 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0862 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0863 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0864 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0865 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0866 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0867 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0868 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0869 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x086a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x086b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x086c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x086d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x086e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x086f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0870 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0871 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0872 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0873 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0874 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0875 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0876 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0877 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0878 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0879 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x087a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x087b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x087c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x087d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x087e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x087f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0880 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0881 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0882 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0883 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0884 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0885 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0886 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0887 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0888 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0889 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x088a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x088b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x088c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x088d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x088e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x088f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0890 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0891 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0892 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0893 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0894 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0895 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0896 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0897 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0898 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0899 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x089a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x089b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x089c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x089d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x089e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x089f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08a0 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08a1 (leftradical) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08a2 (topleftradical) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08a3 (horizconnector) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08a4 (topintegral) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08a5 (botintegral) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08a6 (vertconnector) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08a7 (topleftsqbracket) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08a8 (botleftsqbracket) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08a9 (toprightsqbracket) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08aa (botrightsqbracket) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08ab (topleftparens) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08ac (botleftparens) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08ad (toprightparens) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08ae (botrightparens) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08af (leftmiddlecurlybrace) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08b0 (rightmiddlecurlybrace) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08b1 (topleftsummation) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08b2 (botleftsummation) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08b3 (topvertsummationconnector) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08b4 (botvertsummationconnector) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08b5 (toprightsummation) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08b6 (botrightsummation) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08b7 (rightmiddlesummation) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08b8 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08b9 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08ba */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08bb */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08bc (lessthanequal) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08bd (notequal) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08be (greaterthanequal) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08bf (integral) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08c0 (therefore) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08c1 (variation) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08c2 (infinity) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08c3 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08c4 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08c5 (nabla) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08c6 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08c7 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08c8 (approximate) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08c9 (similarequal) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08ca */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08cb */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08cc */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08cd (ifonlyif) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08ce (implies) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08cf (identical) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08d0 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08d1 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08d2 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08d3 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08d4 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08d5 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08d6 (radical) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08d7 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08d8 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08d9 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08da (includedin) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08db (includes) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08dc (intersection) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08dd (union) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08de (logicaland) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08df (logicalor) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08e0 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08e1 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08e2 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08e3 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08e4 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08e5 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08e6 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08e7 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08e8 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08e9 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08ea */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08eb */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08ec */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08ed */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08ee */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08ef (partialderivative) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08f0 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08f1 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08f2 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08f3 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08f4 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08f5 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08f6 (function) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08f7 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08f8 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08f9 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08fa */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x08fb (leftarrow) */ - .scancode = 0x4B, - .flags = KBD_FLAG_EXT - }, - - { /* 0x08fc (uparrow) */ - .scancode = 0x48, - .flags = KBD_FLAG_EXT - }, - - { /* 0x08fd (rightarrow) */ - .scancode = 0x4D, - .flags = KBD_FLAG_EXT - }, - - { /* 0x08fe (downarrow) */ - .scancode = 0x50, - .flags = KBD_FLAG_EXT - }, - - { /* 0x08ff */ - .scancode = 0x00, - .flags = 0x00 - }, - + { /* 0x08?? */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0800 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0801 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0802 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0803 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0804 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0805 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0806 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0807 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0808 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0809 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x080a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x080b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x080c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x080d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x080e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x080f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0810 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0811 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0812 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0813 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0814 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0815 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0816 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0817 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0818 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0819 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x081a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x081b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x081c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x081d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x081e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x081f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0820 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0821 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0822 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0823 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0824 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0825 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0826 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0827 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0828 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0829 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x082a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x082b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x082c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x082d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x082e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x082f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0830 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0831 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0832 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0833 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0834 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0835 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0836 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0837 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0838 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0839 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x083a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x083b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x083c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x083d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x083e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x083f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0840 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0841 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0842 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0843 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0844 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0845 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0846 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0847 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0848 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0849 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x084a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x084b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x084c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x084d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x084e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x084f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0850 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0851 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0852 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0853 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0854 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0855 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0856 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0857 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0858 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0859 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x085a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x085b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x085c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x085d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x085e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x085f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0860 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0861 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0862 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0863 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0864 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0865 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0866 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0867 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0868 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0869 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x086a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x086b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x086c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x086d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x086e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x086f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0870 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0871 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0872 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0873 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0874 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0875 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0876 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0877 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0878 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0879 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x087a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x087b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x087c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x087d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x087e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x087f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0880 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0881 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0882 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0883 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0884 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0885 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0886 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0887 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0888 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0889 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x088a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x088b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x088c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x088d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x088e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x088f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0890 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0891 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0892 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0893 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0894 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0895 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0896 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0897 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0898 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0899 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x089a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x089b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x089c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x089d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x089e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x089f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08a0 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08a1 (leftradical) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08a2 (topleftradical) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08a3 (horizconnector) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08a4 (topintegral) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08a5 (botintegral) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08a6 (vertconnector) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08a7 (topleftsqbracket) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08a8 (botleftsqbracket) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08a9 (toprightsqbracket) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08aa (botrightsqbracket) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08ab (topleftparens) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08ac (botleftparens) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08ad (toprightparens) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08ae (botrightparens) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08af (leftmiddlecurlybrace) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08b0 (rightmiddlecurlybrace) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08b1 (topleftsummation) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08b2 (botleftsummation) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08b3 (topvertsummationconnector) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08b4 (botvertsummationconnector) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08b5 (toprightsummation) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08b6 (botrightsummation) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08b7 (rightmiddlesummation) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08b8 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08b9 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08ba */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08bb */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08bc (lessthanequal) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08bd (notequal) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08be (greaterthanequal) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08bf (integral) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08c0 (therefore) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08c1 (variation) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08c2 (infinity) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08c3 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08c4 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08c5 (nabla) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08c6 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08c7 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08c8 (approximate) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08c9 (similarequal) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08ca */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08cb */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08cc */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08cd (ifonlyif) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08ce (implies) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08cf (identical) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08d0 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08d1 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08d2 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08d3 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08d4 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08d5 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08d6 (radical) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08d7 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08d8 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08d9 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08da (includedin) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08db (includes) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08dc (intersection) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08dd (union) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08de (logicaland) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08df (logicalor) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08e0 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08e1 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08e2 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08e3 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08e4 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08e5 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08e6 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08e7 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08e8 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08e9 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08ea */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08eb */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08ec */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08ed */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08ee */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08ef (partialderivative) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08f0 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08f1 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08f2 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08f3 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08f4 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08f5 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08f6 (function) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08f7 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08f8 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08f9 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08fa */ + { .scancode = 0x4B, .flags = KBD_FLAG_EXT }, /* 0x08fb (leftarrow) */ + { .scancode = 0x48, .flags = KBD_FLAG_EXT }, /* 0x08fc (uparrow) */ + { .scancode = 0x4D, .flags = KBD_FLAG_EXT }, /* 0x08fd (rightarrow) */ + { .scancode = 0x50, .flags = KBD_FLAG_EXT }, /* 0x08fe (downarrow) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08ff */ }, - { /* 0x09?? */ - { /* 0x0900 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0901 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0902 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0903 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0904 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0905 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0906 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0907 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0908 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0909 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x090a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x090b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x090c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x090d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x090e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x090f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0910 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0911 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0912 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0913 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0914 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0915 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0916 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0917 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0918 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0919 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x091a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x091b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x091c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x091d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x091e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x091f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0920 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0921 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0922 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0923 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0924 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0925 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0926 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0927 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0928 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0929 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x092a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x092b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x092c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x092d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x092e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x092f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0930 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0931 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0932 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0933 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0934 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0935 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0936 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0937 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0938 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0939 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x093a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x093b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x093c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x093d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x093e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x093f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0940 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0941 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0942 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0943 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0944 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0945 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0946 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0947 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0948 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0949 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x094a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x094b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x094c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x094d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x094e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x094f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0950 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0951 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0952 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0953 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0954 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0955 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0956 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0957 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0958 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0959 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x095a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x095b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x095c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x095d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x095e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x095f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0960 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0961 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0962 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0963 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0964 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0965 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0966 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0967 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0968 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0969 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x096a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x096b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x096c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x096d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x096e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x096f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0970 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0971 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0972 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0973 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0974 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0975 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0976 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0977 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0978 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0979 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x097a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x097b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x097c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x097d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x097e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x097f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0980 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0981 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0982 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0983 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0984 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0985 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0986 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0987 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0988 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0989 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x098a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x098b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x098c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x098d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x098e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x098f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0990 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0991 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0992 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0993 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0994 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0995 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0996 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0997 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0998 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0999 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x099a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x099b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x099c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x099d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x099e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x099f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09a0 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09a1 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09a2 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09a3 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09a4 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09a5 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09a6 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09a7 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09a8 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09a9 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09aa */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09ab */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09ac */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09ad */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09ae */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09af */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09b0 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09b1 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09b2 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09b3 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09b4 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09b5 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09b6 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09b7 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09b8 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09b9 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09ba */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09bb */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09bc */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09bd */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09be */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09bf */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09c0 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09c1 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09c2 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09c3 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09c4 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09c5 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09c6 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09c7 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09c8 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09c9 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09ca */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09cb */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09cc */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09cd */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09ce */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09cf */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09d0 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09d1 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09d2 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09d3 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09d4 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09d5 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09d6 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09d7 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09d8 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09d9 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09da */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09db */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09dc */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09dd */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09de */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09df (blank) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09e0 (soliddiamond) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09e1 (checkerboard) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09e2 (ht) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09e3 (ff) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09e4 (cr) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09e5 (lf) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09e6 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09e7 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09e8 (nl) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09e9 (vt) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09ea (lowrightcorner) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09eb (uprightcorner) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09ec (upleftcorner) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09ed (lowleftcorner) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09ee (crossinglines) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09ef (horizlinescan1) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09f0 (horizlinescan3) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09f1 (horizlinescan5) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09f2 (horizlinescan7) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09f3 (horizlinescan9) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09f4 (leftt) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09f5 (rightt) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09f6 (bott) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09f7 (topt) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09f8 (vertbar) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09f9 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09fa */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09fb */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09fc */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09fd */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09fe */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x09ff */ - .scancode = 0x00, - .flags = 0x00 - }, - + { /* 0x09?? */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0900 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0901 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0902 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0903 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0904 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0905 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0906 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0907 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0908 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0909 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x090a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x090b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x090c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x090d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x090e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x090f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0910 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0911 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0912 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0913 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0914 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0915 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0916 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0917 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0918 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0919 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x091a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x091b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x091c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x091d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x091e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x091f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0920 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0921 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0922 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0923 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0924 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0925 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0926 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0927 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0928 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0929 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x092a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x092b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x092c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x092d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x092e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x092f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0930 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0931 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0932 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0933 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0934 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0935 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0936 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0937 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0938 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0939 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x093a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x093b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x093c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x093d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x093e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x093f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0940 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0941 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0942 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0943 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0944 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0945 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0946 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0947 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0948 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0949 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x094a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x094b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x094c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x094d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x094e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x094f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0950 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0951 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0952 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0953 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0954 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0955 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0956 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0957 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0958 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0959 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x095a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x095b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x095c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x095d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x095e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x095f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0960 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0961 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0962 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0963 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0964 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0965 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0966 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0967 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0968 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0969 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x096a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x096b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x096c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x096d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x096e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x096f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0970 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0971 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0972 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0973 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0974 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0975 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0976 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0977 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0978 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0979 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x097a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x097b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x097c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x097d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x097e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x097f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0980 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0981 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0982 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0983 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0984 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0985 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0986 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0987 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0988 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0989 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x098a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x098b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x098c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x098d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x098e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x098f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0990 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0991 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0992 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0993 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0994 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0995 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0996 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0997 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0998 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0999 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x099a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x099b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x099c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x099d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x099e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x099f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09a0 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09a1 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09a2 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09a3 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09a4 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09a5 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09a6 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09a7 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09a8 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09a9 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09aa */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09ab */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09ac */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09ad */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09ae */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09af */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09b0 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09b1 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09b2 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09b3 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09b4 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09b5 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09b6 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09b7 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09b8 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09b9 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09ba */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09bb */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09bc */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09bd */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09be */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09bf */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09c0 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09c1 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09c2 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09c3 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09c4 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09c5 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09c6 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09c7 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09c8 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09c9 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09ca */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09cb */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09cc */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09cd */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09ce */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09cf */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09d0 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09d1 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09d2 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09d3 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09d4 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09d5 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09d6 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09d7 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09d8 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09d9 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09da */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09db */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09dc */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09dd */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09de */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09df (blank) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09e0 (soliddiamond) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09e1 (checkerboard) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09e2 (ht) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09e3 (ff) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09e4 (cr) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09e5 (lf) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09e6 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09e7 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09e8 (nl) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09e9 (vt) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09ea (lowrightcorner) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09eb (uprightcorner) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09ec (upleftcorner) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09ed (lowleftcorner) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09ee (crossinglines) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09ef (horizlinescan1) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09f0 (horizlinescan3) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09f1 (horizlinescan5) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09f2 (horizlinescan7) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09f3 (horizlinescan9) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09f4 (leftt) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09f5 (rightt) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09f6 (bott) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09f7 (topt) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09f8 (vertbar) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09f9 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09fa */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09fb */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09fc */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09fd */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09fe */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x09ff */ }, - { /* 0x0a?? */ - { /* 0x0a00 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a01 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a02 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a03 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a04 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a05 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a06 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a07 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a08 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a09 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a0a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a0b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a0c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a0d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a0e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a0f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a10 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a11 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a12 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a13 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a14 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a15 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a16 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a17 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a18 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a19 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a1a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a1b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a1c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a1d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a1e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a1f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a20 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a21 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a22 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a23 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a24 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a25 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a26 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a27 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a28 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a29 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a2a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a2b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a2c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a2d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a2e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a2f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a30 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a31 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a32 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a33 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a34 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a35 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a36 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a37 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a38 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a39 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a3a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a3b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a3c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a3d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a3e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a3f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a40 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a41 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a42 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a43 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a44 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a45 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a46 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a47 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a48 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a49 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a4a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a4b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a4c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a4d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a4e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a4f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a50 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a51 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a52 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a53 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a54 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a55 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a56 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a57 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a58 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a59 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a5a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a5b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a5c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a5d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a5e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a5f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a60 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a61 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a62 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a63 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a64 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a65 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a66 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a67 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a68 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a69 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a6a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a6b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a6c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a6d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a6e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a6f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a70 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a71 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a72 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a73 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a74 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a75 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a76 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a77 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a78 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a79 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a7a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a7b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a7c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a7d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a7e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a7f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a80 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a81 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a82 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a83 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a84 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a85 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a86 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a87 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a88 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a89 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a8a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a8b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a8c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a8d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a8e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a8f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a90 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a91 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a92 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a93 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a94 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a95 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a96 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a97 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a98 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a99 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a9a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a9b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a9c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a9d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a9e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0a9f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0aa0 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0aa1 (emspace) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0aa2 (enspace) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0aa3 (em3space) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0aa4 (em4space) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0aa5 (digitspace) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0aa6 (punctspace) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0aa7 (thinspace) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0aa8 (hairspace) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0aa9 (emdash) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0aaa (endash) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0aab */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0aac (signifblank) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0aad */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0aae (ellipsis) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0aaf (doubbaselinedot) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ab0 (onethird) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ab1 (twothirds) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ab2 (onefifth) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ab3 (twofifths) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ab4 (threefifths) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ab5 (fourfifths) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ab6 (onesixth) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ab7 (fivesixths) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ab8 (careof) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ab9 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0aba */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0abb (figdash) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0abc (leftanglebracket) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0abd (decimalpoint) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0abe (rightanglebracket) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0abf (marker) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ac0 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ac1 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ac2 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ac3 (oneeighth) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ac4 (threeeighths) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ac5 (fiveeighths) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ac6 (seveneighths) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ac7 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ac8 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ac9 (trademark) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0aca (signaturemark) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0acb (trademarkincircle) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0acc (leftopentriangle) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0acd (rightopentriangle) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ace (emopencircle) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0acf (emopenrectangle) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ad0 (leftsinglequotemark) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ad1 (rightsinglequotemark) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ad2 (leftdoublequotemark) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ad3 (rightdoublequotemark) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ad4 (prescription) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ad5 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ad6 (minutes) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ad7 (seconds) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ad8 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ad9 (latincross) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ada (hexagram) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0adb (filledrectbullet) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0adc (filledlefttribullet) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0add (filledrighttribullet) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ade (emfilledcircle) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0adf (emfilledrect) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ae0 (enopencircbullet) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ae1 (enopensquarebullet) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ae2 (openrectbullet) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ae3 (opentribulletup) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ae4 (opentribulletdown) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ae5 (openstar) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ae6 (enfilledcircbullet) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ae7 (enfilledsqbullet) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ae8 (filledtribulletup) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ae9 (filledtribulletdown) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0aea (leftpointer) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0aeb (rightpointer) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0aec (club) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0aed (diamond) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0aee (heart) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0aef */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0af0 (maltesecross) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0af1 (dagger) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0af2 (doubledagger) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0af3 (checkmark) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0af4 (ballotcross) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0af5 (musicalsharp) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0af6 (musicalflat) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0af7 (malesymbol) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0af8 (femalesymbol) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0af9 (telephone) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0afa (telephonerecorder) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0afb (phonographcopyright) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0afc (caret) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0afd (singlelowquotemark) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0afe (doublelowquotemark) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0aff (cursor) */ - .scancode = 0x00, - .flags = 0x00 - }, - + { /* 0x0a?? */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a00 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a01 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a02 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a03 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a04 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a05 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a06 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a07 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a08 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a09 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a0a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a0b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a0c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a0d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a0e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a0f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a10 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a11 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a12 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a13 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a14 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a15 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a16 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a17 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a18 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a19 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a1a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a1b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a1c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a1d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a1e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a1f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a20 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a21 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a22 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a23 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a24 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a25 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a26 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a27 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a28 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a29 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a2a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a2b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a2c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a2d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a2e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a2f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a30 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a31 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a32 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a33 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a34 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a35 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a36 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a37 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a38 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a39 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a3a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a3b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a3c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a3d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a3e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a3f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a40 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a41 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a42 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a43 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a44 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a45 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a46 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a47 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a48 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a49 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a4a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a4b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a4c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a4d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a4e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a4f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a50 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a51 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a52 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a53 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a54 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a55 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a56 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a57 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a58 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a59 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a5a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a5b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a5c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a5d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a5e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a5f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a60 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a61 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a62 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a63 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a64 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a65 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a66 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a67 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a68 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a69 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a6a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a6b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a6c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a6d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a6e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a6f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a70 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a71 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a72 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a73 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a74 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a75 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a76 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a77 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a78 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a79 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a7a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a7b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a7c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a7d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a7e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a7f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a80 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a81 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a82 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a83 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a84 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a85 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a86 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a87 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a88 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a89 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a8a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a8b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a8c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a8d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a8e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a8f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a90 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a91 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a92 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a93 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a94 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a95 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a96 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a97 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a98 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a99 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a9a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a9b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a9c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a9d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a9e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0a9f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0aa0 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0aa1 (emspace) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0aa2 (enspace) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0aa3 (em3space) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0aa4 (em4space) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0aa5 (digitspace) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0aa6 (punctspace) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0aa7 (thinspace) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0aa8 (hairspace) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0aa9 (emdash) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0aaa (endash) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0aab */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0aac (signifblank) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0aad */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0aae (ellipsis) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0aaf (doubbaselinedot) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ab0 (onethird) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ab1 (twothirds) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ab2 (onefifth) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ab3 (twofifths) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ab4 (threefifths) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ab5 (fourfifths) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ab6 (onesixth) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ab7 (fivesixths) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ab8 (careof) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ab9 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0aba */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0abb (figdash) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0abc (leftanglebracket) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0abd (decimalpoint) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0abe (rightanglebracket) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0abf (marker) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ac0 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ac1 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ac2 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ac3 (oneeighth) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ac4 (threeeighths) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ac5 (fiveeighths) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ac6 (seveneighths) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ac7 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ac8 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ac9 (trademark) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0aca (signaturemark) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0acb (trademarkincircle) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0acc (leftopentriangle) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0acd (rightopentriangle) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ace (emopencircle) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0acf (emopenrectangle) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ad0 (leftsinglequotemark) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ad1 (rightsinglequotemark) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ad2 (leftdoublequotemark) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ad3 (rightdoublequotemark) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ad4 (prescription) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ad5 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ad6 (minutes) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ad7 (seconds) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ad8 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ad9 (latincross) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ada (hexagram) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0adb (filledrectbullet) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0adc (filledlefttribullet) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0add (filledrighttribullet) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ade (emfilledcircle) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0adf (emfilledrect) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ae0 (enopencircbullet) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ae1 (enopensquarebullet) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ae2 (openrectbullet) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ae3 (opentribulletup) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ae4 (opentribulletdown) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ae5 (openstar) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ae6 (enfilledcircbullet) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ae7 (enfilledsqbullet) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ae8 (filledtribulletup) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ae9 (filledtribulletdown) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0aea (leftpointer) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0aeb (rightpointer) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0aec (club) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0aed (diamond) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0aee (heart) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0aef */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0af0 (maltesecross) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0af1 (dagger) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0af2 (doubledagger) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0af3 (checkmark) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0af4 (ballotcross) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0af5 (musicalsharp) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0af6 (musicalflat) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0af7 (malesymbol) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0af8 (femalesymbol) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0af9 (telephone) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0afa (telephonerecorder) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0afb (phonographcopyright) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0afc (caret) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0afd (singlelowquotemark) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0afe (doublelowquotemark) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0aff (cursor) */ }, - { /* 0x0b?? */ - { /* 0x0b00 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b01 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b02 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b03 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b04 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b05 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b06 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b07 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b08 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b09 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b0a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b0b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b0c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b0d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b0e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b0f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b10 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b11 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b12 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b13 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b14 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b15 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b16 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b17 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b18 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b19 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b1a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b1b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b1c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b1d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b1e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b1f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b20 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b21 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b22 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b23 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b24 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b25 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b26 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b27 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b28 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b29 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b2a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b2b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b2c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b2d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b2e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b2f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b30 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b31 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b32 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b33 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b34 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b35 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b36 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b37 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b38 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b39 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b3a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b3b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b3c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b3d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b3e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b3f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b40 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b41 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b42 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b43 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b44 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b45 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b46 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b47 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b48 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b49 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b4a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b4b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b4c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b4d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b4e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b4f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b50 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b51 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b52 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b53 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b54 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b55 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b56 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b57 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b58 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b59 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b5a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b5b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b5c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b5d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b5e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b5f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b60 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b61 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b62 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b63 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b64 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b65 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b66 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b67 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b68 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b69 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b6a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b6b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b6c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b6d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b6e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b6f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b70 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b71 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b72 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b73 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b74 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b75 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b76 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b77 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b78 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b79 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b7a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b7b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b7c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b7d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b7e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b7f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b80 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b81 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b82 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b83 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b84 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b85 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b86 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b87 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b88 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b89 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b8a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b8b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b8c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b8d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b8e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b8f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b90 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b91 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b92 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b93 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b94 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b95 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b96 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b97 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b98 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b99 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b9a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b9b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b9c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b9d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b9e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0b9f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ba0 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ba1 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ba2 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ba3 (leftcaret) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ba4 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ba5 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ba6 (rightcaret) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ba7 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ba8 (downcaret) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ba9 (upcaret) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0baa */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0bab */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0bac */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0bad */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0bae */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0baf */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0bb0 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0bb1 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0bb2 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0bb3 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0bb4 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0bb5 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0bb6 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0bb7 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0bb8 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0bb9 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0bba */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0bbb */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0bbc */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0bbd */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0bbe */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0bbf */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0bc0 (overbar) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0bc1 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0bc2 (downtack) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0bc3 (upshoe) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0bc4 (downstile) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0bc5 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0bc6 (underbar) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0bc7 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0bc8 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0bc9 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0bca (jot) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0bcb */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0bcc (quad) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0bcd */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0bce (uptack) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0bcf (circle) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0bd0 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0bd1 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0bd2 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0bd3 (upstile) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0bd4 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0bd5 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0bd6 (downshoe) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0bd7 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0bd8 (rightshoe) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0bd9 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0bda (leftshoe) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0bdb */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0bdc (lefttack) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0bdd */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0bde */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0bdf */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0be0 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0be1 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0be2 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0be3 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0be4 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0be5 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0be6 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0be7 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0be8 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0be9 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0bea */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0beb */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0bec */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0bed */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0bee */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0bef */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0bf0 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0bf1 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0bf2 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0bf3 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0bf4 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0bf5 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0bf6 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0bf7 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0bf8 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0bf9 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0bfa */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0bfb */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0bfc (righttack) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0bfd */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0bfe */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0bff */ - .scancode = 0x00, - .flags = 0x00 - }, - + { /* 0x0b?? */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b00 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b01 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b02 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b03 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b04 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b05 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b06 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b07 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b08 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b09 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b0a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b0b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b0c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b0d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b0e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b0f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b10 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b11 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b12 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b13 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b14 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b15 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b16 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b17 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b18 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b19 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b1a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b1b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b1c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b1d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b1e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b1f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b20 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b21 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b22 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b23 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b24 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b25 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b26 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b27 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b28 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b29 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b2a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b2b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b2c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b2d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b2e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b2f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b30 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b31 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b32 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b33 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b34 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b35 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b36 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b37 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b38 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b39 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b3a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b3b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b3c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b3d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b3e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b3f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b40 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b41 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b42 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b43 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b44 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b45 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b46 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b47 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b48 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b49 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b4a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b4b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b4c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b4d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b4e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b4f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b50 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b51 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b52 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b53 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b54 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b55 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b56 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b57 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b58 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b59 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b5a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b5b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b5c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b5d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b5e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b5f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b60 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b61 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b62 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b63 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b64 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b65 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b66 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b67 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b68 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b69 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b6a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b6b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b6c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b6d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b6e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b6f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b70 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b71 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b72 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b73 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b74 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b75 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b76 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b77 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b78 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b79 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b7a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b7b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b7c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b7d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b7e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b7f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b80 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b81 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b82 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b83 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b84 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b85 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b86 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b87 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b88 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b89 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b8a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b8b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b8c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b8d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b8e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b8f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b90 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b91 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b92 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b93 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b94 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b95 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b96 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b97 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b98 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b99 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b9a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b9b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b9c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b9d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b9e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0b9f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ba0 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ba1 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ba2 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ba3 (leftcaret) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ba4 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ba5 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ba6 (rightcaret) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ba7 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ba8 (downcaret) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ba9 (upcaret) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0baa */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0bab */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0bac */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0bad */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0bae */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0baf */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0bb0 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0bb1 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0bb2 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0bb3 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0bb4 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0bb5 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0bb6 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0bb7 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0bb8 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0bb9 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0bba */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0bbb */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0bbc */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0bbd */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0bbe */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0bbf */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0bc0 (overbar) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0bc1 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0bc2 (downtack) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0bc3 (upshoe) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0bc4 (downstile) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0bc5 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0bc6 (underbar) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0bc7 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0bc8 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0bc9 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0bca (jot) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0bcb */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0bcc (quad) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0bcd */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0bce (uptack) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0bcf (circle) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0bd0 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0bd1 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0bd2 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0bd3 (upstile) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0bd4 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0bd5 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0bd6 (downshoe) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0bd7 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0bd8 (rightshoe) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0bd9 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0bda (leftshoe) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0bdb */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0bdc (lefttack) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0bdd */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0bde */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0bdf */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0be0 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0be1 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0be2 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0be3 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0be4 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0be5 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0be6 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0be7 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0be8 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0be9 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0bea */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0beb */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0bec */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0bed */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0bee */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0bef */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0bf0 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0bf1 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0bf2 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0bf3 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0bf4 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0bf5 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0bf6 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0bf7 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0bf8 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0bf9 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0bfa */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0bfb */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0bfc (righttack) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0bfd */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0bfe */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0bff */ }, - { /* 0x0c?? */ - { /* 0x0c00 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c01 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c02 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c03 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c04 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c05 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c06 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c07 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c08 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c09 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c0a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c0b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c0c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c0d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c0e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c0f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c10 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c11 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c12 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c13 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c14 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c15 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c16 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c17 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c18 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c19 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c1a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c1b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c1c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c1d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c1e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c1f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c20 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c21 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c22 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c23 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c24 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c25 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c26 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c27 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c28 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c29 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c2a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c2b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c2c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c2d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c2e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c2f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c30 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c31 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c32 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c33 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c34 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c35 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c36 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c37 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c38 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c39 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c3a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c3b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c3c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c3d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c3e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c3f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c40 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c41 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c42 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c43 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c44 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c45 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c46 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c47 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c48 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c49 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c4a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c4b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c4c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c4d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c4e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c4f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c50 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c51 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c52 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c53 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c54 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c55 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c56 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c57 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c58 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c59 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c5a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c5b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c5c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c5d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c5e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c5f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c60 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c61 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c62 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c63 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c64 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c65 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c66 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c67 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c68 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c69 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c6a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c6b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c6c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c6d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c6e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c6f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c70 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c71 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c72 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c73 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c74 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c75 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c76 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c77 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c78 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c79 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c7a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c7b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c7c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c7d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c7e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c7f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c80 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c81 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c82 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c83 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c84 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c85 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c86 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c87 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c88 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c89 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c8a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c8b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c8c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c8d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c8e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c8f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c90 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c91 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c92 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c93 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c94 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c95 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c96 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c97 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c98 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c99 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c9a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c9b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c9c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c9d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c9e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0c9f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ca0 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ca1 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ca2 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ca3 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ca4 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ca5 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ca6 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ca7 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ca8 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ca9 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0caa */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0cab */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0cac */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0cad */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0cae */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0caf */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0cb0 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0cb1 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0cb2 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0cb3 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0cb4 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0cb5 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0cb6 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0cb7 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0cb8 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0cb9 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0cba */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0cbb */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0cbc */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0cbd */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0cbe */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0cbf */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0cc0 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0cc1 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0cc2 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0cc3 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0cc4 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0cc5 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0cc6 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0cc7 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0cc8 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0cc9 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0cca */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ccb */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ccc */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ccd */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0cce */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ccf */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0cd0 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0cd1 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0cd2 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0cd3 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0cd4 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0cd5 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0cd6 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0cd7 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0cd8 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0cd9 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0cda */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0cdb */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0cdc */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0cdd */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0cde */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0cdf (hebrew_doublelowline) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ce0 (hebrew_aleph) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ce1 (hebrew_beth) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ce2 (hebrew_gimmel) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ce3 (hebrew_daleth) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ce4 (hebrew_he) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ce5 (hebrew_waw) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ce6 (hebrew_zayin) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ce7 (hebrew_het) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ce8 (hebrew_teth) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ce9 (hebrew_yod) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0cea (hebrew_finalkaph) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ceb (hebrew_kaph) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0cec (hebrew_lamed) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ced (hebrew_finalmem) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0cee (hebrew_mem) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0cef (hebrew_finalnun) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0cf0 (hebrew_nun) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0cf1 (hebrew_samekh) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0cf2 (hebrew_ayin) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0cf3 (hebrew_finalpe) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0cf4 (hebrew_pe) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0cf5 (hebrew_finalzadi) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0cf6 (hebrew_zadi) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0cf7 (hebrew_kuf) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0cf8 (hebrew_resh) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0cf9 (hebrew_shin) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0cfa (hebrew_taf) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0cfb */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0cfc */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0cfd */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0cfe */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0cff */ - .scancode = 0x00, - .flags = 0x00 - }, - + { /* 0x0c?? */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c00 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c01 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c02 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c03 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c04 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c05 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c06 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c07 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c08 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c09 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c0a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c0b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c0c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c0d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c0e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c0f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c10 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c11 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c12 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c13 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c14 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c15 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c16 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c17 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c18 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c19 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c1a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c1b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c1c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c1d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c1e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c1f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c20 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c21 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c22 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c23 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c24 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c25 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c26 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c27 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c28 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c29 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c2a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c2b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c2c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c2d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c2e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c2f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c30 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c31 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c32 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c33 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c34 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c35 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c36 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c37 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c38 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c39 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c3a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c3b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c3c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c3d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c3e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c3f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c40 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c41 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c42 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c43 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c44 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c45 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c46 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c47 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c48 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c49 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c4a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c4b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c4c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c4d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c4e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c4f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c50 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c51 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c52 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c53 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c54 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c55 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c56 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c57 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c58 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c59 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c5a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c5b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c5c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c5d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c5e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c5f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c60 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c61 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c62 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c63 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c64 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c65 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c66 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c67 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c68 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c69 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c6a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c6b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c6c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c6d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c6e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c6f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c70 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c71 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c72 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c73 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c74 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c75 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c76 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c77 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c78 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c79 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c7a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c7b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c7c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c7d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c7e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c7f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c80 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c81 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c82 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c83 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c84 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c85 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c86 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c87 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c88 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c89 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c8a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c8b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c8c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c8d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c8e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c8f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c90 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c91 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c92 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c93 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c94 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c95 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c96 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c97 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c98 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c99 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c9a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c9b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c9c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c9d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c9e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0c9f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ca0 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ca1 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ca2 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ca3 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ca4 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ca5 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ca6 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ca7 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ca8 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ca9 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0caa */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0cab */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0cac */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0cad */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0cae */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0caf */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0cb0 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0cb1 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0cb2 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0cb3 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0cb4 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0cb5 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0cb6 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0cb7 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0cb8 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0cb9 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0cba */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0cbb */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0cbc */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0cbd */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0cbe */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0cbf */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0cc0 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0cc1 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0cc2 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0cc3 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0cc4 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0cc5 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0cc6 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0cc7 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0cc8 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0cc9 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0cca */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ccb */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ccc */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ccd */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0cce */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ccf */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0cd0 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0cd1 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0cd2 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0cd3 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0cd4 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0cd5 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0cd6 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0cd7 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0cd8 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0cd9 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0cda */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0cdb */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0cdc */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0cdd */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0cde */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0cdf (hebrew_doublelowline) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ce0 (hebrew_aleph) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ce1 (hebrew_beth) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ce2 (hebrew_gimmel) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ce3 (hebrew_daleth) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ce4 (hebrew_he) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ce5 (hebrew_waw) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ce6 (hebrew_zayin) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ce7 (hebrew_het) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ce8 (hebrew_teth) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ce9 (hebrew_yod) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0cea (hebrew_finalkaph) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ceb (hebrew_kaph) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0cec (hebrew_lamed) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ced (hebrew_finalmem) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0cee (hebrew_mem) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0cef (hebrew_finalnun) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0cf0 (hebrew_nun) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0cf1 (hebrew_samekh) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0cf2 (hebrew_ayin) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0cf3 (hebrew_finalpe) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0cf4 (hebrew_pe) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0cf5 (hebrew_finalzadi) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0cf6 (hebrew_zadi) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0cf7 (hebrew_kuf) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0cf8 (hebrew_resh) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0cf9 (hebrew_shin) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0cfa (hebrew_taf) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0cfb */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0cfc */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0cfd */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0cfe */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0cff */ }, - { /* 0x0d?? */ - { /* 0x0d00 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d01 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d02 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d03 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d04 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d05 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d06 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d07 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d08 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d09 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d0a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d0b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d0c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d0d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d0e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d0f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d10 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d11 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d12 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d13 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d14 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d15 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d16 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d17 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d18 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d19 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d1a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d1b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d1c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d1d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d1e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d1f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d20 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d21 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d22 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d23 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d24 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d25 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d26 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d27 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d28 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d29 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d2a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d2b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d2c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d2d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d2e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d2f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d30 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d31 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d32 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d33 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d34 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d35 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d36 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d37 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d38 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d39 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d3a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d3b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d3c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d3d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d3e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d3f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d40 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d41 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d42 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d43 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d44 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d45 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d46 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d47 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d48 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d49 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d4a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d4b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d4c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d4d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d4e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d4f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d50 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d51 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d52 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d53 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d54 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d55 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d56 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d57 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d58 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d59 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d5a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d5b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d5c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d5d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d5e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d5f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d60 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d61 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d62 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d63 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d64 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d65 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d66 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d67 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d68 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d69 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d6a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d6b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d6c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d6d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d6e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d6f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d70 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d71 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d72 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d73 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d74 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d75 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d76 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d77 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d78 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d79 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d7a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d7b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d7c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d7d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d7e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d7f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d80 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d81 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d82 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d83 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d84 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d85 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d86 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d87 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d88 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d89 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d8a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d8b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d8c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d8d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d8e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d8f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d90 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d91 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d92 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d93 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d94 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d95 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d96 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d97 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d98 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d99 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d9a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d9b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d9c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d9d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d9e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0d9f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0da0 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0da1 (Thai_kokai) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0da2 (Thai_khokhai) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0da3 (Thai_khokhuat) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0da4 (Thai_khokhwai) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0da5 (Thai_khokhon) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0da6 (Thai_khorakhang) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0da7 (Thai_ngongu) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0da8 (Thai_chochan) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0da9 (Thai_choching) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0daa (Thai_chochang) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0dab (Thai_soso) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0dac (Thai_chochoe) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0dad (Thai_yoying) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0dae (Thai_dochada) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0daf (Thai_topatak) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0db0 (Thai_thothan) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0db1 (Thai_thonangmontho) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0db2 (Thai_thophuthao) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0db3 (Thai_nonen) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0db4 (Thai_dodek) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0db5 (Thai_totao) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0db6 (Thai_thothung) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0db7 (Thai_thothahan) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0db8 (Thai_thothong) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0db9 (Thai_nonu) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0dba (Thai_bobaimai) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0dbb (Thai_popla) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0dbc (Thai_phophung) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0dbd (Thai_fofa) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0dbe (Thai_phophan) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0dbf (Thai_fofan) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0dc0 (Thai_phosamphao) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0dc1 (Thai_moma) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0dc2 (Thai_yoyak) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0dc3 (Thai_rorua) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0dc4 (Thai_ru) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0dc5 (Thai_loling) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0dc6 (Thai_lu) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0dc7 (Thai_wowaen) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0dc8 (Thai_sosala) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0dc9 (Thai_sorusi) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0dca (Thai_sosua) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0dcb (Thai_hohip) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0dcc (Thai_lochula) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0dcd (Thai_oang) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0dce (Thai_honokhuk) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0dcf (Thai_paiyannoi) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0dd0 (Thai_saraa) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0dd1 (Thai_maihanakat) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0dd2 (Thai_saraaa) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0dd3 (Thai_saraam) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0dd4 (Thai_sarai) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0dd5 (Thai_saraii) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0dd6 (Thai_saraue) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0dd7 (Thai_sarauee) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0dd8 (Thai_sarau) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0dd9 (Thai_sarauu) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0dda (Thai_phinthu) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ddb */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ddc */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ddd */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0dde (Thai_maihanakat_maitho) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ddf (Thai_baht) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0de0 (Thai_sarae) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0de1 (Thai_saraae) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0de2 (Thai_sarao) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0de3 (Thai_saraaimaimuan) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0de4 (Thai_saraaimaimalai) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0de5 (Thai_lakkhangyao) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0de6 (Thai_maiyamok) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0de7 (Thai_maitaikhu) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0de8 (Thai_maiek) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0de9 (Thai_maitho) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0dea (Thai_maitri) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0deb (Thai_maichattawa) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0dec (Thai_thanthakhat) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ded (Thai_nikhahit) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0dee */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0def */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0df0 (Thai_leksun) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0df1 (Thai_leknung) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0df2 (Thai_leksong) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0df3 (Thai_leksam) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0df4 (Thai_leksi) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0df5 (Thai_lekha) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0df6 (Thai_lekhok) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0df7 (Thai_lekchet) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0df8 (Thai_lekpaet) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0df9 (Thai_lekkao) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0dfa */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0dfb */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0dfc */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0dfd */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0dfe */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0dff */ - .scancode = 0x00, - .flags = 0x00 - }, - + { /* 0x0d?? */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d00 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d01 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d02 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d03 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d04 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d05 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d06 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d07 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d08 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d09 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d0a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d0b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d0c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d0d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d0e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d0f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d10 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d11 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d12 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d13 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d14 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d15 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d16 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d17 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d18 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d19 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d1a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d1b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d1c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d1d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d1e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d1f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d20 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d21 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d22 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d23 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d24 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d25 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d26 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d27 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d28 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d29 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d2a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d2b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d2c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d2d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d2e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d2f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d30 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d31 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d32 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d33 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d34 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d35 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d36 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d37 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d38 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d39 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d3a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d3b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d3c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d3d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d3e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d3f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d40 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d41 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d42 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d43 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d44 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d45 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d46 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d47 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d48 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d49 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d4a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d4b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d4c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d4d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d4e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d4f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d50 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d51 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d52 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d53 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d54 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d55 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d56 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d57 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d58 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d59 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d5a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d5b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d5c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d5d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d5e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d5f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d60 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d61 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d62 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d63 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d64 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d65 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d66 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d67 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d68 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d69 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d6a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d6b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d6c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d6d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d6e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d6f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d70 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d71 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d72 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d73 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d74 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d75 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d76 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d77 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d78 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d79 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d7a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d7b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d7c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d7d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d7e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d7f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d80 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d81 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d82 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d83 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d84 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d85 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d86 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d87 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d88 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d89 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d8a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d8b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d8c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d8d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d8e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d8f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d90 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d91 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d92 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d93 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d94 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d95 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d96 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d97 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d98 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d99 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d9a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d9b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d9c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d9d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d9e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0d9f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0da0 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0da1 (Thai_kokai) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0da2 (Thai_khokhai) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0da3 (Thai_khokhuat) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0da4 (Thai_khokhwai) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0da5 (Thai_khokhon) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0da6 (Thai_khorakhang) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0da7 (Thai_ngongu) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0da8 (Thai_chochan) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0da9 (Thai_choching) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0daa (Thai_chochang) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0dab (Thai_soso) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0dac (Thai_chochoe) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0dad (Thai_yoying) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0dae (Thai_dochada) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0daf (Thai_topatak) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0db0 (Thai_thothan) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0db1 (Thai_thonangmontho) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0db2 (Thai_thophuthao) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0db3 (Thai_nonen) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0db4 (Thai_dodek) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0db5 (Thai_totao) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0db6 (Thai_thothung) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0db7 (Thai_thothahan) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0db8 (Thai_thothong) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0db9 (Thai_nonu) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0dba (Thai_bobaimai) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0dbb (Thai_popla) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0dbc (Thai_phophung) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0dbd (Thai_fofa) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0dbe (Thai_phophan) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0dbf (Thai_fofan) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0dc0 (Thai_phosamphao) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0dc1 (Thai_moma) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0dc2 (Thai_yoyak) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0dc3 (Thai_rorua) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0dc4 (Thai_ru) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0dc5 (Thai_loling) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0dc6 (Thai_lu) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0dc7 (Thai_wowaen) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0dc8 (Thai_sosala) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0dc9 (Thai_sorusi) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0dca (Thai_sosua) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0dcb (Thai_hohip) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0dcc (Thai_lochula) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0dcd (Thai_oang) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0dce (Thai_honokhuk) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0dcf (Thai_paiyannoi) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0dd0 (Thai_saraa) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0dd1 (Thai_maihanakat) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0dd2 (Thai_saraaa) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0dd3 (Thai_saraam) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0dd4 (Thai_sarai) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0dd5 (Thai_saraii) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0dd6 (Thai_saraue) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0dd7 (Thai_sarauee) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0dd8 (Thai_sarau) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0dd9 (Thai_sarauu) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0dda (Thai_phinthu) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ddb */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ddc */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ddd */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0dde (Thai_maihanakat_maitho) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ddf (Thai_baht) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0de0 (Thai_sarae) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0de1 (Thai_saraae) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0de2 (Thai_sarao) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0de3 (Thai_saraaimaimuan) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0de4 (Thai_saraaimaimalai) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0de5 (Thai_lakkhangyao) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0de6 (Thai_maiyamok) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0de7 (Thai_maitaikhu) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0de8 (Thai_maiek) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0de9 (Thai_maitho) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0dea (Thai_maitri) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0deb (Thai_maichattawa) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0dec (Thai_thanthakhat) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ded (Thai_nikhahit) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0dee */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0def */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0df0 (Thai_leksun) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0df1 (Thai_leknung) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0df2 (Thai_leksong) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0df3 (Thai_leksam) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0df4 (Thai_leksi) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0df5 (Thai_lekha) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0df6 (Thai_lekhok) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0df7 (Thai_lekchet) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0df8 (Thai_lekpaet) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0df9 (Thai_lekkao) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0dfa */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0dfb */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0dfc */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0dfd */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0dfe */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0dff */ }, - { /* 0x0e?? */ - { /* 0x0e00 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e01 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e02 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e03 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e04 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e05 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e06 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e07 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e08 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e09 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e0a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e0b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e0c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e0d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e0e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e0f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e10 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e11 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e12 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e13 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e14 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e15 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e16 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e17 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e18 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e19 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e1a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e1b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e1c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e1d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e1e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e1f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e20 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e21 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e22 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e23 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e24 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e25 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e26 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e27 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e28 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e29 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e2a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e2b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e2c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e2d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e2e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e2f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e30 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e31 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e32 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e33 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e34 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e35 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e36 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e37 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e38 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e39 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e3a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e3b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e3c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e3d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e3e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e3f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e40 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e41 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e42 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e43 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e44 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e45 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e46 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e47 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e48 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e49 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e4a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e4b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e4c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e4d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e4e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e4f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e50 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e51 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e52 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e53 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e54 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e55 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e56 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e57 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e58 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e59 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e5a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e5b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e5c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e5d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e5e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e5f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e60 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e61 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e62 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e63 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e64 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e65 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e66 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e67 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e68 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e69 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e6a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e6b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e6c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e6d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e6e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e6f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e70 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e71 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e72 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e73 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e74 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e75 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e76 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e77 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e78 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e79 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e7a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e7b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e7c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e7d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e7e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e7f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e80 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e81 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e82 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e83 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e84 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e85 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e86 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e87 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e88 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e89 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e8a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e8b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e8c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e8d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e8e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e8f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e90 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e91 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e92 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e93 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e94 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e95 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e96 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e97 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e98 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e99 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e9a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e9b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e9c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e9d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e9e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0e9f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ea0 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ea1 (Hangul_Kiyeog) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ea2 (Hangul_SsangKiyeog) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ea3 (Hangul_KiyeogSios) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ea4 (Hangul_Nieun) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ea5 (Hangul_NieunJieuj) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ea6 (Hangul_NieunHieuh) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ea7 (Hangul_Dikeud) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ea8 (Hangul_SsangDikeud) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ea9 (Hangul_Rieul) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0eaa (Hangul_RieulKiyeog) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0eab (Hangul_RieulMieum) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0eac (Hangul_RieulPieub) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ead (Hangul_RieulSios) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0eae (Hangul_RieulTieut) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0eaf (Hangul_RieulPhieuf) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0eb0 (Hangul_RieulHieuh) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0eb1 (Hangul_Mieum) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0eb2 (Hangul_Pieub) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0eb3 (Hangul_SsangPieub) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0eb4 (Hangul_PieubSios) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0eb5 (Hangul_Sios) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0eb6 (Hangul_SsangSios) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0eb7 (Hangul_Ieung) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0eb8 (Hangul_Jieuj) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0eb9 (Hangul_SsangJieuj) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0eba (Hangul_Cieuc) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ebb (Hangul_Khieuq) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ebc (Hangul_Tieut) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ebd (Hangul_Phieuf) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ebe (Hangul_Hieuh) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ebf (Hangul_A) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ec0 (Hangul_AE) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ec1 (Hangul_YA) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ec2 (Hangul_YAE) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ec3 (Hangul_EO) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ec4 (Hangul_E) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ec5 (Hangul_YEO) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ec6 (Hangul_YE) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ec7 (Hangul_O) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ec8 (Hangul_WA) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ec9 (Hangul_WAE) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0eca (Hangul_OE) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ecb (Hangul_YO) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ecc (Hangul_U) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ecd (Hangul_WEO) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ece (Hangul_WE) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ecf (Hangul_WI) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ed0 (Hangul_YU) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ed1 (Hangul_EU) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ed2 (Hangul_YI) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ed3 (Hangul_I) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ed4 (Hangul_J_Kiyeog) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ed5 (Hangul_J_SsangKiyeog) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ed6 (Hangul_J_KiyeogSios) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ed7 (Hangul_J_Nieun) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ed8 (Hangul_J_NieunJieuj) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ed9 (Hangul_J_NieunHieuh) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0eda (Hangul_J_Dikeud) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0edb (Hangul_J_Rieul) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0edc (Hangul_J_RieulKiyeog) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0edd (Hangul_J_RieulMieum) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ede (Hangul_J_RieulPieub) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0edf (Hangul_J_RieulSios) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ee0 (Hangul_J_RieulTieut) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ee1 (Hangul_J_RieulPhieuf) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ee2 (Hangul_J_RieulHieuh) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ee3 (Hangul_J_Mieum) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ee4 (Hangul_J_Pieub) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ee5 (Hangul_J_PieubSios) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ee6 (Hangul_J_Sios) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ee7 (Hangul_J_SsangSios) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ee8 (Hangul_J_Ieung) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ee9 (Hangul_J_Jieuj) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0eea (Hangul_J_Cieuc) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0eeb (Hangul_J_Khieuq) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0eec (Hangul_J_Tieut) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0eed (Hangul_J_Phieuf) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0eee (Hangul_J_Hieuh) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0eef (Hangul_RieulYeorinHieuh) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ef0 (Hangul_SunkyeongeumMieum) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ef1 (Hangul_SunkyeongeumPieub) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ef2 (Hangul_PanSios) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ef3 (Hangul_KkogjiDalrinIeung) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ef4 (Hangul_SunkyeongeumPhieuf) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ef5 (Hangul_YeorinHieuh) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ef6 (Hangul_AraeA) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ef7 (Hangul_AraeAE) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ef8 (Hangul_J_PanSios) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0ef9 (Hangul_J_KkogjiDalrinIeung) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0efa (Hangul_J_YeorinHieuh) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0efb */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0efc */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0efd */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0efe */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x0eff (Korean_Won) */ - .scancode = 0x00, - .flags = 0x00 - }, - + { /* 0x0e?? */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e00 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e01 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e02 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e03 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e04 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e05 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e06 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e07 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e08 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e09 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e0a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e0b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e0c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e0d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e0e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e0f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e10 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e11 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e12 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e13 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e14 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e15 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e16 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e17 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e18 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e19 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e1a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e1b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e1c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e1d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e1e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e1f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e20 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e21 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e22 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e23 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e24 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e25 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e26 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e27 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e28 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e29 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e2a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e2b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e2c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e2d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e2e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e2f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e30 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e31 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e32 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e33 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e34 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e35 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e36 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e37 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e38 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e39 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e3a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e3b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e3c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e3d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e3e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e3f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e40 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e41 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e42 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e43 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e44 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e45 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e46 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e47 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e48 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e49 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e4a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e4b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e4c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e4d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e4e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e4f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e50 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e51 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e52 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e53 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e54 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e55 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e56 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e57 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e58 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e59 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e5a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e5b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e5c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e5d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e5e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e5f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e60 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e61 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e62 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e63 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e64 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e65 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e66 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e67 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e68 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e69 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e6a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e6b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e6c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e6d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e6e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e6f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e70 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e71 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e72 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e73 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e74 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e75 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e76 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e77 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e78 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e79 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e7a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e7b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e7c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e7d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e7e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e7f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e80 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e81 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e82 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e83 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e84 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e85 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e86 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e87 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e88 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e89 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e8a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e8b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e8c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e8d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e8e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e8f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e90 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e91 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e92 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e93 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e94 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e95 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e96 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e97 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e98 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e99 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e9a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e9b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e9c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e9d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e9e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0e9f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ea0 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ea1 (Hangul_Kiyeog) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ea2 (Hangul_SsangKiyeog) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ea3 (Hangul_KiyeogSios) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ea4 (Hangul_Nieun) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ea5 (Hangul_NieunJieuj) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ea6 (Hangul_NieunHieuh) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ea7 (Hangul_Dikeud) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ea8 (Hangul_SsangDikeud) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ea9 (Hangul_Rieul) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0eaa (Hangul_RieulKiyeog) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0eab (Hangul_RieulMieum) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0eac (Hangul_RieulPieub) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ead (Hangul_RieulSios) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0eae (Hangul_RieulTieut) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0eaf (Hangul_RieulPhieuf) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0eb0 (Hangul_RieulHieuh) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0eb1 (Hangul_Mieum) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0eb2 (Hangul_Pieub) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0eb3 (Hangul_SsangPieub) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0eb4 (Hangul_PieubSios) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0eb5 (Hangul_Sios) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0eb6 (Hangul_SsangSios) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0eb7 (Hangul_Ieung) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0eb8 (Hangul_Jieuj) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0eb9 (Hangul_SsangJieuj) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0eba (Hangul_Cieuc) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ebb (Hangul_Khieuq) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ebc (Hangul_Tieut) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ebd (Hangul_Phieuf) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ebe (Hangul_Hieuh) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ebf (Hangul_A) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ec0 (Hangul_AE) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ec1 (Hangul_YA) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ec2 (Hangul_YAE) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ec3 (Hangul_EO) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ec4 (Hangul_E) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ec5 (Hangul_YEO) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ec6 (Hangul_YE) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ec7 (Hangul_O) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ec8 (Hangul_WA) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ec9 (Hangul_WAE) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0eca (Hangul_OE) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ecb (Hangul_YO) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ecc (Hangul_U) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ecd (Hangul_WEO) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ece (Hangul_WE) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ecf (Hangul_WI) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ed0 (Hangul_YU) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ed1 (Hangul_EU) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ed2 (Hangul_YI) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ed3 (Hangul_I) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ed4 (Hangul_J_Kiyeog) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ed5 (Hangul_J_SsangKiyeog) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ed6 (Hangul_J_KiyeogSios) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ed7 (Hangul_J_Nieun) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ed8 (Hangul_J_NieunJieuj) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ed9 (Hangul_J_NieunHieuh) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0eda (Hangul_J_Dikeud) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0edb (Hangul_J_Rieul) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0edc (Hangul_J_RieulKiyeog) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0edd (Hangul_J_RieulMieum) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ede (Hangul_J_RieulPieub) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0edf (Hangul_J_RieulSios) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ee0 (Hangul_J_RieulTieut) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ee1 (Hangul_J_RieulPhieuf) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ee2 (Hangul_J_RieulHieuh) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ee3 (Hangul_J_Mieum) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ee4 (Hangul_J_Pieub) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ee5 (Hangul_J_PieubSios) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ee6 (Hangul_J_Sios) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ee7 (Hangul_J_SsangSios) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ee8 (Hangul_J_Ieung) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ee9 (Hangul_J_Jieuj) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0eea (Hangul_J_Cieuc) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0eeb (Hangul_J_Khieuq) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0eec (Hangul_J_Tieut) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0eed (Hangul_J_Phieuf) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0eee (Hangul_J_Hieuh) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0eef (Hangul_RieulYeorinHieuh) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ef0 (Hangul_SunkyeongeumMieum) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ef1 (Hangul_SunkyeongeumPieub) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ef2 (Hangul_PanSios) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ef3 (Hangul_KkogjiDalrinIeung) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ef4 (Hangul_SunkyeongeumPhieuf) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ef5 (Hangul_YeorinHieuh) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ef6 (Hangul_AraeA) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ef7 (Hangul_AraeAE) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ef8 (Hangul_J_PanSios) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0ef9 (Hangul_J_KkogjiDalrinIeung) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0efa (Hangul_J_YeorinHieuh) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0efb */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0efc */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0efd */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0efe */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x0eff (Korean_Won) */ }, {{0}}, /* 0x0f?? */ {{0}}, /* 0x10?? */ {{0}}, /* 0x11?? */ {{0}}, /* 0x12?? */ - { /* 0x13?? */ - { /* 0x1300 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1301 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1302 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1303 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1304 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1305 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1306 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1307 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1308 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1309 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x130a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x130b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x130c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x130d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x130e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x130f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1310 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1311 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1312 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1313 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1314 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1315 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1316 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1317 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1318 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1319 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x131a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x131b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x131c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x131d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x131e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x131f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1320 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1321 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1322 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1323 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1324 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1325 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1326 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1327 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1328 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1329 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x132a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x132b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x132c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x132d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x132e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x132f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1330 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1331 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1332 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1333 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1334 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1335 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1336 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1337 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1338 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1339 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x133a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x133b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x133c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x133d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x133e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x133f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1340 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1341 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1342 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1343 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1344 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1345 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1346 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1347 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1348 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1349 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x134a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x134b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x134c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x134d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x134e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x134f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1350 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1351 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1352 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1353 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1354 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1355 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1356 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1357 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1358 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1359 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x135a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x135b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x135c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x135d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x135e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x135f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1360 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1361 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1362 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1363 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1364 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1365 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1366 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1367 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1368 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1369 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x136a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x136b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x136c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x136d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x136e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x136f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1370 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1371 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1372 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1373 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1374 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1375 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1376 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1377 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1378 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1379 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x137a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x137b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x137c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x137d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x137e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x137f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1380 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1381 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1382 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1383 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1384 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1385 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1386 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1387 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1388 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1389 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x138a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x138b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x138c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x138d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x138e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x138f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1390 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1391 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1392 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1393 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1394 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1395 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1396 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1397 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1398 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x1399 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x139a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x139b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x139c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x139d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x139e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x139f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13a0 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13a1 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13a2 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13a3 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13a4 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13a5 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13a6 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13a7 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13a8 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13a9 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13aa */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13ab */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13ac */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13ad */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13ae */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13af */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13b0 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13b1 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13b2 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13b3 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13b4 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13b5 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13b6 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13b7 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13b8 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13b9 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13ba */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13bb */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13bc (OE) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13bd (oe) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13be (Ydiaeresis) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13bf */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13c0 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13c1 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13c2 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13c3 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13c4 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13c5 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13c6 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13c7 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13c8 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13c9 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13ca */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13cb */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13cc */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13cd */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13ce */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13cf */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13d0 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13d1 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13d2 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13d3 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13d4 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13d5 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13d6 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13d7 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13d8 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13d9 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13da */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13db */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13dc */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13dd */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13de */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13df */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13e0 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13e1 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13e2 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13e3 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13e4 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13e5 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13e6 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13e7 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13e8 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13e9 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13ea */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13eb */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13ec */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13ed */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13ee */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13ef */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13f0 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13f1 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13f2 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13f3 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13f4 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13f5 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13f6 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13f7 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13f8 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13f9 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13fa */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13fb */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13fc */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13fd */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13fe */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x13ff */ - .scancode = 0x00, - .flags = 0x00 - }, - + { /* 0x13?? */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1300 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1301 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1302 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1303 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1304 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1305 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1306 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1307 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1308 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1309 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x130a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x130b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x130c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x130d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x130e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x130f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1310 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1311 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1312 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1313 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1314 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1315 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1316 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1317 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1318 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1319 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x131a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x131b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x131c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x131d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x131e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x131f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1320 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1321 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1322 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1323 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1324 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1325 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1326 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1327 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1328 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1329 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x132a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x132b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x132c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x132d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x132e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x132f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1330 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1331 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1332 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1333 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1334 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1335 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1336 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1337 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1338 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1339 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x133a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x133b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x133c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x133d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x133e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x133f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1340 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1341 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1342 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1343 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1344 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1345 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1346 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1347 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1348 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1349 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x134a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x134b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x134c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x134d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x134e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x134f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1350 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1351 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1352 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1353 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1354 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1355 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1356 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1357 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1358 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1359 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x135a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x135b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x135c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x135d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x135e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x135f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1360 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1361 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1362 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1363 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1364 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1365 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1366 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1367 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1368 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1369 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x136a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x136b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x136c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x136d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x136e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x136f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1370 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1371 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1372 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1373 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1374 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1375 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1376 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1377 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1378 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1379 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x137a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x137b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x137c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x137d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x137e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x137f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1380 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1381 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1382 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1383 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1384 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1385 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1386 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1387 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1388 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1389 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x138a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x138b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x138c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x138d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x138e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x138f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1390 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1391 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1392 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1393 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1394 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1395 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1396 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1397 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1398 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x1399 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x139a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x139b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x139c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x139d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x139e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x139f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13a0 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13a1 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13a2 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13a3 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13a4 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13a5 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13a6 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13a7 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13a8 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13a9 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13aa */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13ab */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13ac */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13ad */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13ae */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13af */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13b0 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13b1 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13b2 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13b3 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13b4 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13b5 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13b6 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13b7 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13b8 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13b9 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13ba */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13bb */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13bc (OE) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13bd (oe) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13be (Ydiaeresis) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13bf */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13c0 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13c1 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13c2 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13c3 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13c4 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13c5 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13c6 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13c7 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13c8 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13c9 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13ca */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13cb */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13cc */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13cd */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13ce */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13cf */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13d0 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13d1 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13d2 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13d3 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13d4 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13d5 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13d6 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13d7 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13d8 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13d9 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13da */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13db */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13dc */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13dd */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13de */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13df */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13e0 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13e1 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13e2 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13e3 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13e4 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13e5 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13e6 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13e7 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13e8 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13e9 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13ea */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13eb */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13ec */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13ed */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13ee */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13ef */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13f0 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13f1 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13f2 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13f3 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13f4 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13f5 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13f6 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13f7 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13f8 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13f9 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13fa */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13fb */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13fc */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13fd */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13fe */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x13ff */ }, {{0}}, /* 0x14?? */ {{0}}, /* 0x15?? */ @@ -20568,1287 +4184,263 @@ const guac_rdp_keymap guac_rdp_keysym_scancode[256][256] = { {{0}}, /* 0x1d?? */ {{0}}, /* 0x1e?? */ {{0}}, /* 0x1f?? */ - { /* 0x20?? */ - { /* 0x2000 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2001 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2002 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2003 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2004 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2005 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2006 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2007 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2008 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2009 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x200a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x200b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x200c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x200d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x200e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x200f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2010 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2011 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2012 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2013 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2014 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2015 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2016 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2017 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2018 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2019 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x201a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x201b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x201c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x201d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x201e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x201f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2020 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2021 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2022 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2023 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2024 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2025 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2026 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2027 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2028 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2029 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x202a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x202b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x202c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x202d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x202e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x202f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2030 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2031 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2032 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2033 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2034 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2035 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2036 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2037 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2038 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2039 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x203a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x203b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x203c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x203d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x203e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x203f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2040 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2041 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2042 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2043 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2044 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2045 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2046 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2047 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2048 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2049 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x204a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x204b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x204c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x204d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x204e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x204f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2050 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2051 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2052 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2053 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2054 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2055 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2056 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2057 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2058 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2059 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x205a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x205b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x205c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x205d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x205e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x205f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2060 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2061 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2062 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2063 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2064 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2065 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2066 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2067 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2068 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2069 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x206a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x206b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x206c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x206d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x206e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x206f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2070 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2071 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2072 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2073 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2074 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2075 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2076 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2077 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2078 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2079 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x207a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x207b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x207c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x207d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x207e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x207f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2080 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2081 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2082 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2083 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2084 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2085 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2086 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2087 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2088 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2089 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x208a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x208b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x208c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x208d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x208e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x208f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2090 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2091 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2092 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2093 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2094 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2095 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2096 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2097 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2098 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x2099 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x209a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x209b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x209c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x209d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x209e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x209f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20a0 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20a1 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20a2 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20a3 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20a4 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20a5 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20a6 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20a7 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20a8 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20a9 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20aa */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20ab */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20ac (EuroSign) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20ad */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20ae */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20af */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20b0 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20b1 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20b2 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20b3 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20b4 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20b5 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20b6 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20b7 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20b8 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20b9 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20ba */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20bb */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20bc */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20bd */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20be */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20bf */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20c0 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20c1 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20c2 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20c3 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20c4 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20c5 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20c6 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20c7 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20c8 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20c9 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20ca */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20cb */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20cc */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20cd */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20ce */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20cf */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20d0 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20d1 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20d2 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20d3 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20d4 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20d5 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20d6 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20d7 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20d8 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20d9 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20da */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20db */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20dc */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20dd */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20de */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20df */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20e0 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20e1 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20e2 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20e3 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20e4 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20e5 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20e6 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20e7 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20e8 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20e9 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20ea */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20eb */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20ec */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20ed */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20ee */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20ef */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20f0 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20f1 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20f2 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20f3 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20f4 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20f5 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20f6 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20f7 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20f8 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20f9 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20fa */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20fb */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20fc */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20fd */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20fe */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0x20ff */ - .scancode = 0x00, - .flags = 0x00 - }, - + { /* 0x20?? */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2000 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2001 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2002 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2003 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2004 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2005 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2006 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2007 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2008 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2009 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x200a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x200b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x200c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x200d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x200e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x200f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2010 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2011 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2012 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2013 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2014 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2015 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2016 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2017 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2018 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2019 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x201a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x201b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x201c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x201d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x201e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x201f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2020 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2021 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2022 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2023 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2024 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2025 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2026 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2027 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2028 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2029 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x202a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x202b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x202c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x202d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x202e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x202f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2030 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2031 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2032 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2033 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2034 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2035 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2036 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2037 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2038 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2039 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x203a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x203b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x203c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x203d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x203e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x203f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2040 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2041 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2042 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2043 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2044 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2045 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2046 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2047 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2048 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2049 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x204a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x204b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x204c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x204d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x204e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x204f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2050 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2051 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2052 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2053 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2054 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2055 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2056 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2057 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2058 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2059 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x205a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x205b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x205c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x205d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x205e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x205f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2060 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2061 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2062 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2063 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2064 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2065 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2066 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2067 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2068 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2069 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x206a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x206b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x206c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x206d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x206e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x206f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2070 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2071 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2072 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2073 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2074 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2075 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2076 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2077 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2078 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2079 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x207a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x207b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x207c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x207d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x207e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x207f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2080 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2081 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2082 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2083 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2084 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2085 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2086 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2087 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2088 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2089 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x208a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x208b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x208c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x208d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x208e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x208f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2090 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2091 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2092 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2093 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2094 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2095 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2096 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2097 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2098 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x2099 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x209a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x209b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x209c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x209d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x209e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x209f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20a0 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20a1 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20a2 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20a3 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20a4 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20a5 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20a6 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20a7 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20a8 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20a9 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20aa */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20ab */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20ac (EuroSign) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20ad */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20ae */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20af */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20b0 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20b1 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20b2 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20b3 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20b4 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20b5 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20b6 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20b7 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20b8 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20b9 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20ba */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20bb */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20bc */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20bd */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20be */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20bf */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20c0 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20c1 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20c2 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20c3 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20c4 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20c5 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20c6 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20c7 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20c8 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20c9 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20ca */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20cb */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20cc */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20cd */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20ce */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20cf */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20d0 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20d1 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20d2 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20d3 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20d4 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20d5 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20d6 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20d7 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20d8 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20d9 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20da */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20db */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20dc */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20dd */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20de */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20df */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20e0 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20e1 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20e2 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20e3 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20e4 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20e5 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20e6 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20e7 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20e8 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20e9 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20ea */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20eb */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20ec */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20ed */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20ee */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20ef */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20f0 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20f1 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20f2 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20f3 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20f4 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20f5 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20f6 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20f7 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20f8 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20f9 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20fa */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20fb */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20fc */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20fd */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20fe */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x20ff */ }, {{0}}, /* 0x21?? */ {{0}}, /* 0x22?? */ @@ -22070,3851 +4662,779 @@ const guac_rdp_keymap guac_rdp_keysym_scancode[256][256] = { {{0}}, /* 0xfa?? */ {{0}}, /* 0xfb?? */ {{0}}, /* 0xfc?? */ - { /* 0xfd?? */ - { /* 0xfd00 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd01 (3270_Duplicate) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd02 (3270_FieldMark) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd03 (3270_Right2) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd04 (3270_Left2) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd05 (3270_BackTab) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd06 (3270_EraseEOF) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd07 (3270_EraseInput) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd08 (3270_Reset) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd09 (3270_Quit) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd0a (3270_PA1) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd0b (3270_PA2) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd0c (3270_PA3) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd0d (3270_Test) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd0e (3270_Attn) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd0f (3270_CursorBlink) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd10 (3270_AltCursor) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd11 (3270_KeyClick) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd12 (3270_Jump) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd13 (3270_Ident) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd14 (3270_Rule) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd15 (3270_Copy) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd16 (3270_Play) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd17 (3270_Setup) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd18 (3270_Record) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd19 (3270_ChangeScreen) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd1a (3270_DeleteWord) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd1b (3270_ExSelect) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd1c (3270_CursorSelect) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd1d (3270_PrintScreen) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd1e (3270_Enter) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd1f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd20 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd21 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd22 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd23 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd24 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd25 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd26 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd27 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd28 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd29 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd2a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd2b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd2c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd2d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd2e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd2f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd30 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd31 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd32 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd33 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd34 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd35 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd36 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd37 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd38 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd39 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd3a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd3b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd3c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd3d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd3e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd3f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd40 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd41 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd42 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd43 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd44 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd45 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd46 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd47 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd48 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd49 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd4a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd4b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd4c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd4d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd4e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd4f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd50 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd51 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd52 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd53 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd54 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd55 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd56 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd57 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd58 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd59 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd5a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd5b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd5c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd5d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd5e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd5f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd60 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd61 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd62 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd63 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd64 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd65 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd66 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd67 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd68 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd69 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd6a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd6b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd6c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd6d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd6e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd6f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd70 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd71 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd72 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd73 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd74 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd75 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd76 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd77 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd78 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd79 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd7a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd7b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd7c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd7d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd7e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd7f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd80 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd81 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd82 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd83 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd84 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd85 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd86 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd87 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd88 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd89 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd8a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd8b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd8c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd8d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd8e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd8f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd90 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd91 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd92 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd93 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd94 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd95 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd96 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd97 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd98 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd99 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd9a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd9b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd9c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd9d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd9e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfd9f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfda0 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfda1 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfda2 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfda3 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfda4 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfda5 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfda6 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfda7 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfda8 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfda9 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfdaa */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfdab */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfdac */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfdad */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfdae */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfdaf */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfdb0 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfdb1 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfdb2 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfdb3 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfdb4 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfdb5 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfdb6 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfdb7 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfdb8 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfdb9 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfdba */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfdbb */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfdbc */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfdbd */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfdbe */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfdbf */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfdc0 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfdc1 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfdc2 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfdc3 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfdc4 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfdc5 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfdc6 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfdc7 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfdc8 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfdc9 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfdca */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfdcb */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfdcc */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfdcd */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfdce */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfdcf */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfdd0 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfdd1 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfdd2 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfdd3 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfdd4 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfdd5 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfdd6 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfdd7 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfdd8 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfdd9 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfdda */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfddb */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfddc */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfddd */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfdde */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfddf */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfde0 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfde1 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfde2 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfde3 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfde4 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfde5 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfde6 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfde7 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfde8 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfde9 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfdea */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfdeb */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfdec */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfded */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfdee */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfdef */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfdf0 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfdf1 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfdf2 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfdf3 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfdf4 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfdf5 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfdf6 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfdf7 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfdf8 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfdf9 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfdfa */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfdfb */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfdfc */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfdfd */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfdfe */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfdff */ - .scancode = 0x00, - .flags = 0x00 - }, - + { /* 0xfd?? */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd00 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd01 (3270_Duplicate) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd02 (3270_FieldMark) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd03 (3270_Right2) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd04 (3270_Left2) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd05 (3270_BackTab) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd06 (3270_EraseEOF) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd07 (3270_EraseInput) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd08 (3270_Reset) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd09 (3270_Quit) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd0a (3270_PA1) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd0b (3270_PA2) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd0c (3270_PA3) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd0d (3270_Test) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd0e (3270_Attn) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd0f (3270_CursorBlink) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd10 (3270_AltCursor) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd11 (3270_KeyClick) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd12 (3270_Jump) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd13 (3270_Ident) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd14 (3270_Rule) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd15 (3270_Copy) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd16 (3270_Play) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd17 (3270_Setup) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd18 (3270_Record) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd19 (3270_ChangeScreen) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd1a (3270_DeleteWord) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd1b (3270_ExSelect) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd1c (3270_CursorSelect) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd1d (3270_PrintScreen) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd1e (3270_Enter) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd1f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd20 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd21 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd22 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd23 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd24 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd25 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd26 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd27 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd28 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd29 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd2a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd2b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd2c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd2d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd2e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd2f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd30 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd31 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd32 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd33 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd34 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd35 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd36 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd37 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd38 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd39 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd3a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd3b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd3c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd3d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd3e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd3f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd40 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd41 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd42 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd43 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd44 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd45 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd46 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd47 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd48 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd49 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd4a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd4b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd4c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd4d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd4e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd4f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd50 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd51 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd52 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd53 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd54 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd55 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd56 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd57 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd58 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd59 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd5a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd5b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd5c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd5d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd5e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd5f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd60 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd61 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd62 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd63 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd64 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd65 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd66 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd67 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd68 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd69 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd6a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd6b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd6c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd6d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd6e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd6f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd70 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd71 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd72 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd73 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd74 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd75 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd76 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd77 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd78 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd79 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd7a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd7b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd7c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd7d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd7e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd7f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd80 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd81 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd82 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd83 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd84 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd85 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd86 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd87 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd88 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd89 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd8a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd8b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd8c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd8d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd8e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd8f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd90 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd91 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd92 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd93 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd94 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd95 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd96 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd97 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd98 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd99 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd9a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd9b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd9c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd9d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd9e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfd9f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfda0 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfda1 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfda2 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfda3 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfda4 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfda5 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfda6 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfda7 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfda8 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfda9 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfdaa */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfdab */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfdac */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfdad */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfdae */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfdaf */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfdb0 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfdb1 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfdb2 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfdb3 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfdb4 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfdb5 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfdb6 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfdb7 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfdb8 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfdb9 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfdba */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfdbb */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfdbc */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfdbd */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfdbe */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfdbf */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfdc0 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfdc1 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfdc2 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfdc3 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfdc4 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfdc5 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfdc6 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfdc7 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfdc8 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfdc9 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfdca */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfdcb */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfdcc */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfdcd */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfdce */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfdcf */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfdd0 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfdd1 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfdd2 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfdd3 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfdd4 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfdd5 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfdd6 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfdd7 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfdd8 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfdd9 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfdda */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfddb */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfddc */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfddd */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfdde */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfddf */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfde0 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfde1 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfde2 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfde3 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfde4 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfde5 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfde6 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfde7 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfde8 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfde9 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfdea */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfdeb */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfdec */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfded */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfdee */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfdef */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfdf0 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfdf1 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfdf2 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfdf3 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfdf4 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfdf5 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfdf6 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfdf7 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfdf8 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfdf9 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfdfa */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfdfb */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfdfc */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfdfd */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfdfe */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfdff */ }, - { /* 0xfe?? */ - { /* 0xfe00 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe01 (ISO_Lock) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe02 (ISO_Level2_Latch) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe03 (ISO_Level3_Shift) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe04 (ISO_Level3_Latch) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe05 (ISO_Level3_Lock) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe06 (ISO_Group_Latch) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe07 (ISO_Group_Lock) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe08 (ISO_Next_Group) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe09 (ISO_Next_Group_Lock) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe0a (ISO_Prev_Group) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe0b (ISO_Prev_Group_Lock) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe0c (ISO_First_Group) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe0d (ISO_First_Group_Lock) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe0e (ISO_Last_Group) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe0f (ISO_Last_Group_Lock) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe10 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe11 (ISO_Level5_Shift) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe12 (ISO_Level5_Latch) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe13 (ISO_Level5_Lock) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe14 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe15 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe16 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe17 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe18 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe19 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe1a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe1b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe1c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe1d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe1e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe1f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe20 (ISO_Left_Tab) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe21 (ISO_Move_Line_Up) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe22 (ISO_Move_Line_Down) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe23 (ISO_Partial_Line_Up) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe24 (ISO_Partial_Line_Down) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe25 (ISO_Partial_Space_Left) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe26 (ISO_Partial_Space_Right) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe27 (ISO_Set_Margin_Left) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe28 (ISO_Set_Margin_Right) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe29 (ISO_Release_Margin_Left) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe2a (ISO_Release_Margin_Right) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe2b (ISO_Release_Both_Margins) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe2c (ISO_Fast_Cursor_Left) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe2d (ISO_Fast_Cursor_Right) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe2e (ISO_Fast_Cursor_Up) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe2f (ISO_Fast_Cursor_Down) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe30 (ISO_Continuous_Underline) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe31 (ISO_Discontinuous_Underline) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe32 (ISO_Emphasize) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe33 (ISO_Center_Object) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe34 (ISO_Enter) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe35 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe36 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe37 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe38 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe39 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe3a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe3b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe3c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe3d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe3e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe3f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe40 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe41 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe42 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe43 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe44 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe45 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe46 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe47 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe48 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe49 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe4a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe4b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe4c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe4d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe4e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe4f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe50 (dead_grave) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe51 (dead_acute) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe52 (dead_circumflex) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe53 (dead_perispomeni) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe54 (dead_macron) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe55 (dead_breve) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe56 (dead_abovedot) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe57 (dead_diaeresis) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe58 (dead_abovering) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe59 (dead_doubleacute) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe5a (dead_caron) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe5b (dead_cedilla) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe5c (dead_ogonek) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe5d (dead_iota) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe5e (dead_voiced_sound) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe5f (dead_semivoiced_sound) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe60 (dead_belowdot) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe61 (dead_hook) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe62 (dead_horn) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe63 (dead_stroke) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe64 (dead_psili) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe65 (dead_dasia) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe66 (dead_doublegrave) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe67 (dead_belowring) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe68 (dead_belowmacron) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe69 (dead_belowcircumflex) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe6a (dead_belowtilde) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe6b (dead_belowbreve) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe6c (dead_belowdiaeresis) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe6d (dead_invertedbreve) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe6e (dead_belowcomma) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe6f (dead_currency) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe70 (AccessX_Enable) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe71 (AccessX_Feedback_Enable) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe72 (RepeatKeys_Enable) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe73 (SlowKeys_Enable) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe74 (BounceKeys_Enable) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe75 (StickyKeys_Enable) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe76 (MouseKeys_Enable) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe77 (MouseKeys_Accel_Enable) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe78 (Overlay1_Enable) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe79 (Overlay2_Enable) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe7a (AudibleBell_Enable) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe7b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe7c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe7d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe7e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe7f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe80 (dead_a) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe81 (dead_A) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe82 (dead_e) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe83 (dead_E) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe84 (dead_i) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe85 (dead_I) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe86 (dead_o) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe87 (dead_O) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe88 (dead_u) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe89 (dead_U) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe8a (dead_small_schwa) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe8b (dead_capital_schwa) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe8c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe8d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe8e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe8f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe90 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe91 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe92 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe93 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe94 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe95 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe96 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe97 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe98 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe99 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe9a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe9b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe9c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe9d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe9e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfe9f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfea0 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfea1 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfea2 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfea3 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfea4 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfea5 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfea6 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfea7 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfea8 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfea9 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfeaa */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfeab */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfeac */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfead */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfeae */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfeaf */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfeb0 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfeb1 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfeb2 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfeb3 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfeb4 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfeb5 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfeb6 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfeb7 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfeb8 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfeb9 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfeba */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfebb */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfebc */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfebd */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfebe */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfebf */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfec0 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfec1 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfec2 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfec3 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfec4 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfec5 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfec6 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfec7 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfec8 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfec9 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfeca */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfecb */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfecc */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfecd */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfece */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfecf */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfed0 (First_Virtual_Screen) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfed1 (Prev_Virtual_Screen) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfed2 (Next_Virtual_Screen) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfed3 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfed4 (Last_Virtual_Screen) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfed5 (Terminate_Server) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfed6 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfed7 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfed8 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfed9 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfeda */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfedb */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfedc */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfedd */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfede */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfedf */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfee0 (Pointer_Left) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfee1 (Pointer_Right) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfee2 (Pointer_Up) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfee3 (Pointer_Down) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfee4 (Pointer_UpLeft) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfee5 (Pointer_UpRight) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfee6 (Pointer_DownLeft) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfee7 (Pointer_DownRight) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfee8 (Pointer_Button_Dflt) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfee9 (Pointer_Button1) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfeea (Pointer_Button2) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfeeb (Pointer_Button3) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfeec (Pointer_Button4) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfeed (Pointer_Button5) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfeee (Pointer_DblClick_Dflt) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfeef (Pointer_DblClick1) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfef0 (Pointer_DblClick2) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfef1 (Pointer_DblClick3) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfef2 (Pointer_DblClick4) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfef3 (Pointer_DblClick5) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfef4 (Pointer_Drag_Dflt) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfef5 (Pointer_Drag1) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfef6 (Pointer_Drag2) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfef7 (Pointer_Drag3) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfef8 (Pointer_Drag4) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfef9 (Pointer_EnableKeys) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfefa (Pointer_Accelerate) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfefb (Pointer_DfltBtnNext) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfefc (Pointer_DfltBtnPrev) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfefd (Pointer_Drag5) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfefe */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfeff */ - .scancode = 0x00, - .flags = 0x00 - }, - + { /* 0xfe?? */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe00 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe01 (ISO_Lock) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe02 (ISO_Level2_Latch) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe03 (ISO_Level3_Shift) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe04 (ISO_Level3_Latch) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe05 (ISO_Level3_Lock) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe06 (ISO_Group_Latch) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe07 (ISO_Group_Lock) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe08 (ISO_Next_Group) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe09 (ISO_Next_Group_Lock) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe0a (ISO_Prev_Group) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe0b (ISO_Prev_Group_Lock) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe0c (ISO_First_Group) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe0d (ISO_First_Group_Lock) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe0e (ISO_Last_Group) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe0f (ISO_Last_Group_Lock) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe10 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe11 (ISO_Level5_Shift) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe12 (ISO_Level5_Latch) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe13 (ISO_Level5_Lock) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe14 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe15 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe16 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe17 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe18 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe19 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe1a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe1b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe1c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe1d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe1e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe1f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe20 (ISO_Left_Tab) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe21 (ISO_Move_Line_Up) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe22 (ISO_Move_Line_Down) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe23 (ISO_Partial_Line_Up) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe24 (ISO_Partial_Line_Down) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe25 (ISO_Partial_Space_Left) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe26 (ISO_Partial_Space_Right) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe27 (ISO_Set_Margin_Left) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe28 (ISO_Set_Margin_Right) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe29 (ISO_Release_Margin_Left) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe2a (ISO_Release_Margin_Right) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe2b (ISO_Release_Both_Margins) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe2c (ISO_Fast_Cursor_Left) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe2d (ISO_Fast_Cursor_Right) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe2e (ISO_Fast_Cursor_Up) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe2f (ISO_Fast_Cursor_Down) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe30 (ISO_Continuous_Underline) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe31 (ISO_Discontinuous_Underline) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe32 (ISO_Emphasize) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe33 (ISO_Center_Object) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe34 (ISO_Enter) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe35 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe36 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe37 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe38 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe39 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe3a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe3b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe3c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe3d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe3e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe3f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe40 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe41 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe42 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe43 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe44 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe45 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe46 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe47 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe48 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe49 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe4a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe4b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe4c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe4d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe4e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe4f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe50 (dead_grave) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe51 (dead_acute) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe52 (dead_circumflex) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe53 (dead_perispomeni) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe54 (dead_macron) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe55 (dead_breve) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe56 (dead_abovedot) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe57 (dead_diaeresis) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe58 (dead_abovering) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe59 (dead_doubleacute) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe5a (dead_caron) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe5b (dead_cedilla) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe5c (dead_ogonek) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe5d (dead_iota) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe5e (dead_voiced_sound) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe5f (dead_semivoiced_sound) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe60 (dead_belowdot) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe61 (dead_hook) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe62 (dead_horn) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe63 (dead_stroke) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe64 (dead_psili) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe65 (dead_dasia) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe66 (dead_doublegrave) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe67 (dead_belowring) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe68 (dead_belowmacron) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe69 (dead_belowcircumflex) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe6a (dead_belowtilde) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe6b (dead_belowbreve) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe6c (dead_belowdiaeresis) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe6d (dead_invertedbreve) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe6e (dead_belowcomma) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe6f (dead_currency) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe70 (AccessX_Enable) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe71 (AccessX_Feedback_Enable) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe72 (RepeatKeys_Enable) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe73 (SlowKeys_Enable) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe74 (BounceKeys_Enable) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe75 (StickyKeys_Enable) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe76 (MouseKeys_Enable) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe77 (MouseKeys_Accel_Enable) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe78 (Overlay1_Enable) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe79 (Overlay2_Enable) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe7a (AudibleBell_Enable) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe7b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe7c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe7d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe7e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe7f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe80 (dead_a) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe81 (dead_A) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe82 (dead_e) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe83 (dead_E) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe84 (dead_i) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe85 (dead_I) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe86 (dead_o) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe87 (dead_O) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe88 (dead_u) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe89 (dead_U) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe8a (dead_small_schwa) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe8b (dead_capital_schwa) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe8c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe8d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe8e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe8f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe90 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe91 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe92 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe93 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe94 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe95 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe96 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe97 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe98 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe99 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe9a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe9b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe9c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe9d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe9e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfe9f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfea0 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfea1 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfea2 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfea3 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfea4 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfea5 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfea6 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfea7 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfea8 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfea9 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfeaa */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfeab */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfeac */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfead */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfeae */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfeaf */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfeb0 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfeb1 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfeb2 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfeb3 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfeb4 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfeb5 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfeb6 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfeb7 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfeb8 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfeb9 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfeba */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfebb */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfebc */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfebd */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfebe */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfebf */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfec0 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfec1 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfec2 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfec3 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfec4 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfec5 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfec6 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfec7 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfec8 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfec9 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfeca */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfecb */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfecc */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfecd */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfece */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfecf */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfed0 (First_Virtual_Screen) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfed1 (Prev_Virtual_Screen) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfed2 (Next_Virtual_Screen) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfed3 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfed4 (Last_Virtual_Screen) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfed5 (Terminate_Server) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfed6 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfed7 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfed8 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfed9 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfeda */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfedb */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfedc */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfedd */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfede */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfedf */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfee0 (Pointer_Left) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfee1 (Pointer_Right) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfee2 (Pointer_Up) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfee3 (Pointer_Down) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfee4 (Pointer_UpLeft) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfee5 (Pointer_UpRight) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfee6 (Pointer_DownLeft) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfee7 (Pointer_DownRight) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfee8 (Pointer_Button_Dflt) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfee9 (Pointer_Button1) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfeea (Pointer_Button2) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfeeb (Pointer_Button3) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfeec (Pointer_Button4) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfeed (Pointer_Button5) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfeee (Pointer_DblClick_Dflt) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfeef (Pointer_DblClick1) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfef0 (Pointer_DblClick2) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfef1 (Pointer_DblClick3) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfef2 (Pointer_DblClick4) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfef3 (Pointer_DblClick5) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfef4 (Pointer_Drag_Dflt) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfef5 (Pointer_Drag1) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfef6 (Pointer_Drag2) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfef7 (Pointer_Drag3) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfef8 (Pointer_Drag4) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfef9 (Pointer_EnableKeys) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfefa (Pointer_Accelerate) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfefb (Pointer_DfltBtnNext) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfefc (Pointer_DfltBtnPrev) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfefd (Pointer_Drag5) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfefe */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfeff */ }, - { /* 0xff?? */ - { /* 0xff00 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff01 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff02 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff03 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff04 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff05 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff06 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff07 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff08 (BackSpace) */ - .scancode = 0x0E, - .flags = 0x00 - }, - - { /* 0xff09 (Tab) */ - .scancode = 0x0F, - .flags = 0x00 - }, - - { /* 0xff0a (Linefeed) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff0b (Clear) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff0c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff0d (Return) */ - .scancode = 0x1C, - .flags = 0x00 - }, - - { /* 0xff0e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff0f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff10 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff11 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff12 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff13 (Pause) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff14 (Scroll_Lock) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff15 (Sys_Req) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff16 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff17 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff18 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff19 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff1a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff1b (Escape) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff1c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff1d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff1e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff1f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff20 (Multi_key) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff21 (Kanji) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff22 (Muhenkan) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff23 (Henkan) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff24 (Romaji) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff25 (Hiragana) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff26 (Katakana) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff27 (Hiragana_Katakana) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff28 (Zenkaku) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff29 (Hankaku) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff2a (Zenkaku_Hankaku) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff2b (Touroku) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff2c (Massyo) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff2d (Kana_Lock) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff2e (Kana_Shift) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff2f (Eisu_Shift) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff30 (Eisu_toggle) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff31 (Hangul) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff32 (Hangul_Start) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff33 (Hangul_End) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff34 (Hangul_Hanja) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff35 (Hangul_Jamo) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff36 (Hangul_Romaja) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff37 (Hangul_Codeinput) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff38 (Hangul_Jeonja) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff39 (Hangul_Banja) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff3a (Hangul_PreHanja) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff3b (Hangul_PostHanja) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff3c (Hangul_SingleCandidate) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff3d (Hangul_MultipleCandidate) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff3e (Hangul_PreviousCandidate) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff3f (Hangul_Special) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff40 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff41 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff42 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff43 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff44 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff45 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff46 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff47 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff48 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff49 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff4a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff4b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff4c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff4d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff4e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff4f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff50 (Home) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff51 (Left) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff52 (Up) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff53 (Right) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff54 (Down) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff55 (Page_Up) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff56 (Page_Down) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff57 (End) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff58 (Begin) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff59 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff5a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff5b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff5c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff5d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff5e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff5f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff60 (Select) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff61 (Print) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff62 (Execute) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff63 (Insert) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff64 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff65 (Undo) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff66 (Redo) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff67 (Menu) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff68 (Find) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff69 (Cancel) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff6a (Help) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff6b (Break) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff6c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff6d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff6e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff6f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff70 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff71 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff72 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff73 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff74 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff75 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff76 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff77 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff78 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff79 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff7a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff7b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff7c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff7d */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff7e (Hangul_switch) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff7f (Num_Lock) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff80 (KP_Space) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff81 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff82 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff83 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff84 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff85 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff86 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff87 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff88 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff89 (KP_Tab) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff8a */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff8b */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff8c */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff8d (KP_Enter) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff8e */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff8f */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff90 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff91 (KP_F1) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff92 (KP_F2) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff93 (KP_F3) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff94 (KP_F4) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff95 (KP_Home) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff96 (KP_Left) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff97 (KP_Up) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff98 (KP_Right) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff99 (KP_Down) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff9a (KP_Page_Up) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff9b (KP_Page_Down) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff9c (KP_End) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff9d (KP_Begin) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff9e (KP_Insert) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xff9f (KP_Delete) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xffa0 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xffa1 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xffa2 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xffa3 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xffa4 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xffa5 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xffa6 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xffa7 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xffa8 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xffa9 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xffaa (KP_Multiply) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xffab (KP_Add) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xffac (KP_Separator) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xffad (KP_Subtract) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xffae (KP_Decimal) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xffaf (KP_Divide) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xffb0 (KP_0) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xffb1 (KP_1) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xffb2 (KP_2) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xffb3 (KP_3) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xffb4 (KP_4) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xffb5 (KP_5) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xffb6 (KP_6) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xffb7 (KP_7) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xffb8 (KP_8) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xffb9 (KP_9) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xffba */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xffbb */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xffbc */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xffbd (KP_Equal) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xffbe (F1) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xffbf (F2) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xffc0 (F3) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xffc1 (F4) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xffc2 (F5) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xffc3 (F6) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xffc4 (F7) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xffc5 (F8) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xffc6 (F9) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xffc7 (F10) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xffc8 (L1) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xffc9 (L2) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xffca (L3) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xffcb (L4) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xffcc (L5) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xffcd (L6) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xffce (L7) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xffcf (L8) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xffd0 (L9) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xffd1 (L10) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xffd2 (R1) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xffd3 (R2) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xffd4 (R3) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xffd5 (R4) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xffd6 (R5) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xffd7 (R6) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xffd8 (R7) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xffd9 (R8) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xffda (R9) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xffdb (R10) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xffdc (R11) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xffdd (R12) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xffde (R13) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xffdf (R14) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xffe0 (R15) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xffe1 (Shift_L) */ - .scancode = 0x2A, - .flags = 0x00 - }, - - { /* 0xffe2 (Shift_R) */ - .scancode = 0x36, - .flags = 0x00 - }, - - { /* 0xffe3 (Control_L) */ - .scancode = 0x1D, - .flags = 0x00 - }, - - { /* 0xffe4 (Control_R) */ - .scancode = 0x1D, - .flags = 0x00 - }, - - { /* 0xffe5 (Caps_Lock) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xffe6 (Shift_Lock) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xffe7 (Meta_L) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xffe8 (Meta_R) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xffe9 (Alt_L) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xffea (Alt_R) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xffeb (Super_L) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xffec (Super_R) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xffed (Hyper_L) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xffee (Hyper_R) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xffef */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfff0 */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfff1 (braille_dot_1) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfff2 (braille_dot_2) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfff3 (braille_dot_3) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfff4 (braille_dot_4) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfff5 (braille_dot_5) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfff6 (braille_dot_6) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfff7 (braille_dot_7) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfff8 (braille_dot_8) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfff9 (braille_dot_9) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfffa (braille_dot_10) */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfffb */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfffc */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfffd */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xfffe */ - .scancode = 0x00, - .flags = 0x00 - }, - - { /* 0xffff (Delete) */ - .scancode = 0x53, - .flags = KBD_FLAG_EXT - }, - + { /* 0xff?? */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff00 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff01 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff02 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff03 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff04 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff05 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff06 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff07 */ + { .scancode = 0x0E, .flags = 0x00 }, /* 0xff08 (BackSpace) */ + { .scancode = 0x0F, .flags = 0x00 }, /* 0xff09 (Tab) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff0a (Linefeed) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff0b (Clear) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff0c */ + { .scancode = 0x1C, .flags = 0x00 }, /* 0xff0d (Return) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff0e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff0f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff10 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff11 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff12 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff13 (Pause) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff14 (Scroll_Lock) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff15 (Sys_Req) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff16 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff17 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff18 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff19 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff1a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff1b (Escape) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff1c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff1d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff1e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff1f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff20 (Multi_key) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff21 (Kanji) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff22 (Muhenkan) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff23 (Henkan) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff24 (Romaji) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff25 (Hiragana) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff26 (Katakana) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff27 (Hiragana_Katakana) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff28 (Zenkaku) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff29 (Hankaku) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff2a (Zenkaku_Hankaku) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff2b (Touroku) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff2c (Massyo) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff2d (Kana_Lock) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff2e (Kana_Shift) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff2f (Eisu_Shift) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff30 (Eisu_toggle) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff31 (Hangul) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff32 (Hangul_Start) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff33 (Hangul_End) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff34 (Hangul_Hanja) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff35 (Hangul_Jamo) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff36 (Hangul_Romaja) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff37 (Hangul_Codeinput) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff38 (Hangul_Jeonja) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff39 (Hangul_Banja) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff3a (Hangul_PreHanja) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff3b (Hangul_PostHanja) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff3c (Hangul_SingleCandidate) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff3d (Hangul_MultipleCandidate) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff3e (Hangul_PreviousCandidate) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff3f (Hangul_Special) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff40 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff41 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff42 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff43 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff44 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff45 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff46 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff47 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff48 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff49 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff4a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff4b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff4c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff4d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff4e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff4f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff50 (Home) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff51 (Left) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff52 (Up) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff53 (Right) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff54 (Down) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff55 (Page_Up) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff56 (Page_Down) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff57 (End) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff58 (Begin) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff59 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff5a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff5b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff5c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff5d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff5e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff5f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff60 (Select) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff61 (Print) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff62 (Execute) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff63 (Insert) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff64 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff65 (Undo) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff66 (Redo) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff67 (Menu) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff68 (Find) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff69 (Cancel) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff6a (Help) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff6b (Break) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff6c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff6d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff6e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff6f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff70 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff71 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff72 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff73 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff74 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff75 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff76 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff77 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff78 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff79 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff7a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff7b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff7c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff7d */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff7e (Hangul_switch) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff7f (Num_Lock) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff80 (KP_Space) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff81 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff82 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff83 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff84 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff85 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff86 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff87 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff88 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff89 (KP_Tab) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff8a */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff8b */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff8c */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff8d (KP_Enter) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff8e */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff8f */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff90 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff91 (KP_F1) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff92 (KP_F2) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff93 (KP_F3) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff94 (KP_F4) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff95 (KP_Home) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff96 (KP_Left) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff97 (KP_Up) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff98 (KP_Right) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff99 (KP_Down) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff9a (KP_Page_Up) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff9b (KP_Page_Down) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff9c (KP_End) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff9d (KP_Begin) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff9e (KP_Insert) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xff9f (KP_Delete) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xffa0 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xffa1 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xffa2 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xffa3 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xffa4 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xffa5 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xffa6 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xffa7 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xffa8 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xffa9 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xffaa (KP_Multiply) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xffab (KP_Add) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xffac (KP_Separator) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xffad (KP_Subtract) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xffae (KP_Decimal) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xffaf (KP_Divide) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xffb0 (KP_0) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xffb1 (KP_1) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xffb2 (KP_2) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xffb3 (KP_3) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xffb4 (KP_4) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xffb5 (KP_5) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xffb6 (KP_6) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xffb7 (KP_7) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xffb8 (KP_8) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xffb9 (KP_9) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xffba */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xffbb */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xffbc */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xffbd (KP_Equal) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xffbe (F1) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xffbf (F2) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xffc0 (F3) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xffc1 (F4) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xffc2 (F5) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xffc3 (F6) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xffc4 (F7) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xffc5 (F8) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xffc6 (F9) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xffc7 (F10) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xffc8 (L1) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xffc9 (L2) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xffca (L3) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xffcb (L4) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xffcc (L5) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xffcd (L6) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xffce (L7) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xffcf (L8) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xffd0 (L9) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xffd1 (L10) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xffd2 (R1) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xffd3 (R2) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xffd4 (R3) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xffd5 (R4) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xffd6 (R5) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xffd7 (R6) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xffd8 (R7) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xffd9 (R8) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xffda (R9) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xffdb (R10) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xffdc (R11) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xffdd (R12) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xffde (R13) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xffdf (R14) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xffe0 (R15) */ + { .scancode = 0x2A, .flags = 0x00 }, /* 0xffe1 (Shift_L) */ + { .scancode = 0x36, .flags = 0x00 }, /* 0xffe2 (Shift_R) */ + { .scancode = 0x1D, .flags = 0x00 }, /* 0xffe3 (Control_L) */ + { .scancode = 0x1D, .flags = 0x00 }, /* 0xffe4 (Control_R) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xffe5 (Caps_Lock) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xffe6 (Shift_Lock) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xffe7 (Meta_L) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xffe8 (Meta_R) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xffe9 (Alt_L) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xffea (Alt_R) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xffeb (Super_L) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xffec (Super_R) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xffed (Hyper_L) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xffee (Hyper_R) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xffef */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfff0 */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfff1 (braille_dot_1) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfff2 (braille_dot_2) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfff3 (braille_dot_3) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfff4 (braille_dot_4) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfff5 (braille_dot_5) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfff6 (braille_dot_6) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfff7 (braille_dot_7) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfff8 (braille_dot_8) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfff9 (braille_dot_9) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfffa (braille_dot_10) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfffb */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfffc */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfffd */ + { .scancode = 0x00, .flags = 0x00 }, /* 0xfffe */ + { .scancode = 0x53, .flags = KBD_FLAG_EXT }, /* 0xffff (Delete) */ }, }; From 3e9bfbf79dc5b8b27a3c4c8e054e899146afec01 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Mon, 25 Jul 2011 13:54:55 -0700 Subject: [PATCH 022/253] Fixed arrow keys --- protocols/rdp/src/rdp_keymap.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/protocols/rdp/src/rdp_keymap.c b/protocols/rdp/src/rdp_keymap.c index 6dee9aa8..68185aa0 100644 --- a/protocols/rdp/src/rdp_keymap.c +++ b/protocols/rdp/src/rdp_keymap.c @@ -2356,10 +2356,10 @@ const guac_rdp_keymap guac_rdp_keysym_scancode[256][256] = { { .scancode = 0x00, .flags = 0x00 }, /* 0x08f8 */ { .scancode = 0x00, .flags = 0x00 }, /* 0x08f9 */ { .scancode = 0x00, .flags = 0x00 }, /* 0x08fa */ - { .scancode = 0x4B, .flags = KBD_FLAG_EXT }, /* 0x08fb (leftarrow) */ - { .scancode = 0x48, .flags = KBD_FLAG_EXT }, /* 0x08fc (uparrow) */ - { .scancode = 0x4D, .flags = KBD_FLAG_EXT }, /* 0x08fd (rightarrow) */ - { .scancode = 0x50, .flags = KBD_FLAG_EXT }, /* 0x08fe (downarrow) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08fb (leftarrow) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08fc (uparrow) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08fd (rightarrow) */ + { .scancode = 0x00, .flags = 0x00 }, /* 0x08fe (downarrow) */ { .scancode = 0x00, .flags = 0x00 }, /* 0x08ff */ }, { /* 0x09?? */ @@ -5260,10 +5260,10 @@ const guac_rdp_keymap guac_rdp_keysym_scancode[256][256] = { { .scancode = 0x00, .flags = 0x00 }, /* 0xff4e */ { .scancode = 0x00, .flags = 0x00 }, /* 0xff4f */ { .scancode = 0x00, .flags = 0x00 }, /* 0xff50 (Home) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff51 (Left) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff52 (Up) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff53 (Right) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff54 (Down) */ + { .scancode = 0x4B, .flags = KBD_FLAG_EXT }, /* 0xff51 (Left) */ + { .scancode = 0x48, .flags = KBD_FLAG_EXT }, /* 0xff52 (Up) */ + { .scancode = 0x4D, .flags = KBD_FLAG_EXT }, /* 0xff53 (Right) */ + { .scancode = 0x50, .flags = KBD_FLAG_EXT }, /* 0xff54 (Down) */ { .scancode = 0x00, .flags = 0x00 }, /* 0xff55 (Page_Up) */ { .scancode = 0x00, .flags = 0x00 }, /* 0xff56 (Page_Down) */ { .scancode = 0x00, .flags = 0x00 }, /* 0xff57 (End) */ From 344b21555423a27cb850d485728ce8bd7a286fa7 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Mon, 25 Jul 2011 14:57:40 -0700 Subject: [PATCH 023/253] Fixed mouse drag handling. --- protocols/rdp/src/rdp_client.c | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/protocols/rdp/src/rdp_client.c b/protocols/rdp/src/rdp_client.c index e4c5ab0d..7ff410c1 100644 --- a/protocols/rdp/src/rdp_client.c +++ b/protocols/rdp/src/rdp_client.c @@ -319,23 +319,24 @@ int rdp_guac_client_mouse_handler(guac_client* client, int x, int y, int mask) { rdp_guac_client_data* guac_client_data = (rdp_guac_client_data*) client->data; rdpInst* rdp_inst = guac_client_data->rdp_inst; - /* If no buttons pressed */ - if (mask == 0) { + /* If button mask unchanged, just send move event */ + if (mask == guac_client_data->mouse_button_mask) + rdp_inst->rdp_send_input(rdp_inst, RDP_INPUT_MOUSE, PTRFLAGS_MOVE, x, y); - /* Send mouse move event if no buttons pressed before */ - if (guac_client_data->mouse_button_mask == 0) - rdp_inst->rdp_send_input(rdp_inst, RDP_INPUT_MOUSE, PTRFLAGS_MOVE, x, y); + /* Otherwise, send events describing button change */ + else { - /* Otherwise, send mouse up event, releasing any old buttons */ - else + /* Release event */ + if (mask == 0) rdp_inst->rdp_send_input(rdp_inst, RDP_INPUT_MOUSE, PTRFLAGS_BUTTON1, x, y); + + /* Press event */ + else + rdp_inst->rdp_send_input(rdp_inst, RDP_INPUT_MOUSE, PTRFLAGS_DOWN | PTRFLAGS_BUTTON1, x, y); + + guac_client_data->mouse_button_mask = mask; } - /* Otherwise, send mouse down event */ - else - rdp_inst->rdp_send_input(rdp_inst, RDP_INPUT_MOUSE, PTRFLAGS_DOWN | PTRFLAGS_BUTTON1, x, y); - - guac_client_data->mouse_button_mask = mask; return 0; } From ceb76aa74491c9a61d94a64ca06e86029080277f Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Mon, 25 Jul 2011 15:55:39 -0700 Subject: [PATCH 024/253] Fixed flag passing --- protocols/rdp/src/rdp_client.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/protocols/rdp/src/rdp_client.c b/protocols/rdp/src/rdp_client.c index 7ff410c1..25aaf85b 100644 --- a/protocols/rdp/src/rdp_client.c +++ b/protocols/rdp/src/rdp_client.c @@ -356,9 +356,9 @@ int rdp_guac_client_key_handler(guac_client* client, int keysym, int pressed) { if (keymap->scancode != 0) rdp_inst->rdp_send_input( rdp_inst, RDP_INPUT_SCANCODE, - pressed ? RDP_KEYPRESS : RDP_KEYRELEASE, + (pressed ? RDP_KEYPRESS : RDP_KEYRELEASE) | keymap->flags, keymap->scancode, - keymap->flags); + 0); } From 024a732c8dfe385247fae29e396129e14736f19c Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Mon, 25 Jul 2011 20:16:56 -0700 Subject: [PATCH 025/253] More keysyms, log unmapped keysyms. --- protocols/rdp/src/rdp_client.c | 2 ++ protocols/rdp/src/rdp_keymap.c | 64 +++++++++++++++++----------------- 2 files changed, 34 insertions(+), 32 deletions(-) diff --git a/protocols/rdp/src/rdp_client.c b/protocols/rdp/src/rdp_client.c index 25aaf85b..41700b7a 100644 --- a/protocols/rdp/src/rdp_client.c +++ b/protocols/rdp/src/rdp_client.c @@ -359,6 +359,8 @@ int rdp_guac_client_key_handler(guac_client* client, int keysym, int pressed) { (pressed ? RDP_KEYPRESS : RDP_KEYRELEASE) | keymap->flags, keymap->scancode, 0); + else + guac_log_info("unmapped keysym: 0x%x", keysym); } diff --git a/protocols/rdp/src/rdp_keymap.c b/protocols/rdp/src/rdp_keymap.c index 68185aa0..eebf3509 100644 --- a/protocols/rdp/src/rdp_keymap.c +++ b/protocols/rdp/src/rdp_keymap.c @@ -74,21 +74,21 @@ const guac_rdp_keymap guac_rdp_keysym_scancode[256][256] = { { .scancode = 0x00, .flags = 0x00 }, /* 0x001e */ { .scancode = 0x00, .flags = 0x00 }, /* 0x001f */ { .scancode = 0x39, .flags = 0x00 }, /* 0x0020 (space) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0021 (exclam) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0022 (quotedbl) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0023 (numbersign) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0024 (dollar) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0025 (percent) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0026 (ampersand) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0027 (quoteright) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0028 (parenleft) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0029 (parenright) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x002a (asterisk) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x002b (plus) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x002c (comma) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x002d (minus) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x002e (period) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x002f (slash) */ + { .scancode = 0x02, .flags = 0x00 }, /* 0x0021 (exclam) */ + { .scancode = 0x28, .flags = 0x00 }, /* 0x0022 (quotedbl) */ + { .scancode = 0x04, .flags = 0x00 }, /* 0x0023 (numbersign) */ + { .scancode = 0x05, .flags = 0x00 }, /* 0x0024 (dollar) */ + { .scancode = 0x06, .flags = 0x00 }, /* 0x0025 (percent) */ + { .scancode = 0x08, .flags = 0x00 }, /* 0x0026 (ampersand) */ + { .scancode = 0x28, .flags = 0x00 }, /* 0x0027 (quoteright) */ + { .scancode = 0x0A, .flags = 0x00 }, /* 0x0028 (parenleft) */ + { .scancode = 0x0B, .flags = 0x00 }, /* 0x0029 (parenright) */ + { .scancode = 0x09, .flags = 0x00 }, /* 0x002a (asterisk) */ + { .scancode = 0x0D, .flags = 0x00 }, /* 0x002b (plus) */ + { .scancode = 0x33, .flags = 0x00 }, /* 0x002c (comma) */ + { .scancode = 0x0C, .flags = 0x00 }, /* 0x002d (minus) */ + { .scancode = 0x34, .flags = 0x00 }, /* 0x002e (period) */ + { .scancode = 0x35, .flags = 0x00 }, /* 0x002f (slash) */ { .scancode = 0x0B, .flags = 0x00 }, /* 0x0030 (0) */ { .scancode = 0x02, .flags = 0x00 }, /* 0x0031 (1) */ { .scancode = 0x03, .flags = 0x00 }, /* 0x0032 (2) */ @@ -99,13 +99,13 @@ const guac_rdp_keymap guac_rdp_keysym_scancode[256][256] = { { .scancode = 0x08, .flags = 0x00 }, /* 0x0037 (7) */ { .scancode = 0x09, .flags = 0x00 }, /* 0x0038 (8) */ { .scancode = 0x0A, .flags = 0x00 }, /* 0x0039 (9) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x003a (colon) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x003b (semicolon) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x003c (less) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x003d (equal) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x003e (greater) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x003f (question) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0040 (at) */ + { .scancode = 0x27, .flags = 0x00 }, /* 0x003a (colon) */ + { .scancode = 0x27, .flags = 0x00 }, /* 0x003b (semicolon) */ + { .scancode = 0x33, .flags = 0x00 }, /* 0x003c (less) */ + { .scancode = 0x0D, .flags = 0x00 }, /* 0x003d (equal) */ + { .scancode = 0x34, .flags = 0x00 }, /* 0x003e (greater) */ + { .scancode = 0x35, .flags = 0x00 }, /* 0x003f (question) */ + { .scancode = 0x03, .flags = 0x00 }, /* 0x0040 (at) */ { .scancode = 0x1E, .flags = 0x00 }, /* 0x0041 (A) */ { .scancode = 0x30, .flags = 0x00 }, /* 0x0042 (B) */ { .scancode = 0x2E, .flags = 0x00 }, /* 0x0043 (C) */ @@ -132,12 +132,12 @@ const guac_rdp_keymap guac_rdp_keysym_scancode[256][256] = { { .scancode = 0x2D, .flags = 0x00 }, /* 0x0058 (X) */ { .scancode = 0x15, .flags = 0x00 }, /* 0x0059 (Y) */ { .scancode = 0x2C, .flags = 0x00 }, /* 0x005a (Z) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x005b (bracketleft) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x005c (backslash) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x005d (bracketright) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x005e (asciicircum) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x005f (underscore) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0060 (quoteleft) */ + { .scancode = 0x1A, .flags = 0x00 }, /* 0x005b (bracketleft) */ + { .scancode = 0x2B, .flags = 0x00 }, /* 0x005c (backslash) */ + { .scancode = 0x1B, .flags = 0x00 }, /* 0x005d (bracketright) */ + { .scancode = 0x29, .flags = 0x00 }, /* 0x005e (asciicircum) */ + { .scancode = 0x0C, .flags = 0x00 }, /* 0x005f (underscore) */ + { .scancode = 0x29, .flags = 0x00 }, /* 0x0060 (quoteleft) */ { .scancode = 0x1E, .flags = 0x00 }, /* 0x0061 (a) */ { .scancode = 0x30, .flags = 0x00 }, /* 0x0062 (b) */ { .scancode = 0x2E, .flags = 0x00 }, /* 0x0063 (c) */ @@ -164,10 +164,10 @@ const guac_rdp_keymap guac_rdp_keysym_scancode[256][256] = { { .scancode = 0x2D, .flags = 0x00 }, /* 0x0078 (x) */ { .scancode = 0x15, .flags = 0x00 }, /* 0x0079 (y) */ { .scancode = 0x2C, .flags = 0x00 }, /* 0x007a (z) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x007b (braceleft) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x007c (bar) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x007d (braceright) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x007e (asciitilde) */ + { .scancode = 0x1A, .flags = 0x00 }, /* 0x007b (braceleft) */ + { .scancode = 0x2B, .flags = 0x00 }, /* 0x007c (bar) */ + { .scancode = 0x1B, .flags = 0x00 }, /* 0x007d (braceright) */ + { .scancode = 0x29, .flags = 0x00 }, /* 0x007e (asciitilde) */ { .scancode = 0x00, .flags = 0x00 }, /* 0x007f */ { .scancode = 0x00, .flags = 0x00 }, /* 0x0080 */ { .scancode = 0x00, .flags = 0x00 }, /* 0x0081 */ From b32a2cce222915e9612234d0ae31b0957300feb4 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Tue, 26 Jul 2011 13:01:34 -0700 Subject: [PATCH 026/253] screenblt must always copy from default layer to target, not target to target --- protocols/rdp/src/rdp_handlers.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/protocols/rdp/src/rdp_handlers.c b/protocols/rdp/src/rdp_handlers.c index 9347c26a..45e1216a 100644 --- a/protocols/rdp/src/rdp_handlers.c +++ b/protocols/rdp/src/rdp_handlers.c @@ -395,7 +395,7 @@ void guac_rdp_ui_screenblt(rdpInst* inst, uint8 opcode, int x, int y, int cx, in GUACIO* io = client->io; guac_send_copy(io, - (guac_layer*) current_surface, srcx, srcy, cx, cy, + GUAC_DEFAULT_LAYER, srcx, srcy, cx, cy, GUAC_COMP_OVER, current_surface, x, y); } From afcb7a63e312a86d35553349cc33f35bf2cb6dc6 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Tue, 26 Jul 2011 13:40:00 -0700 Subject: [PATCH 027/253] Fixed paint_bitmap (was not using cx,cy, leading to black rectangles), proper bpp calculations, using SRC instead of OVER for create_bitmap operations. --- protocols/rdp/src/rdp_handlers.c | 34 ++++++++++++++++++++------------ 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/protocols/rdp/src/rdp_handlers.c b/protocols/rdp/src/rdp_handlers.c index 45e1216a..6d396d6c 100644 --- a/protocols/rdp/src/rdp_handlers.c +++ b/protocols/rdp/src/rdp_handlers.c @@ -120,7 +120,7 @@ RD_HBITMAP guac_rdp_ui_create_bitmap(rdpInst* inst, int width, int height, uint8 int x, y; int stride; - int bpp = inst->settings->server_depth / 8; + int bpp = (inst->settings->server_depth + 7) / 8; unsigned char* image_buffer; unsigned char* image_buffer_row; @@ -174,7 +174,7 @@ RD_HBITMAP guac_rdp_ui_create_bitmap(rdpInst* inst, int width, int height, uint8 } surface = cairo_image_surface_create_for_data(image_buffer, CAIRO_FORMAT_RGB24, width, height, stride); - guac_send_png(io, GUAC_COMP_OVER, buffer, 0, 0, surface); + guac_send_png(io, GUAC_COMP_SRC, buffer, 0, 0, surface); guac_flush(io); /* Free surface */ @@ -194,41 +194,49 @@ void guac_rdp_ui_paint_bitmap(rdpInst* inst, int x, int y, int cx, int cy, int w int dx, dy; int stride; - int bpp = inst->settings->server_depth / 8; + int bpp = (inst->settings->server_depth + 7) / 8; unsigned char* image_buffer; unsigned char* image_buffer_row; + int data_stride = width * bpp; + unsigned char* data_row = data; + cairo_surface_t* surface; /* Init Cairo buffer */ - stride = cairo_format_stride_for_width(CAIRO_FORMAT_RGB24, width); + stride = cairo_format_stride_for_width(CAIRO_FORMAT_RGB24, cx); image_buffer = malloc(height*stride); image_buffer_row = image_buffer; /* Copy image data from image data to buffer */ - for (dy = 0; dy> 8) & 0xF8) | ((v >> 13) & 0x07); green = ((v >> 3) & 0xFC) | ((v >> 9) & 0x03); @@ -247,7 +255,7 @@ void guac_rdp_ui_paint_bitmap(rdpInst* inst, int x, int y, int cx, int cy, int w } } - surface = cairo_image_surface_create_for_data(image_buffer, CAIRO_FORMAT_RGB24, width, height, stride); + surface = cairo_image_surface_create_for_data(image_buffer, CAIRO_FORMAT_RGB24, cx, cy, stride); guac_send_png(io, GUAC_COMP_OVER, current_surface, x, y, surface); guac_flush(io); @@ -404,7 +412,7 @@ void guac_rdp_ui_memblt(rdpInst* inst, uint8 opcode, int x, int y, int width, in guac_client* client = (guac_client*) inst->param1; rdp_guac_client_data* guac_client_data = (rdp_guac_client_data*) client->data; - const guac_layer* current_surface = guac_client_data->current_surface; + const guac_layer* current_surface = guac_client_data->current_surface; GUACIO* io = client->io; if (opcode != 204) From 96fe9047dc6bf014b0262dee2b5ff8c086ab35da Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Wed, 27 Jul 2011 10:06:12 -0700 Subject: [PATCH 028/253] Working mouse support. --- protocols/rdp/src/rdp_client.c | 57 +++++++++++++++++++++++++++++++--- 1 file changed, 53 insertions(+), 4 deletions(-) diff --git a/protocols/rdp/src/rdp_client.c b/protocols/rdp/src/rdp_client.c index 41700b7a..42b8f4fe 100644 --- a/protocols/rdp/src/rdp_client.c +++ b/protocols/rdp/src/rdp_client.c @@ -326,13 +326,62 @@ int rdp_guac_client_mouse_handler(guac_client* client, int x, int y, int mask) { /* Otherwise, send events describing button change */ else { + /* Mouse buttons which have JUST become released */ + int released_mask = guac_client_data->mouse_button_mask & ~mask; + + /* Mouse buttons which have JUST become pressed */ + int pressed_mask = ~guac_client_data->mouse_button_mask & mask; + /* Release event */ - if (mask == 0) - rdp_inst->rdp_send_input(rdp_inst, RDP_INPUT_MOUSE, PTRFLAGS_BUTTON1, x, y); + if (released_mask & 0x07) { + + /* Calculate flags */ + int flags = 0; + if (released_mask & 0x01) flags |= PTRFLAGS_BUTTON1; + if (released_mask & 0x02) flags |= PTRFLAGS_BUTTON3; + if (released_mask & 0x04) flags |= PTRFLAGS_BUTTON2; + + rdp_inst->rdp_send_input(rdp_inst, RDP_INPUT_MOUSE, flags, x, y); + + } /* Press event */ - else - rdp_inst->rdp_send_input(rdp_inst, RDP_INPUT_MOUSE, PTRFLAGS_DOWN | PTRFLAGS_BUTTON1, x, y); + if (pressed_mask & 0x07) { + + /* Calculate flags */ + int flags = PTRFLAGS_DOWN; + if (pressed_mask & 0x01) flags |= PTRFLAGS_BUTTON1; + if (pressed_mask & 0x02) flags |= PTRFLAGS_BUTTON3; + if (pressed_mask & 0x04) flags |= PTRFLAGS_BUTTON2; + if (pressed_mask & 0x08) flags |= PTRFLAGS_WHEEL | 0x78; + if (pressed_mask & 0x10) flags |= PTRFLAGS_WHEEL | PTRFLAGS_WHEEL_NEGATIVE | 0x88; + + /* Send event */ + rdp_inst->rdp_send_input(rdp_inst, RDP_INPUT_MOUSE, flags, x, y); + + } + + /* Scroll event */ + if (pressed_mask & 0x18) { + + /* Down */ + if (pressed_mask & 0x08) + rdp_inst->rdp_send_input( + rdp_inst, + RDP_INPUT_MOUSE, + PTRFLAGS_WHEEL | 0x78, + x, y); + + /* Up */ + if (pressed_mask & 0x10) + rdp_inst->rdp_send_input( + rdp_inst, + RDP_INPUT_MOUSE, + PTRFLAGS_WHEEL | PTRFLAGS_WHEEL_NEGATIVE | 0x88, + x, y); + + } + guac_client_data->mouse_button_mask = mask; } From e1fb51f222c8f44a9d4198ce30254467d45a9235 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Mon, 15 Aug 2011 19:31:53 -0700 Subject: [PATCH 029/253] Minimal changes to work with FreeRDP 0.8.2 --- protocols/rdp/configure.in | 4 ++-- protocols/rdp/include/rdp_handlers.h | 16 ++++++++-------- protocols/rdp/src/rdp_client.c | 24 +++++++++++------------- protocols/rdp/src/rdp_handlers.c | 12 ++++++------ protocols/rdp/src/rdp_keymap.c | 12 ++++++------ 5 files changed, 33 insertions(+), 35 deletions(-) diff --git a/protocols/rdp/configure.in b/protocols/rdp/configure.in index 1b6b23d9..13b9e1f0 100644 --- a/protocols/rdp/configure.in +++ b/protocols/rdp/configure.in @@ -46,8 +46,8 @@ AC_PROG_LIBTOOL # Checks for libraries. AC_CHECK_LIB([guac], [guac_get_client],, AC_MSG_ERROR("libguac is required for communication via the guacamole protocol")) AC_CHECK_LIB([cairo], [cairo_create],, AC_MSG_ERROR("cairo is required for drawing instructions")) -AC_CHECK_LIB([freerdp], [freerdp_new],, AC_MSG_ERROR("libfreerdp is required")) -AC_CHECK_LIB([freerdpchanman], [freerdp_chanman_new],, AC_MSG_ERROR("libfreerdp is required")) +AC_CHECK_LIB([freerdp-core], [freerdp_new],, AC_MSG_ERROR("libfreerdp is required")) +AC_CHECK_LIB([freerdp-chanman], [freerdp_chanman_new],, AC_MSG_ERROR("libfreerdp is required")) # Checks for header files. AC_CHECK_HEADERS([guacamole/client.h guacamole/guacio.h guacamole/protocol.h]) diff --git a/protocols/rdp/include/rdp_handlers.h b/protocols/rdp/include/rdp_handlers.h index 4a50b511..3b78392b 100644 --- a/protocols/rdp/include/rdp_handlers.h +++ b/protocols/rdp/include/rdp_handlers.h @@ -51,20 +51,20 @@ RD_HBITMAP guac_rdp_ui_create_bitmap(rdpInst* inst, int width, int height, uint8 void guac_rdp_ui_paint_bitmap(rdpInst* inst, int x, int y, int cx, int cy, int width, int height, uint8* data); void guac_rdp_ui_destroy_bitmap(rdpInst* inst, RD_HBITMAP bmp); void guac_rdp_ui_line(rdpInst* inst, uint8 opcode, int startx, int starty, int endx, int endy, RD_PEN* pen); -void guac_rdp_ui_rect(rdpInst* inst, int x, int y, int cx, int cy, int colour); -void guac_rdp_ui_polygon(rdpInst* inst, uint8 opcode, uint8 fillmode, RD_POINT* point, int npoints, RD_BRUSH* brush, int bgcolour, int fgcolour); +void guac_rdp_ui_rect(rdpInst* inst, int x, int y, int cx, int cy, uint32 colour); +void guac_rdp_ui_polygon(rdpInst* inst, uint8 opcode, uint8 fillmode, RD_POINT* point, int npoints, RD_BRUSH* brush, uint32 bgcolor, uint32 fgcolor); void guac_rdp_ui_polyline(rdpInst* inst, uint8 opcode, RD_POINT* points, int npoints, RD_PEN* pen); -void guac_rdp_ui_ellipse(rdpInst* inst, uint8 opcode, uint8 fillmode, int x, int y, int cx, int cy, RD_BRUSH* brush, int bgcolour, int fgcolour); -void guac_rdp_ui_start_draw_glyphs(rdpInst* inst, int bgcolour, int fgcolour); +void guac_rdp_ui_ellipse(rdpInst* inst, uint8 opcode, uint8 fillmode, int x, int y, int cx, int cy, RD_BRUSH* brush, uint32 bgcolor, uint32 fgcolor); +void guac_rdp_ui_start_draw_glyphs(rdpInst* inst, uint32 bgcolor, uint32 fgcolor); void guac_rdp_ui_draw_glyph(rdpInst* inst, int x, int y, int cx, int cy, RD_HGLYPH glyph); void guac_rdp_ui_end_draw_glyphs(rdpInst* inst, int x, int y, int cx, int cy); uint32 guac_rdp_ui_get_toggle_keys_state(rdpInst* inst); void guac_rdp_ui_bell(rdpInst* inst); void guac_rdp_ui_destblt(rdpInst* inst, uint8 opcode, int x, int y, int cx, int cy); -void guac_rdp_ui_patblt(rdpInst* inst, uint8 opcode, int x, int y, int cx, int cy, RD_BRUSH* brush, int bgcolour, int fgcolour); +void guac_rdp_ui_patblt(rdpInst* inst, uint8 opcode, int x, int y, int cx, int cy, RD_BRUSH* brush, uint32 bgcolor, uint32 fgcolor); void guac_rdp_ui_screenblt(rdpInst* inst, uint8 opcode, int x, int y, int cx, int cy, int srcx, int srcy); void guac_rdp_ui_memblt(rdpInst* inst, uint8 opcode, int x, int y, int width, int height, RD_HBITMAP src, int srcx, int srcy); -void guac_rdp_ui_triblt(rdpInst* inst, uint8 opcode, int x, int y, int cx, int cy, RD_HBITMAP src, int srcx, int srcy, RD_BRUSH* brush, int bgcolour, int fgcolour); +void guac_rdp_ui_triblt(rdpInst* inst, uint8 opcode, int x, int y, int cx, int cy, RD_HBITMAP src, int srcx, int srcy, RD_BRUSH* brush, uint32 bgcolor, uint32 fgcolor); RD_HGLYPH guac_rdp_ui_create_glyph(rdpInst* inst, int width, int height, uint8* data); void guac_rdp_ui_destroy_glyph(rdpInst* inst, RD_HGLYPH glyph); int guac_rdp_ui_select(rdpInst* inst, int rdp_socket); @@ -76,13 +76,13 @@ void guac_rdp_ui_destroy_cursor(rdpInst* inst, RD_HCURSOR cursor); RD_HCURSOR guac_rdp_ui_create_cursor(rdpInst* inst, unsigned int x, unsigned int y, int width, int height, uint8* andmask, uint8* xormask, int bpp); void guac_rdp_ui_set_null_cursor(rdpInst* inst); void guac_rdp_ui_set_default_cursor(rdpInst* inst); -RD_HPALETTE guac_rdp_ui_create_colormap(rdpInst* inst, RD_PALETTE* colours); void guac_rdp_ui_move_pointer(rdpInst* inst, int x, int y); -void guac_rdp_ui_set_colormap(rdpInst* inst, RD_HPALETTE map); RD_HBITMAP guac_rdp_ui_create_surface(rdpInst* inst, int width, int height, RD_HBITMAP old); void guac_rdp_ui_set_surface(rdpInst* inst, RD_HBITMAP surface); void guac_rdp_ui_destroy_surface(rdpInst* inst, RD_HBITMAP surface); void guac_rdp_ui_channel_data(rdpInst* inst, int chan_id, char* data, int data_size, int flags, int total_size); +RD_HPALETTE guac_rdp_ui_create_palette(rdpInst* inst, RD_PALETTE* colours); +void guac_rdp_ui_set_palette(rdpInst* inst, RD_HPALETTE map); extern const int guac_rdp_letter_scancodes[]; diff --git a/protocols/rdp/src/rdp_client.c b/protocols/rdp/src/rdp_client.c index 42b8f4fe..dfc8dff5 100644 --- a/protocols/rdp/src/rdp_client.c +++ b/protocols/rdp/src/rdp_client.c @@ -43,7 +43,7 @@ #include #include -#include +#include #include #include @@ -274,9 +274,9 @@ int guac_client_init(guac_client* client, int argc, char** argv) { rdp_inst->ui_create_cursor = guac_rdp_ui_create_cursor; rdp_inst->ui_set_null_cursor = guac_rdp_ui_set_null_cursor; rdp_inst->ui_set_default_cursor = guac_rdp_ui_set_default_cursor; - rdp_inst->ui_create_colormap = guac_rdp_ui_create_colormap; + rdp_inst->ui_create_palette = guac_rdp_ui_create_palette; rdp_inst->ui_move_pointer = guac_rdp_ui_move_pointer; - rdp_inst->ui_set_colormap = guac_rdp_ui_set_colormap; + rdp_inst->ui_set_palette = guac_rdp_ui_set_palette; rdp_inst->ui_create_surface = guac_rdp_ui_create_surface; rdp_inst->ui_set_surface = guac_rdp_ui_set_surface; rdp_inst->ui_destroy_surface = guac_rdp_ui_destroy_surface; @@ -321,7 +321,7 @@ int rdp_guac_client_mouse_handler(guac_client* client, int x, int y, int mask) { /* If button mask unchanged, just send move event */ if (mask == guac_client_data->mouse_button_mask) - rdp_inst->rdp_send_input(rdp_inst, RDP_INPUT_MOUSE, PTRFLAGS_MOVE, x, y); + rdp_inst->rdp_send_input_mouse(rdp_inst, PTRFLAGS_MOVE, x, y); /* Otherwise, send events describing button change */ else { @@ -341,7 +341,7 @@ int rdp_guac_client_mouse_handler(guac_client* client, int x, int y, int mask) { if (released_mask & 0x02) flags |= PTRFLAGS_BUTTON3; if (released_mask & 0x04) flags |= PTRFLAGS_BUTTON2; - rdp_inst->rdp_send_input(rdp_inst, RDP_INPUT_MOUSE, flags, x, y); + rdp_inst->rdp_send_input_mouse(rdp_inst, flags, x, y); } @@ -357,7 +357,7 @@ int rdp_guac_client_mouse_handler(guac_client* client, int x, int y, int mask) { if (pressed_mask & 0x10) flags |= PTRFLAGS_WHEEL | PTRFLAGS_WHEEL_NEGATIVE | 0x88; /* Send event */ - rdp_inst->rdp_send_input(rdp_inst, RDP_INPUT_MOUSE, flags, x, y); + rdp_inst->rdp_send_input_mouse(rdp_inst, flags, x, y); } @@ -366,17 +366,15 @@ int rdp_guac_client_mouse_handler(guac_client* client, int x, int y, int mask) { /* Down */ if (pressed_mask & 0x08) - rdp_inst->rdp_send_input( + rdp_inst->rdp_send_input_mouse( rdp_inst, - RDP_INPUT_MOUSE, PTRFLAGS_WHEEL | 0x78, x, y); /* Up */ if (pressed_mask & 0x10) - rdp_inst->rdp_send_input( + rdp_inst->rdp_send_input_mouse( rdp_inst, - RDP_INPUT_MOUSE, PTRFLAGS_WHEEL | PTRFLAGS_WHEEL_NEGATIVE | 0x88, x, y); @@ -403,9 +401,9 @@ int rdp_guac_client_key_handler(guac_client* client, int keysym, int pressed) { /* If defined, send event */ if (keymap->scancode != 0) - rdp_inst->rdp_send_input( - rdp_inst, RDP_INPUT_SCANCODE, - (pressed ? RDP_KEYPRESS : RDP_KEYRELEASE) | keymap->flags, + rdp_inst->rdp_send_input_scancode( + rdp_inst, + (pressed ? KBDFLAGS_DOWN : KBDFLAGS_RELEASE) | keymap->flags, keymap->scancode, 0); else diff --git a/protocols/rdp/src/rdp_handlers.c b/protocols/rdp/src/rdp_handlers.c index 6d396d6c..be3faa30 100644 --- a/protocols/rdp/src/rdp_handlers.c +++ b/protocols/rdp/src/rdp_handlers.c @@ -277,7 +277,7 @@ void guac_rdp_ui_line(rdpInst* inst, uint8 opcode, int startx, int starty, int e guac_log_info("guac_rdp_ui_line: STUB\n"); } -void guac_rdp_ui_rect(rdpInst* inst, int x, int y, int cx, int cy, int color) { +void guac_rdp_ui_rect(rdpInst* inst, int x, int y, int cx, int cy, uint32 color) { guac_client* client = (guac_client*) inst->param1; rdp_guac_client_data* guac_client_data = (rdp_guac_client_data*) client->data; @@ -312,7 +312,7 @@ void guac_rdp_ui_rect(rdpInst* inst, int x, int y, int cx, int cy, int color) { } -void guac_rdp_ui_polygon(rdpInst* inst, uint8 opcode, uint8 fillmode, RD_POINT* point, int npoints, RD_BRUSH* brush, int bgcolor, int fgcolor) { +void guac_rdp_ui_polygon(rdpInst* inst, uint8 opcode, uint8 fillmode, RD_POINT* point, int npoints, RD_BRUSH* brush, uint32 bgcolor, uint32 fgcolor) { guac_log_info("guac_rdp_ui_polygon: STUB\n"); } @@ -320,11 +320,11 @@ void guac_rdp_ui_polyline(rdpInst* inst, uint8 opcode, RD_POINT* points, int npo guac_log_info("guac_rdp_ui_polyline: STUB\n"); } -void guac_rdp_ui_ellipse(rdpInst* inst, uint8 opcode, uint8 fillmode, int x, int y, int cx, int cy, RD_BRUSH* brush, int bgcolor, int fgcolor) { +void guac_rdp_ui_ellipse(rdpInst* inst, uint8 opcode, uint8 fillmode, int x, int y, int cx, int cy, RD_BRUSH* brush, uint32 bgcolor, uint32 fgcolor) { guac_log_info("guac_rdp_ui_ellipse: STUB\n"); } -void guac_rdp_ui_start_draw_glyphs(rdpInst* inst, int bgcolor, int fgcolor) { +void guac_rdp_ui_start_draw_glyphs(rdpInst* inst, uint32 bgcolor, uint32 fgcolor) { guac_client* client = (guac_client*) inst->param1; rdp_guac_client_data* guac_client_data = (rdp_guac_client_data*) client->data; @@ -391,7 +391,7 @@ void guac_rdp_ui_destblt(rdpInst* inst, uint8 opcode, int x, int y, int cx, int guac_log_info("guac_rdp_ui_destblt: STUB\n"); } -void guac_rdp_ui_patblt(rdpInst* inst, uint8 opcode, int x, int y, int cx, int cy, RD_BRUSH* brush, int bgcolor, int fgcolor) { +void guac_rdp_ui_patblt(rdpInst* inst, uint8 opcode, int x, int y, int cx, int cy, RD_BRUSH* brush, uint32 bgcolor, uint32 fgcolor) { guac_log_info("guac_rdp_ui_patblt: STUB\n"); } @@ -425,7 +425,7 @@ void guac_rdp_ui_memblt(rdpInst* inst, uint8 opcode, int x, int y, int width, in } -void guac_rdp_ui_triblt(rdpInst* inst, uint8 opcode, int x, int y, int cx, int cy, RD_HBITMAP src, int srcx, int srcy, RD_BRUSH* brush, int bgcolor, int fgcolor) { +void guac_rdp_ui_triblt(rdpInst* inst, uint8 opcode, int x, int y, int cx, int cy, RD_HBITMAP src, int srcx, int srcy, RD_BRUSH* brush, uint32 bgcolor, uint32 fgcolor) { guac_log_info("guac_rdp_ui_triblt: STUB\n"); } diff --git a/protocols/rdp/src/rdp_keymap.c b/protocols/rdp/src/rdp_keymap.c index eebf3509..908b2c1c 100644 --- a/protocols/rdp/src/rdp_keymap.c +++ b/protocols/rdp/src/rdp_keymap.c @@ -35,7 +35,7 @@ * * ***** END LICENSE BLOCK ***** */ -#include +#include #include "rdp_keymap.h" @@ -5260,10 +5260,10 @@ const guac_rdp_keymap guac_rdp_keysym_scancode[256][256] = { { .scancode = 0x00, .flags = 0x00 }, /* 0xff4e */ { .scancode = 0x00, .flags = 0x00 }, /* 0xff4f */ { .scancode = 0x00, .flags = 0x00 }, /* 0xff50 (Home) */ - { .scancode = 0x4B, .flags = KBD_FLAG_EXT }, /* 0xff51 (Left) */ - { .scancode = 0x48, .flags = KBD_FLAG_EXT }, /* 0xff52 (Up) */ - { .scancode = 0x4D, .flags = KBD_FLAG_EXT }, /* 0xff53 (Right) */ - { .scancode = 0x50, .flags = KBD_FLAG_EXT }, /* 0xff54 (Down) */ + { .scancode = 0x4B, .flags = KBDFLAGS_EXTENDED }, /* 0xff51 (Left) */ + { .scancode = 0x48, .flags = KBDFLAGS_EXTENDED }, /* 0xff52 (Up) */ + { .scancode = 0x4D, .flags = KBDFLAGS_EXTENDED }, /* 0xff53 (Right) */ + { .scancode = 0x50, .flags = KBDFLAGS_EXTENDED }, /* 0xff54 (Down) */ { .scancode = 0x00, .flags = 0x00 }, /* 0xff55 (Page_Up) */ { .scancode = 0x00, .flags = 0x00 }, /* 0xff56 (Page_Down) */ { .scancode = 0x00, .flags = 0x00 }, /* 0xff57 (End) */ @@ -5434,7 +5434,7 @@ const guac_rdp_keymap guac_rdp_keysym_scancode[256][256] = { { .scancode = 0x00, .flags = 0x00 }, /* 0xfffc */ { .scancode = 0x00, .flags = 0x00 }, /* 0xfffd */ { .scancode = 0x00, .flags = 0x00 }, /* 0xfffe */ - { .scancode = 0x53, .flags = KBD_FLAG_EXT }, /* 0xffff (Delete) */ + { .scancode = 0x53, .flags = KBDFLAGS_EXTENDED }, /* 0xffff (Delete) */ }, }; From eb613bd71e5d24086d0708a116b63412ce15141c Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Wed, 17 Aug 2011 12:31:20 -0700 Subject: [PATCH 030/253] Restored missing functions (palette). --- protocols/rdp/src/rdp_handlers.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/protocols/rdp/src/rdp_handlers.c b/protocols/rdp/src/rdp_handlers.c index be3faa30..c227c2d0 100644 --- a/protocols/rdp/src/rdp_handlers.c +++ b/protocols/rdp/src/rdp_handlers.c @@ -616,4 +616,12 @@ void guac_rdp_ui_channel_data(rdpInst* inst, int chan_id, char* data, int data_s guac_log_info("guac_rdp_ui_channel_data: STUB\n"); } +RD_HPALETTE guac_rdp_ui_create_palette(rdpInst* inst, RD_PALETTE* colours) { + guac_log_info("guac_rdp_ui_create_palette: STUB\n"); + return NULL; +} + +void guac_rdp_ui_set_palette(rdpInst* inst, RD_HPALETTE map) { + guac_log_info("guac_rdp_ui_set_palette: STUB\n"); +} From bfdd7f325ff460df912576a373d5e6fe2ca52c8d Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Thu, 18 Aug 2011 10:44:34 -0700 Subject: [PATCH 031/253] Fixed keyboard event, added missing init. --- protocols/rdp/src/rdp_client.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/protocols/rdp/src/rdp_client.c b/protocols/rdp/src/rdp_client.c index dfc8dff5..9e435189 100644 --- a/protocols/rdp/src/rdp_client.c +++ b/protocols/rdp/src/rdp_client.c @@ -217,10 +217,13 @@ int guac_client_init(guac_client* client, int argc, char** argv) { PERF_DISABLE_WALLPAPER | PERF_DISABLE_FULLWINDOWDRAG | PERF_DISABLE_MENUANIMATIONS; + settings->mouse_motion = 1; settings->off_screen_bitmaps = 1; settings->triblt = 0; + settings->software_gdi = 0; settings->new_cursors = 1; settings->rdp_version = 5; + settings->rdp_security = 1; /* Init client */ rdp_inst = freerdp_new(settings); @@ -233,10 +236,12 @@ int guac_client_init(guac_client* client, int argc, char** argv) { guac_client_data->mouse_button_mask = 0; guac_client_data->current_surface = GUAC_DEFAULT_LAYER; + /* Store client data */ rdp_inst->param1 = client; client->data = guac_client_data; + /* RDP handlers */ rdp_inst->ui_error = guac_rdp_ui_error; rdp_inst->ui_warning = guac_rdp_ui_warning; @@ -403,9 +408,9 @@ int rdp_guac_client_key_handler(guac_client* client, int keysym, int pressed) { if (keymap->scancode != 0) rdp_inst->rdp_send_input_scancode( rdp_inst, - (pressed ? KBDFLAGS_DOWN : KBDFLAGS_RELEASE) | keymap->flags, - keymap->scancode, - 0); + !pressed, + keymap->flags & KBDFLAGS_EXTENDED, + keymap->scancode); else guac_log_info("unmapped keysym: 0x%x", keysym); From 31268c3f6c025e82c61f7e2edc74f95c91d062d1 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Tue, 13 Sep 2011 10:02:32 -0700 Subject: [PATCH 032/253] Altered glyph drawing order. --- protocols/rdp/src/rdp_handlers.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/protocols/rdp/src/rdp_handlers.c b/protocols/rdp/src/rdp_handlers.c index c227c2d0..76e31b6a 100644 --- a/protocols/rdp/src/rdp_handlers.c +++ b/protocols/rdp/src/rdp_handlers.c @@ -359,19 +359,19 @@ void guac_rdp_ui_draw_glyph(rdpInst* inst, int x, int y, int width, int height, guac_client_data->foreground.blue, 255); - /* Stencil */ - guac_send_copy(io, - (guac_layer*) glyph, 0, 0, width, height, - GUAC_COMP_OVER, current_surface, x, y); - /* Background */ - /*guac_send_rect(io, GUAC_COMP_RATOP, current_surface, + /*guac_send_rect(io, GUAC_COMP_OVER, current_surface, x, y, width, height, guac_client_data->background.red, guac_client_data->background.green, guac_client_data->background.blue, 255);*/ + /* Draw */ + guac_send_copy(io, + (guac_layer*) glyph, 0, 0, width, height, + GUAC_COMP_OVER, current_surface, x, y); + } void guac_rdp_ui_end_draw_glyphs(rdpInst* inst, int x, int y, int cx, int cy) { From e9b20e37d346e2b28556374b7b89e57b9791d375 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Sun, 23 Oct 2011 23:34:53 -0700 Subject: [PATCH 033/253] Migrated to new location for default layer. --- protocols/rdp/src/rdp_client.c | 2 +- protocols/rdp/src/rdp_handlers.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/protocols/rdp/src/rdp_client.c b/protocols/rdp/src/rdp_client.c index 9e435189..c18260ce 100644 --- a/protocols/rdp/src/rdp_client.c +++ b/protocols/rdp/src/rdp_client.c @@ -234,7 +234,7 @@ int guac_client_init(guac_client* client, int argc, char** argv) { } guac_client_data->rdp_inst = rdp_inst; guac_client_data->mouse_button_mask = 0; - guac_client_data->current_surface = GUAC_DEFAULT_LAYER; + guac_client_data->current_surface = client->default_layer; /* Store client data */ diff --git a/protocols/rdp/src/rdp_handlers.c b/protocols/rdp/src/rdp_handlers.c index 76e31b6a..5d0a83c9 100644 --- a/protocols/rdp/src/rdp_handlers.c +++ b/protocols/rdp/src/rdp_handlers.c @@ -403,7 +403,7 @@ void guac_rdp_ui_screenblt(rdpInst* inst, uint8 opcode, int x, int y, int cx, in GUACIO* io = client->io; guac_send_copy(io, - GUAC_DEFAULT_LAYER, srcx, srcy, cx, cy, + client->default_layer, srcx, srcy, cx, cy, GUAC_COMP_OVER, current_surface, x, y); } @@ -596,7 +596,7 @@ void guac_rdp_ui_set_surface(rdpInst* inst, RD_HBITMAP surface) { guac_send_size(io, inst->settings->width, inst->settings->height); guac_flush(io); - guac_client_data->current_surface = GUAC_DEFAULT_LAYER; + guac_client_data->current_surface = client->default_layer; } else { guac_client_data->current_surface = surface; From 88d7b8ef704fcf786a32beb7a0f30e1c15a1f5d1 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Tue, 25 Oct 2011 17:29:11 -0700 Subject: [PATCH 034/253] Revert "Migrated to new location for default layer." This reverts commit dd43edd7ae8d965483ff2c1b178a5e1d86dc1c52. --- protocols/rdp/src/rdp_client.c | 2 +- protocols/rdp/src/rdp_handlers.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/protocols/rdp/src/rdp_client.c b/protocols/rdp/src/rdp_client.c index c18260ce..9e435189 100644 --- a/protocols/rdp/src/rdp_client.c +++ b/protocols/rdp/src/rdp_client.c @@ -234,7 +234,7 @@ int guac_client_init(guac_client* client, int argc, char** argv) { } guac_client_data->rdp_inst = rdp_inst; guac_client_data->mouse_button_mask = 0; - guac_client_data->current_surface = client->default_layer; + guac_client_data->current_surface = GUAC_DEFAULT_LAYER; /* Store client data */ diff --git a/protocols/rdp/src/rdp_handlers.c b/protocols/rdp/src/rdp_handlers.c index 5d0a83c9..76e31b6a 100644 --- a/protocols/rdp/src/rdp_handlers.c +++ b/protocols/rdp/src/rdp_handlers.c @@ -403,7 +403,7 @@ void guac_rdp_ui_screenblt(rdpInst* inst, uint8 opcode, int x, int y, int cx, in GUACIO* io = client->io; guac_send_copy(io, - client->default_layer, srcx, srcy, cx, cy, + GUAC_DEFAULT_LAYER, srcx, srcy, cx, cy, GUAC_COMP_OVER, current_surface, x, y); } @@ -596,7 +596,7 @@ void guac_rdp_ui_set_surface(rdpInst* inst, RD_HBITMAP surface) { guac_send_size(io, inst->settings->width, inst->settings->height); guac_flush(io); - guac_client_data->current_surface = client->default_layer; + guac_client_data->current_surface = GUAC_DEFAULT_LAYER; } else { guac_client_data->current_surface = surface; From a3604301894c4dd5ec36ed1401b6b8819c6795b7 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Sat, 26 Nov 2011 15:47:11 -0800 Subject: [PATCH 035/253] Bumped version number, migrated to new libguac API. --- protocols/rdp/configure.in | 4 +- protocols/rdp/src/rdp_client.c | 37 ++++---- protocols/rdp/src/rdp_handlers.c | 146 ++++++++++++++++++------------- 3 files changed, 105 insertions(+), 82 deletions(-) diff --git a/protocols/rdp/configure.in b/protocols/rdp/configure.in index 13b9e1f0..076567fd 100644 --- a/protocols/rdp/configure.in +++ b/protocols/rdp/configure.in @@ -35,7 +35,7 @@ # ***** END LICENSE BLOCK ***** AC_INIT(src/rdp_client.c) -AM_INIT_AUTOMAKE([libguac-client-rdp], 0.4.0) +AM_INIT_AUTOMAKE([libguac-client-rdp], 0.5.0) AC_CONFIG_MACRO_DIR([m4]) # Checks for programs. @@ -44,7 +44,7 @@ AC_PROG_CC_C99 AC_PROG_LIBTOOL # Checks for libraries. -AC_CHECK_LIB([guac], [guac_get_client],, AC_MSG_ERROR("libguac is required for communication via the guacamole protocol")) +AC_CHECK_LIB([guac], [guac_client_plugin_open],, AC_MSG_ERROR("libguac must be installed first")) AC_CHECK_LIB([cairo], [cairo_create],, AC_MSG_ERROR("cairo is required for drawing instructions")) AC_CHECK_LIB([freerdp-core], [freerdp_new],, AC_MSG_ERROR("libfreerdp is required")) AC_CHECK_LIB([freerdp-chanman], [freerdp_chanman_new],, AC_MSG_ERROR("libfreerdp is required")) diff --git a/protocols/rdp/src/rdp_client.c b/protocols/rdp/src/rdp_client.c index 9e435189..33d575a4 100644 --- a/protocols/rdp/src/rdp_client.c +++ b/protocols/rdp/src/rdp_client.c @@ -45,8 +45,7 @@ #include #include -#include -#include +#include #include #include @@ -97,13 +96,13 @@ int rdp_guac_client_handle_messages(guac_client* client) { /* get rdp fds */ if (rdp_inst->rdp_get_fds(rdp_inst, read_fds, &read_count, write_fds, &write_count) != 0) { - guac_log_error("Unable to read RDP file descriptors."); + guac_client_log_error(client, "Unable to read RDP file descriptors."); return 1; } /* get channel fds */ if (freerdp_chanman_get_fds(chanman, rdp_inst, read_fds, &read_count, write_fds, &write_count) != 0) { - guac_log_error("Unable to read RDP channel file descriptors."); + guac_client_log_error(client, "Unable to read RDP channel file descriptors."); return 1; } @@ -128,7 +127,7 @@ int rdp_guac_client_handle_messages(guac_client* client) { /* If no file descriptors, error */ if (max_fd == 0) { - guac_log_error("No file descriptors"); + guac_client_log_error(client, "No file descriptors"); return 1; } @@ -140,20 +139,20 @@ int rdp_guac_client_handle_messages(guac_client* client) { (errno == EINPROGRESS) || (errno == EINTR))) /* signal occurred */ { - guac_log_error("Error waiting for file descriptor."); + guac_client_log_error(client, "Error waiting for file descriptor."); return 1; } } /* check the libfreerdp fds */ if (rdp_inst->rdp_check_fds(rdp_inst) != 0) { - guac_log_error("Error handling RDP file descriptors."); + guac_client_log_error(client, "Error handling RDP file descriptors."); return 1; } /* check channel fds */ if (freerdp_chanman_check_fds(chanman, rdp_inst) != 0) { - guac_log_error("Error handling RDP channel file descriptors."); + guac_client_log_error(client, "Error handling RDP channel file descriptors."); return 1; } @@ -174,8 +173,8 @@ int guac_client_init(guac_client* client, int argc, char** argv) { int port = RDP_DEFAULT_PORT; if (argc < 2) { - guac_send_error(client->io, "Wrong argument count received."); - guac_flush(client->io); + guac_protocol_send_error(client->socket, "Wrong argument count received."); + guac_socket_flush(client->socket); return 1; } @@ -228,8 +227,8 @@ int guac_client_init(guac_client* client, int argc, char** argv) { /* Init client */ rdp_inst = freerdp_new(settings); if (rdp_inst == NULL) { - guac_send_error(client->io, "Error initializing RDP client"); - guac_flush(client->io); + guac_protocol_send_error(client->socket, "Error initializing RDP client"); + guac_socket_flush(client->socket); return 1; } guac_client_data->rdp_inst = rdp_inst; @@ -289,22 +288,22 @@ int guac_client_init(guac_client* client, int argc, char** argv) { /* Init chanman (pre-connect) */ if (freerdp_chanman_pre_connect(chanman, rdp_inst)) { - guac_send_error(client->io, "Error initializing RDP client channel manager"); - guac_flush(client->io); + guac_protocol_send_error(client->socket, "Error initializing RDP client channel manager"); + guac_socket_flush(client->socket); return 1; } /* Connect to RDP server */ if (rdp_inst->rdp_connect(rdp_inst)) { - guac_send_error(client->io, "Error connecting to RDP server"); - guac_flush(client->io); + guac_protocol_send_error(client->socket, "Error connecting to RDP server"); + guac_socket_flush(client->socket); return 1; } /* Init chanman (post-connect) */ if (freerdp_chanman_post_connect(chanman, rdp_inst)) { - guac_send_error(client->io, "Error initializing RDP client channel manager"); - guac_flush(client->io); + guac_protocol_send_error(client->socket, "Error initializing RDP client channel manager"); + guac_socket_flush(client->socket); return 1; } @@ -412,7 +411,7 @@ int rdp_guac_client_key_handler(guac_client* client, int keysym, int pressed) { keymap->flags & KBDFLAGS_EXTENDED, keymap->scancode); else - guac_log_info("unmapped keysym: 0x%x", keysym); + guac_client_log_info(client, "unmapped keysym: 0x%x", keysym); } diff --git a/protocols/rdp/src/rdp_handlers.c b/protocols/rdp/src/rdp_handlers.c index 76e31b6a..ee1304e4 100644 --- a/protocols/rdp/src/rdp_handlers.c +++ b/protocols/rdp/src/rdp_handlers.c @@ -40,8 +40,7 @@ #include -#include -#include +#include #include #include @@ -77,19 +76,21 @@ void guac_rdp_convert_color(int depth, int color, guac_rdp_color* comp) { void guac_rdp_ui_error(rdpInst* inst, const char* text) { guac_client* client = (guac_client*) inst->param1; - GUACIO* io = client->io; + guac_socket* socket = client->socket; - guac_send_error(io, text); - guac_flush(io); + guac_protocol_send_error(socket, text); + guac_socket_flush(socket); } void guac_rdp_ui_warning(rdpInst* inst, const char* text) { - guac_log_info("guac_rdp_ui_warning: %s\n", text); + guac_client* client = (guac_client*) inst->param1; + guac_client_log_info(client, "guac_rdp_ui_warning: %s\n", text); } void guac_rdp_ui_unimpl(rdpInst* inst, const char* text) { - guac_log_info("guac_rdp_ui_unimpl: %s\n", text); + guac_client* client = (guac_client*) inst->param1; + guac_client_log_info(client, "guac_rdp_ui_unimpl: %s\n", text); } void guac_rdp_ui_begin_update(rdpInst* inst) { @@ -98,16 +99,18 @@ void guac_rdp_ui_begin_update(rdpInst* inst) { void guac_rdp_ui_end_update(rdpInst* inst) { guac_client* client = (guac_client*) inst->param1; - GUACIO* io = client->io; - guac_flush(io); + guac_socket* socket = client->socket; + guac_socket_flush(socket); } void guac_rdp_ui_desktop_save(rdpInst* inst, int offset, int x, int y, int cx, int cy) { - guac_log_info("guac_rdp_ui_desktop_save: STUB\n"); + guac_client* client = (guac_client*) inst->param1; + guac_client_log_info(client, "guac_rdp_ui_desktop_save: STUB\n"); } void guac_rdp_ui_desktop_restore(rdpInst* inst, int offset, int x, int y, int cx, int cy) { - guac_log_info("guac_rdp_ui_desktop_restore: STUB\n"); + guac_client* client = (guac_client*) inst->param1; + guac_client_log_info(client, "guac_rdp_ui_desktop_restore: STUB\n"); } @@ -115,7 +118,7 @@ RD_HBITMAP guac_rdp_ui_create_bitmap(rdpInst* inst, int width, int height, uint8 /* Allocate buffer */ guac_client* client = (guac_client*) inst->param1; - GUACIO* io = client->io; + guac_socket* socket = client->socket; guac_layer* buffer = guac_client_alloc_buffer(client); int x, y; @@ -174,8 +177,8 @@ RD_HBITMAP guac_rdp_ui_create_bitmap(rdpInst* inst, int width, int height, uint8 } surface = cairo_image_surface_create_for_data(image_buffer, CAIRO_FORMAT_RGB24, width, height, stride); - guac_send_png(io, GUAC_COMP_SRC, buffer, 0, 0, surface); - guac_flush(io); + guac_protocol_send_png(socket, GUAC_COMP_SRC, buffer, 0, 0, surface); + guac_socket_flush(socket); /* Free surface */ cairo_surface_destroy(surface); @@ -190,7 +193,7 @@ void guac_rdp_ui_paint_bitmap(rdpInst* inst, int x, int y, int cx, int cy, int w guac_client* client = (guac_client*) inst->param1; rdp_guac_client_data* guac_client_data = (rdp_guac_client_data*) client->data; const guac_layer* current_surface = guac_client_data->current_surface; - GUACIO* io = client->io; + guac_socket* socket = client->socket; int dx, dy; int stride; @@ -256,8 +259,8 @@ void guac_rdp_ui_paint_bitmap(rdpInst* inst, int x, int y, int cx, int cy, int w } surface = cairo_image_surface_create_for_data(image_buffer, CAIRO_FORMAT_RGB24, cx, cy, stride); - guac_send_png(io, GUAC_COMP_OVER, current_surface, x, y, surface); - guac_flush(io); + guac_protocol_send_png(socket, GUAC_COMP_OVER, current_surface, x, y, surface); + guac_socket_flush(socket); /* Free surface */ cairo_surface_destroy(surface); @@ -274,7 +277,8 @@ void guac_rdp_ui_destroy_bitmap(rdpInst* inst, RD_HBITMAP bmp) { } void guac_rdp_ui_line(rdpInst* inst, uint8 opcode, int startx, int starty, int endx, int endy, RD_PEN* pen) { - guac_log_info("guac_rdp_ui_line: STUB\n"); + guac_client* client = (guac_client*) inst->param1; + guac_client_log_info(client, "guac_rdp_ui_line: STUB\n"); } void guac_rdp_ui_rect(rdpInst* inst, int x, int y, int cx, int cy, uint32 color) { @@ -282,7 +286,7 @@ void guac_rdp_ui_rect(rdpInst* inst, int x, int y, int cx, int cy, uint32 color) guac_client* client = (guac_client*) inst->param1; rdp_guac_client_data* guac_client_data = (rdp_guac_client_data*) client->data; const guac_layer* current_surface = guac_client_data->current_surface; - GUACIO* io = client->io; + guac_socket* socket = client->socket; unsigned char red, green, blue; @@ -306,22 +310,25 @@ void guac_rdp_ui_rect(rdpInst* inst, int x, int y, int cx, int cy, uint32 color) } /* Send rectangle */ - guac_send_rect(io, GUAC_COMP_OVER, current_surface, + guac_protocol_send_rect(socket, GUAC_COMP_OVER, current_surface, x, y, cx, cy, red, green, blue, 0xFF); } void guac_rdp_ui_polygon(rdpInst* inst, uint8 opcode, uint8 fillmode, RD_POINT* point, int npoints, RD_BRUSH* brush, uint32 bgcolor, uint32 fgcolor) { - guac_log_info("guac_rdp_ui_polygon: STUB\n"); + guac_client* client = (guac_client*) inst->param1; + guac_client_log_info(client, "guac_rdp_ui_polygon: STUB\n"); } void guac_rdp_ui_polyline(rdpInst* inst, uint8 opcode, RD_POINT* points, int npoints, RD_PEN* pen) { - guac_log_info("guac_rdp_ui_polyline: STUB\n"); + guac_client* client = (guac_client*) inst->param1; + guac_client_log_info(client, "guac_rdp_ui_polyline: STUB\n"); } void guac_rdp_ui_ellipse(rdpInst* inst, uint8 opcode, uint8 fillmode, int x, int y, int cx, int cy, RD_BRUSH* brush, uint32 bgcolor, uint32 fgcolor) { - guac_log_info("guac_rdp_ui_ellipse: STUB\n"); + guac_client* client = (guac_client*) inst->param1; + guac_client_log_info(client, "guac_rdp_ui_ellipse: STUB\n"); } void guac_rdp_ui_start_draw_glyphs(rdpInst* inst, uint32 bgcolor, uint32 fgcolor) { @@ -346,13 +353,13 @@ void guac_rdp_ui_draw_glyph(rdpInst* inst, int x, int y, int width, int height, guac_client* client = (guac_client*) inst->param1; rdp_guac_client_data* guac_client_data = (rdp_guac_client_data*) client->data; const guac_layer* current_surface = guac_client_data->current_surface; - GUACIO* io = client->io; + guac_socket* socket = client->socket; /* NOTE: Originally: Stencil=SRC, FG=ATOP, BG=RATOP */ /* Temporarily removed BG drawing... */ /* Foreground */ - guac_send_rect(io, GUAC_COMP_ATOP, glyph, + guac_protocol_send_rect(socket, GUAC_COMP_ATOP, glyph, 0, 0, width, height, guac_client_data->foreground.red, guac_client_data->foreground.green, @@ -360,7 +367,7 @@ void guac_rdp_ui_draw_glyph(rdpInst* inst, int x, int y, int width, int height, 255); /* Background */ - /*guac_send_rect(io, GUAC_COMP_OVER, current_surface, + /*guac_protocol_send_rect(socket, GUAC_COMP_OVER, current_surface, x, y, width, height, guac_client_data->background.red, guac_client_data->background.green, @@ -368,7 +375,7 @@ void guac_rdp_ui_draw_glyph(rdpInst* inst, int x, int y, int width, int height, 255);*/ /* Draw */ - guac_send_copy(io, + guac_protocol_send_copy(socket, (guac_layer*) glyph, 0, 0, width, height, GUAC_COMP_OVER, current_surface, x, y); @@ -379,20 +386,24 @@ void guac_rdp_ui_end_draw_glyphs(rdpInst* inst, int x, int y, int cx, int cy) { } uint32 guac_rdp_ui_get_toggle_keys_state(rdpInst* inst) { - guac_log_info("guac_rdp_ui_get_toggle_keys_state: STUB\n"); + guac_client* client = (guac_client*) inst->param1; + guac_client_log_info(client, "guac_rdp_ui_get_toggle_keys_state: STUB\n"); return 0; } void guac_rdp_ui_bell(rdpInst* inst) { - guac_log_info("guac_rdp_ui_bell: STUB\n"); + guac_client* client = (guac_client*) inst->param1; + guac_client_log_info(client, "guac_rdp_ui_bell: STUB\n"); } void guac_rdp_ui_destblt(rdpInst* inst, uint8 opcode, int x, int y, int cx, int cy) { - guac_log_info("guac_rdp_ui_destblt: STUB\n"); + guac_client* client = (guac_client*) inst->param1; + guac_client_log_info(client, "guac_rdp_ui_destblt: STUB\n"); } void guac_rdp_ui_patblt(rdpInst* inst, uint8 opcode, int x, int y, int cx, int cy, RD_BRUSH* brush, uint32 bgcolor, uint32 fgcolor) { - guac_log_info("guac_rdp_ui_patblt: STUB\n"); + guac_client* client = (guac_client*) inst->param1; + guac_client_log_info(client, "guac_rdp_ui_patblt: STUB\n"); } void guac_rdp_ui_screenblt(rdpInst* inst, uint8 opcode, int x, int y, int cx, int cy, int srcx, int srcy) { @@ -400,9 +411,9 @@ void guac_rdp_ui_screenblt(rdpInst* inst, uint8 opcode, int x, int y, int cx, in guac_client* client = (guac_client*) inst->param1; rdp_guac_client_data* guac_client_data = (rdp_guac_client_data*) client->data; const guac_layer* current_surface = guac_client_data->current_surface; - GUACIO* io = client->io; + guac_socket* socket = client->socket; - guac_send_copy(io, + guac_protocol_send_copy(socket, GUAC_DEFAULT_LAYER, srcx, srcy, cx, cy, GUAC_COMP_OVER, current_surface, x, y); @@ -413,27 +424,29 @@ void guac_rdp_ui_memblt(rdpInst* inst, uint8 opcode, int x, int y, int width, in guac_client* client = (guac_client*) inst->param1; rdp_guac_client_data* guac_client_data = (rdp_guac_client_data*) client->data; const guac_layer* current_surface = guac_client_data->current_surface; - GUACIO* io = client->io; + guac_socket* socket = client->socket; if (opcode != 204) - guac_log_info("guac_rdp_ui_memblt: opcode=%i, index=%i\n", opcode, + guac_client_log_info(client, + "guac_rdp_ui_memblt: opcode=%i, index=%i\n", opcode, ((guac_layer*) src)->index); - guac_send_copy(io, + guac_protocol_send_copy(socket, (guac_layer*) src, srcx, srcy, width, height, GUAC_COMP_OVER, current_surface, x, y); } void guac_rdp_ui_triblt(rdpInst* inst, uint8 opcode, int x, int y, int cx, int cy, RD_HBITMAP src, int srcx, int srcy, RD_BRUSH* brush, uint32 bgcolor, uint32 fgcolor) { - guac_log_info("guac_rdp_ui_triblt: STUB\n"); + guac_client* client = (guac_client*) inst->param1; + guac_client_log_info(client, "guac_rdp_ui_triblt: STUB\n"); } RD_HGLYPH guac_rdp_ui_create_glyph(rdpInst* inst, int width, int height, uint8* data) { /* Allocate buffer */ guac_client* client = (guac_client*) inst->param1; - GUACIO* io = client->io; + guac_socket* socket = client->socket; guac_layer* glyph = guac_client_alloc_buffer(client); int x, y, i; @@ -480,8 +493,8 @@ RD_HGLYPH guac_rdp_ui_create_glyph(rdpInst* inst, int width, int height, uint8* } surface = cairo_image_surface_create_for_data(image_buffer, CAIRO_FORMAT_ARGB32, width, height, stride); - guac_send_png(io, GUAC_COMP_SRC, glyph, 0, 0, surface); - guac_flush(io); + guac_protocol_send_png(socket, GUAC_COMP_SRC, glyph, 0, 0, surface); + guac_socket_flush(socket); /* Free surface */ cairo_surface_destroy(surface); @@ -509,9 +522,9 @@ void guac_rdp_ui_set_clip(rdpInst* inst, int x, int y, int cx, int cy) { guac_client* client = (guac_client*) inst->param1; rdp_guac_client_data* guac_client_data = (rdp_guac_client_data*) client->data; const guac_layer* current_surface = guac_client_data->current_surface; - GUACIO* io = client->io; + guac_socket* socket = client->socket; - guac_send_clip(io, current_surface, x, y, cx, cy); + guac_protocol_send_clip(socket, current_surface, x, y, cx, cy); } @@ -520,51 +533,59 @@ void guac_rdp_ui_reset_clip(rdpInst* inst) { guac_client* client = (guac_client*) inst->param1; rdp_guac_client_data* guac_client_data = (rdp_guac_client_data*) client->data; const guac_layer* current_surface = guac_client_data->current_surface; - GUACIO* io = client->io; + guac_socket* socket = client->socket; - guac_send_clip(io, current_surface, 0, 0, inst->settings->width, inst->settings->height); + guac_protocol_send_clip(socket, current_surface, 0, 0, inst->settings->width, inst->settings->height); } void guac_rdp_ui_resize_window(rdpInst* inst) { - guac_log_info("guac_rdp_ui_resize_window: %ix%i\n", inst->settings->width, inst->settings->height); + guac_client* client = (guac_client*) inst->param1; + guac_client_log_info(client, "guac_rdp_ui_resize_window: %ix%i\n", inst->settings->width, inst->settings->height); } void guac_rdp_ui_set_cursor(rdpInst* inst, RD_HCURSOR cursor) { - guac_log_info("guac_rdp_ui_set_cursor: STUB\n"); + guac_client* client = (guac_client*) inst->param1; + guac_client_log_info(client, "guac_rdp_ui_set_cursor: STUB\n"); } void guac_rdp_ui_destroy_cursor(rdpInst* inst, RD_HCURSOR cursor) { - guac_log_info("guac_rdp_ui_destroy_cursor: STUB\n"); + guac_client* client = (guac_client*) inst->param1; + guac_client_log_info(client, "guac_rdp_ui_destroy_cursor: STUB\n"); } RD_HCURSOR guac_rdp_ui_create_cursor(rdpInst* inst, unsigned int x, unsigned int y, int width, int height, uint8* andmask, uint8* xormask, int bpp) { guac_client* client = (guac_client*) inst->param1; - guac_log_info("guac_rdp_ui_create_cursor: STUB\n"); + guac_client_log_info(client, "guac_rdp_ui_create_cursor: STUB\n"); return guac_client_alloc_buffer(client); } void guac_rdp_ui_set_null_cursor(rdpInst* inst) { - guac_log_info("guac_rdp_ui_set_null_cursor: STUB\n"); + guac_client* client = (guac_client*) inst->param1; + guac_client_log_info(client, "guac_rdp_ui_set_null_cursor: STUB\n"); } void guac_rdp_ui_set_default_cursor(rdpInst* inst) { - guac_log_info("guac_rdp_ui_set_default_cursor: STUB\n"); + guac_client* client = (guac_client*) inst->param1; + guac_client_log_info(client, "guac_rdp_ui_set_default_cursor: STUB\n"); } RD_HPALETTE guac_rdp_ui_create_colormap(rdpInst* inst, RD_PALETTE* colors) { - guac_log_info("guac_rdp_ui_create_colormap: STUB\n"); + guac_client* client = (guac_client*) inst->param1; + guac_client_log_info(client, "guac_rdp_ui_create_colormap: STUB\n"); return NULL; } void guac_rdp_ui_move_pointer(rdpInst* inst, int x, int y) { - guac_log_info("guac_rdp_ui_move_pointer: STUB\n"); + guac_client* client = (guac_client*) inst->param1; + guac_client_log_info(client, "guac_rdp_ui_move_pointer: STUB\n"); } void guac_rdp_ui_set_colormap(rdpInst* inst, RD_HPALETTE map) { - guac_log_info("guac_rdp_ui_set_colormap: STUB\n"); + guac_client* client = (guac_client*) inst->param1; + guac_client_log_info(client, "guac_rdp_ui_set_colormap: STUB\n"); } RD_HBITMAP guac_rdp_ui_create_surface(rdpInst* inst, int width, int height, RD_HBITMAP old) { @@ -585,16 +606,16 @@ void guac_rdp_ui_set_surface(rdpInst* inst, RD_HBITMAP surface) { guac_client* client = (guac_client*) inst->param1; rdp_guac_client_data* guac_client_data = (rdp_guac_client_data*) client->data; - GUACIO* io = client->io; + guac_socket* socket = client->socket; - guac_log_info("guac_rdp_ui_set_surface: %p (index=%i)\n", surface, surface != NULL ? ((guac_layer*) surface)->index : 0); + guac_client_log_info(client, "guac_rdp_ui_set_surface: %p (index=%i)\n", surface, surface != NULL ? ((guac_layer*) surface)->index : 0); /* Init desktop */ if (surface == NULL) { - guac_send_name(io, inst->settings->server); - guac_send_size(io, inst->settings->width, inst->settings->height); - guac_flush(io); + guac_protocol_send_name(socket, inst->settings->server); + guac_protocol_send_size(socket, inst->settings->width, inst->settings->height); + guac_socket_flush(socket); guac_client_data->current_surface = GUAC_DEFAULT_LAYER; } @@ -613,15 +634,18 @@ void guac_rdp_ui_destroy_surface(rdpInst* inst, RD_HBITMAP surface) { } void guac_rdp_ui_channel_data(rdpInst* inst, int chan_id, char* data, int data_size, int flags, int total_size) { - guac_log_info("guac_rdp_ui_channel_data: STUB\n"); + guac_client* client = (guac_client*) inst->param1; + guac_client_log_info(client, "guac_rdp_ui_channel_data: STUB\n"); } RD_HPALETTE guac_rdp_ui_create_palette(rdpInst* inst, RD_PALETTE* colours) { - guac_log_info("guac_rdp_ui_create_palette: STUB\n"); + guac_client* client = (guac_client*) inst->param1; + guac_client_log_info(client, "guac_rdp_ui_create_palette: STUB\n"); return NULL; } void guac_rdp_ui_set_palette(rdpInst* inst, RD_HPALETTE map) { - guac_log_info("guac_rdp_ui_set_palette: STUB\n"); + guac_client* client = (guac_client*) inst->param1; + guac_client_log_info(client, "guac_rdp_ui_set_palette: STUB\n"); } From e3c4c858d19eefa7b72e75a94772df9391483427 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Sun, 11 Dec 2011 14:50:31 -0800 Subject: [PATCH 036/253] Updated README to point to new Trac. --- protocols/rdp/README | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/protocols/rdp/README b/protocols/rdp/README index 5674dc50..84629d07 100644 --- a/protocols/rdp/README +++ b/protocols/rdp/README @@ -71,5 +71,5 @@ the standard configure script. Please report any bugs encountered by opening a new ticket at the Trac system hosted at: - http://sourceforge.net/apps/trac/guacamole/ + http://guac-dev.org/trac/ From 6a1994484c98ca1e0c72b1b36d280d27ab2ccce2 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Fri, 30 Dec 2011 00:10:28 -0800 Subject: [PATCH 037/253] Refactored, removed functionality. Fixed most errors on compile. Will likely not actually work in current state. --- protocols/rdp/Makefile.am | 2 +- protocols/rdp/configure.in | 4 +- .../rdp/include/{rdp_client.h => client.h} | 24 +- protocols/rdp/include/guac_handlers.h | 49 +++++ protocols/rdp/include/rdp_handlers.h | 84 ++++--- protocols/rdp/include/rdp_keymap.h | 4 +- protocols/rdp/src/client.c | 173 +++++++++++++++ .../rdp/src/{rdp_client.c => guac_handlers.c} | 204 ++--------------- protocols/rdp/src/rdp_handlers.c | 205 ++++++------------ 9 files changed, 366 insertions(+), 383 deletions(-) rename protocols/rdp/include/{rdp_client.h => client.h} (82%) create mode 100644 protocols/rdp/include/guac_handlers.h create mode 100644 protocols/rdp/src/client.c rename protocols/rdp/src/{rdp_client.c => guac_handlers.c} (50%) diff --git a/protocols/rdp/Makefile.am b/protocols/rdp/Makefile.am index 109d801c..c4e42dc4 100644 --- a/protocols/rdp/Makefile.am +++ b/protocols/rdp/Makefile.am @@ -41,7 +41,7 @@ AM_CFLAGS = -Werror -Wall -pedantic -Iinclude lib_LTLIBRARIES = libguac-client-rdp.la -libguac_client_rdp_la_SOURCES = src/rdp_client.c src/rdp_handlers.c src/rdp_keymap.c +libguac_client_rdp_la_SOURCES = src/client.c src/rdp_handlers.c src/rdp_keymap.c libguac_client_rdp_la_LDFLAGS = -version-info 0:0:0 diff --git a/protocols/rdp/configure.in b/protocols/rdp/configure.in index 076567fd..48d1c20c 100644 --- a/protocols/rdp/configure.in +++ b/protocols/rdp/configure.in @@ -34,7 +34,7 @@ # # ***** END LICENSE BLOCK ***** -AC_INIT(src/rdp_client.c) +AC_INIT(src/client.c) AM_INIT_AUTOMAKE([libguac-client-rdp], 0.5.0) AC_CONFIG_MACRO_DIR([m4]) @@ -47,7 +47,7 @@ AC_PROG_LIBTOOL AC_CHECK_LIB([guac], [guac_client_plugin_open],, AC_MSG_ERROR("libguac must be installed first")) AC_CHECK_LIB([cairo], [cairo_create],, AC_MSG_ERROR("cairo is required for drawing instructions")) AC_CHECK_LIB([freerdp-core], [freerdp_new],, AC_MSG_ERROR("libfreerdp is required")) -AC_CHECK_LIB([freerdp-chanman], [freerdp_chanman_new],, AC_MSG_ERROR("libfreerdp is required")) +AC_CHECK_LIB([freerdp-channels], [freerdp_channels_new],, AC_MSG_ERROR("libfreerdp is required")) # Checks for header files. AC_CHECK_HEADERS([guacamole/client.h guacamole/guacio.h guacamole/protocol.h]) diff --git a/protocols/rdp/include/rdp_client.h b/protocols/rdp/include/client.h similarity index 82% rename from protocols/rdp/include/rdp_client.h rename to protocols/rdp/include/client.h index be0dc8d2..42a0a177 100644 --- a/protocols/rdp/include/rdp_client.h +++ b/protocols/rdp/include/client.h @@ -35,15 +35,14 @@ * * ***** END LICENSE BLOCK ***** */ -#ifndef _GUAC_CLIENT_RDP_CLIENT -#define _GUAC_CLIENT_RDP_CLIENT +#ifndef _GUAC_RDP_CLIENT_H +#define _GUAC_RDP_CLIENT_H #include -#include +#include #include - #define RDP_DEFAULT_PORT 3389 typedef struct guac_rdp_color { @@ -54,9 +53,9 @@ typedef struct guac_rdp_color { typedef struct rdp_guac_client_data { - rdpInst* rdp_inst; - rdpChanMan* chanman; - rdpSet* settings; + freerdp* rdp_inst; + rdpChannels* channels; + rdpSettings* settings; int mouse_button_mask; @@ -67,10 +66,13 @@ typedef struct rdp_guac_client_data { } rdp_guac_client_data; -int rdp_guac_client_free_handler(guac_client* client); -int rdp_guac_client_handle_messages(guac_client* client); -int rdp_guac_client_mouse_handler(guac_client* client, int x, int y, int mask); -int rdp_guac_client_key_handler(guac_client* client, int keysym, int pressed); +typedef struct rdp_freerdp_context { + + rdpContext _p; + + guac_client* client; + +} rdp_freerdp_context; #endif diff --git a/protocols/rdp/include/guac_handlers.h b/protocols/rdp/include/guac_handlers.h new file mode 100644 index 00000000..e7914fac --- /dev/null +++ b/protocols/rdp/include/guac_handlers.h @@ -0,0 +1,49 @@ + +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is libguac-client-rdp. + * + * The Initial Developer of the Original Code is + * Michael Jumper. + * Portions created by the Initial Developer are Copyright (C) 2011 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#ifndef _GUAC_RDP_GUAC_HANDLERS_H +#define _GUAC_RDP_GUAC_HANDLERS_H + +#include + +int rdp_guac_client_free_handler(guac_client* client); +int rdp_guac_client_handle_messages(guac_client* client); +int rdp_guac_client_mouse_handler(guac_client* client, int x, int y, int mask); +int rdp_guac_client_key_handler(guac_client* client, int keysym, int pressed); + +#endif + diff --git a/protocols/rdp/include/rdp_handlers.h b/protocols/rdp/include/rdp_handlers.h index 3b78392b..67cb27ef 100644 --- a/protocols/rdp/include/rdp_handlers.h +++ b/protocols/rdp/include/rdp_handlers.h @@ -35,56 +35,48 @@ * * ***** END LICENSE BLOCK ***** */ -#ifndef _GUAC_CLIENT_RDP_HANDLERS -#define _GUAC_CLIENT_RDP_HANDLERS +#ifndef _GUAC_RDP_RDP_HANDLERS_H +#define _GUAC_RDP_RDP_HANDLERS_H #include +#include -void guac_rdp_ui_error(rdpInst* inst, const char* text); -void guac_rdp_ui_warning(rdpInst* inst, const char* text); -void guac_rdp_ui_unimpl(rdpInst* inst, const char* text); -void guac_rdp_ui_begin_update(rdpInst* inst); -void guac_rdp_ui_end_update(rdpInst* inst); -void guac_rdp_ui_desktop_save(rdpInst* inst, int offset, int x, int y, int cx, int cy); -void guac_rdp_ui_desktop_restore(rdpInst* inst, int offset, int x, int y, int cx, int cy); -RD_HBITMAP guac_rdp_ui_create_bitmap(rdpInst* inst, int width, int height, uint8* data); -void guac_rdp_ui_paint_bitmap(rdpInst* inst, int x, int y, int cx, int cy, int width, int height, uint8* data); -void guac_rdp_ui_destroy_bitmap(rdpInst* inst, RD_HBITMAP bmp); -void guac_rdp_ui_line(rdpInst* inst, uint8 opcode, int startx, int starty, int endx, int endy, RD_PEN* pen); -void guac_rdp_ui_rect(rdpInst* inst, int x, int y, int cx, int cy, uint32 colour); -void guac_rdp_ui_polygon(rdpInst* inst, uint8 opcode, uint8 fillmode, RD_POINT* point, int npoints, RD_BRUSH* brush, uint32 bgcolor, uint32 fgcolor); -void guac_rdp_ui_polyline(rdpInst* inst, uint8 opcode, RD_POINT* points, int npoints, RD_PEN* pen); -void guac_rdp_ui_ellipse(rdpInst* inst, uint8 opcode, uint8 fillmode, int x, int y, int cx, int cy, RD_BRUSH* brush, uint32 bgcolor, uint32 fgcolor); -void guac_rdp_ui_start_draw_glyphs(rdpInst* inst, uint32 bgcolor, uint32 fgcolor); -void guac_rdp_ui_draw_glyph(rdpInst* inst, int x, int y, int cx, int cy, RD_HGLYPH glyph); -void guac_rdp_ui_end_draw_glyphs(rdpInst* inst, int x, int y, int cx, int cy); -uint32 guac_rdp_ui_get_toggle_keys_state(rdpInst* inst); -void guac_rdp_ui_bell(rdpInst* inst); -void guac_rdp_ui_destblt(rdpInst* inst, uint8 opcode, int x, int y, int cx, int cy); -void guac_rdp_ui_patblt(rdpInst* inst, uint8 opcode, int x, int y, int cx, int cy, RD_BRUSH* brush, uint32 bgcolor, uint32 fgcolor); -void guac_rdp_ui_screenblt(rdpInst* inst, uint8 opcode, int x, int y, int cx, int cy, int srcx, int srcy); -void guac_rdp_ui_memblt(rdpInst* inst, uint8 opcode, int x, int y, int width, int height, RD_HBITMAP src, int srcx, int srcy); -void guac_rdp_ui_triblt(rdpInst* inst, uint8 opcode, int x, int y, int cx, int cy, RD_HBITMAP src, int srcx, int srcy, RD_BRUSH* brush, uint32 bgcolor, uint32 fgcolor); -RD_HGLYPH guac_rdp_ui_create_glyph(rdpInst* inst, int width, int height, uint8* data); -void guac_rdp_ui_destroy_glyph(rdpInst* inst, RD_HGLYPH glyph); -int guac_rdp_ui_select(rdpInst* inst, int rdp_socket); -void guac_rdp_ui_set_clip(rdpInst* inst, int x, int y, int cx, int cy); -void guac_rdp_ui_reset_clip(rdpInst* inst); -void guac_rdp_ui_resize_window(rdpInst* inst); -void guac_rdp_ui_set_cursor(rdpInst* inst, RD_HCURSOR cursor); -void guac_rdp_ui_destroy_cursor(rdpInst* inst, RD_HCURSOR cursor); -RD_HCURSOR guac_rdp_ui_create_cursor(rdpInst* inst, unsigned int x, unsigned int y, int width, int height, uint8* andmask, uint8* xormask, int bpp); -void guac_rdp_ui_set_null_cursor(rdpInst* inst); -void guac_rdp_ui_set_default_cursor(rdpInst* inst); -void guac_rdp_ui_move_pointer(rdpInst* inst, int x, int y); -RD_HBITMAP guac_rdp_ui_create_surface(rdpInst* inst, int width, int height, RD_HBITMAP old); -void guac_rdp_ui_set_surface(rdpInst* inst, RD_HBITMAP surface); -void guac_rdp_ui_destroy_surface(rdpInst* inst, RD_HBITMAP surface); -void guac_rdp_ui_channel_data(rdpInst* inst, int chan_id, char* data, int data_size, int flags, int total_size); -RD_HPALETTE guac_rdp_ui_create_palette(rdpInst* inst, RD_PALETTE* colours); -void guac_rdp_ui_set_palette(rdpInst* inst, RD_HPALETTE map); +int guac_rdp_ui_select(freerdp* inst, int rdp_socket); -extern const int guac_rdp_letter_scancodes[]; +void guac_rdp_ui_resize_window(freerdp* inst); + +void guac_rdp_ui_move_pointer(freerdp* inst, int x, int y); + +void guac_rdp_ui_set_clip(freerdp* inst, int x, int y, int cx, int cy); +void guac_rdp_ui_reset_clip(freerdp* inst); + +void guac_rdp_ui_rect(freerdp* inst, int x, int y, int cx, int cy, uint32 colour); + +rdpBitmap* guac_rdp_ui_create_bitmap(freerdp* inst, int width, int height, uint8* data); +void guac_rdp_ui_paint_bitmap(freerdp* inst, int x, int y, int cx, int cy, int width, int height, uint8* data); +void guac_rdp_ui_destroy_bitmap(freerdp* inst, rdpBitmap* bmp); + +void guac_rdp_ui_destblt(freerdp* inst, uint8 opcode, int x, int y, int cx, int cy); +void guac_rdp_ui_patblt(freerdp* inst, uint8 opcode, int x, int y, int cx, int cy, rdpBrush* brush, uint32 bgcolor, uint32 fgcolor); +void guac_rdp_ui_screenblt(freerdp* inst, uint8 opcode, int x, int y, int cx, int cy, int srcx, int srcy); +void guac_rdp_ui_memblt(freerdp* inst, uint8 opcode, int x, int y, int width, int height, rdpBitmap* src, int srcx, int srcy); +void guac_rdp_ui_triblt(freerdp* inst, uint8 opcode, int x, int y, int cx, int cy, rdpBitmap* src, int srcx, int srcy, rdpBrush* brush, uint32 bgcolor, uint32 fgcolor); + +void guac_rdp_ui_start_draw_glyphs(freerdp* inst, uint32 bgcolor, uint32 fgcolor); +void guac_rdp_ui_draw_glyph(freerdp* inst, int x, int y, int cx, int cy, rdpGlyph* glyph); +void guac_rdp_ui_end_draw_glyphs(freerdp* inst, int x, int y, int cx, int cy); +rdpGlyph* guac_rdp_ui_create_glyph(freerdp* inst, int width, int height, uint8* data); +void guac_rdp_ui_destroy_glyph(freerdp* inst, rdpGlyph* glyph); + +void guac_rdp_ui_set_pointer(freerdp* inst, rdpPointer pointer); +void guac_rdp_ui_destroy_pointer(freerdp* inst, rdpPointer pointer); +rdpPointer guac_rdp_ui_create_pointer(freerdp* inst, unsigned int x, unsigned int y, int width, int height, uint8* andmask, uint8* xormask, int bpp); +void guac_rdp_ui_set_null_pointer(freerdp* inst); +void guac_rdp_ui_set_default_pointer(freerdp* inst); + +rdpBitmap* guac_rdp_ui_create_surface(freerdp* inst, int width, int height, rdpBitmap* old); +void guac_rdp_ui_set_surface(freerdp* inst, rdpBitmap* surface); +void guac_rdp_ui_destroy_surface(freerdp* inst, rdpBitmap* surface); #endif diff --git a/protocols/rdp/include/rdp_keymap.h b/protocols/rdp/include/rdp_keymap.h index a97502ac..23c93679 100644 --- a/protocols/rdp/include/rdp_keymap.h +++ b/protocols/rdp/include/rdp_keymap.h @@ -35,8 +35,8 @@ * * ***** END LICENSE BLOCK ***** */ -#ifndef _GUAC_CLIENT_RDP_KEYMAP -#define _GUAC_CLIENT_RDP_KEYMAP +#ifndef _GUAC_RDP_RDP_KEYMAP_H +#define _GUAC_RDP_RDP_KEYMAP_H typedef struct guac_rdp_keymap { int scancode; diff --git a/protocols/rdp/src/client.c b/protocols/rdp/src/client.c new file mode 100644 index 00000000..8a71ff6b --- /dev/null +++ b/protocols/rdp/src/client.c @@ -0,0 +1,173 @@ + +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is libguac-client-rdp. + * + * The Initial Developer of the Original Code is + * Michael Jumper. + * Portions created by the Initial Developer are Copyright (C) 2011 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#include +#include + +#include +#include + +#include +#include +#include + +#include +#include +#include + +#include "client.h" +#include "guac_handlers.h" +#include "rdp_handlers.h" +#include "rdp_keymap.h" + +/* Client plugin arguments */ +const char* GUAC_CLIENT_ARGS[] = { + "hostname", + "port", + NULL +}; + +void rdp_freerdp_context_new(freerdp* instance, rdpContext* context) { + /* EMPTY */ +} + +void rdp_freerdp_context_free(freerdp* instance, rdpContext* context) { + /* EMPTY */ +} + +int guac_client_init(guac_client* client, int argc, char** argv) { + + rdp_guac_client_data* guac_client_data; + + freerdp* rdp_inst; + rdpChannels* channels; + rdpSettings* settings; + + char* hostname; + int port = RDP_DEFAULT_PORT; + + if (argc < 2) { + guac_protocol_send_error(client->socket, "Wrong argument count received."); + guac_socket_flush(client->socket); + return 1; + } + + /* If port specified, use it */ + if (argv[1][0] != '\0') + port = atoi(argv[1]); + + hostname = argv[0]; + + /* Allocate client data */ + guac_client_data = malloc(sizeof(rdp_guac_client_data)); + + /* Get channel manager */ + channels = freerdp_channels_new(); + guac_client_data->channels = channels; + + /* INIT SETTINGS */ + settings = malloc(sizeof(rdpSettings)); + memset(settings, 0, sizeof(rdpSettings)); + guac_client_data->settings = settings; + + /* Set hostname */ + strncpy(settings->hostname, hostname, sizeof(settings->hostname) - 1); + + /* Default size */ + settings->width = 1024; + settings->height = 768; + + strncpy(settings->window_title, hostname, sizeof(settings->window_title)); + strcpy(settings->username, "guest"); + + /* FIXME: Set RDP settings->* */ + + /* Init client */ + rdp_inst = freerdp_new(settings); + if (rdp_inst == NULL) { + guac_protocol_send_error(client->socket, "Error initializing RDP client"); + guac_socket_flush(client->socket); + return 1; + } + guac_client_data->rdp_inst = rdp_inst; + guac_client_data->mouse_button_mask = 0; + guac_client_data->current_surface = GUAC_DEFAULT_LAYER; + + /* Allocate FreeRDP context */ + rdp_inst->context_size = sizeof(rdp_freerdp_context); + rdp_inst->ContextNew = (pContextNew) rdp_freerdp_context_new; + rdp_inst->ContextFree = (pContextFree) rdp_freerdp_context_free; + freerdp_context_new(rdp_inst); + + /* Store client data */ + ((rdp_freerdp_context*) rdp_inst->context)->client = client; + client->data = guac_client_data; + + /* FIXME: Set RDP handlers */ + + /* Init channels (pre-connect) */ + if (freerdp_channels_pre_connect(channels, rdp_inst)) { + guac_protocol_send_error(client->socket, "Error initializing RDP client channel manager"); + guac_socket_flush(client->socket); + return 1; + } + + /* Connect to RDP server */ + if (!freerdp_connect(rdp_inst)) { + guac_protocol_send_error(client->socket, "Error connecting to RDP server"); + guac_socket_flush(client->socket); + return 1; + } + + /* Init channels (post-connect) */ + if (freerdp_channels_post_connect(channels, rdp_inst)) { + guac_protocol_send_error(client->socket, "Error initializing RDP client channel manager"); + guac_socket_flush(client->socket); + return 1; + } + + /* Client handlers */ + client->free_handler = rdp_guac_client_free_handler; + client->handle_messages = rdp_guac_client_handle_messages; + client->mouse_handler = rdp_guac_client_mouse_handler; + client->key_handler = rdp_guac_client_key_handler; + + /* Success */ + return 0; + +} + diff --git a/protocols/rdp/src/rdp_client.c b/protocols/rdp/src/guac_handlers.c similarity index 50% rename from protocols/rdp/src/rdp_client.c rename to protocols/rdp/src/guac_handlers.c index 33d575a4..357b5725 100644 --- a/protocols/rdp/src/rdp_client.c +++ b/protocols/rdp/src/guac_handlers.c @@ -42,24 +42,17 @@ #include #include -#include -#include +#include +#include #include #include #include +#include "client.h" #include "rdp_handlers.h" -#include "rdp_client.h" #include "rdp_keymap.h" -/* Client plugin arguments */ -const char* GUAC_CLIENT_ARGS[] = { - "hostname", - "port", - NULL -}; - int rdp_guac_client_free_handler(guac_client* client) { rdp_guac_client_data* guac_client_data = (rdp_guac_client_data*) client->data; @@ -69,7 +62,7 @@ int rdp_guac_client_free_handler(guac_client* client) { /* Free RDP client */ freerdp_free(guac_client_data->rdp_inst); - freerdp_chanman_free(guac_client_data->chanman); + freerdp_channels_free(guac_client_data->channels); free(guac_client_data->settings); /* Free guac client data */ @@ -83,7 +76,7 @@ int rdp_guac_client_handle_messages(guac_client* client) { rdp_guac_client_data* guac_client_data = (rdp_guac_client_data*) client->data; rdpInst* rdp_inst = guac_client_data->rdp_inst; - rdpChanMan* chanman = guac_client_data->chanman; + rdpChannels* channels = guac_client_data->channels; int index; int max_fd, fd; @@ -101,7 +94,7 @@ int rdp_guac_client_handle_messages(guac_client* client) { } /* get channel fds */ - if (freerdp_chanman_get_fds(chanman, rdp_inst, read_fds, &read_count, write_fds, &write_count) != 0) { + if (freerdp_channels_get_fds(channels, rdp_inst, read_fds, &read_count, write_fds, &write_count) != 0) { guac_client_log_error(client, "Unable to read RDP channel file descriptors."); return 1; } @@ -151,7 +144,7 @@ int rdp_guac_client_handle_messages(guac_client* client) { } /* check channel fds */ - if (freerdp_chanman_check_fds(chanman, rdp_inst) != 0) { + if (freerdp_channels_check_fds(channels, rdp_inst) != 0) { guac_client_log_error(client, "Error handling RDP channel file descriptors."); return 1; } @@ -161,163 +154,6 @@ int rdp_guac_client_handle_messages(guac_client* client) { } -int guac_client_init(guac_client* client, int argc, char** argv) { - - rdp_guac_client_data* guac_client_data; - - rdpInst* rdp_inst; - rdpChanMan* chanman; - rdpSet* settings; - - char* hostname; - int port = RDP_DEFAULT_PORT; - - if (argc < 2) { - guac_protocol_send_error(client->socket, "Wrong argument count received."); - guac_socket_flush(client->socket); - return 1; - } - - /* If port specified, use it */ - if (argv[1][0] != '\0') - port = atoi(argv[1]); - - hostname = argv[0]; - - /* Allocate client data */ - guac_client_data = malloc(sizeof(rdp_guac_client_data)); - - /* Get channel manager */ - chanman = freerdp_chanman_new(); - guac_client_data->chanman = chanman; - - /* INIT SETTINGS */ - settings = malloc(sizeof(rdpSet)); - memset(settings, 0, sizeof(rdpSet)); - guac_client_data->settings = settings; - - /* Set hostname */ - strncpy(settings->hostname, hostname, sizeof(settings->hostname) - 1); - - /* Default size */ - settings->width = 1024; - settings->height = 768; - - strncpy(settings->server, hostname, sizeof(settings->server)); - strcpy(settings->username, "guest"); - - settings->tcp_port_rdp = port; - settings->encryption = 1; - settings->server_depth = 16; - settings->bitmap_cache = 1; - settings->bitmap_compression = 1; - settings->desktop_save = 0; - settings->performanceflags = - PERF_DISABLE_WALLPAPER - | PERF_DISABLE_FULLWINDOWDRAG - | PERF_DISABLE_MENUANIMATIONS; - settings->mouse_motion = 1; - settings->off_screen_bitmaps = 1; - settings->triblt = 0; - settings->software_gdi = 0; - settings->new_cursors = 1; - settings->rdp_version = 5; - settings->rdp_security = 1; - - /* Init client */ - rdp_inst = freerdp_new(settings); - if (rdp_inst == NULL) { - guac_protocol_send_error(client->socket, "Error initializing RDP client"); - guac_socket_flush(client->socket); - return 1; - } - guac_client_data->rdp_inst = rdp_inst; - guac_client_data->mouse_button_mask = 0; - guac_client_data->current_surface = GUAC_DEFAULT_LAYER; - - - /* Store client data */ - rdp_inst->param1 = client; - client->data = guac_client_data; - - - /* RDP handlers */ - rdp_inst->ui_error = guac_rdp_ui_error; - rdp_inst->ui_warning = guac_rdp_ui_warning; - rdp_inst->ui_unimpl = guac_rdp_ui_unimpl; - rdp_inst->ui_begin_update = guac_rdp_ui_begin_update; - rdp_inst->ui_end_update = guac_rdp_ui_end_update; - rdp_inst->ui_desktop_save = guac_rdp_ui_desktop_save; - rdp_inst->ui_desktop_restore = guac_rdp_ui_desktop_restore; - rdp_inst->ui_create_bitmap = guac_rdp_ui_create_bitmap; - rdp_inst->ui_paint_bitmap = guac_rdp_ui_paint_bitmap; - rdp_inst->ui_destroy_bitmap = guac_rdp_ui_destroy_bitmap; - rdp_inst->ui_line = guac_rdp_ui_line; - rdp_inst->ui_rect = guac_rdp_ui_rect; - rdp_inst->ui_polygon = guac_rdp_ui_polygon; - rdp_inst->ui_polyline = guac_rdp_ui_polyline; - rdp_inst->ui_ellipse = guac_rdp_ui_ellipse; - rdp_inst->ui_start_draw_glyphs = guac_rdp_ui_start_draw_glyphs; - rdp_inst->ui_draw_glyph = guac_rdp_ui_draw_glyph; - rdp_inst->ui_end_draw_glyphs = guac_rdp_ui_end_draw_glyphs; - rdp_inst->ui_get_toggle_keys_state = guac_rdp_ui_get_toggle_keys_state; - rdp_inst->ui_bell = guac_rdp_ui_bell; - rdp_inst->ui_destblt = guac_rdp_ui_destblt; - rdp_inst->ui_patblt = guac_rdp_ui_patblt; - rdp_inst->ui_screenblt = guac_rdp_ui_screenblt; - rdp_inst->ui_memblt = guac_rdp_ui_memblt; - rdp_inst->ui_triblt = guac_rdp_ui_triblt; - rdp_inst->ui_create_glyph = guac_rdp_ui_create_glyph; - rdp_inst->ui_destroy_glyph = guac_rdp_ui_destroy_glyph; - rdp_inst->ui_select = guac_rdp_ui_select; - rdp_inst->ui_set_clip = guac_rdp_ui_set_clip; - rdp_inst->ui_reset_clip = guac_rdp_ui_reset_clip; - rdp_inst->ui_resize_window = guac_rdp_ui_resize_window; - rdp_inst->ui_set_cursor = guac_rdp_ui_set_cursor; - rdp_inst->ui_destroy_cursor = guac_rdp_ui_destroy_cursor; - rdp_inst->ui_create_cursor = guac_rdp_ui_create_cursor; - rdp_inst->ui_set_null_cursor = guac_rdp_ui_set_null_cursor; - rdp_inst->ui_set_default_cursor = guac_rdp_ui_set_default_cursor; - rdp_inst->ui_create_palette = guac_rdp_ui_create_palette; - rdp_inst->ui_move_pointer = guac_rdp_ui_move_pointer; - rdp_inst->ui_set_palette = guac_rdp_ui_set_palette; - rdp_inst->ui_create_surface = guac_rdp_ui_create_surface; - rdp_inst->ui_set_surface = guac_rdp_ui_set_surface; - rdp_inst->ui_destroy_surface = guac_rdp_ui_destroy_surface; - rdp_inst->ui_channel_data = guac_rdp_ui_channel_data; - - /* Init chanman (pre-connect) */ - if (freerdp_chanman_pre_connect(chanman, rdp_inst)) { - guac_protocol_send_error(client->socket, "Error initializing RDP client channel manager"); - guac_socket_flush(client->socket); - return 1; - } - - /* Connect to RDP server */ - if (rdp_inst->rdp_connect(rdp_inst)) { - guac_protocol_send_error(client->socket, "Error connecting to RDP server"); - guac_socket_flush(client->socket); - return 1; - } - - /* Init chanman (post-connect) */ - if (freerdp_chanman_post_connect(chanman, rdp_inst)) { - guac_protocol_send_error(client->socket, "Error initializing RDP client channel manager"); - guac_socket_flush(client->socket); - return 1; - } - - /* Client handlers */ - client->free_handler = rdp_guac_client_free_handler; - client->handle_messages = rdp_guac_client_handle_messages; - client->mouse_handler = rdp_guac_client_mouse_handler; - client->key_handler = rdp_guac_client_key_handler; - - /* Success */ - return 0; - -} - int rdp_guac_client_mouse_handler(guac_client* client, int x, int y, int mask) { rdp_guac_client_data* guac_client_data = (rdp_guac_client_data*) client->data; @@ -325,7 +161,7 @@ int rdp_guac_client_mouse_handler(guac_client* client, int x, int y, int mask) { /* If button mask unchanged, just send move event */ if (mask == guac_client_data->mouse_button_mask) - rdp_inst->rdp_send_input_mouse(rdp_inst, PTRFLAGS_MOVE, x, y); + rdp_inst->rdp_send_input_mouse(rdp_inst, PTR_FLAGS_MOVE, x, y); /* Otherwise, send events describing button change */ else { @@ -341,9 +177,9 @@ int rdp_guac_client_mouse_handler(guac_client* client, int x, int y, int mask) { /* Calculate flags */ int flags = 0; - if (released_mask & 0x01) flags |= PTRFLAGS_BUTTON1; - if (released_mask & 0x02) flags |= PTRFLAGS_BUTTON3; - if (released_mask & 0x04) flags |= PTRFLAGS_BUTTON2; + if (released_mask & 0x01) flags |= PTR_FLAGS_BUTTON1; + if (released_mask & 0x02) flags |= PTR_FLAGS_BUTTON3; + if (released_mask & 0x04) flags |= PTR_FLAGS_BUTTON2; rdp_inst->rdp_send_input_mouse(rdp_inst, flags, x, y); @@ -353,12 +189,12 @@ int rdp_guac_client_mouse_handler(guac_client* client, int x, int y, int mask) { if (pressed_mask & 0x07) { /* Calculate flags */ - int flags = PTRFLAGS_DOWN; - if (pressed_mask & 0x01) flags |= PTRFLAGS_BUTTON1; - if (pressed_mask & 0x02) flags |= PTRFLAGS_BUTTON3; - if (pressed_mask & 0x04) flags |= PTRFLAGS_BUTTON2; - if (pressed_mask & 0x08) flags |= PTRFLAGS_WHEEL | 0x78; - if (pressed_mask & 0x10) flags |= PTRFLAGS_WHEEL | PTRFLAGS_WHEEL_NEGATIVE | 0x88; + int flags = PTR_FLAGS_DOWN; + if (pressed_mask & 0x01) flags |= PTR_FLAGS_BUTTON1; + if (pressed_mask & 0x02) flags |= PTR_FLAGS_BUTTON3; + if (pressed_mask & 0x04) flags |= PTR_FLAGS_BUTTON2; + if (pressed_mask & 0x08) flags |= PTR_FLAGS_WHEEL | 0x78; + if (pressed_mask & 0x10) flags |= PTR_FLAGS_WHEEL | PTR_FLAGS_WHEEL_NEGATIVE | 0x88; /* Send event */ rdp_inst->rdp_send_input_mouse(rdp_inst, flags, x, y); @@ -372,14 +208,14 @@ int rdp_guac_client_mouse_handler(guac_client* client, int x, int y, int mask) { if (pressed_mask & 0x08) rdp_inst->rdp_send_input_mouse( rdp_inst, - PTRFLAGS_WHEEL | 0x78, + PTR_FLAGS_WHEEL | 0x78, x, y); /* Up */ if (pressed_mask & 0x10) rdp_inst->rdp_send_input_mouse( rdp_inst, - PTRFLAGS_WHEEL | PTRFLAGS_WHEEL_NEGATIVE | 0x88, + PTR_FLAGS_WHEEL | PTR_FLAGS_WHEEL_NEGATIVE | 0x88, x, y); } @@ -408,7 +244,7 @@ int rdp_guac_client_key_handler(guac_client* client, int keysym, int pressed) { rdp_inst->rdp_send_input_scancode( rdp_inst, !pressed, - keymap->flags & KBDFLAGS_EXTENDED, + keymap->flags & KBD_FLAGS_EXTENDED, keymap->scancode); else guac_client_log_info(client, "unmapped keysym: 0x%x", keysym); diff --git a/protocols/rdp/src/rdp_handlers.c b/protocols/rdp/src/rdp_handlers.c index ee1304e4..dc0a3a8e 100644 --- a/protocols/rdp/src/rdp_handlers.c +++ b/protocols/rdp/src/rdp_handlers.c @@ -46,8 +46,8 @@ #include +#include "client.h" #include "rdp_handlers.h" -#include "rdp_client.h" void guac_rdp_convert_color(int depth, int color, guac_rdp_color* comp) { @@ -73,9 +73,9 @@ void guac_rdp_convert_color(int depth, int color, guac_rdp_color* comp) { } -void guac_rdp_ui_error(rdpInst* inst, const char* text) { +void guac_rdp_ui_error(freerdp* inst, const char* text) { - guac_client* client = (guac_client*) inst->param1; + guac_client* client = ((rdp_freerdp_context*) inst->context)->client; guac_socket* socket = client->socket; guac_protocol_send_error(socket, text); @@ -83,41 +83,30 @@ void guac_rdp_ui_error(rdpInst* inst, const char* text) { } -void guac_rdp_ui_warning(rdpInst* inst, const char* text) { - guac_client* client = (guac_client*) inst->param1; +void guac_rdp_ui_warning(freerdp* inst, const char* text) { + guac_client* client = ((rdp_freerdp_context*) inst->context)->client; guac_client_log_info(client, "guac_rdp_ui_warning: %s\n", text); } -void guac_rdp_ui_unimpl(rdpInst* inst, const char* text) { - guac_client* client = (guac_client*) inst->param1; +void guac_rdp_ui_unimpl(freerdp* inst, const char* text) { + guac_client* client = ((rdp_freerdp_context*) inst->context)->client; guac_client_log_info(client, "guac_rdp_ui_unimpl: %s\n", text); } -void guac_rdp_ui_begin_update(rdpInst* inst) { +void guac_rdp_ui_begin_update(freerdp* inst) { /* UNUSED */ } -void guac_rdp_ui_end_update(rdpInst* inst) { - guac_client* client = (guac_client*) inst->param1; +void guac_rdp_ui_end_update(freerdp* inst) { + guac_client* client = ((rdp_freerdp_context*) inst->context)->client; guac_socket* socket = client->socket; guac_socket_flush(socket); } -void guac_rdp_ui_desktop_save(rdpInst* inst, int offset, int x, int y, int cx, int cy) { - guac_client* client = (guac_client*) inst->param1; - guac_client_log_info(client, "guac_rdp_ui_desktop_save: STUB\n"); -} - -void guac_rdp_ui_desktop_restore(rdpInst* inst, int offset, int x, int y, int cx, int cy) { - guac_client* client = (guac_client*) inst->param1; - guac_client_log_info(client, "guac_rdp_ui_desktop_restore: STUB\n"); -} - - -RD_HBITMAP guac_rdp_ui_create_bitmap(rdpInst* inst, int width, int height, uint8* data) { +rdpBitmap* guac_rdp_ui_create_bitmap(freerdp* inst, int width, int height, uint8* data) { /* Allocate buffer */ - guac_client* client = (guac_client*) inst->param1; + guac_client* client = ((rdp_freerdp_context*) inst->context)->client; guac_socket* socket = client->socket; guac_layer* buffer = guac_client_alloc_buffer(client); @@ -184,13 +173,13 @@ RD_HBITMAP guac_rdp_ui_create_bitmap(rdpInst* inst, int width, int height, uint8 cairo_surface_destroy(surface); free(image_buffer); - return (RD_HBITMAP) buffer; + return (rdpBitmap*) buffer; } -void guac_rdp_ui_paint_bitmap(rdpInst* inst, int x, int y, int cx, int cy, int width, int height, uint8* data) { +void guac_rdp_ui_paint_bitmap(freerdp* inst, int x, int y, int cx, int cy, int width, int height, uint8* data) { - guac_client* client = (guac_client*) inst->param1; + guac_client* client = ((rdp_freerdp_context*) inst->context)->client; rdp_guac_client_data* guac_client_data = (rdp_guac_client_data*) client->data; const guac_layer* current_surface = guac_client_data->current_surface; guac_socket* socket = client->socket; @@ -268,22 +257,17 @@ void guac_rdp_ui_paint_bitmap(rdpInst* inst, int x, int y, int cx, int cy, int w } -void guac_rdp_ui_destroy_bitmap(rdpInst* inst, RD_HBITMAP bmp) { +void guac_rdp_ui_destroy_bitmap(freerdp* inst, rdpBitmap* bmp) { /* Free buffer */ - guac_client* client = (guac_client*) inst->param1; + guac_client* client = ((rdp_freerdp_context*) inst->context)->client; guac_client_free_buffer(client, (guac_layer*) bmp); } -void guac_rdp_ui_line(rdpInst* inst, uint8 opcode, int startx, int starty, int endx, int endy, RD_PEN* pen) { - guac_client* client = (guac_client*) inst->param1; - guac_client_log_info(client, "guac_rdp_ui_line: STUB\n"); -} +void guac_rdp_ui_rect(freerdp* inst, int x, int y, int cx, int cy, uint32 color) { -void guac_rdp_ui_rect(rdpInst* inst, int x, int y, int cx, int cy, uint32 color) { - - guac_client* client = (guac_client*) inst->param1; + guac_client* client = ((rdp_freerdp_context*) inst->context)->client; rdp_guac_client_data* guac_client_data = (rdp_guac_client_data*) client->data; const guac_layer* current_surface = guac_client_data->current_surface; guac_socket* socket = client->socket; @@ -316,24 +300,9 @@ void guac_rdp_ui_rect(rdpInst* inst, int x, int y, int cx, int cy, uint32 color) } -void guac_rdp_ui_polygon(rdpInst* inst, uint8 opcode, uint8 fillmode, RD_POINT* point, int npoints, RD_BRUSH* brush, uint32 bgcolor, uint32 fgcolor) { - guac_client* client = (guac_client*) inst->param1; - guac_client_log_info(client, "guac_rdp_ui_polygon: STUB\n"); -} +void guac_rdp_ui_start_draw_glyphs(freerdp* inst, uint32 bgcolor, uint32 fgcolor) { -void guac_rdp_ui_polyline(rdpInst* inst, uint8 opcode, RD_POINT* points, int npoints, RD_PEN* pen) { - guac_client* client = (guac_client*) inst->param1; - guac_client_log_info(client, "guac_rdp_ui_polyline: STUB\n"); -} - -void guac_rdp_ui_ellipse(rdpInst* inst, uint8 opcode, uint8 fillmode, int x, int y, int cx, int cy, RD_BRUSH* brush, uint32 bgcolor, uint32 fgcolor) { - guac_client* client = (guac_client*) inst->param1; - guac_client_log_info(client, "guac_rdp_ui_ellipse: STUB\n"); -} - -void guac_rdp_ui_start_draw_glyphs(rdpInst* inst, uint32 bgcolor, uint32 fgcolor) { - - guac_client* client = (guac_client*) inst->param1; + guac_client* client = ((rdp_freerdp_context*) inst->context)->client; rdp_guac_client_data* guac_client_data = (rdp_guac_client_data*) client->data; guac_rdp_convert_color( @@ -348,9 +317,9 @@ void guac_rdp_ui_start_draw_glyphs(rdpInst* inst, uint32 bgcolor, uint32 fgcolor } -void guac_rdp_ui_draw_glyph(rdpInst* inst, int x, int y, int width, int height, RD_HGLYPH glyph) { +void guac_rdp_ui_draw_glyph(freerdp* inst, int x, int y, int width, int height, rdpGlyph* glyph) { - guac_client* client = (guac_client*) inst->param1; + guac_client* client = ((rdp_freerdp_context*) inst->context)->client; rdp_guac_client_data* guac_client_data = (rdp_guac_client_data*) client->data; const guac_layer* current_surface = guac_client_data->current_surface; guac_socket* socket = client->socket; @@ -359,7 +328,7 @@ void guac_rdp_ui_draw_glyph(rdpInst* inst, int x, int y, int width, int height, /* Temporarily removed BG drawing... */ /* Foreground */ - guac_protocol_send_rect(socket, GUAC_COMP_ATOP, glyph, + guac_protocol_send_rect(socket, GUAC_COMP_ATOP, (guac_layer*) glyph, 0, 0, width, height, guac_client_data->foreground.red, guac_client_data->foreground.green, @@ -381,34 +350,23 @@ void guac_rdp_ui_draw_glyph(rdpInst* inst, int x, int y, int width, int height, } -void guac_rdp_ui_end_draw_glyphs(rdpInst* inst, int x, int y, int cx, int cy) { +void guac_rdp_ui_end_draw_glyphs(freerdp* inst, int x, int y, int cx, int cy) { /* UNUSED */ } -uint32 guac_rdp_ui_get_toggle_keys_state(rdpInst* inst) { - guac_client* client = (guac_client*) inst->param1; - guac_client_log_info(client, "guac_rdp_ui_get_toggle_keys_state: STUB\n"); - return 0; -} - -void guac_rdp_ui_bell(rdpInst* inst) { - guac_client* client = (guac_client*) inst->param1; - guac_client_log_info(client, "guac_rdp_ui_bell: STUB\n"); -} - -void guac_rdp_ui_destblt(rdpInst* inst, uint8 opcode, int x, int y, int cx, int cy) { - guac_client* client = (guac_client*) inst->param1; +void guac_rdp_ui_destblt(freerdp* inst, uint8 opcode, int x, int y, int cx, int cy) { + guac_client* client = ((rdp_freerdp_context*) inst->context)->client; guac_client_log_info(client, "guac_rdp_ui_destblt: STUB\n"); } -void guac_rdp_ui_patblt(rdpInst* inst, uint8 opcode, int x, int y, int cx, int cy, RD_BRUSH* brush, uint32 bgcolor, uint32 fgcolor) { - guac_client* client = (guac_client*) inst->param1; +void guac_rdp_ui_patblt(freerdp* inst, uint8 opcode, int x, int y, int cx, int cy, rdpBrush* brush, uint32 bgcolor, uint32 fgcolor) { + guac_client* client = ((rdp_freerdp_context*) inst->context)->client; guac_client_log_info(client, "guac_rdp_ui_patblt: STUB\n"); } -void guac_rdp_ui_screenblt(rdpInst* inst, uint8 opcode, int x, int y, int cx, int cy, int srcx, int srcy) { +void guac_rdp_ui_screenblt(freerdp* inst, uint8 opcode, int x, int y, int cx, int cy, int srcx, int srcy) { - guac_client* client = (guac_client*) inst->param1; + guac_client* client = ((rdp_freerdp_context*) inst->context)->client; rdp_guac_client_data* guac_client_data = (rdp_guac_client_data*) client->data; const guac_layer* current_surface = guac_client_data->current_surface; guac_socket* socket = client->socket; @@ -419,9 +377,9 @@ void guac_rdp_ui_screenblt(rdpInst* inst, uint8 opcode, int x, int y, int cx, in } -void guac_rdp_ui_memblt(rdpInst* inst, uint8 opcode, int x, int y, int width, int height, RD_HBITMAP src, int srcx, int srcy) { +void guac_rdp_ui_memblt(freerdp* inst, uint8 opcode, int x, int y, int width, int height, rdpBitmap* src, int srcx, int srcy) { - guac_client* client = (guac_client*) inst->param1; + guac_client* client = ((rdp_freerdp_context*) inst->context)->client; rdp_guac_client_data* guac_client_data = (rdp_guac_client_data*) client->data; const guac_layer* current_surface = guac_client_data->current_surface; guac_socket* socket = client->socket; @@ -437,15 +395,15 @@ void guac_rdp_ui_memblt(rdpInst* inst, uint8 opcode, int x, int y, int width, in } -void guac_rdp_ui_triblt(rdpInst* inst, uint8 opcode, int x, int y, int cx, int cy, RD_HBITMAP src, int srcx, int srcy, RD_BRUSH* brush, uint32 bgcolor, uint32 fgcolor) { - guac_client* client = (guac_client*) inst->param1; +void guac_rdp_ui_triblt(freerdp* inst, uint8 opcode, int x, int y, int cx, int cy, rdpBitmap* src, int srcx, int srcy, rdpBrush* brush, uint32 bgcolor, uint32 fgcolor) { + guac_client* client = ((rdp_freerdp_context*) inst->context)->client; guac_client_log_info(client, "guac_rdp_ui_triblt: STUB\n"); } -RD_HGLYPH guac_rdp_ui_create_glyph(rdpInst* inst, int width, int height, uint8* data) { +rdpGlyph* guac_rdp_ui_create_glyph(freerdp* inst, int width, int height, uint8* data) { /* Allocate buffer */ - guac_client* client = (guac_client*) inst->param1; + guac_client* client = ((rdp_freerdp_context*) inst->context)->client; guac_socket* socket = client->socket; guac_layer* glyph = guac_client_alloc_buffer(client); @@ -501,25 +459,25 @@ RD_HGLYPH guac_rdp_ui_create_glyph(rdpInst* inst, int width, int height, uint8* free(image_buffer); - return (RD_HGLYPH) glyph; + return (rdpGlyph*) glyph; } -void guac_rdp_ui_destroy_glyph(rdpInst* inst, RD_HGLYPH glyph) { +void guac_rdp_ui_destroy_glyph(freerdp* inst, rdpGlyph* glyph) { /* Free buffer */ - guac_client* client = (guac_client*) inst->param1; + guac_client* client = ((rdp_freerdp_context*) inst->context)->client; guac_client_free_buffer(client, (guac_layer*) glyph); } -int guac_rdp_ui_select(rdpInst* inst, int rdp_socket) { +int guac_rdp_ui_select(freerdp* inst, int rdp_socket) { return 1; } -void guac_rdp_ui_set_clip(rdpInst* inst, int x, int y, int cx, int cy) { +void guac_rdp_ui_set_clip(freerdp* inst, int x, int y, int cx, int cy) { - guac_client* client = (guac_client*) inst->param1; + guac_client* client = ((rdp_freerdp_context*) inst->context)->client; rdp_guac_client_data* guac_client_data = (rdp_guac_client_data*) client->data; const guac_layer* current_surface = guac_client_data->current_surface; guac_socket* socket = client->socket; @@ -528,9 +486,9 @@ void guac_rdp_ui_set_clip(rdpInst* inst, int x, int y, int cx, int cy) { } -void guac_rdp_ui_reset_clip(rdpInst* inst) { +void guac_rdp_ui_reset_clip(freerdp* inst) { - guac_client* client = (guac_client*) inst->param1; + guac_client* client = ((rdp_freerdp_context*) inst->context)->client; rdp_guac_client_data* guac_client_data = (rdp_guac_client_data*) client->data; const guac_layer* current_surface = guac_client_data->current_surface; guac_socket* socket = client->socket; @@ -539,56 +497,45 @@ void guac_rdp_ui_reset_clip(rdpInst* inst) { } -void guac_rdp_ui_resize_window(rdpInst* inst) { - guac_client* client = (guac_client*) inst->param1; +void guac_rdp_ui_resize_window(freerdp* inst) { + guac_client* client = ((rdp_freerdp_context*) inst->context)->client; guac_client_log_info(client, "guac_rdp_ui_resize_window: %ix%i\n", inst->settings->width, inst->settings->height); } -void guac_rdp_ui_set_cursor(rdpInst* inst, RD_HCURSOR cursor) { - guac_client* client = (guac_client*) inst->param1; +void guac_rdp_ui_set_cursor(freerdp* inst, rdpPointer* cursor) { + guac_client* client = ((rdp_freerdp_context*) inst->context)->client; guac_client_log_info(client, "guac_rdp_ui_set_cursor: STUB\n"); } -void guac_rdp_ui_destroy_cursor(rdpInst* inst, RD_HCURSOR cursor) { - guac_client* client = (guac_client*) inst->param1; +void guac_rdp_ui_destroy_cursor(freerdp* inst, rdpPointer* cursor) { + guac_client* client = ((rdp_freerdp_context*) inst->context)->client; guac_client_log_info(client, "guac_rdp_ui_destroy_cursor: STUB\n"); } -RD_HCURSOR guac_rdp_ui_create_cursor(rdpInst* inst, unsigned int x, unsigned int y, int width, int height, uint8* andmask, uint8* xormask, int bpp) { +rdpPointer* guac_rdp_ui_create_cursor(freerdp* inst, unsigned int x, unsigned int y, int width, int height, uint8* andmask, uint8* xormask, int bpp) { - guac_client* client = (guac_client*) inst->param1; + guac_client* client = ((rdp_freerdp_context*) inst->context)->client; guac_client_log_info(client, "guac_rdp_ui_create_cursor: STUB\n"); - return guac_client_alloc_buffer(client); + return (rdpPointer*) guac_client_alloc_buffer(client); } -void guac_rdp_ui_set_null_cursor(rdpInst* inst) { - guac_client* client = (guac_client*) inst->param1; +void guac_rdp_ui_set_null_cursor(freerdp* inst) { + guac_client* client = ((rdp_freerdp_context*) inst->context)->client; guac_client_log_info(client, "guac_rdp_ui_set_null_cursor: STUB\n"); } -void guac_rdp_ui_set_default_cursor(rdpInst* inst) { - guac_client* client = (guac_client*) inst->param1; +void guac_rdp_ui_set_default_cursor(freerdp* inst) { + guac_client* client = ((rdp_freerdp_context*) inst->context)->client; guac_client_log_info(client, "guac_rdp_ui_set_default_cursor: STUB\n"); } -RD_HPALETTE guac_rdp_ui_create_colormap(rdpInst* inst, RD_PALETTE* colors) { - guac_client* client = (guac_client*) inst->param1; - guac_client_log_info(client, "guac_rdp_ui_create_colormap: STUB\n"); - return NULL; -} - -void guac_rdp_ui_move_pointer(rdpInst* inst, int x, int y) { - guac_client* client = (guac_client*) inst->param1; +void guac_rdp_ui_move_pointer(freerdp* inst, int x, int y) { + guac_client* client = ((rdp_freerdp_context*) inst->context)->client; guac_client_log_info(client, "guac_rdp_ui_move_pointer: STUB\n"); } -void guac_rdp_ui_set_colormap(rdpInst* inst, RD_HPALETTE map) { - guac_client* client = (guac_client*) inst->param1; - guac_client_log_info(client, "guac_rdp_ui_set_colormap: STUB\n"); -} - -RD_HBITMAP guac_rdp_ui_create_surface(rdpInst* inst, int width, int height, RD_HBITMAP old) { +rdpBitmap* guac_rdp_ui_create_surface(freerdp* inst, int width, int height, rdpBitmap* old) { /* If old provided, just return that one ... */ if (old != NULL) @@ -596,15 +543,15 @@ RD_HBITMAP guac_rdp_ui_create_surface(rdpInst* inst, int width, int height, RD_H /* Otherwise allocate and return new buffer */ else { - guac_client* client = (guac_client*) inst->param1; - return (RD_HBITMAP) guac_client_alloc_buffer(client); + guac_client* client = ((rdp_freerdp_context*) inst->context)->client; + return (rdpBitmap*) guac_client_alloc_buffer(client); } } -void guac_rdp_ui_set_surface(rdpInst* inst, RD_HBITMAP surface) { +void guac_rdp_ui_set_surface(freerdp* inst, rdpBitmap* surface) { - guac_client* client = (guac_client*) inst->param1; + guac_client* client = ((rdp_freerdp_context*) inst->context)->client; rdp_guac_client_data* guac_client_data = (rdp_guac_client_data*) client->data; guac_socket* socket = client->socket; @@ -620,32 +567,16 @@ void guac_rdp_ui_set_surface(rdpInst* inst, RD_HBITMAP surface) { guac_client_data->current_surface = GUAC_DEFAULT_LAYER; } else { - guac_client_data->current_surface = surface; + guac_client_data->current_surface = (guac_layer*) surface; } } -void guac_rdp_ui_destroy_surface(rdpInst* inst, RD_HBITMAP surface) { +void guac_rdp_ui_destroy_surface(freerdp* inst, rdpBitmap* surface) { /* Free buffer */ - guac_client* client = (guac_client*) inst->param1; + guac_client* client = ((rdp_freerdp_context*) inst->context)->client; guac_client_free_buffer(client, (guac_layer*) surface); } -void guac_rdp_ui_channel_data(rdpInst* inst, int chan_id, char* data, int data_size, int flags, int total_size) { - guac_client* client = (guac_client*) inst->param1; - guac_client_log_info(client, "guac_rdp_ui_channel_data: STUB\n"); -} - -RD_HPALETTE guac_rdp_ui_create_palette(rdpInst* inst, RD_PALETTE* colours) { - guac_client* client = (guac_client*) inst->param1; - guac_client_log_info(client, "guac_rdp_ui_create_palette: STUB\n"); - return NULL; -} - -void guac_rdp_ui_set_palette(rdpInst* inst, RD_HPALETTE map) { - guac_client* client = (guac_client*) inst->param1; - guac_client_log_info(client, "guac_rdp_ui_set_palette: STUB\n"); -} - From 5b020614bd0c4ead68b70466044cb87f36a11973 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Mon, 2 Jan 2012 16:34:59 -0800 Subject: [PATCH 038/253] Added incomplete but somewhat compliant bitmap-new function. --- protocols/rdp/src/rdp_handlers.c | 81 +++++++++----------------------- 1 file changed, 23 insertions(+), 58 deletions(-) diff --git a/protocols/rdp/src/rdp_handlers.c b/protocols/rdp/src/rdp_handlers.c index dc0a3a8e..ba786140 100644 --- a/protocols/rdp/src/rdp_handlers.c +++ b/protocols/rdp/src/rdp_handlers.c @@ -45,10 +45,20 @@ #include #include +#include #include "client.h" #include "rdp_handlers.h" + +static CLRCONV _guac_rdp_clrconv = { + .alpha = 1, + .invert = 0, + .rgb555 = 0, + .palette = NULL +}; + + void guac_rdp_convert_color(int depth, int color, guac_rdp_color* comp) { switch (depth) { @@ -103,77 +113,32 @@ void guac_rdp_ui_end_update(freerdp* inst) { guac_socket_flush(socket); } -rdpBitmap* guac_rdp_ui_create_bitmap(freerdp* inst, int width, int height, uint8* data) { +void guac_rdp_bitmap_new(rdpContext* context, rdpBitmap* bitmap) { /* Allocate buffer */ - guac_client* client = ((rdp_freerdp_context*) inst->context)->client; + guac_client* client = ((rdp_freerdp_context*) context)->client; guac_socket* socket = client->socket; guac_layer* buffer = guac_client_alloc_buffer(client); - int x, y; - int stride; - int bpp = (inst->settings->server_depth + 7) / 8; - unsigned char* image_buffer; - unsigned char* image_buffer_row; + /* Convert image data to 32-bit RGB */ + unsigned char* image_buffer = freerdp_image_convert(bitmap->data, NULL, + bitmap->width, bitmap->height, + context->instance->settings->color_depth, + 32, (HCLRCONV) &_guac_rdp_clrconv); - cairo_surface_t* surface; + /* Create surface from image data */ + cairo_surface_t* surface = cairo_image_surface_create_for_data( + bitmap->data, CAIRO_FORMAT_RGB24, + bitmap->width, bitmap->height, 4*bitmap->width); - /* Init Cairo buffer */ - stride = cairo_format_stride_for_width(CAIRO_FORMAT_RGB24, width); - image_buffer = malloc(height*stride); - image_buffer_row = image_buffer; - - /* Copy image data from image data to buffer */ - for (y = 0; y> 8) & 0xF8) | ((v >> 13) & 0x07); - green = ((v >> 3) & 0xFC) | ((v >> 9) & 0x03); - blue = ((v << 3) & 0xF8) | ((v >> 2) & 0x07); - break; - - default: /* The Magenta of Failure */ - red = 0xFF; - green = 0x00; - blue = 0xFF; - } - - /* Output RGB */ - *(image_buffer_current++) = (red << 16) | (green << 8) | blue; - - } - } - - surface = cairo_image_surface_create_for_data(image_buffer, CAIRO_FORMAT_RGB24, width, height, stride); + /* Send surface to buffer */ guac_protocol_send_png(socket, GUAC_COMP_SRC, buffer, 0, 0, surface); - guac_socket_flush(socket); /* Free surface */ cairo_surface_destroy(surface); free(image_buffer); - return (rdpBitmap*) buffer; + /* FIXME: What do we do with buffer?? */ } From dd9ea3cec5f0f577116d3a0888ec5c7d63b86d1c Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Mon, 2 Jan 2012 17:59:52 -0800 Subject: [PATCH 039/253] Moved bitmap handler into own files. --- protocols/rdp/Makefile.am | 2 +- protocols/rdp/include/rdp_bitmap.h | 45 ++++++++++++++ protocols/rdp/src/rdp_bitmap.c | 97 ++++++++++++++++++++++++++++++ protocols/rdp/src/rdp_handlers.c | 29 --------- 4 files changed, 143 insertions(+), 30 deletions(-) create mode 100644 protocols/rdp/include/rdp_bitmap.h create mode 100644 protocols/rdp/src/rdp_bitmap.c diff --git a/protocols/rdp/Makefile.am b/protocols/rdp/Makefile.am index c4e42dc4..71583cc2 100644 --- a/protocols/rdp/Makefile.am +++ b/protocols/rdp/Makefile.am @@ -41,7 +41,7 @@ AM_CFLAGS = -Werror -Wall -pedantic -Iinclude lib_LTLIBRARIES = libguac-client-rdp.la -libguac_client_rdp_la_SOURCES = src/client.c src/rdp_handlers.c src/rdp_keymap.c +libguac_client_rdp_la_SOURCES = src/client.c src/rdp_handlers.c src/rdp_keymap.c src/rdp_bitmap.c libguac_client_rdp_la_LDFLAGS = -version-info 0:0:0 diff --git a/protocols/rdp/include/rdp_bitmap.h b/protocols/rdp/include/rdp_bitmap.h new file mode 100644 index 00000000..2314ce8e --- /dev/null +++ b/protocols/rdp/include/rdp_bitmap.h @@ -0,0 +1,45 @@ + +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is libguac-client-rdp. + * + * The Initial Developer of the Original Code is + * Michael Jumper. + * Portions created by the Initial Developer are Copyright (C) 2011 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#ifndef _GUAC_RDP_RDP_BITMAP_H +#define _GUAC_RDP_RDP_BITMAP_H + +#include + +void guac_rdp_bitmap_new(rdpContext* context, rdpBitmap* bitmap); + +#endif diff --git a/protocols/rdp/src/rdp_bitmap.c b/protocols/rdp/src/rdp_bitmap.c new file mode 100644 index 00000000..c9c321ef --- /dev/null +++ b/protocols/rdp/src/rdp_bitmap.c @@ -0,0 +1,97 @@ + +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is libguac-client-rdp. + * + * The Initial Developer of the Original Code is + * Michael Jumper. + * Portions created by the Initial Developer are Copyright (C) 2011 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#include +#include + +#include + +#include +#include +#include + +#include +#include + +#include "client.h" +#include "rdp_bitmap.h" + +static CLRCONV _guac_rdp_clrconv = { + .alpha = 1, + .invert = 0, + .rgb555 = 0, + .palette = NULL +}; + +void guac_rdp_bitmap_new(rdpContext* context, rdpBitmap* bitmap) { + + /* Allocate buffer */ + guac_client* client = ((rdp_freerdp_context*) context)->client; + guac_socket* socket = client->socket; + guac_layer* buffer = guac_client_alloc_buffer(client); + + /* Convert image data if present */ + if (bitmap->data != NULL) { + + /* Convert image data to 32-bit RGB */ + unsigned char* image_buffer = freerdp_image_convert(bitmap->data, NULL, + bitmap->width, bitmap->height, + context->instance->settings->color_depth, + 32, (HCLRCONV) &_guac_rdp_clrconv); + + /* Create surface from image data */ + cairo_surface_t* surface = cairo_image_surface_create_for_data( + bitmap->data, CAIRO_FORMAT_RGB24, + bitmap->width, bitmap->height, 4*bitmap->width); + + /* Send surface to buffer */ + guac_protocol_send_png(socket, GUAC_COMP_SRC, buffer, 0, 0, surface); + + /* Free surface */ + cairo_surface_destroy(surface); + + /* Free image data if actually alloated */ + if (image_buffer != bitmap->data) + free(image_buffer); + + } + + /* Store buffer reference in bitmap */ + ((guac_rdp_bitmap*) bitmap)->layer = buffer; + +} + diff --git a/protocols/rdp/src/rdp_handlers.c b/protocols/rdp/src/rdp_handlers.c index ba786140..2a118e7f 100644 --- a/protocols/rdp/src/rdp_handlers.c +++ b/protocols/rdp/src/rdp_handlers.c @@ -113,35 +113,6 @@ void guac_rdp_ui_end_update(freerdp* inst) { guac_socket_flush(socket); } -void guac_rdp_bitmap_new(rdpContext* context, rdpBitmap* bitmap) { - - /* Allocate buffer */ - guac_client* client = ((rdp_freerdp_context*) context)->client; - guac_socket* socket = client->socket; - guac_layer* buffer = guac_client_alloc_buffer(client); - - /* Convert image data to 32-bit RGB */ - unsigned char* image_buffer = freerdp_image_convert(bitmap->data, NULL, - bitmap->width, bitmap->height, - context->instance->settings->color_depth, - 32, (HCLRCONV) &_guac_rdp_clrconv); - - /* Create surface from image data */ - cairo_surface_t* surface = cairo_image_surface_create_for_data( - bitmap->data, CAIRO_FORMAT_RGB24, - bitmap->width, bitmap->height, 4*bitmap->width); - - /* Send surface to buffer */ - guac_protocol_send_png(socket, GUAC_COMP_SRC, buffer, 0, 0, surface); - - /* Free surface */ - cairo_surface_destroy(surface); - free(image_buffer); - - /* FIXME: What do we do with buffer?? */ - -} - void guac_rdp_ui_paint_bitmap(freerdp* inst, int x, int y, int cx, int cy, int width, int height, uint8* data) { guac_client* client = ((rdp_freerdp_context*) inst->context)->client; From cc66c86fddbf07a74bb2a10812bc6d490cfe787d Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Mon, 2 Jan 2012 18:00:37 -0800 Subject: [PATCH 040/253] Removed old handler functions. --- protocols/rdp/Makefile.am | 2 +- protocols/rdp/include/rdp_handlers.h | 82 ----- protocols/rdp/src/rdp_handlers.c | 518 --------------------------- 3 files changed, 1 insertion(+), 601 deletions(-) delete mode 100644 protocols/rdp/include/rdp_handlers.h delete mode 100644 protocols/rdp/src/rdp_handlers.c diff --git a/protocols/rdp/Makefile.am b/protocols/rdp/Makefile.am index 71583cc2..a9d9fa4b 100644 --- a/protocols/rdp/Makefile.am +++ b/protocols/rdp/Makefile.am @@ -41,7 +41,7 @@ AM_CFLAGS = -Werror -Wall -pedantic -Iinclude lib_LTLIBRARIES = libguac-client-rdp.la -libguac_client_rdp_la_SOURCES = src/client.c src/rdp_handlers.c src/rdp_keymap.c src/rdp_bitmap.c +libguac_client_rdp_la_SOURCES = src/client.c rc/rdp_keymap.c src/rdp_bitmap.c libguac_client_rdp_la_LDFLAGS = -version-info 0:0:0 diff --git a/protocols/rdp/include/rdp_handlers.h b/protocols/rdp/include/rdp_handlers.h deleted file mode 100644 index 67cb27ef..00000000 --- a/protocols/rdp/include/rdp_handlers.h +++ /dev/null @@ -1,82 +0,0 @@ - -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is libguac-client-rdp. - * - * The Initial Developer of the Original Code is - * Michael Jumper. - * Portions created by the Initial Developer are Copyright (C) 2011 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ - -#ifndef _GUAC_RDP_RDP_HANDLERS_H -#define _GUAC_RDP_RDP_HANDLERS_H - -#include -#include - -int guac_rdp_ui_select(freerdp* inst, int rdp_socket); - -void guac_rdp_ui_resize_window(freerdp* inst); - -void guac_rdp_ui_move_pointer(freerdp* inst, int x, int y); - -void guac_rdp_ui_set_clip(freerdp* inst, int x, int y, int cx, int cy); -void guac_rdp_ui_reset_clip(freerdp* inst); - -void guac_rdp_ui_rect(freerdp* inst, int x, int y, int cx, int cy, uint32 colour); - -rdpBitmap* guac_rdp_ui_create_bitmap(freerdp* inst, int width, int height, uint8* data); -void guac_rdp_ui_paint_bitmap(freerdp* inst, int x, int y, int cx, int cy, int width, int height, uint8* data); -void guac_rdp_ui_destroy_bitmap(freerdp* inst, rdpBitmap* bmp); - -void guac_rdp_ui_destblt(freerdp* inst, uint8 opcode, int x, int y, int cx, int cy); -void guac_rdp_ui_patblt(freerdp* inst, uint8 opcode, int x, int y, int cx, int cy, rdpBrush* brush, uint32 bgcolor, uint32 fgcolor); -void guac_rdp_ui_screenblt(freerdp* inst, uint8 opcode, int x, int y, int cx, int cy, int srcx, int srcy); -void guac_rdp_ui_memblt(freerdp* inst, uint8 opcode, int x, int y, int width, int height, rdpBitmap* src, int srcx, int srcy); -void guac_rdp_ui_triblt(freerdp* inst, uint8 opcode, int x, int y, int cx, int cy, rdpBitmap* src, int srcx, int srcy, rdpBrush* brush, uint32 bgcolor, uint32 fgcolor); - -void guac_rdp_ui_start_draw_glyphs(freerdp* inst, uint32 bgcolor, uint32 fgcolor); -void guac_rdp_ui_draw_glyph(freerdp* inst, int x, int y, int cx, int cy, rdpGlyph* glyph); -void guac_rdp_ui_end_draw_glyphs(freerdp* inst, int x, int y, int cx, int cy); -rdpGlyph* guac_rdp_ui_create_glyph(freerdp* inst, int width, int height, uint8* data); -void guac_rdp_ui_destroy_glyph(freerdp* inst, rdpGlyph* glyph); - -void guac_rdp_ui_set_pointer(freerdp* inst, rdpPointer pointer); -void guac_rdp_ui_destroy_pointer(freerdp* inst, rdpPointer pointer); -rdpPointer guac_rdp_ui_create_pointer(freerdp* inst, unsigned int x, unsigned int y, int width, int height, uint8* andmask, uint8* xormask, int bpp); -void guac_rdp_ui_set_null_pointer(freerdp* inst); -void guac_rdp_ui_set_default_pointer(freerdp* inst); - -rdpBitmap* guac_rdp_ui_create_surface(freerdp* inst, int width, int height, rdpBitmap* old); -void guac_rdp_ui_set_surface(freerdp* inst, rdpBitmap* surface); -void guac_rdp_ui_destroy_surface(freerdp* inst, rdpBitmap* surface); - -#endif - diff --git a/protocols/rdp/src/rdp_handlers.c b/protocols/rdp/src/rdp_handlers.c deleted file mode 100644 index 2a118e7f..00000000 --- a/protocols/rdp/src/rdp_handlers.c +++ /dev/null @@ -1,518 +0,0 @@ - -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is libguac-client-rdp. - * - * The Initial Developer of the Original Code is - * Michael Jumper. - * Portions created by the Initial Developer are Copyright (C) 2011 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ - -#include -#include - -#include - -#include -#include -#include - -#include -#include - -#include "client.h" -#include "rdp_handlers.h" - - -static CLRCONV _guac_rdp_clrconv = { - .alpha = 1, - .invert = 0, - .rgb555 = 0, - .palette = NULL -}; - - -void guac_rdp_convert_color(int depth, int color, guac_rdp_color* comp) { - - switch (depth) { - - case 24: - comp->red = (color >> 16) & 0xFF; - comp->green = (color >> 8) & 0xFF; - comp->blue = (color ) & 0xFF; - break; - - case 16: - comp->red = ((color >> 8) & 0xF8) | ((color >> 13) & 0x07); - comp->green = ((color >> 3) & 0xFC) | ((color >> 9) & 0x03); - comp->blue = ((color << 3) & 0xF8) | ((color >> 2) & 0x07); - break; - - default: /* The Magenta of Failure */ - comp->red = 0xFF; - comp->green = 0x00; - comp->blue = 0xFF; - } - -} - -void guac_rdp_ui_error(freerdp* inst, const char* text) { - - guac_client* client = ((rdp_freerdp_context*) inst->context)->client; - guac_socket* socket = client->socket; - - guac_protocol_send_error(socket, text); - guac_socket_flush(socket); - -} - -void guac_rdp_ui_warning(freerdp* inst, const char* text) { - guac_client* client = ((rdp_freerdp_context*) inst->context)->client; - guac_client_log_info(client, "guac_rdp_ui_warning: %s\n", text); -} - -void guac_rdp_ui_unimpl(freerdp* inst, const char* text) { - guac_client* client = ((rdp_freerdp_context*) inst->context)->client; - guac_client_log_info(client, "guac_rdp_ui_unimpl: %s\n", text); -} - -void guac_rdp_ui_begin_update(freerdp* inst) { - /* UNUSED */ -} - -void guac_rdp_ui_end_update(freerdp* inst) { - guac_client* client = ((rdp_freerdp_context*) inst->context)->client; - guac_socket* socket = client->socket; - guac_socket_flush(socket); -} - -void guac_rdp_ui_paint_bitmap(freerdp* inst, int x, int y, int cx, int cy, int width, int height, uint8* data) { - - guac_client* client = ((rdp_freerdp_context*) inst->context)->client; - rdp_guac_client_data* guac_client_data = (rdp_guac_client_data*) client->data; - const guac_layer* current_surface = guac_client_data->current_surface; - guac_socket* socket = client->socket; - - int dx, dy; - int stride; - int bpp = (inst->settings->server_depth + 7) / 8; - unsigned char* image_buffer; - unsigned char* image_buffer_row; - - int data_stride = width * bpp; - unsigned char* data_row = data; - - cairo_surface_t* surface; - - /* Init Cairo buffer */ - stride = cairo_format_stride_for_width(CAIRO_FORMAT_RGB24, cx); - image_buffer = malloc(height*stride); - image_buffer_row = image_buffer; - - /* Copy image data from image data to buffer */ - for (dy = 0; dy> 8) & 0xF8) | ((v >> 13) & 0x07); - green = ((v >> 3) & 0xFC) | ((v >> 9) & 0x03); - blue = ((v << 3) & 0xF8) | ((v >> 2) & 0x07); - break; - - default: /* The Magenta of Failure */ - red = 0xFF; - green = 0x00; - blue = 0xFF; - } - - /* Output RGB */ - *(image_buffer_current++) = (red << 16) | (green << 8) | blue; - - } - } - - surface = cairo_image_surface_create_for_data(image_buffer, CAIRO_FORMAT_RGB24, cx, cy, stride); - guac_protocol_send_png(socket, GUAC_COMP_OVER, current_surface, x, y, surface); - guac_socket_flush(socket); - - /* Free surface */ - cairo_surface_destroy(surface); - free(image_buffer); - -} - -void guac_rdp_ui_destroy_bitmap(freerdp* inst, rdpBitmap* bmp) { - - /* Free buffer */ - guac_client* client = ((rdp_freerdp_context*) inst->context)->client; - guac_client_free_buffer(client, (guac_layer*) bmp); - -} - -void guac_rdp_ui_rect(freerdp* inst, int x, int y, int cx, int cy, uint32 color) { - - guac_client* client = ((rdp_freerdp_context*) inst->context)->client; - rdp_guac_client_data* guac_client_data = (rdp_guac_client_data*) client->data; - const guac_layer* current_surface = guac_client_data->current_surface; - guac_socket* socket = client->socket; - - unsigned char red, green, blue; - - switch (inst->settings->server_depth) { - case 24: - red = (color >> 16) & 0xFF; - green = (color >> 8) & 0xFF; - blue = (color ) & 0xFF; - break; - - case 16: - red = ((color >> 8) & 0xF8) | ((color >> 13) & 0x07); - green = ((color >> 3) & 0xFC) | ((color >> 9) & 0x03); - blue = ((color << 3) & 0xF8) | ((color >> 2) & 0x07); - break; - - default: /* The Magenta of Failure */ - red = 0xFF; - green = 0x00; - blue = 0xFF; - } - - /* Send rectangle */ - guac_protocol_send_rect(socket, GUAC_COMP_OVER, current_surface, - x, y, cx, cy, - red, green, blue, 0xFF); - -} - -void guac_rdp_ui_start_draw_glyphs(freerdp* inst, uint32 bgcolor, uint32 fgcolor) { - - guac_client* client = ((rdp_freerdp_context*) inst->context)->client; - rdp_guac_client_data* guac_client_data = (rdp_guac_client_data*) client->data; - - guac_rdp_convert_color( - inst->settings->server_depth, - bgcolor, - &(guac_client_data->background)); - - guac_rdp_convert_color( - inst->settings->server_depth, - fgcolor, - &(guac_client_data->foreground)); - -} - -void guac_rdp_ui_draw_glyph(freerdp* inst, int x, int y, int width, int height, rdpGlyph* glyph) { - - guac_client* client = ((rdp_freerdp_context*) inst->context)->client; - rdp_guac_client_data* guac_client_data = (rdp_guac_client_data*) client->data; - const guac_layer* current_surface = guac_client_data->current_surface; - guac_socket* socket = client->socket; - - /* NOTE: Originally: Stencil=SRC, FG=ATOP, BG=RATOP */ - /* Temporarily removed BG drawing... */ - - /* Foreground */ - guac_protocol_send_rect(socket, GUAC_COMP_ATOP, (guac_layer*) glyph, - 0, 0, width, height, - guac_client_data->foreground.red, - guac_client_data->foreground.green, - guac_client_data->foreground.blue, - 255); - - /* Background */ - /*guac_protocol_send_rect(socket, GUAC_COMP_OVER, current_surface, - x, y, width, height, - guac_client_data->background.red, - guac_client_data->background.green, - guac_client_data->background.blue, - 255);*/ - - /* Draw */ - guac_protocol_send_copy(socket, - (guac_layer*) glyph, 0, 0, width, height, - GUAC_COMP_OVER, current_surface, x, y); - -} - -void guac_rdp_ui_end_draw_glyphs(freerdp* inst, int x, int y, int cx, int cy) { - /* UNUSED */ -} - -void guac_rdp_ui_destblt(freerdp* inst, uint8 opcode, int x, int y, int cx, int cy) { - guac_client* client = ((rdp_freerdp_context*) inst->context)->client; - guac_client_log_info(client, "guac_rdp_ui_destblt: STUB\n"); -} - -void guac_rdp_ui_patblt(freerdp* inst, uint8 opcode, int x, int y, int cx, int cy, rdpBrush* brush, uint32 bgcolor, uint32 fgcolor) { - guac_client* client = ((rdp_freerdp_context*) inst->context)->client; - guac_client_log_info(client, "guac_rdp_ui_patblt: STUB\n"); -} - -void guac_rdp_ui_screenblt(freerdp* inst, uint8 opcode, int x, int y, int cx, int cy, int srcx, int srcy) { - - guac_client* client = ((rdp_freerdp_context*) inst->context)->client; - rdp_guac_client_data* guac_client_data = (rdp_guac_client_data*) client->data; - const guac_layer* current_surface = guac_client_data->current_surface; - guac_socket* socket = client->socket; - - guac_protocol_send_copy(socket, - GUAC_DEFAULT_LAYER, srcx, srcy, cx, cy, - GUAC_COMP_OVER, current_surface, x, y); - -} - -void guac_rdp_ui_memblt(freerdp* inst, uint8 opcode, int x, int y, int width, int height, rdpBitmap* src, int srcx, int srcy) { - - guac_client* client = ((rdp_freerdp_context*) inst->context)->client; - rdp_guac_client_data* guac_client_data = (rdp_guac_client_data*) client->data; - const guac_layer* current_surface = guac_client_data->current_surface; - guac_socket* socket = client->socket; - - if (opcode != 204) - guac_client_log_info(client, - "guac_rdp_ui_memblt: opcode=%i, index=%i\n", opcode, - ((guac_layer*) src)->index); - - guac_protocol_send_copy(socket, - (guac_layer*) src, srcx, srcy, width, height, - GUAC_COMP_OVER, current_surface, x, y); - -} - -void guac_rdp_ui_triblt(freerdp* inst, uint8 opcode, int x, int y, int cx, int cy, rdpBitmap* src, int srcx, int srcy, rdpBrush* brush, uint32 bgcolor, uint32 fgcolor) { - guac_client* client = ((rdp_freerdp_context*) inst->context)->client; - guac_client_log_info(client, "guac_rdp_ui_triblt: STUB\n"); -} - -rdpGlyph* guac_rdp_ui_create_glyph(freerdp* inst, int width, int height, uint8* data) { - - /* Allocate buffer */ - guac_client* client = ((rdp_freerdp_context*) inst->context)->client; - guac_socket* socket = client->socket; - guac_layer* glyph = guac_client_alloc_buffer(client); - - int x, y, i; - int stride; - unsigned char* image_buffer; - unsigned char* image_buffer_row; - - cairo_surface_t* surface; - - /* Init Cairo buffer */ - stride = cairo_format_stride_for_width(CAIRO_FORMAT_ARGB32, width); - image_buffer = malloc(height*stride); - image_buffer_row = image_buffer; - - /* Copy image data from image data to buffer */ - for (y = 0; ycontext)->client; - guac_client_free_buffer(client, (guac_layer*) glyph); - -} - -int guac_rdp_ui_select(freerdp* inst, int rdp_socket) { - return 1; -} - -void guac_rdp_ui_set_clip(freerdp* inst, int x, int y, int cx, int cy) { - - guac_client* client = ((rdp_freerdp_context*) inst->context)->client; - rdp_guac_client_data* guac_client_data = (rdp_guac_client_data*) client->data; - const guac_layer* current_surface = guac_client_data->current_surface; - guac_socket* socket = client->socket; - - guac_protocol_send_clip(socket, current_surface, x, y, cx, cy); - -} - -void guac_rdp_ui_reset_clip(freerdp* inst) { - - guac_client* client = ((rdp_freerdp_context*) inst->context)->client; - rdp_guac_client_data* guac_client_data = (rdp_guac_client_data*) client->data; - const guac_layer* current_surface = guac_client_data->current_surface; - guac_socket* socket = client->socket; - - guac_protocol_send_clip(socket, current_surface, 0, 0, inst->settings->width, inst->settings->height); - -} - -void guac_rdp_ui_resize_window(freerdp* inst) { - guac_client* client = ((rdp_freerdp_context*) inst->context)->client; - guac_client_log_info(client, "guac_rdp_ui_resize_window: %ix%i\n", inst->settings->width, inst->settings->height); -} - -void guac_rdp_ui_set_cursor(freerdp* inst, rdpPointer* cursor) { - guac_client* client = ((rdp_freerdp_context*) inst->context)->client; - guac_client_log_info(client, "guac_rdp_ui_set_cursor: STUB\n"); -} - -void guac_rdp_ui_destroy_cursor(freerdp* inst, rdpPointer* cursor) { - guac_client* client = ((rdp_freerdp_context*) inst->context)->client; - guac_client_log_info(client, "guac_rdp_ui_destroy_cursor: STUB\n"); -} - -rdpPointer* guac_rdp_ui_create_cursor(freerdp* inst, unsigned int x, unsigned int y, int width, int height, uint8* andmask, uint8* xormask, int bpp) { - - guac_client* client = ((rdp_freerdp_context*) inst->context)->client; - guac_client_log_info(client, "guac_rdp_ui_create_cursor: STUB\n"); - return (rdpPointer*) guac_client_alloc_buffer(client); - -} - -void guac_rdp_ui_set_null_cursor(freerdp* inst) { - guac_client* client = ((rdp_freerdp_context*) inst->context)->client; - guac_client_log_info(client, "guac_rdp_ui_set_null_cursor: STUB\n"); -} - -void guac_rdp_ui_set_default_cursor(freerdp* inst) { - guac_client* client = ((rdp_freerdp_context*) inst->context)->client; - guac_client_log_info(client, "guac_rdp_ui_set_default_cursor: STUB\n"); -} - -void guac_rdp_ui_move_pointer(freerdp* inst, int x, int y) { - guac_client* client = ((rdp_freerdp_context*) inst->context)->client; - guac_client_log_info(client, "guac_rdp_ui_move_pointer: STUB\n"); -} - -rdpBitmap* guac_rdp_ui_create_surface(freerdp* inst, int width, int height, rdpBitmap* old) { - - /* If old provided, just return that one ... */ - if (old != NULL) - return old; - - /* Otherwise allocate and return new buffer */ - else { - guac_client* client = ((rdp_freerdp_context*) inst->context)->client; - return (rdpBitmap*) guac_client_alloc_buffer(client); - } - -} - -void guac_rdp_ui_set_surface(freerdp* inst, rdpBitmap* surface) { - - guac_client* client = ((rdp_freerdp_context*) inst->context)->client; - rdp_guac_client_data* guac_client_data = (rdp_guac_client_data*) client->data; - guac_socket* socket = client->socket; - - guac_client_log_info(client, "guac_rdp_ui_set_surface: %p (index=%i)\n", surface, surface != NULL ? ((guac_layer*) surface)->index : 0); - - /* Init desktop */ - if (surface == NULL) { - - guac_protocol_send_name(socket, inst->settings->server); - guac_protocol_send_size(socket, inst->settings->width, inst->settings->height); - guac_socket_flush(socket); - - guac_client_data->current_surface = GUAC_DEFAULT_LAYER; - } - else { - guac_client_data->current_surface = (guac_layer*) surface; - } - -} - -void guac_rdp_ui_destroy_surface(freerdp* inst, rdpBitmap* surface) { - - /* Free buffer */ - guac_client* client = ((rdp_freerdp_context*) inst->context)->client; - guac_client_free_buffer(client, (guac_layer*) surface); - -} - From f8ee9a0c2cdd0415b2b224364060c88f82d38f8c Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Mon, 2 Jan 2012 18:03:12 -0800 Subject: [PATCH 041/253] Fixed typo in Makefile.am, removed non-existant include file. --- protocols/rdp/Makefile.am | 2 +- protocols/rdp/src/client.c | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/protocols/rdp/Makefile.am b/protocols/rdp/Makefile.am index a9d9fa4b..1243f245 100644 --- a/protocols/rdp/Makefile.am +++ b/protocols/rdp/Makefile.am @@ -41,7 +41,7 @@ AM_CFLAGS = -Werror -Wall -pedantic -Iinclude lib_LTLIBRARIES = libguac-client-rdp.la -libguac_client_rdp_la_SOURCES = src/client.c rc/rdp_keymap.c src/rdp_bitmap.c +libguac_client_rdp_la_SOURCES = src/client.c src/rdp_keymap.c src/rdp_bitmap.c libguac_client_rdp_la_LDFLAGS = -version-info 0:0:0 diff --git a/protocols/rdp/src/client.c b/protocols/rdp/src/client.c index 8a71ff6b..1d3fde68 100644 --- a/protocols/rdp/src/client.c +++ b/protocols/rdp/src/client.c @@ -51,7 +51,6 @@ #include "client.h" #include "guac_handlers.h" -#include "rdp_handlers.h" #include "rdp_keymap.h" /* Client plugin arguments */ From 22d6231aeb2c1004efb1b5809f6ef5284fb1dc97 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Mon, 2 Jan 2012 18:08:30 -0800 Subject: [PATCH 042/253] Update constants in keymap to 1.0 --- protocols/rdp/src/rdp_keymap.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/protocols/rdp/src/rdp_keymap.c b/protocols/rdp/src/rdp_keymap.c index 908b2c1c..3415fa81 100644 --- a/protocols/rdp/src/rdp_keymap.c +++ b/protocols/rdp/src/rdp_keymap.c @@ -35,7 +35,7 @@ * * ***** END LICENSE BLOCK ***** */ -#include +#include #include "rdp_keymap.h" @@ -5260,10 +5260,10 @@ const guac_rdp_keymap guac_rdp_keysym_scancode[256][256] = { { .scancode = 0x00, .flags = 0x00 }, /* 0xff4e */ { .scancode = 0x00, .flags = 0x00 }, /* 0xff4f */ { .scancode = 0x00, .flags = 0x00 }, /* 0xff50 (Home) */ - { .scancode = 0x4B, .flags = KBDFLAGS_EXTENDED }, /* 0xff51 (Left) */ - { .scancode = 0x48, .flags = KBDFLAGS_EXTENDED }, /* 0xff52 (Up) */ - { .scancode = 0x4D, .flags = KBDFLAGS_EXTENDED }, /* 0xff53 (Right) */ - { .scancode = 0x50, .flags = KBDFLAGS_EXTENDED }, /* 0xff54 (Down) */ + { .scancode = 0x4B, .flags = KBD_FLAGS_EXTENDED }, /* 0xff51 (Left) */ + { .scancode = 0x48, .flags = KBD_FLAGS_EXTENDED }, /* 0xff52 (Up) */ + { .scancode = 0x4D, .flags = KBD_FLAGS_EXTENDED }, /* 0xff53 (Right) */ + { .scancode = 0x50, .flags = KBD_FLAGS_EXTENDED }, /* 0xff54 (Down) */ { .scancode = 0x00, .flags = 0x00 }, /* 0xff55 (Page_Up) */ { .scancode = 0x00, .flags = 0x00 }, /* 0xff56 (Page_Down) */ { .scancode = 0x00, .flags = 0x00 }, /* 0xff57 (End) */ @@ -5434,7 +5434,7 @@ const guac_rdp_keymap guac_rdp_keysym_scancode[256][256] = { { .scancode = 0x00, .flags = 0x00 }, /* 0xfffc */ { .scancode = 0x00, .flags = 0x00 }, /* 0xfffd */ { .scancode = 0x00, .flags = 0x00 }, /* 0xfffe */ - { .scancode = 0x53, .flags = KBDFLAGS_EXTENDED }, /* 0xffff (Delete) */ + { .scancode = 0x53, .flags = KBD_FLAGS_EXTENDED }, /* 0xffff (Delete) */ }, }; From cf4d9b0c5ebe5825084aef48b3b9517d64e0b14f Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Mon, 2 Jan 2012 18:25:04 -0800 Subject: [PATCH 043/253] Defined guac_rdp_bitmap. --- protocols/rdp/include/rdp_bitmap.h | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/protocols/rdp/include/rdp_bitmap.h b/protocols/rdp/include/rdp_bitmap.h index 2314ce8e..9e6d0f02 100644 --- a/protocols/rdp/include/rdp_bitmap.h +++ b/protocols/rdp/include/rdp_bitmap.h @@ -40,6 +40,22 @@ #include +#include + +typedef struct guac_rdp_bitmap { + + /** + * FreeRDP bitmap data - MUST GO FIRST. + */ + rdpBitmap bitmap; + + /** + * Guacamole layer containing cached image data. + */ + guac_layer* layer; + +} guac_rdp_bitmap; + void guac_rdp_bitmap_new(rdpContext* context, rdpBitmap* bitmap); #endif From 149ea16a6fd45e78bf653fd307a9b677426a14de Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Mon, 2 Jan 2012 23:31:13 -0800 Subject: [PATCH 044/253] Init bitmap handlers, use xzalloc (part of libfreerdp-utils). --- protocols/rdp/configure.in | 5 +++-- protocols/rdp/src/client.c | 14 +++++++++++++- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/protocols/rdp/configure.in b/protocols/rdp/configure.in index 48d1c20c..9cbec3bd 100644 --- a/protocols/rdp/configure.in +++ b/protocols/rdp/configure.in @@ -46,8 +46,9 @@ AC_PROG_LIBTOOL # Checks for libraries. AC_CHECK_LIB([guac], [guac_client_plugin_open],, AC_MSG_ERROR("libguac must be installed first")) AC_CHECK_LIB([cairo], [cairo_create],, AC_MSG_ERROR("cairo is required for drawing instructions")) -AC_CHECK_LIB([freerdp-core], [freerdp_new],, AC_MSG_ERROR("libfreerdp is required")) -AC_CHECK_LIB([freerdp-channels], [freerdp_channels_new],, AC_MSG_ERROR("libfreerdp is required")) +AC_CHECK_LIB([freerdp-core], [freerdp_new],, AC_MSG_ERROR("libfreerdp-core is required (part of FreeRDP)")) +AC_CHECK_LIB([freerdp-channels], [freerdp_channels_new],, AC_MSG_ERROR("libfreerdp-channels is required (part of FreeRDP)")) +AC_CHECK_LIB([freerdp-utils], [xzalloc],, AC_MSG_ERROR("libfreerdp-utils is required (part of FreeRDP)")) # Checks for header files. AC_CHECK_HEADERS([guacamole/client.h guacamole/guacio.h guacamole/protocol.h]) diff --git a/protocols/rdp/src/client.c b/protocols/rdp/src/client.c index 1d3fde68..87c3c8fe 100644 --- a/protocols/rdp/src/client.c +++ b/protocols/rdp/src/client.c @@ -42,6 +42,8 @@ #include #include +#include +#include #include #include @@ -52,6 +54,7 @@ #include "client.h" #include "guac_handlers.h" #include "rdp_keymap.h" +#include "rdp_bitmap.h" /* Client plugin arguments */ const char* GUAC_CLIENT_ARGS[] = { @@ -75,6 +78,7 @@ int guac_client_init(guac_client* client, int argc, char** argv) { freerdp* rdp_inst; rdpChannels* channels; rdpSettings* settings; + rdpBitmap* bitmap; char* hostname; int port = RDP_DEFAULT_PORT; @@ -136,7 +140,15 @@ int guac_client_init(guac_client* client, int argc, char** argv) { ((rdp_freerdp_context*) rdp_inst->context)->client = client; client->data = guac_client_data; - /* FIXME: Set RDP handlers */ + /* Set up bitmap handling */ + bitmap = xnew(rdpBitmap); + bitmap->size = sizeof(guac_rdp_bitmap); + bitmap->New = guac_rdp_bitmap_new; + /* bitmap->Free = guac_rdp_bitmap_free; */ + /* bitmap->Paint = guac_rdp_bitmap_paint; */ + /* bitmap->Decompress = guac_rdp_bitmap_decompress; */ + /* bitmap->SetSurface = guac_rdp_bitmap_setsurface; */ + graphics_register_bitmap(rdp_inst->context->graphics, bitmap); /* Init channels (pre-connect) */ if (freerdp_channels_pre_connect(channels, rdp_inst)) { From bd14fe2dabbb0a13e1151fd0ee32bf9f6f8f0fc3 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Mon, 2 Jan 2012 23:36:29 -0800 Subject: [PATCH 045/253] Test for and use libfreerdp-codec. --- protocols/rdp/configure.in | 1 + 1 file changed, 1 insertion(+) diff --git a/protocols/rdp/configure.in b/protocols/rdp/configure.in index 9cbec3bd..a86ee998 100644 --- a/protocols/rdp/configure.in +++ b/protocols/rdp/configure.in @@ -49,6 +49,7 @@ AC_CHECK_LIB([cairo], [cairo_create],, AC_MSG_ERROR("cairo is required for drawi AC_CHECK_LIB([freerdp-core], [freerdp_new],, AC_MSG_ERROR("libfreerdp-core is required (part of FreeRDP)")) AC_CHECK_LIB([freerdp-channels], [freerdp_channels_new],, AC_MSG_ERROR("libfreerdp-channels is required (part of FreeRDP)")) AC_CHECK_LIB([freerdp-utils], [xzalloc],, AC_MSG_ERROR("libfreerdp-utils is required (part of FreeRDP)")) +AC_CHECK_LIB([freerdp-codec], [freerdp_image_convert],, AC_MSG_ERROR("libfreerdp-codec is required (part of FreeRDP)")) # Checks for header files. AC_CHECK_HEADERS([guacamole/client.h guacamole/guacio.h guacamole/protocol.h]) From 54d815f258dcdeb3642d21c76638499c8883ae7d Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Tue, 3 Jan 2012 00:24:03 -0800 Subject: [PATCH 046/253] Added missing .c file to Makefile.am, fix guac_handlers.c --- protocols/rdp/Makefile.am | 2 +- protocols/rdp/src/guac_handlers.c | 47 +++++++++++++------------------ 2 files changed, 20 insertions(+), 29 deletions(-) diff --git a/protocols/rdp/Makefile.am b/protocols/rdp/Makefile.am index 1243f245..c9f6055f 100644 --- a/protocols/rdp/Makefile.am +++ b/protocols/rdp/Makefile.am @@ -41,7 +41,7 @@ AM_CFLAGS = -Werror -Wall -pedantic -Iinclude lib_LTLIBRARIES = libguac-client-rdp.la -libguac_client_rdp_la_SOURCES = src/client.c src/rdp_keymap.c src/rdp_bitmap.c +libguac_client_rdp_la_SOURCES = src/client.c src/rdp_keymap.c src/rdp_bitmap.c src/guac_handlers.c libguac_client_rdp_la_LDFLAGS = -version-info 0:0:0 diff --git a/protocols/rdp/src/guac_handlers.c b/protocols/rdp/src/guac_handlers.c index 357b5725..2832635f 100644 --- a/protocols/rdp/src/guac_handlers.c +++ b/protocols/rdp/src/guac_handlers.c @@ -50,23 +50,14 @@ #include #include "client.h" -#include "rdp_handlers.h" #include "rdp_keymap.h" +#include "guac_handlers.h" int rdp_guac_client_free_handler(guac_client* client) { - rdp_guac_client_data* guac_client_data = (rdp_guac_client_data*) client->data; + /* STUB */ - /* Disconnect client */ - guac_client_data->rdp_inst->rdp_disconnect(guac_client_data->rdp_inst); - - /* Free RDP client */ - freerdp_free(guac_client_data->rdp_inst); - freerdp_channels_free(guac_client_data->channels); - free(guac_client_data->settings); - - /* Free guac client data */ - free(guac_client_data); + /* FIXME: Clean up RDP client + disconnect */ return 0; @@ -75,7 +66,7 @@ int rdp_guac_client_free_handler(guac_client* client) { int rdp_guac_client_handle_messages(guac_client* client) { rdp_guac_client_data* guac_client_data = (rdp_guac_client_data*) client->data; - rdpInst* rdp_inst = guac_client_data->rdp_inst; + freerdp* rdp_inst = guac_client_data->rdp_inst; rdpChannels* channels = guac_client_data->channels; int index; @@ -88,7 +79,7 @@ int rdp_guac_client_handle_messages(guac_client* client) { fd_set rfds, wfds; /* get rdp fds */ - if (rdp_inst->rdp_get_fds(rdp_inst, read_fds, &read_count, write_fds, &write_count) != 0) { + if (freerdp_get_fds(rdp_inst, read_fds, &read_count, write_fds, &write_count) != 0) { guac_client_log_error(client, "Unable to read RDP file descriptors."); return 1; } @@ -138,7 +129,7 @@ int rdp_guac_client_handle_messages(guac_client* client) { } /* check the libfreerdp fds */ - if (rdp_inst->rdp_check_fds(rdp_inst) != 0) { + if (freerdp_check_fds(rdp_inst) != 0) { guac_client_log_error(client, "Error handling RDP file descriptors."); return 1; } @@ -157,11 +148,11 @@ int rdp_guac_client_handle_messages(guac_client* client) { int rdp_guac_client_mouse_handler(guac_client* client, int x, int y, int mask) { rdp_guac_client_data* guac_client_data = (rdp_guac_client_data*) client->data; - rdpInst* rdp_inst = guac_client_data->rdp_inst; + freerdp* rdp_inst = guac_client_data->rdp_inst; /* If button mask unchanged, just send move event */ if (mask == guac_client_data->mouse_button_mask) - rdp_inst->rdp_send_input_mouse(rdp_inst, PTR_FLAGS_MOVE, x, y); + rdp_inst->input->MouseEvent(rdp_inst->input, PTR_FLAGS_MOVE, x, y); /* Otherwise, send events describing button change */ else { @@ -181,7 +172,7 @@ int rdp_guac_client_mouse_handler(guac_client* client, int x, int y, int mask) { if (released_mask & 0x02) flags |= PTR_FLAGS_BUTTON3; if (released_mask & 0x04) flags |= PTR_FLAGS_BUTTON2; - rdp_inst->rdp_send_input_mouse(rdp_inst, flags, x, y); + rdp_inst->input->MouseEvent(rdp_inst->input, flags, x, y); } @@ -197,7 +188,7 @@ int rdp_guac_client_mouse_handler(guac_client* client, int x, int y, int mask) { if (pressed_mask & 0x10) flags |= PTR_FLAGS_WHEEL | PTR_FLAGS_WHEEL_NEGATIVE | 0x88; /* Send event */ - rdp_inst->rdp_send_input_mouse(rdp_inst, flags, x, y); + rdp_inst->input->MouseEvent(rdp_inst->input, flags, x, y); } @@ -206,15 +197,15 @@ int rdp_guac_client_mouse_handler(guac_client* client, int x, int y, int mask) { /* Down */ if (pressed_mask & 0x08) - rdp_inst->rdp_send_input_mouse( - rdp_inst, + rdp_inst->input->MouseEvent( + rdp_inst->input, PTR_FLAGS_WHEEL | 0x78, x, y); /* Up */ if (pressed_mask & 0x10) - rdp_inst->rdp_send_input_mouse( - rdp_inst, + rdp_inst->input->MouseEvent( + rdp_inst->input, PTR_FLAGS_WHEEL | PTR_FLAGS_WHEEL_NEGATIVE | 0x88, x, y); @@ -230,7 +221,7 @@ int rdp_guac_client_mouse_handler(guac_client* client, int x, int y, int mask) { int rdp_guac_client_key_handler(guac_client* client, int keysym, int pressed) { rdp_guac_client_data* guac_client_data = (rdp_guac_client_data*) client->data; - rdpInst* rdp_inst = guac_client_data->rdp_inst; + freerdp* rdp_inst = guac_client_data->rdp_inst; /* If keysym can be in lookup table */ if (keysym <= 0xFFFF) { @@ -241,10 +232,10 @@ int rdp_guac_client_key_handler(guac_client* client, int keysym, int pressed) { /* If defined, send event */ if (keymap->scancode != 0) - rdp_inst->rdp_send_input_scancode( - rdp_inst, - !pressed, - keymap->flags & KBD_FLAGS_EXTENDED, + rdp_inst->input->KeyboardEvent( + rdp_inst->input, + keymap->flags + | (pressed ? KBD_FLAGS_DOWN : KBD_FLAGS_RELEASE), keymap->scancode); else guac_client_log_info(client, "unmapped keysym: 0x%x", keysym); From c39e00a129c22e6df250255c60c196852b3bf28d Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Tue, 3 Jan 2012 01:01:33 -0800 Subject: [PATCH 047/253] Fixed handlers and segfaults. --- protocols/rdp/include/client.h | 2 - protocols/rdp/src/client.c | 136 ++++++++++++++++-------------- protocols/rdp/src/guac_handlers.c | 2 +- 3 files changed, 74 insertions(+), 66 deletions(-) diff --git a/protocols/rdp/include/client.h b/protocols/rdp/include/client.h index 42a0a177..3c2c5110 100644 --- a/protocols/rdp/include/client.h +++ b/protocols/rdp/include/client.h @@ -39,7 +39,6 @@ #define _GUAC_RDP_CLIENT_H #include -#include #include @@ -54,7 +53,6 @@ typedef struct guac_rdp_color { typedef struct rdp_guac_client_data { freerdp* rdp_inst; - rdpChannels* channels; rdpSettings* settings; int mouse_button_mask; diff --git a/protocols/rdp/src/client.c b/protocols/rdp/src/client.c index 87c3c8fe..b6f52f6d 100644 --- a/protocols/rdp/src/client.c +++ b/protocols/rdp/src/client.c @@ -63,8 +63,59 @@ const char* GUAC_CLIENT_ARGS[] = { NULL }; +boolean rdp_freerdp_pre_connect(freerdp* instance) { + + rdpContext* context = instance->context; + guac_client* client = ((rdp_freerdp_context*) context)->client; + rdpChannels* channels = context->channels; + rdpBitmap* bitmap; + + /* Set up bitmap handling */ + bitmap = xnew(rdpBitmap); + bitmap->size = sizeof(guac_rdp_bitmap); + bitmap->New = guac_rdp_bitmap_new; + /* bitmap->Free = guac_rdp_bitmap_free; */ + /* bitmap->Paint = guac_rdp_bitmap_paint; */ + /* bitmap->Decompress = guac_rdp_bitmap_decompress; */ + /* bitmap->SetSurface = guac_rdp_bitmap_setsurface; */ + graphics_register_bitmap(context->graphics, bitmap); + + /* Init channels (pre-connect) */ + if (freerdp_channels_pre_connect(channels, instance)) { + guac_protocol_send_error(client->socket, "Error initializing RDP client channel manager"); + guac_socket_flush(client->socket); + return false; + } + + return true; + +} + +boolean rdp_freerdp_post_connect(freerdp* instance) { + + rdpContext* context = instance->context; + guac_client* client = ((rdp_freerdp_context*) context)->client; + rdpChannels* channels = instance->context->channels; + + /* Init channels (post-connect) */ + if (freerdp_channels_post_connect(channels, instance)) { + guac_protocol_send_error(client->socket, "Error initializing RDP client channel manager"); + guac_socket_flush(client->socket); + return false; + } + + /* Client handlers */ + client->free_handler = rdp_guac_client_free_handler; + client->handle_messages = rdp_guac_client_handle_messages; + client->mouse_handler = rdp_guac_client_mouse_handler; + client->key_handler = rdp_guac_client_key_handler; + + return true; + +} + void rdp_freerdp_context_new(freerdp* instance, rdpContext* context) { - /* EMPTY */ + context->channels = freerdp_channels_new(); } void rdp_freerdp_context_free(freerdp* instance, rdpContext* context) { @@ -76,9 +127,7 @@ int guac_client_init(guac_client* client, int argc, char** argv) { rdp_guac_client_data* guac_client_data; freerdp* rdp_inst; - rdpChannels* channels; rdpSettings* settings; - rdpBitmap* bitmap; char* hostname; int port = RDP_DEFAULT_PORT; @@ -98,37 +147,11 @@ int guac_client_init(guac_client* client, int argc, char** argv) { /* Allocate client data */ guac_client_data = malloc(sizeof(rdp_guac_client_data)); - /* Get channel manager */ - channels = freerdp_channels_new(); - guac_client_data->channels = channels; - - /* INIT SETTINGS */ - settings = malloc(sizeof(rdpSettings)); - memset(settings, 0, sizeof(rdpSettings)); - guac_client_data->settings = settings; - - /* Set hostname */ - strncpy(settings->hostname, hostname, sizeof(settings->hostname) - 1); - - /* Default size */ - settings->width = 1024; - settings->height = 768; - - strncpy(settings->window_title, hostname, sizeof(settings->window_title)); - strcpy(settings->username, "guest"); - - /* FIXME: Set RDP settings->* */ - /* Init client */ - rdp_inst = freerdp_new(settings); - if (rdp_inst == NULL) { - guac_protocol_send_error(client->socket, "Error initializing RDP client"); - guac_socket_flush(client->socket); - return 1; - } - guac_client_data->rdp_inst = rdp_inst; - guac_client_data->mouse_button_mask = 0; - guac_client_data->current_surface = GUAC_DEFAULT_LAYER; + freerdp_channels_global_init(); + rdp_inst = freerdp_new(); + rdp_inst->PreConnect = rdp_freerdp_pre_connect; + rdp_inst->PostConnect = rdp_freerdp_post_connect; /* Allocate FreeRDP context */ rdp_inst->context_size = sizeof(rdp_freerdp_context); @@ -136,27 +159,27 @@ int guac_client_init(guac_client* client, int argc, char** argv) { rdp_inst->ContextFree = (pContextFree) rdp_freerdp_context_free; freerdp_context_new(rdp_inst); + /* Set settings */ + settings = rdp_inst->settings; + + /* Default size */ + settings->width = 1024; + settings->height = 768; + + /* Set hostname */ + settings->hostname = strdup(hostname); + + settings->window_title = strdup(hostname); + settings->username = "guest"; + /* Store client data */ + guac_client_data->rdp_inst = rdp_inst; + guac_client_data->mouse_button_mask = 0; + guac_client_data->current_surface = GUAC_DEFAULT_LAYER; + ((rdp_freerdp_context*) rdp_inst->context)->client = client; client->data = guac_client_data; - /* Set up bitmap handling */ - bitmap = xnew(rdpBitmap); - bitmap->size = sizeof(guac_rdp_bitmap); - bitmap->New = guac_rdp_bitmap_new; - /* bitmap->Free = guac_rdp_bitmap_free; */ - /* bitmap->Paint = guac_rdp_bitmap_paint; */ - /* bitmap->Decompress = guac_rdp_bitmap_decompress; */ - /* bitmap->SetSurface = guac_rdp_bitmap_setsurface; */ - graphics_register_bitmap(rdp_inst->context->graphics, bitmap); - - /* Init channels (pre-connect) */ - if (freerdp_channels_pre_connect(channels, rdp_inst)) { - guac_protocol_send_error(client->socket, "Error initializing RDP client channel manager"); - guac_socket_flush(client->socket); - return 1; - } - /* Connect to RDP server */ if (!freerdp_connect(rdp_inst)) { guac_protocol_send_error(client->socket, "Error connecting to RDP server"); @@ -164,19 +187,6 @@ int guac_client_init(guac_client* client, int argc, char** argv) { return 1; } - /* Init channels (post-connect) */ - if (freerdp_channels_post_connect(channels, rdp_inst)) { - guac_protocol_send_error(client->socket, "Error initializing RDP client channel manager"); - guac_socket_flush(client->socket); - return 1; - } - - /* Client handlers */ - client->free_handler = rdp_guac_client_free_handler; - client->handle_messages = rdp_guac_client_handle_messages; - client->mouse_handler = rdp_guac_client_mouse_handler; - client->key_handler = rdp_guac_client_key_handler; - /* Success */ return 0; diff --git a/protocols/rdp/src/guac_handlers.c b/protocols/rdp/src/guac_handlers.c index 2832635f..94f274cf 100644 --- a/protocols/rdp/src/guac_handlers.c +++ b/protocols/rdp/src/guac_handlers.c @@ -67,7 +67,7 @@ int rdp_guac_client_handle_messages(guac_client* client) { rdp_guac_client_data* guac_client_data = (rdp_guac_client_data*) client->data; freerdp* rdp_inst = guac_client_data->rdp_inst; - rdpChannels* channels = guac_client_data->channels; + rdpChannels* channels = rdp_inst->context->channels; int index; int max_fd, fd; From c1a9d84028cd5dfda13567d2f35e3262f9a76905 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Tue, 3 Jan 2012 01:05:21 -0800 Subject: [PATCH 048/253] Add default no-auth, RDP encryption. --- protocols/rdp/src/client.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/protocols/rdp/src/client.c b/protocols/rdp/src/client.c index b6f52f6d..07fa72ae 100644 --- a/protocols/rdp/src/client.c +++ b/protocols/rdp/src/client.c @@ -162,13 +162,23 @@ int guac_client_init(guac_client* client, int argc, char** argv) { /* Set settings */ settings = rdp_inst->settings; + /* --no-auth */ + settings->authentication = false; + + /* --sec rdp */ + settings->rdp_security = true; + settings->tls_security = false; + settings->nla_security = false; + settings->encryption = true; + settings->encryption_method = ENCRYPTION_METHOD_40BIT | ENCRYPTION_METHOD_128BIT | ENCRYPTION_METHOD_FIPS; + settings->encryption_level = ENCRYPTION_LEVEL_CLIENT_COMPATIBLE; + /* Default size */ settings->width = 1024; settings->height = 768; /* Set hostname */ settings->hostname = strdup(hostname); - settings->window_title = strdup(hostname); settings->username = "guest"; From 04625d4492fe79007d9af774278cefa1eca27f55 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Tue, 3 Jan 2012 13:04:50 -0800 Subject: [PATCH 049/253] Added free for bitmaps + stub for bitmap paint. --- protocols/rdp/include/rdp_bitmap.h | 2 ++ protocols/rdp/src/client.c | 4 ++-- protocols/rdp/src/rdp_bitmap.c | 9 +++++++++ 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/protocols/rdp/include/rdp_bitmap.h b/protocols/rdp/include/rdp_bitmap.h index 9e6d0f02..857f64d0 100644 --- a/protocols/rdp/include/rdp_bitmap.h +++ b/protocols/rdp/include/rdp_bitmap.h @@ -57,5 +57,7 @@ typedef struct guac_rdp_bitmap { } guac_rdp_bitmap; void guac_rdp_bitmap_new(rdpContext* context, rdpBitmap* bitmap); +void guac_rdp_bitmap_paint(rdpContext* context, rdpBitmap* bitmap); +void guac_rdp_bitmap_free(rdpContext* context, rdpBitmap* bitmap); #endif diff --git a/protocols/rdp/src/client.c b/protocols/rdp/src/client.c index 07fa72ae..4e5c6b97 100644 --- a/protocols/rdp/src/client.c +++ b/protocols/rdp/src/client.c @@ -74,8 +74,8 @@ boolean rdp_freerdp_pre_connect(freerdp* instance) { bitmap = xnew(rdpBitmap); bitmap->size = sizeof(guac_rdp_bitmap); bitmap->New = guac_rdp_bitmap_new; - /* bitmap->Free = guac_rdp_bitmap_free; */ - /* bitmap->Paint = guac_rdp_bitmap_paint; */ + bitmap->Free = guac_rdp_bitmap_free; + bitmap->Paint = guac_rdp_bitmap_paint; /* bitmap->Decompress = guac_rdp_bitmap_decompress; */ /* bitmap->SetSurface = guac_rdp_bitmap_setsurface; */ graphics_register_bitmap(context->graphics, bitmap); diff --git a/protocols/rdp/src/rdp_bitmap.c b/protocols/rdp/src/rdp_bitmap.c index c9c321ef..cb597551 100644 --- a/protocols/rdp/src/rdp_bitmap.c +++ b/protocols/rdp/src/rdp_bitmap.c @@ -95,3 +95,12 @@ void guac_rdp_bitmap_new(rdpContext* context, rdpBitmap* bitmap) { } +void guac_rdp_bitmap_paint(rdpContext* context, rdpBitmap* bitmap) { + /* STUB */ +} + +void guac_rdp_bitmap_free(rdpContext* context, rdpBitmap* bitmap) { + guac_client* client = ((rdp_freerdp_context*) context)->client; + guac_client_free_buffer(client, ((guac_rdp_bitmap*) bitmap)->layer); +} + From 1042225ef5c31a3c4f190f9a230dea3648524232 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Tue, 3 Jan 2012 13:20:24 -0800 Subject: [PATCH 050/253] Fixed usage of freerdp funcs (now return boolean), added debug logging. --- protocols/rdp/src/guac_handlers.c | 12 ++++++------ protocols/rdp/src/rdp_bitmap.c | 19 ++++++++++++++++++- 2 files changed, 24 insertions(+), 7 deletions(-) diff --git a/protocols/rdp/src/guac_handlers.c b/protocols/rdp/src/guac_handlers.c index 94f274cf..2d1bc20c 100644 --- a/protocols/rdp/src/guac_handlers.c +++ b/protocols/rdp/src/guac_handlers.c @@ -79,13 +79,13 @@ int rdp_guac_client_handle_messages(guac_client* client) { fd_set rfds, wfds; /* get rdp fds */ - if (freerdp_get_fds(rdp_inst, read_fds, &read_count, write_fds, &write_count) != 0) { + if (!freerdp_get_fds(rdp_inst, read_fds, &read_count, write_fds, &write_count)) { guac_client_log_error(client, "Unable to read RDP file descriptors."); return 1; } /* get channel fds */ - if (freerdp_channels_get_fds(channels, rdp_inst, read_fds, &read_count, write_fds, &write_count) != 0) { + if (!freerdp_channels_get_fds(channels, rdp_inst, read_fds, &read_count, write_fds, &write_count)) { guac_client_log_error(client, "Unable to read RDP channel file descriptors."); return 1; } @@ -128,14 +128,14 @@ int rdp_guac_client_handle_messages(guac_client* client) { } } - /* check the libfreerdp fds */ - if (freerdp_check_fds(rdp_inst) != 0) { + /* Check the libfreerdp fds */ + if (!freerdp_check_fds(rdp_inst)) { guac_client_log_error(client, "Error handling RDP file descriptors."); return 1; } - /* check channel fds */ - if (freerdp_channels_check_fds(channels, rdp_inst) != 0) { + /* Check channel fds */ + if (!freerdp_channels_check_fds(channels, rdp_inst)) { guac_client_log_error(client, "Error handling RDP channel file descriptors."); return 1; } diff --git a/protocols/rdp/src/rdp_bitmap.c b/protocols/rdp/src/rdp_bitmap.c index cb597551..8be3b98d 100644 --- a/protocols/rdp/src/rdp_bitmap.c +++ b/protocols/rdp/src/rdp_bitmap.c @@ -93,14 +93,31 @@ void guac_rdp_bitmap_new(rdpContext* context, rdpBitmap* bitmap) { /* Store buffer reference in bitmap */ ((guac_rdp_bitmap*) bitmap)->layer = buffer; + guac_client_log_info(client, "guac_rdp_bitmap_new()"); + } void guac_rdp_bitmap_paint(rdpContext* context, rdpBitmap* bitmap) { - /* STUB */ + + guac_client* client = ((rdp_freerdp_context*) context)->client; + guac_socket* socket = client->socket; + + /* Copy image data from buffer to visible layer */ + guac_protocol_send_copy(socket, + ((guac_rdp_bitmap*) bitmap)->layer, + 0, 0, bitmap->width, bitmap->height, + GUAC_COMP_OVER, + GUAC_DEFAULT_LAYER, bitmap->left, bitmap->top); + + guac_client_log_info(client, "guac_rdp_bitmap_paint()"); + } void guac_rdp_bitmap_free(rdpContext* context, rdpBitmap* bitmap) { guac_client* client = ((rdp_freerdp_context*) context)->client; guac_client_free_buffer(client, ((guac_rdp_bitmap*) bitmap)->layer); + + guac_client_log_info(client, "guac_rdp_bitmap_free()"); + } From 091a51f6f5fc309e0384835ed3cea22bca2d6b27 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Tue, 3 Jan 2012 13:39:59 -0800 Subject: [PATCH 051/253] Added prototypes and init for glyphs and pointers. --- protocols/rdp/include/rdp_bitmap.h | 1 + protocols/rdp/include/rdp_glyph.h | 63 +++++++++++++++++++++++++++++ protocols/rdp/include/rdp_pointer.h | 60 +++++++++++++++++++++++++++ protocols/rdp/src/client.c | 22 +++++++++- protocols/rdp/src/rdp_bitmap.c | 5 +++ 5 files changed, 150 insertions(+), 1 deletion(-) create mode 100644 protocols/rdp/include/rdp_glyph.h create mode 100644 protocols/rdp/include/rdp_pointer.h diff --git a/protocols/rdp/include/rdp_bitmap.h b/protocols/rdp/include/rdp_bitmap.h index 857f64d0..0968cb3f 100644 --- a/protocols/rdp/include/rdp_bitmap.h +++ b/protocols/rdp/include/rdp_bitmap.h @@ -59,5 +59,6 @@ typedef struct guac_rdp_bitmap { void guac_rdp_bitmap_new(rdpContext* context, rdpBitmap* bitmap); void guac_rdp_bitmap_paint(rdpContext* context, rdpBitmap* bitmap); void guac_rdp_bitmap_free(rdpContext* context, rdpBitmap* bitmap); +void guac_rdp_bitmap_setsurface(rdpContext* context, rdpBitmap* bitmap, boolean primary); #endif diff --git a/protocols/rdp/include/rdp_glyph.h b/protocols/rdp/include/rdp_glyph.h new file mode 100644 index 00000000..41ceb422 --- /dev/null +++ b/protocols/rdp/include/rdp_glyph.h @@ -0,0 +1,63 @@ + +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is libguac-client-rdp. + * + * The Initial Developer of the Original Code is + * Michael Jumper. + * Portions created by the Initial Developer are Copyright (C) 2011 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#ifndef _GUAC_RDP_RDP_GLYPH_H +#define _GUAC_RDP_RDP_GLYPH_H + +#include + +#include + +typedef struct guac_rdp_glyph { + + /** + * FreeRDP glyph data - MUST GO FIRST. + */ + rdpGlyph glyph; + + /** + * Guacamole layer containing cached image data. + */ + guac_layer* layer; + +} guac_rdp_glyph; + +void guac_rdp_glyph_new(rdpContext* context, rdpGlyph* glyph); +void guac_rdp_glyph_draw(rdpContext* context, rdpGlyph* glyph, int x, int y); +void guac_rdp_glyph_free(rdpContext* context, rdpGlyph* glyph); + +#endif diff --git a/protocols/rdp/include/rdp_pointer.h b/protocols/rdp/include/rdp_pointer.h new file mode 100644 index 00000000..869c9f13 --- /dev/null +++ b/protocols/rdp/include/rdp_pointer.h @@ -0,0 +1,60 @@ + +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is libguac-client-rdp. + * + * The Initial Developer of the Original Code is + * Michael Jumper. + * Portions created by the Initial Developer are Copyright (C) 2011 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#ifndef _GUAC_RDP_RDP_POINTER_H +#define _GUAC_RDP_RDP_POINTER_H + +#include + +#include + +typedef struct guac_rdp_pointer { + + /** + * FreeRDP pointer data - MUST GO FIRST. + */ + rdpPointer pointer; + + /* TODO: STUB */ + +} guac_rdp_pointer; + +void guac_rdp_pointer_new(rdpContext* context, rdpPointer* pointer); +void guac_rdp_pointer_set(rdpContext* context, rdpPointer* pointer); +void guac_rdp_pointer_free(rdpContext* context, rdpPointer* pointer); + +#endif diff --git a/protocols/rdp/src/client.c b/protocols/rdp/src/client.c index 4e5c6b97..b00f5729 100644 --- a/protocols/rdp/src/client.c +++ b/protocols/rdp/src/client.c @@ -55,6 +55,8 @@ #include "guac_handlers.h" #include "rdp_keymap.h" #include "rdp_bitmap.h" +#include "rdp_glyph.h" +#include "rdp_pointer.h" /* Client plugin arguments */ const char* GUAC_CLIENT_ARGS[] = { @@ -69,6 +71,8 @@ boolean rdp_freerdp_pre_connect(freerdp* instance) { guac_client* client = ((rdp_freerdp_context*) context)->client; rdpChannels* channels = context->channels; rdpBitmap* bitmap; + rdpGlyph* glyph; + rdpPointer* pointer; /* Set up bitmap handling */ bitmap = xnew(rdpBitmap); @@ -77,9 +81,25 @@ boolean rdp_freerdp_pre_connect(freerdp* instance) { bitmap->Free = guac_rdp_bitmap_free; bitmap->Paint = guac_rdp_bitmap_paint; /* bitmap->Decompress = guac_rdp_bitmap_decompress; */ - /* bitmap->SetSurface = guac_rdp_bitmap_setsurface; */ + bitmap->SetSurface = guac_rdp_bitmap_setsurface; graphics_register_bitmap(context->graphics, bitmap); + /* Set up glyph handling */ + glyph = xnew(rdpGlyph); + glyph->size = sizeof(guac_rdp_glyph); + glyph->New = guac_rdp_glyph_new; + glyph->Free = guac_rdp_glyph_free; + glyph->Draw = guac_rdp_glyph_draw; + graphics_register_glyph(context->graphics, glyph); + + /* Set up pointer handling */ + pointer = xnew(rdpPointer); + pointer->size = sizeof(guac_rdp_pointer); + pointer->New = guac_rdp_pointer_new; + pointer->Free = guac_rdp_pointer_free; + pointer->Set = guac_rdp_pointer_set; + graphics_register_pointer(context->graphics, pointer); + /* Init channels (pre-connect) */ if (freerdp_channels_pre_connect(channels, instance)) { guac_protocol_send_error(client->socket, "Error initializing RDP client channel manager"); diff --git a/protocols/rdp/src/rdp_bitmap.c b/protocols/rdp/src/rdp_bitmap.c index 8be3b98d..5aede7b6 100644 --- a/protocols/rdp/src/rdp_bitmap.c +++ b/protocols/rdp/src/rdp_bitmap.c @@ -121,3 +121,8 @@ void guac_rdp_bitmap_free(rdpContext* context, rdpBitmap* bitmap) { } +void guac_rdp_bitmap_setsurface(rdpContext* context, rdpBitmap* bitmap, boolean primary) { + guac_client* client = ((rdp_freerdp_context*) context)->client; + guac_client_log_info(client, "guac_rdp_bitmap_setsurface()"); +} + From 408503084e3f3e09e2f61c885b7f19f3e706207c Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Tue, 3 Jan 2012 13:48:20 -0800 Subject: [PATCH 052/253] Added glyph and pointer stubs. --- protocols/rdp/Makefile.am | 2 +- protocols/rdp/src/rdp_glyph.c | 59 ++++++++++++++++++++++++++++++++ protocols/rdp/src/rdp_pointer.c | 60 +++++++++++++++++++++++++++++++++ 3 files changed, 120 insertions(+), 1 deletion(-) create mode 100644 protocols/rdp/src/rdp_glyph.c create mode 100644 protocols/rdp/src/rdp_pointer.c diff --git a/protocols/rdp/Makefile.am b/protocols/rdp/Makefile.am index c9f6055f..cf1e528a 100644 --- a/protocols/rdp/Makefile.am +++ b/protocols/rdp/Makefile.am @@ -41,7 +41,7 @@ AM_CFLAGS = -Werror -Wall -pedantic -Iinclude lib_LTLIBRARIES = libguac-client-rdp.la -libguac_client_rdp_la_SOURCES = src/client.c src/rdp_keymap.c src/rdp_bitmap.c src/guac_handlers.c +libguac_client_rdp_la_SOURCES = src/client.c src/rdp_keymap.c src/rdp_bitmap.c src/rdp_glyph.c src/rdp_pointer.c src/guac_handlers.c libguac_client_rdp_la_LDFLAGS = -version-info 0:0:0 diff --git a/protocols/rdp/src/rdp_glyph.c b/protocols/rdp/src/rdp_glyph.c new file mode 100644 index 00000000..07d01f52 --- /dev/null +++ b/protocols/rdp/src/rdp_glyph.c @@ -0,0 +1,59 @@ + +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is libguac-client-rdp. + * + * The Initial Developer of the Original Code is + * Michael Jumper. + * Portions created by the Initial Developer are Copyright (C) 2011 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#include + +#include + +#include "client.h" +#include "rdp_glyph.h" + +void guac_rdp_glyph_new(rdpContext* context, rdpGlyph* glyph) { + guac_client* client = ((rdp_freerdp_context*) context)->client; + guac_client_log_info(client, "guac_rdp_glyph_new()"); +} + +void guac_rdp_glyph_draw(rdpContext* context, rdpGlyph* glyph, int x, int y) { + guac_client* client = ((rdp_freerdp_context*) context)->client; + guac_client_log_info(client, "guac_rdp_glyph_draw()"); +} + +void guac_rdp_glyph_free(rdpContext* context, rdpGlyph* glyph) { + guac_client* client = ((rdp_freerdp_context*) context)->client; + guac_client_log_info(client, "guac_rdp_glyph_free()"); +} + diff --git a/protocols/rdp/src/rdp_pointer.c b/protocols/rdp/src/rdp_pointer.c new file mode 100644 index 00000000..62f1d00c --- /dev/null +++ b/protocols/rdp/src/rdp_pointer.c @@ -0,0 +1,60 @@ + +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is libguac-client-rdp. + * + * The Initial Developer of the Original Code is + * Michael Jumper. + * Portions created by the Initial Developer are Copyright (C) 2011 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + + +#include + +#include + +#include "client.h" +#include "rdp_pointer.h" + +void guac_rdp_pointer_new(rdpContext* context, rdpPointer* pointer) { + guac_client* client = ((rdp_freerdp_context*) context)->client; + guac_client_log_info(client, "guac_rdp_pointer_new()"); +} + +void guac_rdp_pointer_set(rdpContext* context, rdpPointer* pointer) { + guac_client* client = ((rdp_freerdp_context*) context)->client; + guac_client_log_info(client, "guac_rdp_pointer_set()"); +} + +void guac_rdp_pointer_free(rdpContext* context, rdpPointer* pointer) { + guac_client* client = ((rdp_freerdp_context*) context)->client; + guac_client_log_info(client, "guac_rdp_pointer_free()"); +} + From ff51f39436f58a3a17eb06ec738a48affacd74b6 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Tue, 3 Jan 2012 15:41:42 -0800 Subject: [PATCH 053/253] More settings and debug logs. --- protocols/rdp/src/client.c | 31 +++++++++++++++++++++++++++++++ protocols/rdp/src/guac_handlers.c | 3 +++ 2 files changed, 34 insertions(+) diff --git a/protocols/rdp/src/client.c b/protocols/rdp/src/client.c index b00f5729..2bd80462 100644 --- a/protocols/rdp/src/client.c +++ b/protocols/rdp/src/client.c @@ -46,6 +46,7 @@ #include #include #include +#include #include #include @@ -151,6 +152,7 @@ int guac_client_init(guac_client* client, int argc, char** argv) { char* hostname; int port = RDP_DEFAULT_PORT; + boolean bitmap_cache; if (argc < 2) { guac_protocol_send_error(client->socket, "Wrong argument count received."); @@ -202,6 +204,35 @@ int guac_client_init(guac_client* client, int argc, char** argv) { settings->window_title = strdup(hostname); settings->username = "guest"; + /* Order support */ + bitmap_cache = settings->bitmap_cache; + settings->os_major_type = OSMAJORTYPE_UNSPECIFIED; + settings->os_minor_type = OSMINORTYPE_UNSPECIFIED; + settings->order_support[NEG_DSTBLT_INDEX] = true; + settings->order_support[NEG_PATBLT_INDEX] = true; + settings->order_support[NEG_SCRBLT_INDEX] = true; + settings->order_support[NEG_OPAQUE_RECT_INDEX] = true; + settings->order_support[NEG_DRAWNINEGRID_INDEX] = false; + settings->order_support[NEG_MULTIDSTBLT_INDEX] = false; + settings->order_support[NEG_MULTIPATBLT_INDEX] = false; + settings->order_support[NEG_MULTISCRBLT_INDEX] = false; + settings->order_support[NEG_MULTIOPAQUERECT_INDEX] = false; + settings->order_support[NEG_MULTI_DRAWNINEGRID_INDEX] = false; + settings->order_support[NEG_LINETO_INDEX] = false; + settings->order_support[NEG_POLYLINE_INDEX] = false; + settings->order_support[NEG_MEMBLT_INDEX] = bitmap_cache; + settings->order_support[NEG_MEM3BLT_INDEX] = false; + settings->order_support[NEG_MEMBLT_V2_INDEX] = bitmap_cache; + settings->order_support[NEG_MEM3BLT_V2_INDEX] = false; + settings->order_support[NEG_SAVEBITMAP_INDEX] = false; + settings->order_support[NEG_GLYPH_INDEX_INDEX] = true; + settings->order_support[NEG_FAST_INDEX_INDEX] = true; + settings->order_support[NEG_FAST_GLYPH_INDEX] = true; + settings->order_support[NEG_POLYGON_SC_INDEX] = false; + settings->order_support[NEG_POLYGON_CB_INDEX] = false; + settings->order_support[NEG_ELLIPSE_SC_INDEX] = false; + settings->order_support[NEG_ELLIPSE_CB_INDEX] = false; + /* Store client data */ guac_client_data->rdp_inst = rdp_inst; guac_client_data->mouse_button_mask = 0; diff --git a/protocols/rdp/src/guac_handlers.c b/protocols/rdp/src/guac_handlers.c index 2d1bc20c..b7b9b1d1 100644 --- a/protocols/rdp/src/guac_handlers.c +++ b/protocols/rdp/src/guac_handlers.c @@ -78,6 +78,8 @@ int rdp_guac_client_handle_messages(guac_client* client) { fd_set rfds, wfds; + guac_client_log_info(client, "handle_messages() start"); + /* get rdp fds */ if (!freerdp_get_fds(rdp_inst, read_fds, &read_count, write_fds, &write_count)) { guac_client_log_error(client, "Unable to read RDP file descriptors."); @@ -141,6 +143,7 @@ int rdp_guac_client_handle_messages(guac_client* client) { } /* Success */ + guac_client_log_info(client, "handle_messages() end"); return 0; } From 8fe74436637e7871623183fb9f557097c890e2db Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Tue, 3 Jan 2012 19:09:33 -0800 Subject: [PATCH 054/253] GDI stubs, working rect. --- protocols/rdp/Makefile.am | 2 +- protocols/rdp/include/client.h | 3 ++ protocols/rdp/include/rdp_gdi.h | 49 ++++++++++++++++++++ protocols/rdp/src/client.c | 28 ++++++++++-- protocols/rdp/src/rdp_bitmap.c | 9 +--- protocols/rdp/src/rdp_gdi.c | 81 +++++++++++++++++++++++++++++++++ 6 files changed, 160 insertions(+), 12 deletions(-) create mode 100644 protocols/rdp/include/rdp_gdi.h create mode 100644 protocols/rdp/src/rdp_gdi.c diff --git a/protocols/rdp/Makefile.am b/protocols/rdp/Makefile.am index cf1e528a..b22b0b9c 100644 --- a/protocols/rdp/Makefile.am +++ b/protocols/rdp/Makefile.am @@ -41,7 +41,7 @@ AM_CFLAGS = -Werror -Wall -pedantic -Iinclude lib_LTLIBRARIES = libguac-client-rdp.la -libguac_client_rdp_la_SOURCES = src/client.c src/rdp_keymap.c src/rdp_bitmap.c src/rdp_glyph.c src/rdp_pointer.c src/guac_handlers.c +libguac_client_rdp_la_SOURCES = src/client.c src/rdp_keymap.c src/rdp_bitmap.c src/rdp_glyph.c src/rdp_pointer.c src/rdp_gdi.c src/guac_handlers.c libguac_client_rdp_la_LDFLAGS = -version-info 0:0:0 diff --git a/protocols/rdp/include/client.h b/protocols/rdp/include/client.h index 3c2c5110..6bdcd108 100644 --- a/protocols/rdp/include/client.h +++ b/protocols/rdp/include/client.h @@ -39,6 +39,7 @@ #define _GUAC_RDP_CLIENT_H #include +#include #include @@ -72,5 +73,7 @@ typedef struct rdp_freerdp_context { } rdp_freerdp_context; +extern CLRCONV guac_rdp_clrconv; + #endif diff --git a/protocols/rdp/include/rdp_gdi.h b/protocols/rdp/include/rdp_gdi.h new file mode 100644 index 00000000..3bd633be --- /dev/null +++ b/protocols/rdp/include/rdp_gdi.h @@ -0,0 +1,49 @@ + +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is libguac-client-rdp. + * + * The Initial Developer of the Original Code is + * Michael Jumper. + * Portions created by the Initial Developer are Copyright (C) 2011 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#ifndef _GUAC_RDP_RDP_GDI_H +#define _GUAC_RDP_RDP_GDI_H + +#include + +void guac_rdp_gdi_dstblt(rdpContext* context, DSTBLT_ORDER* dstblt); +void guac_rdp_gdi_patblt(rdpContext* context, PATBLT_ORDER* patblt); +void guac_rdp_gdi_scrblt(rdpContext* context, SCRBLT_ORDER* scrblt); +void guac_rdp_gdi_memblt(rdpContext* context, MEMBLT_ORDER* memblt); +void guac_rdp_gdi_opaquerect(rdpContext* context, OPAQUE_RECT_ORDER* opaque_rect); + +#endif diff --git a/protocols/rdp/src/client.c b/protocols/rdp/src/client.c index 2bd80462..b8723ee4 100644 --- a/protocols/rdp/src/client.c +++ b/protocols/rdp/src/client.c @@ -58,6 +58,7 @@ #include "rdp_bitmap.h" #include "rdp_glyph.h" #include "rdp_pointer.h" +#include "rdp_gdi.h" /* Client plugin arguments */ const char* GUAC_CLIENT_ARGS[] = { @@ -66,6 +67,13 @@ const char* GUAC_CLIENT_ARGS[] = { NULL }; +CLRCONV guac_rdp_clrconv = { + .alpha = 1, + .invert = 0, + .rgb555 = 0, + .palette = NULL +}; + boolean rdp_freerdp_pre_connect(freerdp* instance) { rdpContext* context = instance->context; @@ -74,6 +82,7 @@ boolean rdp_freerdp_pre_connect(freerdp* instance) { rdpBitmap* bitmap; rdpGlyph* glyph; rdpPointer* pointer; + rdpPrimaryUpdate* primary; /* Set up bitmap handling */ bitmap = xnew(rdpBitmap); @@ -101,6 +110,15 @@ boolean rdp_freerdp_pre_connect(freerdp* instance) { pointer->Set = guac_rdp_pointer_set; graphics_register_pointer(context->graphics, pointer); + /* Set up GDI */ + primary = instance->update->primary; + + primary->DstBlt = guac_rdp_gdi_dstblt; + primary->PatBlt = guac_rdp_gdi_patblt; + primary->ScrBlt = guac_rdp_gdi_scrblt; + primary->MemBlt = guac_rdp_gdi_memblt; + primary->OpaqueRect = guac_rdp_gdi_opaquerect; + /* Init channels (pre-connect) */ if (freerdp_channels_pre_connect(channels, instance)) { guac_protocol_send_error(client->socket, "Error initializing RDP client channel manager"); @@ -131,6 +149,10 @@ boolean rdp_freerdp_post_connect(freerdp* instance) { client->mouse_handler = rdp_guac_client_mouse_handler; client->key_handler = rdp_guac_client_key_handler; + /* FIXME: Actually read REAL screen size from whatever RDP sends us */ + guac_protocol_send_size(client->socket, 1024, 768); + guac_socket_flush(client->socket); + return true; } @@ -225,9 +247,9 @@ int guac_client_init(guac_client* client, int argc, char** argv) { settings->order_support[NEG_MEMBLT_V2_INDEX] = bitmap_cache; settings->order_support[NEG_MEM3BLT_V2_INDEX] = false; settings->order_support[NEG_SAVEBITMAP_INDEX] = false; - settings->order_support[NEG_GLYPH_INDEX_INDEX] = true; - settings->order_support[NEG_FAST_INDEX_INDEX] = true; - settings->order_support[NEG_FAST_GLYPH_INDEX] = true; + settings->order_support[NEG_GLYPH_INDEX_INDEX] = false; + settings->order_support[NEG_FAST_INDEX_INDEX] = false; + settings->order_support[NEG_FAST_GLYPH_INDEX] = false; settings->order_support[NEG_POLYGON_SC_INDEX] = false; settings->order_support[NEG_POLYGON_CB_INDEX] = false; settings->order_support[NEG_ELLIPSE_SC_INDEX] = false; diff --git a/protocols/rdp/src/rdp_bitmap.c b/protocols/rdp/src/rdp_bitmap.c index 5aede7b6..fbf51b40 100644 --- a/protocols/rdp/src/rdp_bitmap.c +++ b/protocols/rdp/src/rdp_bitmap.c @@ -50,13 +50,6 @@ #include "client.h" #include "rdp_bitmap.h" -static CLRCONV _guac_rdp_clrconv = { - .alpha = 1, - .invert = 0, - .rgb555 = 0, - .palette = NULL -}; - void guac_rdp_bitmap_new(rdpContext* context, rdpBitmap* bitmap) { /* Allocate buffer */ @@ -71,7 +64,7 @@ void guac_rdp_bitmap_new(rdpContext* context, rdpBitmap* bitmap) { unsigned char* image_buffer = freerdp_image_convert(bitmap->data, NULL, bitmap->width, bitmap->height, context->instance->settings->color_depth, - 32, (HCLRCONV) &_guac_rdp_clrconv); + 32, (HCLRCONV) &guac_rdp_clrconv); /* Create surface from image data */ cairo_surface_t* surface = cairo_image_surface_create_for_data( diff --git a/protocols/rdp/src/rdp_gdi.c b/protocols/rdp/src/rdp_gdi.c new file mode 100644 index 00000000..5e5ea203 --- /dev/null +++ b/protocols/rdp/src/rdp_gdi.c @@ -0,0 +1,81 @@ + +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is libguac-client-rdp. + * + * The Initial Developer of the Original Code is + * Michael Jumper. + * Portions created by the Initial Developer are Copyright (C) 2011 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#include + +#include + +#include "client.h" + +void guac_rdp_gdi_dstblt(rdpContext* context, DSTBLT_ORDER* dstblt) { + guac_client* client = ((rdp_freerdp_context*) context)->client; + guac_client_log_info(client, "guac_rdp_gdi_dstblt()"); +} + +void guac_rdp_gdi_patblt(rdpContext* context, PATBLT_ORDER* patblt) { + guac_client* client = ((rdp_freerdp_context*) context)->client; + guac_client_log_info(client, "guac_rdp_gdi_patblt()"); +} + +void guac_rdp_gdi_scrblt(rdpContext* context, SCRBLT_ORDER* scrblt) { + guac_client* client = ((rdp_freerdp_context*) context)->client; + guac_client_log_info(client, "guac_rdp_gdi_scrblt()"); +} + +void guac_rdp_gdi_memblt(rdpContext* context, MEMBLT_ORDER* memblt) { + guac_client* client = ((rdp_freerdp_context*) context)->client; + guac_client_log_info(client, "guac_rdp_gdi_memblt()"); +} + +void guac_rdp_gdi_opaquerect(rdpContext* context, OPAQUE_RECT_ORDER* opaque_rect) { + + guac_client* client = ((rdp_freerdp_context*) context)->client; + uint32 color = freerdp_color_convert(opaque_rect->color, + context->instance->settings->color_depth, 32, &guac_rdp_clrconv); + + guac_protocol_send_rect(client->socket, + GUAC_COMP_OVER, GUAC_DEFAULT_LAYER, + opaque_rect->nLeftRect, opaque_rect->nTopRect, + opaque_rect->nWidth, opaque_rect->nHeight, + (color >> 16) & 0xFF, + (color >> 8 ) & 0xFF, + (color ) & 0xFF, + 255); + +} + + From b138d3bfbccbfbd87397c255723418ec5b1b2443 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Tue, 3 Jan 2012 19:10:41 -0800 Subject: [PATCH 055/253] Removed handle_messages() debug lines. --- protocols/rdp/src/guac_handlers.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/protocols/rdp/src/guac_handlers.c b/protocols/rdp/src/guac_handlers.c index b7b9b1d1..2d1bc20c 100644 --- a/protocols/rdp/src/guac_handlers.c +++ b/protocols/rdp/src/guac_handlers.c @@ -78,8 +78,6 @@ int rdp_guac_client_handle_messages(guac_client* client) { fd_set rfds, wfds; - guac_client_log_info(client, "handle_messages() start"); - /* get rdp fds */ if (!freerdp_get_fds(rdp_inst, read_fds, &read_count, write_fds, &write_count)) { guac_client_log_error(client, "Unable to read RDP file descriptors."); @@ -143,7 +141,6 @@ int rdp_guac_client_handle_messages(guac_client* client) { } /* Success */ - guac_client_log_info(client, "handle_messages() end"); return 0; } From d3302341e7cf8bbca2bc57afe9cbdac205c1e97b Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Sun, 8 Jan 2012 15:18:31 -0800 Subject: [PATCH 056/253] Add cache and bitmap decompress stub. --- protocols/rdp/configure.in | 1 + protocols/rdp/include/rdp_bitmap.h | 1 + protocols/rdp/src/client.c | 17 ++++++++++++++++- protocols/rdp/src/rdp_bitmap.c | 5 +++++ 4 files changed, 23 insertions(+), 1 deletion(-) diff --git a/protocols/rdp/configure.in b/protocols/rdp/configure.in index a86ee998..fa117499 100644 --- a/protocols/rdp/configure.in +++ b/protocols/rdp/configure.in @@ -46,6 +46,7 @@ AC_PROG_LIBTOOL # Checks for libraries. AC_CHECK_LIB([guac], [guac_client_plugin_open],, AC_MSG_ERROR("libguac must be installed first")) AC_CHECK_LIB([cairo], [cairo_create],, AC_MSG_ERROR("cairo is required for drawing instructions")) +AC_CHECK_LIB([freerdp-cache], [glyph_cache_register_callbacks],, AC_MSG_ERROR("libfreerdp-cache is required (part of FreeRDP)")) AC_CHECK_LIB([freerdp-core], [freerdp_new],, AC_MSG_ERROR("libfreerdp-core is required (part of FreeRDP)")) AC_CHECK_LIB([freerdp-channels], [freerdp_channels_new],, AC_MSG_ERROR("libfreerdp-channels is required (part of FreeRDP)")) AC_CHECK_LIB([freerdp-utils], [xzalloc],, AC_MSG_ERROR("libfreerdp-utils is required (part of FreeRDP)")) diff --git a/protocols/rdp/include/rdp_bitmap.h b/protocols/rdp/include/rdp_bitmap.h index 0968cb3f..72fa11f7 100644 --- a/protocols/rdp/include/rdp_bitmap.h +++ b/protocols/rdp/include/rdp_bitmap.h @@ -57,6 +57,7 @@ typedef struct guac_rdp_bitmap { } guac_rdp_bitmap; void guac_rdp_bitmap_new(rdpContext* context, rdpBitmap* bitmap); +void guac_rdp_bitmap_decompress(rdpContext* context, rdpBitmap* bitmap, uint8* data, int width, int height, int bpp, int length, boolean compressed); void guac_rdp_bitmap_paint(rdpContext* context, rdpBitmap* bitmap); void guac_rdp_bitmap_free(rdpContext* context, rdpBitmap* bitmap); void guac_rdp_bitmap_setsurface(rdpContext* context, rdpBitmap* bitmap, boolean primary); diff --git a/protocols/rdp/src/client.c b/protocols/rdp/src/client.c index b8723ee4..b3574032 100644 --- a/protocols/rdp/src/client.c +++ b/protocols/rdp/src/client.c @@ -44,6 +44,11 @@ #include #include #include +#include +#include +#include +#include +#include #include #include #include @@ -84,13 +89,16 @@ boolean rdp_freerdp_pre_connect(freerdp* instance) { rdpPointer* pointer; rdpPrimaryUpdate* primary; + /* Init FreeRDP cache */ + instance->context->cache = cache_new(instance->settings); + /* Set up bitmap handling */ bitmap = xnew(rdpBitmap); bitmap->size = sizeof(guac_rdp_bitmap); bitmap->New = guac_rdp_bitmap_new; bitmap->Free = guac_rdp_bitmap_free; bitmap->Paint = guac_rdp_bitmap_paint; - /* bitmap->Decompress = guac_rdp_bitmap_decompress; */ + bitmap->Decompress = guac_rdp_bitmap_decompress; bitmap->SetSurface = guac_rdp_bitmap_setsurface; graphics_register_bitmap(context->graphics, bitmap); @@ -119,6 +127,13 @@ boolean rdp_freerdp_pre_connect(freerdp* instance) { primary->MemBlt = guac_rdp_gdi_memblt; primary->OpaqueRect = guac_rdp_gdi_opaquerect; + /*pointer_cache_register_callbacks(instance->update);*/ + glyph_cache_register_callbacks(instance->update); + /*brush_cache_register_callbacks(instance->update);*/ + bitmap_cache_register_callbacks(instance->update); + /*offscreen_cache_register_callbacks(instance->update);*/ + /*palette_cache_register_callbacks(instance->update);*/ + /* Init channels (pre-connect) */ if (freerdp_channels_pre_connect(channels, instance)) { guac_protocol_send_error(client->socket, "Error initializing RDP client channel manager"); diff --git a/protocols/rdp/src/rdp_bitmap.c b/protocols/rdp/src/rdp_bitmap.c index fbf51b40..af915ce1 100644 --- a/protocols/rdp/src/rdp_bitmap.c +++ b/protocols/rdp/src/rdp_bitmap.c @@ -119,3 +119,8 @@ void guac_rdp_bitmap_setsurface(rdpContext* context, rdpBitmap* bitmap, boolean guac_client_log_info(client, "guac_rdp_bitmap_setsurface()"); } +void guac_rdp_bitmap_decompress(rdpContext* context, rdpBitmap* bitmap, uint8* data, int width, int height, int bpp, int length, boolean compressed) { + guac_client* client = ((rdp_freerdp_context*) context)->client; + guac_client_log_info(client, "guac_rdp_bitmap_decompress()"); +} + From 6f059097cdb5e38fc1b3873437abccbc3e6d513f Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Sun, 8 Jan 2012 19:23:37 -0800 Subject: [PATCH 057/253] Added BeginDraw and EndDraw stubs of glyph rendering. --- protocols/rdp/include/rdp_glyph.h | 4 ++++ protocols/rdp/src/client.c | 2 ++ protocols/rdp/src/rdp_glyph.c | 12 ++++++++++++ 3 files changed, 18 insertions(+) diff --git a/protocols/rdp/include/rdp_glyph.h b/protocols/rdp/include/rdp_glyph.h index 41ceb422..2ba6af42 100644 --- a/protocols/rdp/include/rdp_glyph.h +++ b/protocols/rdp/include/rdp_glyph.h @@ -59,5 +59,9 @@ typedef struct guac_rdp_glyph { void guac_rdp_glyph_new(rdpContext* context, rdpGlyph* glyph); void guac_rdp_glyph_draw(rdpContext* context, rdpGlyph* glyph, int x, int y); void guac_rdp_glyph_free(rdpContext* context, rdpGlyph* glyph); +void guac_rdp_glyph_begindraw(rdpContext* context, + int x, int y, int width, int height, uint32 bgcolor, uint32 fgcolor); +void guac_rdp_glyph_enddraw(rdpContext* context, + int x, int y, int width, int height, uint32 bgcolor, uint32 fgcolor); #endif diff --git a/protocols/rdp/src/client.c b/protocols/rdp/src/client.c index b3574032..c9e23a36 100644 --- a/protocols/rdp/src/client.c +++ b/protocols/rdp/src/client.c @@ -108,6 +108,8 @@ boolean rdp_freerdp_pre_connect(freerdp* instance) { glyph->New = guac_rdp_glyph_new; glyph->Free = guac_rdp_glyph_free; glyph->Draw = guac_rdp_glyph_draw; + glyph->BeginDraw = guac_rdp_glyph_begindraw; + glyph->EndDraw = guac_rdp_glyph_enddraw; graphics_register_glyph(context->graphics, glyph); /* Set up pointer handling */ diff --git a/protocols/rdp/src/rdp_glyph.c b/protocols/rdp/src/rdp_glyph.c index 07d01f52..bfb311ad 100644 --- a/protocols/rdp/src/rdp_glyph.c +++ b/protocols/rdp/src/rdp_glyph.c @@ -57,3 +57,15 @@ void guac_rdp_glyph_free(rdpContext* context, rdpGlyph* glyph) { guac_client_log_info(client, "guac_rdp_glyph_free()"); } +void guac_rdp_glyph_begindraw(rdpContext* context, + int x, int y, int width, int height, uint32 bgcolor, uint32 fgcolor) { + guac_client* client = ((rdp_freerdp_context*) context)->client; + guac_client_log_info(client, "guac_rdp_glyph_begindraw()"); +} + +void guac_rdp_glyph_enddraw(rdpContext* context, + int x, int y, int width, int height, uint32 bgcolor, uint32 fgcolor) { + guac_client* client = ((rdp_freerdp_context*) context)->client; + guac_client_log_info(client, "guac_rdp_glyph_enddraw()"); +} + From c9fd83c77bf450ebf12b58a0de0e8a0211fe6ccd Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Tue, 10 Jan 2012 23:31:24 -0800 Subject: [PATCH 058/253] Implemented set surface, removed unneeded debug logs. --- protocols/rdp/src/rdp_bitmap.c | 34 ++++++++++++++++++++++------------ protocols/rdp/src/rdp_gdi.c | 4 +++- 2 files changed, 25 insertions(+), 13 deletions(-) diff --git a/protocols/rdp/src/rdp_bitmap.c b/protocols/rdp/src/rdp_bitmap.c index af915ce1..4db17827 100644 --- a/protocols/rdp/src/rdp_bitmap.c +++ b/protocols/rdp/src/rdp_bitmap.c @@ -45,7 +45,9 @@ #include #include +#include #include +#include #include "client.h" #include "rdp_bitmap.h" @@ -85,9 +87,6 @@ void guac_rdp_bitmap_new(rdpContext* context, rdpBitmap* bitmap) { /* Store buffer reference in bitmap */ ((guac_rdp_bitmap*) bitmap)->layer = buffer; - - guac_client_log_info(client, "guac_rdp_bitmap_new()"); - } void guac_rdp_bitmap_paint(rdpContext* context, rdpBitmap* bitmap) { @@ -101,26 +100,37 @@ void guac_rdp_bitmap_paint(rdpContext* context, rdpBitmap* bitmap) { 0, 0, bitmap->width, bitmap->height, GUAC_COMP_OVER, GUAC_DEFAULT_LAYER, bitmap->left, bitmap->top); - - guac_client_log_info(client, "guac_rdp_bitmap_paint()"); - } void guac_rdp_bitmap_free(rdpContext* context, rdpBitmap* bitmap) { guac_client* client = ((rdp_freerdp_context*) context)->client; guac_client_free_buffer(client, ((guac_rdp_bitmap*) bitmap)->layer); - - guac_client_log_info(client, "guac_rdp_bitmap_free()"); - } void guac_rdp_bitmap_setsurface(rdpContext* context, rdpBitmap* bitmap, boolean primary) { guac_client* client = ((rdp_freerdp_context*) context)->client; - guac_client_log_info(client, "guac_rdp_bitmap_setsurface()"); + + ((rdp_guac_client_data*) client->data)->current_surface + = ((guac_rdp_bitmap*) bitmap)->layer; } void guac_rdp_bitmap_decompress(rdpContext* context, rdpBitmap* bitmap, uint8* data, int width, int height, int bpp, int length, boolean compressed) { - guac_client* client = ((rdp_freerdp_context*) context)->client; - guac_client_log_info(client, "guac_rdp_bitmap_decompress()"); + + int size = width * height * (bpp + 7) / 8; + + if (bitmap->data == NULL) + bitmap->data = (uint8*) xmalloc(size); + else + bitmap->data = (uint8*) xrealloc(bitmap->data, size); + + if (compressed) + bitmap_decompress(data, bitmap->data, width, height, length, bpp, bpp); + else + freerdp_image_flip(data, bitmap->data, width, height, bpp); + + bitmap->compressed = false; + bitmap->length = size; + bitmap->bpp = bpp; + } diff --git a/protocols/rdp/src/rdp_gdi.c b/protocols/rdp/src/rdp_gdi.c index 5e5ea203..9c8884f0 100644 --- a/protocols/rdp/src/rdp_gdi.c +++ b/protocols/rdp/src/rdp_gdi.c @@ -67,8 +67,10 @@ void guac_rdp_gdi_opaquerect(rdpContext* context, OPAQUE_RECT_ORDER* opaque_rect uint32 color = freerdp_color_convert(opaque_rect->color, context->instance->settings->color_depth, 32, &guac_rdp_clrconv); + const guac_layer* current_layer = ((rdp_guac_client_data*) client->data)->current_surface; + guac_protocol_send_rect(client->socket, - GUAC_COMP_OVER, GUAC_DEFAULT_LAYER, + GUAC_COMP_OVER, current_layer, opaque_rect->nLeftRect, opaque_rect->nTopRect, opaque_rect->nWidth, opaque_rect->nHeight, (color >> 16) & 0xFF, From 058c3cf55a3a881fcad6eba240e044202eb17c8c Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Wed, 8 Feb 2012 12:11:32 -0800 Subject: [PATCH 059/253] Handle primary set surface, handle ephemeral buffers based on xfreerdp's handling. --- protocols/rdp/src/rdp_bitmap.c | 73 +++++++++++++++++++++++----------- 1 file changed, 50 insertions(+), 23 deletions(-) diff --git a/protocols/rdp/src/rdp_bitmap.c b/protocols/rdp/src/rdp_bitmap.c index 4db17827..c9798b92 100644 --- a/protocols/rdp/src/rdp_bitmap.c +++ b/protocols/rdp/src/rdp_bitmap.c @@ -54,10 +54,8 @@ void guac_rdp_bitmap_new(rdpContext* context, rdpBitmap* bitmap) { - /* Allocate buffer */ guac_client* client = ((rdp_freerdp_context*) context)->client; guac_socket* socket = client->socket; - guac_layer* buffer = guac_client_alloc_buffer(client); /* Convert image data if present */ if (bitmap->data != NULL) { @@ -68,25 +66,46 @@ void guac_rdp_bitmap_new(rdpContext* context, rdpBitmap* bitmap) { context->instance->settings->color_depth, 32, (HCLRCONV) &guac_rdp_clrconv); - /* Create surface from image data */ - cairo_surface_t* surface = cairo_image_surface_create_for_data( - bitmap->data, CAIRO_FORMAT_RGB24, - bitmap->width, bitmap->height, 4*bitmap->width); + /* If not ephemeral, send to client */ + if (!bitmap->ephemeral) { - /* Send surface to buffer */ - guac_protocol_send_png(socket, GUAC_COMP_SRC, buffer, 0, 0, surface); + /* Allocate buffer */ + guac_layer* buffer = guac_client_alloc_buffer(client); - /* Free surface */ - cairo_surface_destroy(surface); + /* Create surface from image data */ + cairo_surface_t* surface = cairo_image_surface_create_for_data( + bitmap->data, CAIRO_FORMAT_RGB24, + bitmap->width, bitmap->height, 4*bitmap->width); - /* Free image data if actually alloated */ - if (image_buffer != bitmap->data) - free(image_buffer); + /* Send surface to buffer */ + guac_protocol_send_png(socket, GUAC_COMP_SRC, buffer, 0, 0, surface); + + /* Free surface */ + cairo_surface_destroy(surface); + + /* Free image data if actually alloated */ + if (image_buffer != bitmap->data) + free(image_buffer); + + /* Store buffer reference in bitmap */ + ((guac_rdp_bitmap*) bitmap)->layer = buffer; + + } + + /* Otherwise, store converted image in bitmap, free any existing */ + else { + + /* Free existing image, if any */ + if (image_buffer != bitmap->data) + free(bitmap->data); + + /* Store converted image in bitmap */ + bitmap->data = image_buffer; + + } } - /* Store buffer reference in bitmap */ - ((guac_rdp_bitmap*) bitmap)->layer = buffer; } void guac_rdp_bitmap_paint(rdpContext* context, rdpBitmap* bitmap) { @@ -94,12 +113,16 @@ void guac_rdp_bitmap_paint(rdpContext* context, rdpBitmap* bitmap) { guac_client* client = ((rdp_freerdp_context*) context)->client; guac_socket* socket = client->socket; - /* Copy image data from buffer to visible layer */ - guac_protocol_send_copy(socket, - ((guac_rdp_bitmap*) bitmap)->layer, - 0, 0, bitmap->width, bitmap->height, - GUAC_COMP_OVER, - GUAC_DEFAULT_LAYER, bitmap->left, bitmap->top); + /* If not ephemeral, copy image data from buffer to visible layer */ + if (!bitmap->ephemeral) + guac_protocol_send_copy(socket, + ((guac_rdp_bitmap*) bitmap)->layer, + 0, 0, bitmap->width, bitmap->height, + GUAC_COMP_OVER, + GUAC_DEFAULT_LAYER, bitmap->left, bitmap->top); + + /* Otherwise, buffer apparently should not be drawn ... */ + } void guac_rdp_bitmap_free(rdpContext* context, rdpBitmap* bitmap) { @@ -110,8 +133,12 @@ void guac_rdp_bitmap_free(rdpContext* context, rdpBitmap* bitmap) { void guac_rdp_bitmap_setsurface(rdpContext* context, rdpBitmap* bitmap, boolean primary) { guac_client* client = ((rdp_freerdp_context*) context)->client; - ((rdp_guac_client_data*) client->data)->current_surface - = ((guac_rdp_bitmap*) bitmap)->layer; + if (primary) + ((rdp_guac_client_data*) client->data)->current_surface + = GUAC_DEFAULT_LAYER; + else + ((rdp_guac_client_data*) client->data)->current_surface + = ((guac_rdp_bitmap*) bitmap)->layer; } void guac_rdp_bitmap_decompress(rdpContext* context, rdpBitmap* bitmap, uint8* data, int width, int height, int bpp, int length, boolean compressed) { From f7928c2574b465f507fb8c025e83fdfff0a8157b Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Wed, 8 Feb 2012 12:32:27 -0800 Subject: [PATCH 060/253] Non-static clrconv, handle palette updates. --- protocols/rdp/include/client.h | 3 +-- protocols/rdp/include/rdp_gdi.h | 1 + protocols/rdp/src/client.c | 19 +++++++++++-------- protocols/rdp/src/rdp_bitmap.c | 10 ++++++++-- protocols/rdp/src/rdp_gdi.c | 9 ++++++++- 5 files changed, 29 insertions(+), 13 deletions(-) diff --git a/protocols/rdp/include/client.h b/protocols/rdp/include/client.h index 6bdcd108..c24f7825 100644 --- a/protocols/rdp/include/client.h +++ b/protocols/rdp/include/client.h @@ -70,10 +70,9 @@ typedef struct rdp_freerdp_context { rdpContext _p; guac_client* client; + CLRCONV* clrconv; } rdp_freerdp_context; -extern CLRCONV guac_rdp_clrconv; - #endif diff --git a/protocols/rdp/include/rdp_gdi.h b/protocols/rdp/include/rdp_gdi.h index 3bd633be..b4df003b 100644 --- a/protocols/rdp/include/rdp_gdi.h +++ b/protocols/rdp/include/rdp_gdi.h @@ -45,5 +45,6 @@ void guac_rdp_gdi_patblt(rdpContext* context, PATBLT_ORDER* patblt); void guac_rdp_gdi_scrblt(rdpContext* context, SCRBLT_ORDER* scrblt); void guac_rdp_gdi_memblt(rdpContext* context, MEMBLT_ORDER* memblt); void guac_rdp_gdi_opaquerect(rdpContext* context, OPAQUE_RECT_ORDER* opaque_rect); +void guac_rdp_gdi_palette_update(rdpContext* context, PALETTE_UPDATE* palette); #endif diff --git a/protocols/rdp/src/client.c b/protocols/rdp/src/client.c index c9e23a36..d8ca3a3b 100644 --- a/protocols/rdp/src/client.c +++ b/protocols/rdp/src/client.c @@ -72,13 +72,6 @@ const char* GUAC_CLIENT_ARGS[] = { NULL }; -CLRCONV guac_rdp_clrconv = { - .alpha = 1, - .invert = 0, - .rgb555 = 0, - .palette = NULL -}; - boolean rdp_freerdp_pre_connect(freerdp* instance) { rdpContext* context = instance->context; @@ -88,6 +81,15 @@ boolean rdp_freerdp_pre_connect(freerdp* instance) { rdpGlyph* glyph; rdpPointer* pointer; rdpPrimaryUpdate* primary; + CLRCONV* clrconv; + + /* Init color conversion structure */ + clrconv = xnew(CLRCONV); + clrconv->alpha = 1; + clrconv->invert = 0; + clrconv->rgb555 = 0; + clrconv->palette = xnew(rdpPalette); + ((rdp_freerdp_context*) context)->clrconv = clrconv; /* Init FreeRDP cache */ instance->context->cache = cache_new(instance->settings); @@ -121,8 +123,9 @@ boolean rdp_freerdp_pre_connect(freerdp* instance) { graphics_register_pointer(context->graphics, pointer); /* Set up GDI */ - primary = instance->update->primary; + instance->update->Palette = guac_rdp_gdi_palette_update; + primary = instance->update->primary; primary->DstBlt = guac_rdp_gdi_dstblt; primary->PatBlt = guac_rdp_gdi_patblt; primary->ScrBlt = guac_rdp_gdi_scrblt; diff --git a/protocols/rdp/src/rdp_bitmap.c b/protocols/rdp/src/rdp_bitmap.c index c9798b92..315ef36c 100644 --- a/protocols/rdp/src/rdp_bitmap.c +++ b/protocols/rdp/src/rdp_bitmap.c @@ -64,7 +64,7 @@ void guac_rdp_bitmap_new(rdpContext* context, rdpBitmap* bitmap) { unsigned char* image_buffer = freerdp_image_convert(bitmap->data, NULL, bitmap->width, bitmap->height, context->instance->settings->color_depth, - 32, (HCLRCONV) &guac_rdp_clrconv); + 32, ((rdp_freerdp_context*) context)->clrconv); /* If not ephemeral, send to client */ if (!bitmap->ephemeral) { @@ -102,6 +102,9 @@ void guac_rdp_bitmap_new(rdpContext* context, rdpBitmap* bitmap) { /* Store converted image in bitmap */ bitmap->data = image_buffer; + /* Not stored in a layer */ + ((guac_rdp_bitmap*) bitmap)->layer = NULL; + } } @@ -127,7 +130,10 @@ void guac_rdp_bitmap_paint(rdpContext* context, rdpBitmap* bitmap) { void guac_rdp_bitmap_free(rdpContext* context, rdpBitmap* bitmap) { guac_client* client = ((rdp_freerdp_context*) context)->client; - guac_client_free_buffer(client, ((guac_rdp_bitmap*) bitmap)->layer); + + /* Free layer, if any */ + if (((guac_rdp_bitmap*) bitmap)->layer != NULL) + guac_client_free_buffer(client, ((guac_rdp_bitmap*) bitmap)->layer); } void guac_rdp_bitmap_setsurface(rdpContext* context, rdpBitmap* bitmap, boolean primary) { diff --git a/protocols/rdp/src/rdp_gdi.c b/protocols/rdp/src/rdp_gdi.c index 9c8884f0..ff792119 100644 --- a/protocols/rdp/src/rdp_gdi.c +++ b/protocols/rdp/src/rdp_gdi.c @@ -65,7 +65,8 @@ void guac_rdp_gdi_opaquerect(rdpContext* context, OPAQUE_RECT_ORDER* opaque_rect guac_client* client = ((rdp_freerdp_context*) context)->client; uint32 color = freerdp_color_convert(opaque_rect->color, - context->instance->settings->color_depth, 32, &guac_rdp_clrconv); + context->instance->settings->color_depth, 32, + ((rdp_freerdp_context*) context)->clrconv); const guac_layer* current_layer = ((rdp_guac_client_data*) client->data)->current_surface; @@ -80,4 +81,10 @@ void guac_rdp_gdi_opaquerect(rdpContext* context, OPAQUE_RECT_ORDER* opaque_rect } +void guac_rdp_gdi_palette_update(rdpContext* context, PALETTE_UPDATE* palette) { + CLRCONV* clrconv = ((rdp_freerdp_context*) context)->clrconv; + clrconv->palette->count = palette->number; + clrconv->palette->entries = palette->entries; + +} From 1bb82d68f8036ab853f7a17f9215bd4777362429 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Wed, 8 Feb 2012 14:16:05 -0800 Subject: [PATCH 061/253] Implement SetBounds. --- protocols/rdp/include/rdp_gdi.h | 1 + protocols/rdp/src/client.c | 1 + protocols/rdp/src/rdp_gdi.c | 27 +++++++++++++++++++++++++++ 3 files changed, 29 insertions(+) diff --git a/protocols/rdp/include/rdp_gdi.h b/protocols/rdp/include/rdp_gdi.h index b4df003b..894b2b4a 100644 --- a/protocols/rdp/include/rdp_gdi.h +++ b/protocols/rdp/include/rdp_gdi.h @@ -46,5 +46,6 @@ void guac_rdp_gdi_scrblt(rdpContext* context, SCRBLT_ORDER* scrblt); void guac_rdp_gdi_memblt(rdpContext* context, MEMBLT_ORDER* memblt); void guac_rdp_gdi_opaquerect(rdpContext* context, OPAQUE_RECT_ORDER* opaque_rect); void guac_rdp_gdi_palette_update(rdpContext* context, PALETTE_UPDATE* palette); +void guac_rdp_gdi_set_bounds(rdpContext* context, rdpBounds* bounds); #endif diff --git a/protocols/rdp/src/client.c b/protocols/rdp/src/client.c index d8ca3a3b..798c488c 100644 --- a/protocols/rdp/src/client.c +++ b/protocols/rdp/src/client.c @@ -124,6 +124,7 @@ boolean rdp_freerdp_pre_connect(freerdp* instance) { /* Set up GDI */ instance->update->Palette = guac_rdp_gdi_palette_update; + instance->update->SetBounds = guac_rdp_gdi_set_bounds; primary = instance->update->primary; primary->DstBlt = guac_rdp_gdi_dstblt; diff --git a/protocols/rdp/src/rdp_gdi.c b/protocols/rdp/src/rdp_gdi.c index ff792119..ac6507bd 100644 --- a/protocols/rdp/src/rdp_gdi.c +++ b/protocols/rdp/src/rdp_gdi.c @@ -88,3 +88,30 @@ void guac_rdp_gdi_palette_update(rdpContext* context, PALETTE_UPDATE* palette) { clrconv->palette->entries = palette->entries; } + +void guac_rdp_gdi_set_bounds(rdpContext* context, rdpBounds* bounds) { + + guac_client* client = ((rdp_freerdp_context*) context)->client; + const guac_layer* current_layer = ((rdp_guac_client_data*) client->data)->current_surface; + + /* Set clip if specified */ + if (bounds != NULL) + guac_protocol_send_clip( + client->socket, + current_layer, + bounds->left, + bounds->top, + bounds->right - bounds->left + 1, + bounds->bottom - bounds->top + 1); + + /* Otherwise, reset clip */ + else + guac_protocol_send_clip( + client->socket, + current_layer, + 0, 0, + context->instance->settings->width, + context->instance->settings->height); + +} + From 72497211d9b7b561fcdd8e0bc80853ac4ebd6461 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Wed, 8 Feb 2012 15:09:12 -0800 Subject: [PATCH 062/253] Restored handling of ephemeral, fixed allocation of buffer in bitmap new. --- protocols/rdp/src/client.c | 8 ++--- protocols/rdp/src/rdp_bitmap.c | 54 +++++++++++++++------------------- protocols/rdp/src/rdp_gdi.c | 14 ++++++++- 3 files changed, 41 insertions(+), 35 deletions(-) diff --git a/protocols/rdp/src/client.c b/protocols/rdp/src/client.c index 798c488c..89294e13 100644 --- a/protocols/rdp/src/client.c +++ b/protocols/rdp/src/client.c @@ -133,12 +133,12 @@ boolean rdp_freerdp_pre_connect(freerdp* instance) { primary->MemBlt = guac_rdp_gdi_memblt; primary->OpaqueRect = guac_rdp_gdi_opaquerect; - /*pointer_cache_register_callbacks(instance->update);*/ + pointer_cache_register_callbacks(instance->update); glyph_cache_register_callbacks(instance->update); - /*brush_cache_register_callbacks(instance->update);*/ + brush_cache_register_callbacks(instance->update); bitmap_cache_register_callbacks(instance->update); - /*offscreen_cache_register_callbacks(instance->update);*/ - /*palette_cache_register_callbacks(instance->update);*/ + offscreen_cache_register_callbacks(instance->update); + palette_cache_register_callbacks(instance->update); /* Init channels (pre-connect) */ if (freerdp_channels_pre_connect(channels, instance)) { diff --git a/protocols/rdp/src/rdp_bitmap.c b/protocols/rdp/src/rdp_bitmap.c index 315ef36c..ac5eb69b 100644 --- a/protocols/rdp/src/rdp_bitmap.c +++ b/protocols/rdp/src/rdp_bitmap.c @@ -57,6 +57,12 @@ void guac_rdp_bitmap_new(rdpContext* context, rdpBitmap* bitmap) { guac_client* client = ((rdp_freerdp_context*) context)->client; guac_socket* socket = client->socket; + /* Allocate buffer */ + guac_layer* buffer = guac_client_alloc_buffer(client); + + /* Store buffer reference in bitmap */ + ((guac_rdp_bitmap*) bitmap)->layer = buffer; + /* Convert image data if present */ if (bitmap->data != NULL) { @@ -66,30 +72,24 @@ void guac_rdp_bitmap_new(rdpContext* context, rdpBitmap* bitmap) { context->instance->settings->color_depth, 32, ((rdp_freerdp_context*) context)->clrconv); - /* If not ephemeral, send to client */ + /* Create surface from image data */ + cairo_surface_t* surface = cairo_image_surface_create_for_data( + bitmap->data, CAIRO_FORMAT_RGB24, + bitmap->width, bitmap->height, 4*bitmap->width); + + /* Send surface to buffer */ + guac_protocol_send_png(socket, GUAC_COMP_SRC, buffer, 0, 0, surface); + + /* Free surface */ + cairo_surface_destroy(surface); + + /* If ephemeral, just free image data */ if (!bitmap->ephemeral) { - /* Allocate buffer */ - guac_layer* buffer = guac_client_alloc_buffer(client); - - /* Create surface from image data */ - cairo_surface_t* surface = cairo_image_surface_create_for_data( - bitmap->data, CAIRO_FORMAT_RGB24, - bitmap->width, bitmap->height, 4*bitmap->width); - - /* Send surface to buffer */ - guac_protocol_send_png(socket, GUAC_COMP_SRC, buffer, 0, 0, surface); - - /* Free surface */ - cairo_surface_destroy(surface); - /* Free image data if actually alloated */ if (image_buffer != bitmap->data) free(image_buffer); - /* Store buffer reference in bitmap */ - ((guac_rdp_bitmap*) bitmap)->layer = buffer; - } /* Otherwise, store converted image in bitmap, free any existing */ @@ -102,9 +102,6 @@ void guac_rdp_bitmap_new(rdpContext* context, rdpBitmap* bitmap) { /* Store converted image in bitmap */ bitmap->data = image_buffer; - /* Not stored in a layer */ - ((guac_rdp_bitmap*) bitmap)->layer = NULL; - } } @@ -116,15 +113,11 @@ void guac_rdp_bitmap_paint(rdpContext* context, rdpBitmap* bitmap) { guac_client* client = ((rdp_freerdp_context*) context)->client; guac_socket* socket = client->socket; - /* If not ephemeral, copy image data from buffer to visible layer */ - if (!bitmap->ephemeral) - guac_protocol_send_copy(socket, - ((guac_rdp_bitmap*) bitmap)->layer, - 0, 0, bitmap->width, bitmap->height, - GUAC_COMP_OVER, - GUAC_DEFAULT_LAYER, bitmap->left, bitmap->top); - - /* Otherwise, buffer apparently should not be drawn ... */ + guac_protocol_send_copy(socket, + ((guac_rdp_bitmap*) bitmap)->layer, + 0, 0, bitmap->width, bitmap->height, + GUAC_COMP_OVER, + GUAC_DEFAULT_LAYER, bitmap->left, bitmap->top); } @@ -145,6 +138,7 @@ void guac_rdp_bitmap_setsurface(rdpContext* context, rdpBitmap* bitmap, boolean else ((rdp_guac_client_data*) client->data)->current_surface = ((guac_rdp_bitmap*) bitmap)->layer; + } void guac_rdp_bitmap_decompress(rdpContext* context, rdpBitmap* bitmap, uint8* data, int width, int height, int bpp, int length, boolean compressed) { diff --git a/protocols/rdp/src/rdp_gdi.c b/protocols/rdp/src/rdp_gdi.c index ac6507bd..8ea0daa1 100644 --- a/protocols/rdp/src/rdp_gdi.c +++ b/protocols/rdp/src/rdp_gdi.c @@ -40,6 +40,7 @@ #include #include "client.h" +#include "rdp_bitmap.h" void guac_rdp_gdi_dstblt(rdpContext* context, DSTBLT_ORDER* dstblt) { guac_client* client = ((rdp_freerdp_context*) context)->client; @@ -57,8 +58,19 @@ void guac_rdp_gdi_scrblt(rdpContext* context, SCRBLT_ORDER* scrblt) { } void guac_rdp_gdi_memblt(rdpContext* context, MEMBLT_ORDER* memblt) { + guac_client* client = ((rdp_freerdp_context*) context)->client; - guac_client_log_info(client, "guac_rdp_gdi_memblt()"); + const guac_layer* current_layer = ((rdp_guac_client_data*) client->data)->current_surface; + guac_socket* socket = client->socket; + guac_rdp_bitmap* bitmap = (guac_rdp_bitmap*) memblt->bitmap; + + if (bitmap->layer != NULL) + guac_protocol_send_copy(socket, + bitmap->layer, + memblt->nXSrc, memblt->nYSrc, memblt->nWidth, memblt->nHeight, + GUAC_COMP_OVER, + current_layer, memblt->nLeftRect, memblt->nTopRect); + } void guac_rdp_gdi_opaquerect(rdpContext* context, OPAQUE_RECT_ORDER* opaque_rect) { From a7b087f59c8c0feb474d0adeff2b77c32aefb545 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Wed, 8 Feb 2012 15:22:52 -0800 Subject: [PATCH 063/253] Send real client size. --- protocols/rdp/src/client.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/protocols/rdp/src/client.c b/protocols/rdp/src/client.c index 89294e13..8f3c51cc 100644 --- a/protocols/rdp/src/client.c +++ b/protocols/rdp/src/client.c @@ -170,9 +170,9 @@ boolean rdp_freerdp_post_connect(freerdp* instance) { client->mouse_handler = rdp_guac_client_mouse_handler; client->key_handler = rdp_guac_client_key_handler; - /* FIXME: Actually read REAL screen size from whatever RDP sends us */ - guac_protocol_send_size(client->socket, 1024, 768); - guac_socket_flush(client->socket); + /* Send size */ + guac_protocol_send_size(client->socket, + instance->settings->width, instance->settings->height); return true; From fd8b76b410bc6c63b1c8778a6e04cf0874e95b01 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Wed, 8 Feb 2012 17:13:45 -0800 Subject: [PATCH 064/253] Fix image corruption (was using wrong buffer for surface). --- protocols/rdp/src/rdp_bitmap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/protocols/rdp/src/rdp_bitmap.c b/protocols/rdp/src/rdp_bitmap.c index ac5eb69b..c192395f 100644 --- a/protocols/rdp/src/rdp_bitmap.c +++ b/protocols/rdp/src/rdp_bitmap.c @@ -74,7 +74,7 @@ void guac_rdp_bitmap_new(rdpContext* context, rdpBitmap* bitmap) { /* Create surface from image data */ cairo_surface_t* surface = cairo_image_surface_create_for_data( - bitmap->data, CAIRO_FORMAT_RGB24, + image_buffer, CAIRO_FORMAT_RGB24, bitmap->width, bitmap->height, 4*bitmap->width); /* Send surface to buffer */ From d874058a8c7ea0a4464fe817fc8c597d7d1a6af0 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Thu, 9 Feb 2012 10:09:14 -0800 Subject: [PATCH 065/253] Initial glyph support. --- protocols/rdp/src/rdp_glyph.c | 75 +++++++++++++++++++++++++++++++++-- 1 file changed, 72 insertions(+), 3 deletions(-) diff --git a/protocols/rdp/src/rdp_glyph.c b/protocols/rdp/src/rdp_glyph.c index bfb311ad..c8a73979 100644 --- a/protocols/rdp/src/rdp_glyph.c +++ b/protocols/rdp/src/rdp_glyph.c @@ -43,18 +43,87 @@ #include "rdp_glyph.h" void guac_rdp_glyph_new(rdpContext* context, rdpGlyph* glyph) { + + /* Allocate buffer */ guac_client* client = ((rdp_freerdp_context*) context)->client; - guac_client_log_info(client, "guac_rdp_glyph_new()"); + guac_socket* socket = client->socket; + guac_layer* layer = guac_client_alloc_buffer(client); + + int x, y, i; + int stride; + unsigned char* image_buffer; + unsigned char* image_buffer_row; + + unsigned char* data = glyph->aj; + int width = glyph->cx; + int height = glyph->cy; + + cairo_surface_t* surface; + + /* Init Cairo buffer */ + stride = cairo_format_stride_for_width(CAIRO_FORMAT_ARGB32, width); + image_buffer = malloc(height*stride); + image_buffer_row = image_buffer; + + /* Copy image data from image data to buffer */ + for (y = 0; ylayer = layer; + } void guac_rdp_glyph_draw(rdpContext* context, rdpGlyph* glyph, int x, int y) { + guac_client* client = ((rdp_freerdp_context*) context)->client; - guac_client_log_info(client, "guac_rdp_glyph_draw()"); + const guac_layer* current_layer = ((rdp_guac_client_data*) client->data)->current_surface; + + /* Draw glyph */ + guac_protocol_send_copy(client->socket, + ((guac_rdp_glyph*) glyph)->layer, 0, 0, glyph->cx, glyph->cy, + GUAC_COMP_OVER, current_layer, x, y); + } void guac_rdp_glyph_free(rdpContext* context, rdpGlyph* glyph) { guac_client* client = ((rdp_freerdp_context*) context)->client; - guac_client_log_info(client, "guac_rdp_glyph_free()"); + guac_client_free_buffer(client, ((guac_rdp_glyph*) glyph)->layer); } void guac_rdp_glyph_begindraw(rdpContext* context, From 1067effa7007d0c2326e5c3be0e8cc761f8f4461 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Thu, 9 Feb 2012 10:25:06 -0800 Subject: [PATCH 066/253] Colorize glyphs. --- protocols/rdp/include/rdp_glyph.h | 4 ++-- protocols/rdp/src/rdp_glyph.c | 35 +++++++++++++++++++++++++------ 2 files changed, 31 insertions(+), 8 deletions(-) diff --git a/protocols/rdp/include/rdp_glyph.h b/protocols/rdp/include/rdp_glyph.h index 2ba6af42..8270fbbf 100644 --- a/protocols/rdp/include/rdp_glyph.h +++ b/protocols/rdp/include/rdp_glyph.h @@ -60,8 +60,8 @@ void guac_rdp_glyph_new(rdpContext* context, rdpGlyph* glyph); void guac_rdp_glyph_draw(rdpContext* context, rdpGlyph* glyph, int x, int y); void guac_rdp_glyph_free(rdpContext* context, rdpGlyph* glyph); void guac_rdp_glyph_begindraw(rdpContext* context, - int x, int y, int width, int height, uint32 bgcolor, uint32 fgcolor); + int x, int y, int width, int height, uint32 fgcolor, uint32 bgcolor); void guac_rdp_glyph_enddraw(rdpContext* context, - int x, int y, int width, int height, uint32 bgcolor, uint32 fgcolor); + int x, int y, int width, int height, uint32 fgcolor, uint32 bgcolor); #endif diff --git a/protocols/rdp/src/rdp_glyph.c b/protocols/rdp/src/rdp_glyph.c index c8a73979..608b722f 100644 --- a/protocols/rdp/src/rdp_glyph.c +++ b/protocols/rdp/src/rdp_glyph.c @@ -112,8 +112,18 @@ void guac_rdp_glyph_new(rdpContext* context, rdpGlyph* glyph) { void guac_rdp_glyph_draw(rdpContext* context, rdpGlyph* glyph, int x, int y) { guac_client* client = ((rdp_freerdp_context*) context)->client; + rdp_guac_client_data* guac_client_data = (rdp_guac_client_data*) client->data; const guac_layer* current_layer = ((rdp_guac_client_data*) client->data)->current_surface; - + + /* Colorize glyph */ + guac_protocol_send_rect(client->socket, + GUAC_COMP_ATOP, ((guac_rdp_glyph*) glyph)->layer, + 0, 0, glyph->cx, glyph->cy, + guac_client_data->foreground.red, + guac_client_data->foreground.green, + guac_client_data->foreground.blue, + 255); + /* Draw glyph */ guac_protocol_send_copy(client->socket, ((guac_rdp_glyph*) glyph)->layer, 0, 0, glyph->cx, glyph->cy, @@ -127,14 +137,27 @@ void guac_rdp_glyph_free(rdpContext* context, rdpGlyph* glyph) { } void guac_rdp_glyph_begindraw(rdpContext* context, - int x, int y, int width, int height, uint32 bgcolor, uint32 fgcolor) { + int x, int y, int width, int height, uint32 fgcolor, uint32 bgcolor) { + guac_client* client = ((rdp_freerdp_context*) context)->client; - guac_client_log_info(client, "guac_rdp_glyph_begindraw()"); + rdp_guac_client_data* guac_client_data = (rdp_guac_client_data*) client->data; + + bgcolor = freerdp_color_convert(bgcolor, + context->instance->settings->color_depth, 32, + ((rdp_freerdp_context*) context)->clrconv); + + fgcolor = freerdp_color_convert(fgcolor, + context->instance->settings->color_depth, 32, + ((rdp_freerdp_context*) context)->clrconv); + + guac_client_data->foreground.red = fgcolor & 0x0000FF; + guac_client_data->foreground.green = (fgcolor & 0x00FF00) >> 8; + guac_client_data->foreground.blue = (fgcolor & 0xFF0000) >> 16; + } void guac_rdp_glyph_enddraw(rdpContext* context, - int x, int y, int width, int height, uint32 bgcolor, uint32 fgcolor) { - guac_client* client = ((rdp_freerdp_context*) context)->client; - guac_client_log_info(client, "guac_rdp_glyph_enddraw()"); + int x, int y, int width, int height, uint32 fgcolor, uint32 bgcolor) { + /* UNUSED */ } From 64b65baee63df0661b64288ca8f3c4becdf4a7f0 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Thu, 9 Feb 2012 10:30:38 -0800 Subject: [PATCH 067/253] Implement scrblt. --- protocols/rdp/src/rdp_gdi.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/protocols/rdp/src/rdp_gdi.c b/protocols/rdp/src/rdp_gdi.c index 8ea0daa1..8ec80a01 100644 --- a/protocols/rdp/src/rdp_gdi.c +++ b/protocols/rdp/src/rdp_gdi.c @@ -53,8 +53,17 @@ void guac_rdp_gdi_patblt(rdpContext* context, PATBLT_ORDER* patblt) { } void guac_rdp_gdi_scrblt(rdpContext* context, SCRBLT_ORDER* scrblt) { + guac_client* client = ((rdp_freerdp_context*) context)->client; - guac_client_log_info(client, "guac_rdp_gdi_scrblt()"); + const guac_layer* current_layer = ((rdp_guac_client_data*) client->data)->current_surface; + + /* Copy screen rect to current surface */ + guac_protocol_send_copy(client->socket, + GUAC_DEFAULT_LAYER, + scrblt->nXSrc, scrblt->nYSrc, scrblt->nWidth, scrblt->nHeight, + GUAC_COMP_OVER, current_layer, + scrblt->nLeftRect, scrblt->nTopRect); + } void guac_rdp_gdi_memblt(rdpContext* context, MEMBLT_ORDER* memblt) { From f0bf4325411fe188511e0cb1e9740ee221fd94ae Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Sat, 11 Feb 2012 19:10:56 -0800 Subject: [PATCH 068/253] Migrate to 0.6.0 libguac API. --- protocols/rdp/src/client.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/protocols/rdp/src/client.c b/protocols/rdp/src/client.c index 8f3c51cc..4e2a98ca 100644 --- a/protocols/rdp/src/client.c +++ b/protocols/rdp/src/client.c @@ -171,7 +171,7 @@ boolean rdp_freerdp_post_connect(freerdp* instance) { client->key_handler = rdp_guac_client_key_handler; /* Send size */ - guac_protocol_send_size(client->socket, + guac_protocol_send_size(client->socket, GUAC_DEFAULT_LAYER, instance->settings->width, instance->settings->height); return true; From 5af15f965cc681ea71f543f146411fe2af16f890 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Thu, 16 Feb 2012 14:32:23 -0800 Subject: [PATCH 069/253] Added layer to pointer structure. --- protocols/rdp/include/rdp_pointer.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/protocols/rdp/include/rdp_pointer.h b/protocols/rdp/include/rdp_pointer.h index 869c9f13..ff870913 100644 --- a/protocols/rdp/include/rdp_pointer.h +++ b/protocols/rdp/include/rdp_pointer.h @@ -49,7 +49,10 @@ typedef struct guac_rdp_pointer { */ rdpPointer pointer; - /* TODO: STUB */ + /** + * Guacamole layer containing cached image data. + */ + guac_layer* layer; } guac_rdp_pointer; From 6fe448edf8f05ff9f8424208eda65a823b40b12e Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Thu, 16 Feb 2012 14:46:08 -0800 Subject: [PATCH 070/253] Cache and use pointers. --- protocols/rdp/src/rdp_pointer.c | 47 ++++++++++++++++++++++++++++++--- 1 file changed, 44 insertions(+), 3 deletions(-) diff --git a/protocols/rdp/src/rdp_pointer.c b/protocols/rdp/src/rdp_pointer.c index 62f1d00c..e0ef5489 100644 --- a/protocols/rdp/src/rdp_pointer.c +++ b/protocols/rdp/src/rdp_pointer.c @@ -44,17 +44,58 @@ #include "rdp_pointer.h" void guac_rdp_pointer_new(rdpContext* context, rdpPointer* pointer) { + guac_client* client = ((rdp_freerdp_context*) context)->client; - guac_client_log_info(client, "guac_rdp_pointer_new()"); + guac_socket* socket = client->socket; + + /* Allocate data for image */ + unsigned char* data = + (unsigned char*) malloc(pointer->width * pointer->height * 4); + + /* Allocate layer */ + guac_layer* buffer = guac_client_alloc_buffer(client); + + cairo_surface_t* surface; + + /* Convert to alpha cursor if mask data present */ + if (pointer->andMaskData && pointer->xorMaskData) + freerdp_alpha_cursor_convert(data, + pointer->xorMaskData, pointer->andMaskData, + pointer->width, pointer->height, pointer->xorBpp, + ((rdp_freerdp_context*) context)->clrconv); + + /* Create surface from image data */ + surface = cairo_image_surface_create_for_data( + data, CAIRO_FORMAT_ARGB32, + pointer->width, pointer->height, 4*pointer->width); + + /* Send surface to buffer */ + guac_protocol_send_png(socket, GUAC_COMP_SRC, buffer, 0, 0, surface); + + /* Free surface */ + cairo_surface_destroy(surface); + + /* Remember buffer */ + ((guac_rdp_pointer*) pointer)->layer = buffer; + } void guac_rdp_pointer_set(rdpContext* context, rdpPointer* pointer) { + guac_client* client = ((rdp_freerdp_context*) context)->client; - guac_client_log_info(client, "guac_rdp_pointer_set()"); + guac_socket* socket = client->socket; + + /* Set cursor */ + guac_protocol_send_cursor(socket, pointer->xPos, pointer->yPos, + ((guac_rdp_pointer*) pointer)->layer, + 0, 0, pointer->width, pointer->height); + } void guac_rdp_pointer_free(rdpContext* context, rdpPointer* pointer) { + guac_client* client = ((rdp_freerdp_context*) context)->client; - guac_client_log_info(client, "guac_rdp_pointer_free()"); + guac_client_free_buffer(client, ((guac_rdp_pointer*) pointer)->layer); + } From 1fb9eead9299fff40477455318e898ae1350eda1 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Fri, 17 Feb 2012 10:04:00 -0800 Subject: [PATCH 071/253] Free surface image buffer after use. --- protocols/rdp/src/rdp_pointer.c | 1 + 1 file changed, 1 insertion(+) diff --git a/protocols/rdp/src/rdp_pointer.c b/protocols/rdp/src/rdp_pointer.c index e0ef5489..00ea93fe 100644 --- a/protocols/rdp/src/rdp_pointer.c +++ b/protocols/rdp/src/rdp_pointer.c @@ -74,6 +74,7 @@ void guac_rdp_pointer_new(rdpContext* context, rdpPointer* pointer) { /* Free surface */ cairo_surface_destroy(surface); + free(data); /* Remember buffer */ ((guac_rdp_pointer*) pointer)->layer = buffer; From 4f90feb8cf61bebc3834c6ba30e9652ba71904b3 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Fri, 17 Feb 2012 13:57:27 -0800 Subject: [PATCH 072/253] Implement DstBlt for ROP3==0 (blackness) --- protocols/rdp/src/rdp_gdi.c | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/protocols/rdp/src/rdp_gdi.c b/protocols/rdp/src/rdp_gdi.c index 8ec80a01..4159d77e 100644 --- a/protocols/rdp/src/rdp_gdi.c +++ b/protocols/rdp/src/rdp_gdi.c @@ -43,8 +43,32 @@ #include "rdp_bitmap.h" void guac_rdp_gdi_dstblt(rdpContext* context, DSTBLT_ORDER* dstblt) { + guac_client* client = ((rdp_freerdp_context*) context)->client; - guac_client_log_info(client, "guac_rdp_gdi_dstblt()"); + const guac_layer* current_layer = ((rdp_guac_client_data*) client->data)->current_surface; + + switch (dstblt->bRop) { + + /* Blackness */ + case 0: + + /* Send black rectangle */ + guac_protocol_send_rect(client->socket, + GUAC_COMP_OVER, current_layer, + dstblt->nLeftRect, dstblt->nTopRect, + dstblt->nWidth, dstblt->nHeight, + 0, 0, 0, 255); + break; + + /* Unsupported ROP3 */ + default: + guac_client_log_info(client, + "guac_rdp_gdi_dstblt(rop3=%i)", dstblt->bRop); + + } + + + } void guac_rdp_gdi_patblt(rdpContext* context, PATBLT_ORDER* patblt) { From 0f593bb47fd1e65b316d07ce5f7161d732690831 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Thu, 23 Feb 2012 10:01:41 -0800 Subject: [PATCH 073/253] freerdp_color_convert is now freerdp_color_convert_var as of FreeRDP 1.0.1 release. --- protocols/rdp/src/rdp_gdi.c | 2 +- protocols/rdp/src/rdp_glyph.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/protocols/rdp/src/rdp_gdi.c b/protocols/rdp/src/rdp_gdi.c index 4159d77e..52f19669 100644 --- a/protocols/rdp/src/rdp_gdi.c +++ b/protocols/rdp/src/rdp_gdi.c @@ -109,7 +109,7 @@ void guac_rdp_gdi_memblt(rdpContext* context, MEMBLT_ORDER* memblt) { void guac_rdp_gdi_opaquerect(rdpContext* context, OPAQUE_RECT_ORDER* opaque_rect) { guac_client* client = ((rdp_freerdp_context*) context)->client; - uint32 color = freerdp_color_convert(opaque_rect->color, + uint32 color = freerdp_color_convert_var(opaque_rect->color, context->instance->settings->color_depth, 32, ((rdp_freerdp_context*) context)->clrconv); diff --git a/protocols/rdp/src/rdp_glyph.c b/protocols/rdp/src/rdp_glyph.c index 608b722f..c6fbce0d 100644 --- a/protocols/rdp/src/rdp_glyph.c +++ b/protocols/rdp/src/rdp_glyph.c @@ -142,11 +142,11 @@ void guac_rdp_glyph_begindraw(rdpContext* context, guac_client* client = ((rdp_freerdp_context*) context)->client; rdp_guac_client_data* guac_client_data = (rdp_guac_client_data*) client->data; - bgcolor = freerdp_color_convert(bgcolor, + bgcolor = freerdp_color_convert_var(bgcolor, context->instance->settings->color_depth, 32, ((rdp_freerdp_context*) context)->clrconv); - fgcolor = freerdp_color_convert(fgcolor, + fgcolor = freerdp_color_convert_var(fgcolor, context->instance->settings->color_depth, 32, ((rdp_freerdp_context*) context)->clrconv); From a647eca6344c7d0449898421471ff7fec79eaa57 Mon Sep 17 00:00:00 2001 From: Matt Hortman Date: Thu, 23 Feb 2012 14:27:23 -0500 Subject: [PATCH 074/253] additional RDP parameters --- protocols/rdp/src/client.c | 51 ++++++++++++++++++++++++++++++++++---- 1 file changed, 46 insertions(+), 5 deletions(-) mode change 100644 => 100755 protocols/rdp/src/client.c diff --git a/protocols/rdp/src/client.c b/protocols/rdp/src/client.c old mode 100644 new mode 100755 index 4e2a98ca..2aed2141 --- a/protocols/rdp/src/client.c +++ b/protocols/rdp/src/client.c @@ -69,9 +69,26 @@ const char* GUAC_CLIENT_ARGS[] = { "hostname", "port", + "username", + "password", + "width", + "height", + "initial_program", + "color_depth", NULL }; +enum ARGS_IDX { + IDX_HOSTNAME, + IDX_PORT, + IDX_USERNAME, + IDX_PASSWORD, + IDX_WIDTH, + IDX_HEIGHT, + IDX_INITIAL_PROGRAM, + IDX_COLOR_DEPTH +}; + boolean rdp_freerdp_pre_connect(freerdp* instance) { rdpContext* context = instance->context; @@ -197,17 +214,17 @@ int guac_client_init(guac_client* client, int argc, char** argv) { int port = RDP_DEFAULT_PORT; boolean bitmap_cache; - if (argc < 2) { + if (argc < 8) { guac_protocol_send_error(client->socket, "Wrong argument count received."); guac_socket_flush(client->socket); return 1; } /* If port specified, use it */ - if (argv[1][0] != '\0') - port = atoi(argv[1]); + if (argv[IDX_PORT][0] != '\0') + port = atoi(argv[IDX_PORT]); - hostname = argv[0]; + hostname = argv[IDX_HOSTNAME]; /* Allocate client data */ guac_client_data = malloc(sizeof(rdp_guac_client_data)); @@ -238,14 +255,38 @@ int guac_client_init(guac_client* client, int argc, char** argv) { settings->encryption_method = ENCRYPTION_METHOD_40BIT | ENCRYPTION_METHOD_128BIT | ENCRYPTION_METHOD_FIPS; settings->encryption_level = ENCRYPTION_LEVEL_CLIENT_COMPATIBLE; - /* Default size */ + /* session width */ settings->width = 1024; + if (argv[IDX_WIDTH][0] != '\0') + settings->width = atoi(argv[IDX_WIDTH]); + if (settings->width == 0) + settings->width = 1024; + + /* session height */ settings->height = 768; + if (argv[IDX_HEIGHT][0] != '\0') + settings->height = atoi(argv[IDX_HEIGHT]); + if (settings->height == 0) + settings->height = 768; /* Set hostname */ settings->hostname = strdup(hostname); settings->window_title = strdup(hostname); + + /* username */ settings->username = "guest"; + if (argv[IDX_USERNAME][0] != '\0') + settings->username = strdup (argv[IDX_USERNAME]); + + /* password */ + if (argv[IDX_PASSWORD][0] != '\0') { + settings->password = strdup (argv[IDX_PASSWORD]); + settings->autologon = 1; + } + + /* initial program */ + if (argv[IDX_INITIAL_PROGRAM][0] != '\0') + settings->shell = strdup (argv[IDX_INITIAL_PROGRAM]); /* Order support */ bitmap_cache = settings->bitmap_cache; From bf2fd7a9969776ab1ae66c2042e34a4679241767 Mon Sep 17 00:00:00 2001 From: Matt Hortman Date: Thu, 23 Feb 2012 14:37:23 -0500 Subject: [PATCH 075/253] change to build with latest FreeRDP --- protocols/rdp/src/rdp_gdi.c | 2 +- protocols/rdp/src/rdp_glyph.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) mode change 100644 => 100755 protocols/rdp/src/rdp_gdi.c mode change 100644 => 100755 protocols/rdp/src/rdp_glyph.c diff --git a/protocols/rdp/src/rdp_gdi.c b/protocols/rdp/src/rdp_gdi.c old mode 100644 new mode 100755 index 8ec80a01..30b4db24 --- a/protocols/rdp/src/rdp_gdi.c +++ b/protocols/rdp/src/rdp_gdi.c @@ -85,7 +85,7 @@ void guac_rdp_gdi_memblt(rdpContext* context, MEMBLT_ORDER* memblt) { void guac_rdp_gdi_opaquerect(rdpContext* context, OPAQUE_RECT_ORDER* opaque_rect) { guac_client* client = ((rdp_freerdp_context*) context)->client; - uint32 color = freerdp_color_convert(opaque_rect->color, + uint32 color = freerdp_color_convert_var(opaque_rect->color, context->instance->settings->color_depth, 32, ((rdp_freerdp_context*) context)->clrconv); diff --git a/protocols/rdp/src/rdp_glyph.c b/protocols/rdp/src/rdp_glyph.c old mode 100644 new mode 100755 index 608b722f..c6fbce0d --- a/protocols/rdp/src/rdp_glyph.c +++ b/protocols/rdp/src/rdp_glyph.c @@ -142,11 +142,11 @@ void guac_rdp_glyph_begindraw(rdpContext* context, guac_client* client = ((rdp_freerdp_context*) context)->client; rdp_guac_client_data* guac_client_data = (rdp_guac_client_data*) client->data; - bgcolor = freerdp_color_convert(bgcolor, + bgcolor = freerdp_color_convert_var(bgcolor, context->instance->settings->color_depth, 32, ((rdp_freerdp_context*) context)->clrconv); - fgcolor = freerdp_color_convert(fgcolor, + fgcolor = freerdp_color_convert_var(fgcolor, context->instance->settings->color_depth, 32, ((rdp_freerdp_context*) context)->clrconv); From 201fdfd8816116a06b5c5560cf950bad80caa4e4 Mon Sep 17 00:00:00 2001 From: Matt Hortman Date: Thu, 23 Feb 2012 15:38:17 -0500 Subject: [PATCH 076/253] added raster operations --- protocols/rdp/src/rdp_gdi.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/protocols/rdp/src/rdp_gdi.c b/protocols/rdp/src/rdp_gdi.c index 30b4db24..76887181 100755 --- a/protocols/rdp/src/rdp_gdi.c +++ b/protocols/rdp/src/rdp_gdi.c @@ -73,11 +73,23 @@ void guac_rdp_gdi_memblt(rdpContext* context, MEMBLT_ORDER* memblt) { guac_socket* socket = client->socket; guac_rdp_bitmap* bitmap = (guac_rdp_bitmap*) memblt->bitmap; + guac_composite_mode cmode = GUAC_COMP_OVER; + + if (memblt->bRop == 204) cmode = GUAC_COMP_OVER; + else if (memblt->bRop == 238) cmode = GUAC_COMP_OR; + else if (memblt->bRop == 136) cmode = GUAC_COMP_AND; + else if (memblt->bRop == 102) cmode = GUAC_COMP_XOR2; + else if (memblt->bRop == 187) cmode = GUAC_COMP_NOR; + else + { + guac_client_log_info (client, "guac_rdp_gdi_memblt: UNSUPPORTED opcode = %d (0x%02X)", memblt->bRop, memblt->bRop); + } + if (bitmap->layer != NULL) guac_protocol_send_copy(socket, bitmap->layer, memblt->nXSrc, memblt->nYSrc, memblt->nWidth, memblt->nHeight, - GUAC_COMP_OVER, + cmode, current_layer, memblt->nLeftRect, memblt->nTopRect); } From 23918c6087d463f0275c9606436b2ec5d7c69e70 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Thu, 23 Feb 2012 14:51:00 -0800 Subject: [PATCH 077/253] Bumped version number to 0.6.0. Added LICENSE to dist tarball. --- protocols/rdp/Makefile.am | 2 ++ protocols/rdp/configure.in | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/protocols/rdp/Makefile.am b/protocols/rdp/Makefile.am index b22b0b9c..d4f143bb 100644 --- a/protocols/rdp/Makefile.am +++ b/protocols/rdp/Makefile.am @@ -45,3 +45,5 @@ libguac_client_rdp_la_SOURCES = src/client.c src/rdp_keymap.c src/rdp_bitmap.c s libguac_client_rdp_la_LDFLAGS = -version-info 0:0:0 +EXTRA_DIST = LICENSE + diff --git a/protocols/rdp/configure.in b/protocols/rdp/configure.in index fa117499..5428b885 100644 --- a/protocols/rdp/configure.in +++ b/protocols/rdp/configure.in @@ -35,7 +35,7 @@ # ***** END LICENSE BLOCK ***** AC_INIT(src/client.c) -AM_INIT_AUTOMAKE([libguac-client-rdp], 0.5.0) +AM_INIT_AUTOMAKE([libguac-client-rdp], 0.6.0) AC_CONFIG_MACRO_DIR([m4]) # Checks for programs. From 5016e56bf19529ccd971a06af3156c5df8039773 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Mon, 27 Feb 2012 10:36:14 -0800 Subject: [PATCH 078/253] Changed tabs to spaces, removed execute permissions from source. --- protocols/rdp/src/client.c | 78 +++++++++++++++++------------------ protocols/rdp/src/rdp_gdi.c | 20 ++++----- protocols/rdp/src/rdp_glyph.c | 0 3 files changed, 49 insertions(+), 49 deletions(-) mode change 100755 => 100644 protocols/rdp/src/client.c mode change 100755 => 100644 protocols/rdp/src/rdp_gdi.c mode change 100755 => 100644 protocols/rdp/src/rdp_glyph.c diff --git a/protocols/rdp/src/client.c b/protocols/rdp/src/client.c old mode 100755 new mode 100644 index 2aed2141..267eebf0 --- a/protocols/rdp/src/client.c +++ b/protocols/rdp/src/client.c @@ -69,24 +69,24 @@ const char* GUAC_CLIENT_ARGS[] = { "hostname", "port", - "username", - "password", - "width", - "height", - "initial_program", - "color_depth", + "username", + "password", + "width", + "height", + "initial_program", + "color_depth", NULL }; enum ARGS_IDX { - IDX_HOSTNAME, - IDX_PORT, - IDX_USERNAME, - IDX_PASSWORD, - IDX_WIDTH, - IDX_HEIGHT, - IDX_INITIAL_PROGRAM, - IDX_COLOR_DEPTH + IDX_HOSTNAME, + IDX_PORT, + IDX_USERNAME, + IDX_PASSWORD, + IDX_WIDTH, + IDX_HEIGHT, + IDX_INITIAL_PROGRAM, + IDX_COLOR_DEPTH }; boolean rdp_freerdp_pre_connect(freerdp* instance) { @@ -208,7 +208,7 @@ int guac_client_init(guac_client* client, int argc, char** argv) { rdp_guac_client_data* guac_client_data; freerdp* rdp_inst; - rdpSettings* settings; + rdpSettings* settings; char* hostname; int port = RDP_DEFAULT_PORT; @@ -256,37 +256,37 @@ int guac_client_init(guac_client* client, int argc, char** argv) { settings->encryption_level = ENCRYPTION_LEVEL_CLIENT_COMPATIBLE; /* session width */ - settings->width = 1024; - if (argv[IDX_WIDTH][0] != '\0') - settings->width = atoi(argv[IDX_WIDTH]); - if (settings->width == 0) - settings->width = 1024; + settings->width = 1024; + if (argv[IDX_WIDTH][0] != '\0') + settings->width = atoi(argv[IDX_WIDTH]); + if (settings->width == 0) + settings->width = 1024; - /* session height */ - settings->height = 768; - if (argv[IDX_HEIGHT][0] != '\0') - settings->height = atoi(argv[IDX_HEIGHT]); - if (settings->height == 0) - settings->height = 768; + /* session height */ + settings->height = 768; + if (argv[IDX_HEIGHT][0] != '\0') + settings->height = atoi(argv[IDX_HEIGHT]); + if (settings->height == 0) + settings->height = 768; /* Set hostname */ settings->hostname = strdup(hostname); - settings->window_title = strdup(hostname); + settings->window_title = strdup(hostname); - /* username */ - settings->username = "guest"; - if (argv[IDX_USERNAME][0] != '\0') - settings->username = strdup (argv[IDX_USERNAME]); + /* username */ + settings->username = "guest"; + if (argv[IDX_USERNAME][0] != '\0') + settings->username = strdup (argv[IDX_USERNAME]); - /* password */ - if (argv[IDX_PASSWORD][0] != '\0') { - settings->password = strdup (argv[IDX_PASSWORD]); - settings->autologon = 1; - } + /* password */ + if (argv[IDX_PASSWORD][0] != '\0') { + settings->password = strdup (argv[IDX_PASSWORD]); + settings->autologon = 1; + } - /* initial program */ - if (argv[IDX_INITIAL_PROGRAM][0] != '\0') - settings->shell = strdup (argv[IDX_INITIAL_PROGRAM]); + /* initial program */ + if (argv[IDX_INITIAL_PROGRAM][0] != '\0') + settings->shell = strdup (argv[IDX_INITIAL_PROGRAM]); /* Order support */ bitmap_cache = settings->bitmap_cache; diff --git a/protocols/rdp/src/rdp_gdi.c b/protocols/rdp/src/rdp_gdi.c old mode 100755 new mode 100644 index a9ca292f..1b65574d --- a/protocols/rdp/src/rdp_gdi.c +++ b/protocols/rdp/src/rdp_gdi.c @@ -97,17 +97,17 @@ void guac_rdp_gdi_memblt(rdpContext* context, MEMBLT_ORDER* memblt) { guac_socket* socket = client->socket; guac_rdp_bitmap* bitmap = (guac_rdp_bitmap*) memblt->bitmap; - guac_composite_mode cmode = GUAC_COMP_OVER; + guac_composite_mode cmode = GUAC_COMP_OVER; - if (memblt->bRop == 204) cmode = GUAC_COMP_OVER; - else if (memblt->bRop == 238) cmode = GUAC_COMP_OR; - else if (memblt->bRop == 136) cmode = GUAC_COMP_AND; - else if (memblt->bRop == 102) cmode = GUAC_COMP_XOR2; - else if (memblt->bRop == 187) cmode = GUAC_COMP_NOR; - else - { - guac_client_log_info (client, "guac_rdp_gdi_memblt: UNSUPPORTED opcode = %d (0x%02X)", memblt->bRop, memblt->bRop); - } + if (memblt->bRop == 204) cmode = GUAC_COMP_OVER; + else if (memblt->bRop == 238) cmode = GUAC_COMP_OR; + else if (memblt->bRop == 136) cmode = GUAC_COMP_AND; + else if (memblt->bRop == 102) cmode = GUAC_COMP_XOR2; + else if (memblt->bRop == 187) cmode = GUAC_COMP_NOR; + else + { + guac_client_log_info (client, "guac_rdp_gdi_memblt: UNSUPPORTED opcode = %d (0x%02X)", memblt->bRop, memblt->bRop); + } if (bitmap->layer != NULL) guac_protocol_send_copy(socket, diff --git a/protocols/rdp/src/rdp_glyph.c b/protocols/rdp/src/rdp_glyph.c old mode 100755 new mode 100644 From 28a6bada4967a1d762458a17c144bfed86aace54 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Mon, 27 Feb 2012 10:53:45 -0800 Subject: [PATCH 079/253] Move ROP3 translation code into function, use hex for constants, add comments. --- protocols/rdp/include/rdp_gdi.h | 3 +++ protocols/rdp/src/rdp_gdi.c | 43 +++++++++++++++++++++++---------- 2 files changed, 33 insertions(+), 13 deletions(-) diff --git a/protocols/rdp/include/rdp_gdi.h b/protocols/rdp/include/rdp_gdi.h index 894b2b4a..0df75870 100644 --- a/protocols/rdp/include/rdp_gdi.h +++ b/protocols/rdp/include/rdp_gdi.h @@ -38,8 +38,11 @@ #ifndef _GUAC_RDP_RDP_GDI_H #define _GUAC_RDP_RDP_GDI_H +#include #include +guac_composite_mode guac_rdp_rop3_composite_mode(guac_client* client, int rop3); + void guac_rdp_gdi_dstblt(rdpContext* context, DSTBLT_ORDER* dstblt); void guac_rdp_gdi_patblt(rdpContext* context, PATBLT_ORDER* patblt); void guac_rdp_gdi_scrblt(rdpContext* context, SCRBLT_ORDER* scrblt); diff --git a/protocols/rdp/src/rdp_gdi.c b/protocols/rdp/src/rdp_gdi.c index 1b65574d..7e170992 100644 --- a/protocols/rdp/src/rdp_gdi.c +++ b/protocols/rdp/src/rdp_gdi.c @@ -42,6 +42,35 @@ #include "client.h" #include "rdp_bitmap.h" +guac_composite_mode guac_rdp_rop3_composite_mode(guac_client* client, + int rop3) { + + /* Translate supported ROP3 opcodes into composite modes */ + switch (rop3) { + + /* "SRCINVERT" (src ^ dest) */ + case 0x66: return GUAC_COMP_BINARY_XOR; + + /* "SRCAND" (src & dest) */ + case 0x88: return GUAC_COMP_BINARY_AND; + + /* "MERGEPAINT" !(src | dest)*/ + case 0xBB: return GUAC_COMP_BINARY_NOR; + + /* "SRCCOPY" (src) */ + case 0xCC: return GUAC_COMP_OVER; + + /* "SRCPAINT" (src | dest) */ + case 0xEE: return GUAC_COMP_BINARY_OR; + + } + + /* Log warning if ROP3 opcode not supported */ + guac_client_log_info (client, "guac_rdp_rop3_composite_mode: UNSUPPORTED opcode = 0x%02X", rop3); + return GUAC_COMP_OVER; + +} + void guac_rdp_gdi_dstblt(rdpContext* context, DSTBLT_ORDER* dstblt) { guac_client* client = ((rdp_freerdp_context*) context)->client; @@ -97,23 +126,11 @@ void guac_rdp_gdi_memblt(rdpContext* context, MEMBLT_ORDER* memblt) { guac_socket* socket = client->socket; guac_rdp_bitmap* bitmap = (guac_rdp_bitmap*) memblt->bitmap; - guac_composite_mode cmode = GUAC_COMP_OVER; - - if (memblt->bRop == 204) cmode = GUAC_COMP_OVER; - else if (memblt->bRop == 238) cmode = GUAC_COMP_OR; - else if (memblt->bRop == 136) cmode = GUAC_COMP_AND; - else if (memblt->bRop == 102) cmode = GUAC_COMP_XOR2; - else if (memblt->bRop == 187) cmode = GUAC_COMP_NOR; - else - { - guac_client_log_info (client, "guac_rdp_gdi_memblt: UNSUPPORTED opcode = %d (0x%02X)", memblt->bRop, memblt->bRop); - } - if (bitmap->layer != NULL) guac_protocol_send_copy(socket, bitmap->layer, memblt->nXSrc, memblt->nYSrc, memblt->nWidth, memblt->nHeight, - cmode, + guac_rdp_rop3_composite_mode(client, memblt->bRop), current_layer, memblt->nLeftRect, memblt->nTopRect); } From b672cf400443688d4c2136cb6e8d2edd21f79e19 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Mon, 27 Feb 2012 12:39:13 -0800 Subject: [PATCH 080/253] Use transfer, not copy. --- protocols/rdp/include/rdp_gdi.h | 3 ++- protocols/rdp/src/rdp_gdi.c | 46 +++++++++++++++++++++++---------- 2 files changed, 34 insertions(+), 15 deletions(-) diff --git a/protocols/rdp/include/rdp_gdi.h b/protocols/rdp/include/rdp_gdi.h index 0df75870..97cc3057 100644 --- a/protocols/rdp/include/rdp_gdi.h +++ b/protocols/rdp/include/rdp_gdi.h @@ -41,7 +41,8 @@ #include #include -guac_composite_mode guac_rdp_rop3_composite_mode(guac_client* client, int rop3); +guac_composite_mode guac_rdp_rop3_transfer_function(guac_client* client, + int rop3); void guac_rdp_gdi_dstblt(rdpContext* context, DSTBLT_ORDER* dstblt); void guac_rdp_gdi_patblt(rdpContext* context, PATBLT_ORDER* patblt); diff --git a/protocols/rdp/src/rdp_gdi.c b/protocols/rdp/src/rdp_gdi.c index 7e170992..0b1300e8 100644 --- a/protocols/rdp/src/rdp_gdi.c +++ b/protocols/rdp/src/rdp_gdi.c @@ -42,32 +42,35 @@ #include "client.h" #include "rdp_bitmap.h" -guac_composite_mode guac_rdp_rop3_composite_mode(guac_client* client, +guac_transfer_function guac_rdp_rop3_transfer_function(guac_client* client, int rop3) { /* Translate supported ROP3 opcodes into composite modes */ switch (rop3) { /* "SRCINVERT" (src ^ dest) */ - case 0x66: return GUAC_COMP_BINARY_XOR; + case 0x66: return GUAC_TRANSFER_BINARY_SRC; /* "SRCAND" (src & dest) */ - case 0x88: return GUAC_COMP_BINARY_AND; + case 0x88: return GUAC_TRANSFER_BINARY_AND; /* "MERGEPAINT" !(src | dest)*/ - case 0xBB: return GUAC_COMP_BINARY_NOR; + case 0xBB: return GUAC_TRANSFER_BINARY_NOR; /* "SRCCOPY" (src) */ - case 0xCC: return GUAC_COMP_OVER; + case 0xCC: return GUAC_TRANSFER_BINARY_SRC; /* "SRCPAINT" (src | dest) */ - case 0xEE: return GUAC_COMP_BINARY_OR; + case 0xEE: return GUAC_TRANSFER_BINARY_OR; } /* Log warning if ROP3 opcode not supported */ - guac_client_log_info (client, "guac_rdp_rop3_composite_mode: UNSUPPORTED opcode = 0x%02X", rop3); - return GUAC_COMP_OVER; + guac_client_log_info (client, "guac_rdp_rop3_transfer_function: " + "UNSUPPORTED opcode = 0x%02X", rop3); + + /* Default to BINARY_SRC */ + return GUAC_TRANSFER_BINARY_SRC; } @@ -126,12 +129,27 @@ void guac_rdp_gdi_memblt(rdpContext* context, MEMBLT_ORDER* memblt) { guac_socket* socket = client->socket; guac_rdp_bitmap* bitmap = (guac_rdp_bitmap*) memblt->bitmap; - if (bitmap->layer != NULL) - guac_protocol_send_copy(socket, - bitmap->layer, - memblt->nXSrc, memblt->nYSrc, memblt->nWidth, memblt->nHeight, - guac_rdp_rop3_composite_mode(client, memblt->bRop), - current_layer, memblt->nLeftRect, memblt->nTopRect); + if (bitmap->layer != NULL) { + + /* If operation is just SRC, simply copy */ + if (memblt->bRop == 0xCC) + guac_protocol_send_copy(socket, + bitmap->layer, + memblt->nXSrc, memblt->nYSrc, + memblt->nWidth, memblt->nHeight, + GUAC_COMP_OVER, + current_layer, memblt->nLeftRect, memblt->nTopRect); + + /* Otherwise, use transfer */ + else + guac_protocol_send_transfer(socket, + bitmap->layer, + memblt->nXSrc, memblt->nYSrc, + memblt->nWidth, memblt->nHeight, + guac_rdp_rop3_transfer_function(client, memblt->bRop), + current_layer, memblt->nLeftRect, memblt->nTopRect); + + } } From 4c3bd35193449b64cddc2a513dc9ee84abe38a99 Mon Sep 17 00:00:00 2001 From: Matt Hortman Date: Tue, 28 Feb 2012 15:25:59 -0500 Subject: [PATCH 081/253] added timeout to select waiting on FreeRDP --- protocols/rdp/src/guac_handlers.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/protocols/rdp/src/guac_handlers.c b/protocols/rdp/src/guac_handlers.c index 2d1bc20c..ef8e1019 100644 --- a/protocols/rdp/src/guac_handlers.c +++ b/protocols/rdp/src/guac_handlers.c @@ -116,7 +116,10 @@ int rdp_guac_client_handle_messages(guac_client* client) { } /* Otherwise, wait for file descriptors given */ - if (select(max_fd + 1, &rfds, &wfds, NULL, NULL) == -1) { + struct timeval timeout; + timeout.tv_sec = 0; + timeout.tv_usec = 250000; + if (select(max_fd + 1, &rfds, &wfds, NULL, &timeout) == -1) { /* these are not really errors */ if (!((errno == EAGAIN) || (errno == EWOULDBLOCK) || From b0c3e77203eac29e38b545751274d1edce7c1dbe Mon Sep 17 00:00:00 2001 From: Matt Hortman Date: Tue, 28 Feb 2012 15:29:35 -0500 Subject: [PATCH 082/253] disable PATBLT order (since it's not implemented yet) --- protocols/rdp/src/client.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/protocols/rdp/src/client.c b/protocols/rdp/src/client.c index 267eebf0..de4e61c1 100644 --- a/protocols/rdp/src/client.c +++ b/protocols/rdp/src/client.c @@ -293,7 +293,7 @@ int guac_client_init(guac_client* client, int argc, char** argv) { settings->os_major_type = OSMAJORTYPE_UNSPECIFIED; settings->os_minor_type = OSMINORTYPE_UNSPECIFIED; settings->order_support[NEG_DSTBLT_INDEX] = true; - settings->order_support[NEG_PATBLT_INDEX] = true; + settings->order_support[NEG_PATBLT_INDEX] = false; //true; settings->order_support[NEG_SCRBLT_INDEX] = true; settings->order_support[NEG_OPAQUE_RECT_INDEX] = true; settings->order_support[NEG_DRAWNINEGRID_INDEX] = false; From f85b3e4d05a29c73526d1e88224d2234e20f716e Mon Sep 17 00:00:00 2001 From: Matt Hortman Date: Tue, 28 Feb 2012 15:42:58 -0500 Subject: [PATCH 083/253] pass port to FreeRDP settings --- protocols/rdp/src/client.c | 1 + 1 file changed, 1 insertion(+) diff --git a/protocols/rdp/src/client.c b/protocols/rdp/src/client.c index de4e61c1..bf0f61e7 100644 --- a/protocols/rdp/src/client.c +++ b/protocols/rdp/src/client.c @@ -271,6 +271,7 @@ int guac_client_init(guac_client* client, int argc, char** argv) { /* Set hostname */ settings->hostname = strdup(hostname); + settings->port = port; settings->window_title = strdup(hostname); /* username */ From e041afc835ae511ad3f626161e16de003fc6bf79 Mon Sep 17 00:00:00 2001 From: Matt Hortman Date: Thu, 1 Mar 2012 15:27:25 -0500 Subject: [PATCH 084/253] get bitmap size from bounding box (not given width/height) --- protocols/rdp/src/rdp_bitmap.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/protocols/rdp/src/rdp_bitmap.c b/protocols/rdp/src/rdp_bitmap.c index c192395f..13762d2b 100644 --- a/protocols/rdp/src/rdp_bitmap.c +++ b/protocols/rdp/src/rdp_bitmap.c @@ -113,9 +113,12 @@ void guac_rdp_bitmap_paint(rdpContext* context, rdpBitmap* bitmap) { guac_client* client = ((rdp_freerdp_context*) context)->client; guac_socket* socket = client->socket; + int width = bitmap->right - bitmap->left + 1; + int height = bitmap->bottom - bitmap->top + 1; + guac_protocol_send_copy(socket, ((guac_rdp_bitmap*) bitmap)->layer, - 0, 0, bitmap->width, bitmap->height, + 0, 0, width, height, GUAC_COMP_OVER, GUAC_DEFAULT_LAYER, bitmap->left, bitmap->top); From 0e2db03ade9e42d47579a2c44282f92e6cfce17b Mon Sep 17 00:00:00 2001 From: Matt Hortman Date: Thu, 1 Mar 2012 15:31:06 -0500 Subject: [PATCH 085/253] fix ROP mapping --- protocols/rdp/src/rdp_gdi.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/protocols/rdp/src/rdp_gdi.c b/protocols/rdp/src/rdp_gdi.c index 0b1300e8..000cf8d3 100644 --- a/protocols/rdp/src/rdp_gdi.c +++ b/protocols/rdp/src/rdp_gdi.c @@ -49,13 +49,13 @@ guac_transfer_function guac_rdp_rop3_transfer_function(guac_client* client, switch (rop3) { /* "SRCINVERT" (src ^ dest) */ - case 0x66: return GUAC_TRANSFER_BINARY_SRC; + case 0x66: return GUAC_TRANSFER_BINARY_XOR; /* "SRCAND" (src & dest) */ case 0x88: return GUAC_TRANSFER_BINARY_AND; - /* "MERGEPAINT" !(src | dest)*/ - case 0xBB: return GUAC_TRANSFER_BINARY_NOR; + /* "MERGEPAINT" (!src | dest)*/ + case 0xBB: return GUAC_TRANSFER_BINARY_NSRC_OR; /* "SRCCOPY" (src) */ case 0xCC: return GUAC_TRANSFER_BINARY_SRC; From 1a196fb37dceb8e271454b04920221ec38e26954 Mon Sep 17 00:00:00 2001 From: Matt Hortman Date: Thu, 1 Mar 2012 15:37:00 -0500 Subject: [PATCH 086/253] paint background in glyph_begindraw --- protocols/rdp/src/rdp_glyph.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/protocols/rdp/src/rdp_glyph.c b/protocols/rdp/src/rdp_glyph.c index c6fbce0d..db7ba546 100644 --- a/protocols/rdp/src/rdp_glyph.c +++ b/protocols/rdp/src/rdp_glyph.c @@ -114,7 +114,7 @@ void guac_rdp_glyph_draw(rdpContext* context, rdpGlyph* glyph, int x, int y) { guac_client* client = ((rdp_freerdp_context*) context)->client; rdp_guac_client_data* guac_client_data = (rdp_guac_client_data*) client->data; const guac_layer* current_layer = ((rdp_guac_client_data*) client->data)->current_surface; - + /* Colorize glyph */ guac_protocol_send_rect(client->socket, GUAC_COMP_ATOP, ((guac_rdp_glyph*) glyph)->layer, @@ -141,6 +141,7 @@ void guac_rdp_glyph_begindraw(rdpContext* context, guac_client* client = ((rdp_freerdp_context*) context)->client; rdp_guac_client_data* guac_client_data = (rdp_guac_client_data*) client->data; + const guac_layer* current_layer = ((rdp_guac_client_data*) client->data)->current_surface; bgcolor = freerdp_color_convert_var(bgcolor, context->instance->settings->color_depth, 32, @@ -154,6 +155,18 @@ void guac_rdp_glyph_begindraw(rdpContext* context, guac_client_data->foreground.green = (fgcolor & 0x00FF00) >> 8; guac_client_data->foreground.blue = (fgcolor & 0xFF0000) >> 16; + guac_client_data->background.red = bgcolor & 0x0000FF; + guac_client_data->background.green = (bgcolor & 0x00FF00) >> 8; + guac_client_data->background.blue = (bgcolor & 0xFF0000) >> 16; + + /* paint background on destination */ + guac_protocol_send_rect(client->socket, + GUAC_COMP_OVER, current_layer, + x, y, width, height, + guac_client_data->background.red, + guac_client_data->background.green, + guac_client_data->background.blue, + 255); } void guac_rdp_glyph_enddraw(rdpContext* context, From 92b799bdad6b1361976ef3ab84acd0bf360b1b22 Mon Sep 17 00:00:00 2001 From: Matt Hortman Date: Mon, 5 Mar 2012 10:13:08 -0500 Subject: [PATCH 087/253] fixed color mapping in glyph_begindraw --- protocols/rdp/src/rdp_glyph.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/protocols/rdp/src/rdp_glyph.c b/protocols/rdp/src/rdp_glyph.c index db7ba546..47dfa16b 100644 --- a/protocols/rdp/src/rdp_glyph.c +++ b/protocols/rdp/src/rdp_glyph.c @@ -151,13 +151,13 @@ void guac_rdp_glyph_begindraw(rdpContext* context, context->instance->settings->color_depth, 32, ((rdp_freerdp_context*) context)->clrconv); - guac_client_data->foreground.red = fgcolor & 0x0000FF; + guac_client_data->foreground.blue = fgcolor & 0x0000FF; guac_client_data->foreground.green = (fgcolor & 0x00FF00) >> 8; - guac_client_data->foreground.blue = (fgcolor & 0xFF0000) >> 16; + guac_client_data->foreground.red = (fgcolor & 0xFF0000) >> 16; - guac_client_data->background.red = bgcolor & 0x0000FF; + guac_client_data->background.blue = bgcolor & 0x0000FF; guac_client_data->background.green = (bgcolor & 0x00FF00) >> 8; - guac_client_data->background.blue = (bgcolor & 0xFF0000) >> 16; + guac_client_data->background.red = (bgcolor & 0xFF0000) >> 16; /* paint background on destination */ guac_protocol_send_rect(client->socket, From c10d6536075f8af385b9b5a6763b328ddb60f7c6 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Mon, 5 Mar 2012 12:10:03 -0800 Subject: [PATCH 088/253] Fixed whitespace, moved timeout declaration. --- protocols/rdp/include/client.h | 2 +- protocols/rdp/src/guac_handlers.c | 9 +- protocols/rdp/src/rdp_bitmap.c | 4 +- protocols/rdp/src/rdp_glyph.c | 2 +- protocols/rdp/src/rdp_keymap.c | 472 +++++++++++++++--------------- 5 files changed, 245 insertions(+), 244 deletions(-) diff --git a/protocols/rdp/include/client.h b/protocols/rdp/include/client.h index c24f7825..27500a63 100644 --- a/protocols/rdp/include/client.h +++ b/protocols/rdp/include/client.h @@ -54,7 +54,7 @@ typedef struct guac_rdp_color { typedef struct rdp_guac_client_data { freerdp* rdp_inst; - rdpSettings* settings; + rdpSettings* settings; int mouse_button_mask; diff --git a/protocols/rdp/src/guac_handlers.c b/protocols/rdp/src/guac_handlers.c index ef8e1019..c77940ac 100644 --- a/protocols/rdp/src/guac_handlers.c +++ b/protocols/rdp/src/guac_handlers.c @@ -75,9 +75,13 @@ int rdp_guac_client_handle_messages(guac_client* client) { void* write_fds[32]; int read_count = 0; int write_count = 0; - fd_set rfds, wfds; + struct timeval timeout = { + .tv_sec = 0; + .tv_usec = 250000; + }; + /* get rdp fds */ if (!freerdp_get_fds(rdp_inst, read_fds, &read_count, write_fds, &write_count)) { guac_client_log_error(client, "Unable to read RDP file descriptors."); @@ -116,9 +120,6 @@ int rdp_guac_client_handle_messages(guac_client* client) { } /* Otherwise, wait for file descriptors given */ - struct timeval timeout; - timeout.tv_sec = 0; - timeout.tv_usec = 250000; if (select(max_fd + 1, &rfds, &wfds, NULL, &timeout) == -1) { /* these are not really errors */ if (!((errno == EAGAIN) || diff --git a/protocols/rdp/src/rdp_bitmap.c b/protocols/rdp/src/rdp_bitmap.c index 13762d2b..e89f2665 100644 --- a/protocols/rdp/src/rdp_bitmap.c +++ b/protocols/rdp/src/rdp_bitmap.c @@ -113,8 +113,8 @@ void guac_rdp_bitmap_paint(rdpContext* context, rdpBitmap* bitmap) { guac_client* client = ((rdp_freerdp_context*) context)->client; guac_socket* socket = client->socket; - int width = bitmap->right - bitmap->left + 1; - int height = bitmap->bottom - bitmap->top + 1; + int width = bitmap->right - bitmap->left + 1; + int height = bitmap->bottom - bitmap->top + 1; guac_protocol_send_copy(socket, ((guac_rdp_bitmap*) bitmap)->layer, diff --git a/protocols/rdp/src/rdp_glyph.c b/protocols/rdp/src/rdp_glyph.c index 47dfa16b..91ea38a6 100644 --- a/protocols/rdp/src/rdp_glyph.c +++ b/protocols/rdp/src/rdp_glyph.c @@ -159,7 +159,7 @@ void guac_rdp_glyph_begindraw(rdpContext* context, guac_client_data->background.green = (bgcolor & 0x00FF00) >> 8; guac_client_data->background.red = (bgcolor & 0xFF0000) >> 16; - /* paint background on destination */ + /* paint background on destination */ guac_protocol_send_rect(client->socket, GUAC_COMP_OVER, current_layer, x, y, width, height, diff --git a/protocols/rdp/src/rdp_keymap.c b/protocols/rdp/src/rdp_keymap.c index 3415fa81..6ad28dc0 100644 --- a/protocols/rdp/src/rdp_keymap.c +++ b/protocols/rdp/src/rdp_keymap.c @@ -3910,10 +3910,10 @@ const guac_rdp_keymap guac_rdp_keysym_scancode[256][256] = { { .scancode = 0x00, .flags = 0x00 }, /* 0x0efe */ { .scancode = 0x00, .flags = 0x00 }, /* 0x0eff (Korean_Won) */ }, - {{0}}, /* 0x0f?? */ - {{0}}, /* 0x10?? */ - {{0}}, /* 0x11?? */ - {{0}}, /* 0x12?? */ + {{0}}, /* 0x0f?? */ + {{0}}, /* 0x10?? */ + {{0}}, /* 0x11?? */ + {{0}}, /* 0x12?? */ { /* 0x13?? */ { .scancode = 0x00, .flags = 0x00 }, /* 0x1300 */ { .scancode = 0x00, .flags = 0x00 }, /* 0x1301 */ @@ -4172,18 +4172,18 @@ const guac_rdp_keymap guac_rdp_keysym_scancode[256][256] = { { .scancode = 0x00, .flags = 0x00 }, /* 0x13fe */ { .scancode = 0x00, .flags = 0x00 }, /* 0x13ff */ }, - {{0}}, /* 0x14?? */ - {{0}}, /* 0x15?? */ - {{0}}, /* 0x16?? */ - {{0}}, /* 0x17?? */ - {{0}}, /* 0x18?? */ - {{0}}, /* 0x19?? */ - {{0}}, /* 0x1a?? */ - {{0}}, /* 0x1b?? */ - {{0}}, /* 0x1c?? */ - {{0}}, /* 0x1d?? */ - {{0}}, /* 0x1e?? */ - {{0}}, /* 0x1f?? */ + {{0}}, /* 0x14?? */ + {{0}}, /* 0x15?? */ + {{0}}, /* 0x16?? */ + {{0}}, /* 0x17?? */ + {{0}}, /* 0x18?? */ + {{0}}, /* 0x19?? */ + {{0}}, /* 0x1a?? */ + {{0}}, /* 0x1b?? */ + {{0}}, /* 0x1c?? */ + {{0}}, /* 0x1d?? */ + {{0}}, /* 0x1e?? */ + {{0}}, /* 0x1f?? */ { /* 0x20?? */ { .scancode = 0x00, .flags = 0x00 }, /* 0x2000 */ { .scancode = 0x00, .flags = 0x00 }, /* 0x2001 */ @@ -4442,226 +4442,226 @@ const guac_rdp_keymap guac_rdp_keysym_scancode[256][256] = { { .scancode = 0x00, .flags = 0x00 }, /* 0x20fe */ { .scancode = 0x00, .flags = 0x00 }, /* 0x20ff */ }, - {{0}}, /* 0x21?? */ - {{0}}, /* 0x22?? */ - {{0}}, /* 0x23?? */ - {{0}}, /* 0x24?? */ - {{0}}, /* 0x25?? */ - {{0}}, /* 0x26?? */ - {{0}}, /* 0x27?? */ - {{0}}, /* 0x28?? */ - {{0}}, /* 0x29?? */ - {{0}}, /* 0x2a?? */ - {{0}}, /* 0x2b?? */ - {{0}}, /* 0x2c?? */ - {{0}}, /* 0x2d?? */ - {{0}}, /* 0x2e?? */ - {{0}}, /* 0x2f?? */ - {{0}}, /* 0x30?? */ - {{0}}, /* 0x31?? */ - {{0}}, /* 0x32?? */ - {{0}}, /* 0x33?? */ - {{0}}, /* 0x34?? */ - {{0}}, /* 0x35?? */ - {{0}}, /* 0x36?? */ - {{0}}, /* 0x37?? */ - {{0}}, /* 0x38?? */ - {{0}}, /* 0x39?? */ - {{0}}, /* 0x3a?? */ - {{0}}, /* 0x3b?? */ - {{0}}, /* 0x3c?? */ - {{0}}, /* 0x3d?? */ - {{0}}, /* 0x3e?? */ - {{0}}, /* 0x3f?? */ - {{0}}, /* 0x40?? */ - {{0}}, /* 0x41?? */ - {{0}}, /* 0x42?? */ - {{0}}, /* 0x43?? */ - {{0}}, /* 0x44?? */ - {{0}}, /* 0x45?? */ - {{0}}, /* 0x46?? */ - {{0}}, /* 0x47?? */ - {{0}}, /* 0x48?? */ - {{0}}, /* 0x49?? */ - {{0}}, /* 0x4a?? */ - {{0}}, /* 0x4b?? */ - {{0}}, /* 0x4c?? */ - {{0}}, /* 0x4d?? */ - {{0}}, /* 0x4e?? */ - {{0}}, /* 0x4f?? */ - {{0}}, /* 0x50?? */ - {{0}}, /* 0x51?? */ - {{0}}, /* 0x52?? */ - {{0}}, /* 0x53?? */ - {{0}}, /* 0x54?? */ - {{0}}, /* 0x55?? */ - {{0}}, /* 0x56?? */ - {{0}}, /* 0x57?? */ - {{0}}, /* 0x58?? */ - {{0}}, /* 0x59?? */ - {{0}}, /* 0x5a?? */ - {{0}}, /* 0x5b?? */ - {{0}}, /* 0x5c?? */ - {{0}}, /* 0x5d?? */ - {{0}}, /* 0x5e?? */ - {{0}}, /* 0x5f?? */ - {{0}}, /* 0x60?? */ - {{0}}, /* 0x61?? */ - {{0}}, /* 0x62?? */ - {{0}}, /* 0x63?? */ - {{0}}, /* 0x64?? */ - {{0}}, /* 0x65?? */ - {{0}}, /* 0x66?? */ - {{0}}, /* 0x67?? */ - {{0}}, /* 0x68?? */ - {{0}}, /* 0x69?? */ - {{0}}, /* 0x6a?? */ - {{0}}, /* 0x6b?? */ - {{0}}, /* 0x6c?? */ - {{0}}, /* 0x6d?? */ - {{0}}, /* 0x6e?? */ - {{0}}, /* 0x6f?? */ - {{0}}, /* 0x70?? */ - {{0}}, /* 0x71?? */ - {{0}}, /* 0x72?? */ - {{0}}, /* 0x73?? */ - {{0}}, /* 0x74?? */ - {{0}}, /* 0x75?? */ - {{0}}, /* 0x76?? */ - {{0}}, /* 0x77?? */ - {{0}}, /* 0x78?? */ - {{0}}, /* 0x79?? */ - {{0}}, /* 0x7a?? */ - {{0}}, /* 0x7b?? */ - {{0}}, /* 0x7c?? */ - {{0}}, /* 0x7d?? */ - {{0}}, /* 0x7e?? */ - {{0}}, /* 0x7f?? */ - {{0}}, /* 0x80?? */ - {{0}}, /* 0x81?? */ - {{0}}, /* 0x82?? */ - {{0}}, /* 0x83?? */ - {{0}}, /* 0x84?? */ - {{0}}, /* 0x85?? */ - {{0}}, /* 0x86?? */ - {{0}}, /* 0x87?? */ - {{0}}, /* 0x88?? */ - {{0}}, /* 0x89?? */ - {{0}}, /* 0x8a?? */ - {{0}}, /* 0x8b?? */ - {{0}}, /* 0x8c?? */ - {{0}}, /* 0x8d?? */ - {{0}}, /* 0x8e?? */ - {{0}}, /* 0x8f?? */ - {{0}}, /* 0x90?? */ - {{0}}, /* 0x91?? */ - {{0}}, /* 0x92?? */ - {{0}}, /* 0x93?? */ - {{0}}, /* 0x94?? */ - {{0}}, /* 0x95?? */ - {{0}}, /* 0x96?? */ - {{0}}, /* 0x97?? */ - {{0}}, /* 0x98?? */ - {{0}}, /* 0x99?? */ - {{0}}, /* 0x9a?? */ - {{0}}, /* 0x9b?? */ - {{0}}, /* 0x9c?? */ - {{0}}, /* 0x9d?? */ - {{0}}, /* 0x9e?? */ - {{0}}, /* 0x9f?? */ - {{0}}, /* 0xa0?? */ - {{0}}, /* 0xa1?? */ - {{0}}, /* 0xa2?? */ - {{0}}, /* 0xa3?? */ - {{0}}, /* 0xa4?? */ - {{0}}, /* 0xa5?? */ - {{0}}, /* 0xa6?? */ - {{0}}, /* 0xa7?? */ - {{0}}, /* 0xa8?? */ - {{0}}, /* 0xa9?? */ - {{0}}, /* 0xaa?? */ - {{0}}, /* 0xab?? */ - {{0}}, /* 0xac?? */ - {{0}}, /* 0xad?? */ - {{0}}, /* 0xae?? */ - {{0}}, /* 0xaf?? */ - {{0}}, /* 0xb0?? */ - {{0}}, /* 0xb1?? */ - {{0}}, /* 0xb2?? */ - {{0}}, /* 0xb3?? */ - {{0}}, /* 0xb4?? */ - {{0}}, /* 0xb5?? */ - {{0}}, /* 0xb6?? */ - {{0}}, /* 0xb7?? */ - {{0}}, /* 0xb8?? */ - {{0}}, /* 0xb9?? */ - {{0}}, /* 0xba?? */ - {{0}}, /* 0xbb?? */ - {{0}}, /* 0xbc?? */ - {{0}}, /* 0xbd?? */ - {{0}}, /* 0xbe?? */ - {{0}}, /* 0xbf?? */ - {{0}}, /* 0xc0?? */ - {{0}}, /* 0xc1?? */ - {{0}}, /* 0xc2?? */ - {{0}}, /* 0xc3?? */ - {{0}}, /* 0xc4?? */ - {{0}}, /* 0xc5?? */ - {{0}}, /* 0xc6?? */ - {{0}}, /* 0xc7?? */ - {{0}}, /* 0xc8?? */ - {{0}}, /* 0xc9?? */ - {{0}}, /* 0xca?? */ - {{0}}, /* 0xcb?? */ - {{0}}, /* 0xcc?? */ - {{0}}, /* 0xcd?? */ - {{0}}, /* 0xce?? */ - {{0}}, /* 0xcf?? */ - {{0}}, /* 0xd0?? */ - {{0}}, /* 0xd1?? */ - {{0}}, /* 0xd2?? */ - {{0}}, /* 0xd3?? */ - {{0}}, /* 0xd4?? */ - {{0}}, /* 0xd5?? */ - {{0}}, /* 0xd6?? */ - {{0}}, /* 0xd7?? */ - {{0}}, /* 0xd8?? */ - {{0}}, /* 0xd9?? */ - {{0}}, /* 0xda?? */ - {{0}}, /* 0xdb?? */ - {{0}}, /* 0xdc?? */ - {{0}}, /* 0xdd?? */ - {{0}}, /* 0xde?? */ - {{0}}, /* 0xdf?? */ - {{0}}, /* 0xe0?? */ - {{0}}, /* 0xe1?? */ - {{0}}, /* 0xe2?? */ - {{0}}, /* 0xe3?? */ - {{0}}, /* 0xe4?? */ - {{0}}, /* 0xe5?? */ - {{0}}, /* 0xe6?? */ - {{0}}, /* 0xe7?? */ - {{0}}, /* 0xe8?? */ - {{0}}, /* 0xe9?? */ - {{0}}, /* 0xea?? */ - {{0}}, /* 0xeb?? */ - {{0}}, /* 0xec?? */ - {{0}}, /* 0xed?? */ - {{0}}, /* 0xee?? */ - {{0}}, /* 0xef?? */ - {{0}}, /* 0xf0?? */ - {{0}}, /* 0xf1?? */ - {{0}}, /* 0xf2?? */ - {{0}}, /* 0xf3?? */ - {{0}}, /* 0xf4?? */ - {{0}}, /* 0xf5?? */ - {{0}}, /* 0xf6?? */ - {{0}}, /* 0xf7?? */ - {{0}}, /* 0xf8?? */ - {{0}}, /* 0xf9?? */ - {{0}}, /* 0xfa?? */ - {{0}}, /* 0xfb?? */ - {{0}}, /* 0xfc?? */ + {{0}}, /* 0x21?? */ + {{0}}, /* 0x22?? */ + {{0}}, /* 0x23?? */ + {{0}}, /* 0x24?? */ + {{0}}, /* 0x25?? */ + {{0}}, /* 0x26?? */ + {{0}}, /* 0x27?? */ + {{0}}, /* 0x28?? */ + {{0}}, /* 0x29?? */ + {{0}}, /* 0x2a?? */ + {{0}}, /* 0x2b?? */ + {{0}}, /* 0x2c?? */ + {{0}}, /* 0x2d?? */ + {{0}}, /* 0x2e?? */ + {{0}}, /* 0x2f?? */ + {{0}}, /* 0x30?? */ + {{0}}, /* 0x31?? */ + {{0}}, /* 0x32?? */ + {{0}}, /* 0x33?? */ + {{0}}, /* 0x34?? */ + {{0}}, /* 0x35?? */ + {{0}}, /* 0x36?? */ + {{0}}, /* 0x37?? */ + {{0}}, /* 0x38?? */ + {{0}}, /* 0x39?? */ + {{0}}, /* 0x3a?? */ + {{0}}, /* 0x3b?? */ + {{0}}, /* 0x3c?? */ + {{0}}, /* 0x3d?? */ + {{0}}, /* 0x3e?? */ + {{0}}, /* 0x3f?? */ + {{0}}, /* 0x40?? */ + {{0}}, /* 0x41?? */ + {{0}}, /* 0x42?? */ + {{0}}, /* 0x43?? */ + {{0}}, /* 0x44?? */ + {{0}}, /* 0x45?? */ + {{0}}, /* 0x46?? */ + {{0}}, /* 0x47?? */ + {{0}}, /* 0x48?? */ + {{0}}, /* 0x49?? */ + {{0}}, /* 0x4a?? */ + {{0}}, /* 0x4b?? */ + {{0}}, /* 0x4c?? */ + {{0}}, /* 0x4d?? */ + {{0}}, /* 0x4e?? */ + {{0}}, /* 0x4f?? */ + {{0}}, /* 0x50?? */ + {{0}}, /* 0x51?? */ + {{0}}, /* 0x52?? */ + {{0}}, /* 0x53?? */ + {{0}}, /* 0x54?? */ + {{0}}, /* 0x55?? */ + {{0}}, /* 0x56?? */ + {{0}}, /* 0x57?? */ + {{0}}, /* 0x58?? */ + {{0}}, /* 0x59?? */ + {{0}}, /* 0x5a?? */ + {{0}}, /* 0x5b?? */ + {{0}}, /* 0x5c?? */ + {{0}}, /* 0x5d?? */ + {{0}}, /* 0x5e?? */ + {{0}}, /* 0x5f?? */ + {{0}}, /* 0x60?? */ + {{0}}, /* 0x61?? */ + {{0}}, /* 0x62?? */ + {{0}}, /* 0x63?? */ + {{0}}, /* 0x64?? */ + {{0}}, /* 0x65?? */ + {{0}}, /* 0x66?? */ + {{0}}, /* 0x67?? */ + {{0}}, /* 0x68?? */ + {{0}}, /* 0x69?? */ + {{0}}, /* 0x6a?? */ + {{0}}, /* 0x6b?? */ + {{0}}, /* 0x6c?? */ + {{0}}, /* 0x6d?? */ + {{0}}, /* 0x6e?? */ + {{0}}, /* 0x6f?? */ + {{0}}, /* 0x70?? */ + {{0}}, /* 0x71?? */ + {{0}}, /* 0x72?? */ + {{0}}, /* 0x73?? */ + {{0}}, /* 0x74?? */ + {{0}}, /* 0x75?? */ + {{0}}, /* 0x76?? */ + {{0}}, /* 0x77?? */ + {{0}}, /* 0x78?? */ + {{0}}, /* 0x79?? */ + {{0}}, /* 0x7a?? */ + {{0}}, /* 0x7b?? */ + {{0}}, /* 0x7c?? */ + {{0}}, /* 0x7d?? */ + {{0}}, /* 0x7e?? */ + {{0}}, /* 0x7f?? */ + {{0}}, /* 0x80?? */ + {{0}}, /* 0x81?? */ + {{0}}, /* 0x82?? */ + {{0}}, /* 0x83?? */ + {{0}}, /* 0x84?? */ + {{0}}, /* 0x85?? */ + {{0}}, /* 0x86?? */ + {{0}}, /* 0x87?? */ + {{0}}, /* 0x88?? */ + {{0}}, /* 0x89?? */ + {{0}}, /* 0x8a?? */ + {{0}}, /* 0x8b?? */ + {{0}}, /* 0x8c?? */ + {{0}}, /* 0x8d?? */ + {{0}}, /* 0x8e?? */ + {{0}}, /* 0x8f?? */ + {{0}}, /* 0x90?? */ + {{0}}, /* 0x91?? */ + {{0}}, /* 0x92?? */ + {{0}}, /* 0x93?? */ + {{0}}, /* 0x94?? */ + {{0}}, /* 0x95?? */ + {{0}}, /* 0x96?? */ + {{0}}, /* 0x97?? */ + {{0}}, /* 0x98?? */ + {{0}}, /* 0x99?? */ + {{0}}, /* 0x9a?? */ + {{0}}, /* 0x9b?? */ + {{0}}, /* 0x9c?? */ + {{0}}, /* 0x9d?? */ + {{0}}, /* 0x9e?? */ + {{0}}, /* 0x9f?? */ + {{0}}, /* 0xa0?? */ + {{0}}, /* 0xa1?? */ + {{0}}, /* 0xa2?? */ + {{0}}, /* 0xa3?? */ + {{0}}, /* 0xa4?? */ + {{0}}, /* 0xa5?? */ + {{0}}, /* 0xa6?? */ + {{0}}, /* 0xa7?? */ + {{0}}, /* 0xa8?? */ + {{0}}, /* 0xa9?? */ + {{0}}, /* 0xaa?? */ + {{0}}, /* 0xab?? */ + {{0}}, /* 0xac?? */ + {{0}}, /* 0xad?? */ + {{0}}, /* 0xae?? */ + {{0}}, /* 0xaf?? */ + {{0}}, /* 0xb0?? */ + {{0}}, /* 0xb1?? */ + {{0}}, /* 0xb2?? */ + {{0}}, /* 0xb3?? */ + {{0}}, /* 0xb4?? */ + {{0}}, /* 0xb5?? */ + {{0}}, /* 0xb6?? */ + {{0}}, /* 0xb7?? */ + {{0}}, /* 0xb8?? */ + {{0}}, /* 0xb9?? */ + {{0}}, /* 0xba?? */ + {{0}}, /* 0xbb?? */ + {{0}}, /* 0xbc?? */ + {{0}}, /* 0xbd?? */ + {{0}}, /* 0xbe?? */ + {{0}}, /* 0xbf?? */ + {{0}}, /* 0xc0?? */ + {{0}}, /* 0xc1?? */ + {{0}}, /* 0xc2?? */ + {{0}}, /* 0xc3?? */ + {{0}}, /* 0xc4?? */ + {{0}}, /* 0xc5?? */ + {{0}}, /* 0xc6?? */ + {{0}}, /* 0xc7?? */ + {{0}}, /* 0xc8?? */ + {{0}}, /* 0xc9?? */ + {{0}}, /* 0xca?? */ + {{0}}, /* 0xcb?? */ + {{0}}, /* 0xcc?? */ + {{0}}, /* 0xcd?? */ + {{0}}, /* 0xce?? */ + {{0}}, /* 0xcf?? */ + {{0}}, /* 0xd0?? */ + {{0}}, /* 0xd1?? */ + {{0}}, /* 0xd2?? */ + {{0}}, /* 0xd3?? */ + {{0}}, /* 0xd4?? */ + {{0}}, /* 0xd5?? */ + {{0}}, /* 0xd6?? */ + {{0}}, /* 0xd7?? */ + {{0}}, /* 0xd8?? */ + {{0}}, /* 0xd9?? */ + {{0}}, /* 0xda?? */ + {{0}}, /* 0xdb?? */ + {{0}}, /* 0xdc?? */ + {{0}}, /* 0xdd?? */ + {{0}}, /* 0xde?? */ + {{0}}, /* 0xdf?? */ + {{0}}, /* 0xe0?? */ + {{0}}, /* 0xe1?? */ + {{0}}, /* 0xe2?? */ + {{0}}, /* 0xe3?? */ + {{0}}, /* 0xe4?? */ + {{0}}, /* 0xe5?? */ + {{0}}, /* 0xe6?? */ + {{0}}, /* 0xe7?? */ + {{0}}, /* 0xe8?? */ + {{0}}, /* 0xe9?? */ + {{0}}, /* 0xea?? */ + {{0}}, /* 0xeb?? */ + {{0}}, /* 0xec?? */ + {{0}}, /* 0xed?? */ + {{0}}, /* 0xee?? */ + {{0}}, /* 0xef?? */ + {{0}}, /* 0xf0?? */ + {{0}}, /* 0xf1?? */ + {{0}}, /* 0xf2?? */ + {{0}}, /* 0xf3?? */ + {{0}}, /* 0xf4?? */ + {{0}}, /* 0xf5?? */ + {{0}}, /* 0xf6?? */ + {{0}}, /* 0xf7?? */ + {{0}}, /* 0xf8?? */ + {{0}}, /* 0xf9?? */ + {{0}}, /* 0xfa?? */ + {{0}}, /* 0xfb?? */ + {{0}}, /* 0xfc?? */ { /* 0xfd?? */ { .scancode = 0x00, .flags = 0x00 }, /* 0xfd00 */ { .scancode = 0x00, .flags = 0x00 }, /* 0xfd01 (3270_Duplicate) */ From a9330ad737a132cf7de87f5d81171fe16c8f898f Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Mon, 5 Mar 2012 12:10:56 -0800 Subject: [PATCH 089/253] Fixed initializer. --- protocols/rdp/src/guac_handlers.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/protocols/rdp/src/guac_handlers.c b/protocols/rdp/src/guac_handlers.c index c77940ac..ba63486d 100644 --- a/protocols/rdp/src/guac_handlers.c +++ b/protocols/rdp/src/guac_handlers.c @@ -78,8 +78,8 @@ int rdp_guac_client_handle_messages(guac_client* client) { fd_set rfds, wfds; struct timeval timeout = { - .tv_sec = 0; - .tv_usec = 250000; + .tv_sec = 0, + .tv_usec = 250000 }; /* get rdp fds */ From 76df678e75431322338697c27860960d00dd47b6 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Mon, 5 Mar 2012 12:15:35 -0800 Subject: [PATCH 090/253] Adding Matt Hortman to list of contributors. --- protocols/rdp/src/client.c | 1 + protocols/rdp/src/guac_handlers.c | 1 + protocols/rdp/src/rdp_bitmap.c | 1 + protocols/rdp/src/rdp_gdi.c | 1 + protocols/rdp/src/rdp_glyph.c | 1 + 5 files changed, 5 insertions(+) diff --git a/protocols/rdp/src/client.c b/protocols/rdp/src/client.c index bf0f61e7..c4d8e18a 100644 --- a/protocols/rdp/src/client.c +++ b/protocols/rdp/src/client.c @@ -20,6 +20,7 @@ * the Initial Developer. All Rights Reserved. * * Contributor(s): + * Matt Hortman * * Alternatively, the contents of this file may be used under the terms of * either the GNU General Public License Version 2 or later (the "GPL"), or diff --git a/protocols/rdp/src/guac_handlers.c b/protocols/rdp/src/guac_handlers.c index ba63486d..73d19302 100644 --- a/protocols/rdp/src/guac_handlers.c +++ b/protocols/rdp/src/guac_handlers.c @@ -20,6 +20,7 @@ * the Initial Developer. All Rights Reserved. * * Contributor(s): + * Matt Hortman * * Alternatively, the contents of this file may be used under the terms of * either the GNU General Public License Version 2 or later (the "GPL"), or diff --git a/protocols/rdp/src/rdp_bitmap.c b/protocols/rdp/src/rdp_bitmap.c index e89f2665..38a90fc4 100644 --- a/protocols/rdp/src/rdp_bitmap.c +++ b/protocols/rdp/src/rdp_bitmap.c @@ -20,6 +20,7 @@ * the Initial Developer. All Rights Reserved. * * Contributor(s): + * Matt Hortman * * Alternatively, the contents of this file may be used under the terms of * either the GNU General Public License Version 2 or later (the "GPL"), or diff --git a/protocols/rdp/src/rdp_gdi.c b/protocols/rdp/src/rdp_gdi.c index 000cf8d3..6c925893 100644 --- a/protocols/rdp/src/rdp_gdi.c +++ b/protocols/rdp/src/rdp_gdi.c @@ -20,6 +20,7 @@ * the Initial Developer. All Rights Reserved. * * Contributor(s): + * Matt Hortman * * Alternatively, the contents of this file may be used under the terms of * either the GNU General Public License Version 2 or later (the "GPL"), or diff --git a/protocols/rdp/src/rdp_glyph.c b/protocols/rdp/src/rdp_glyph.c index 91ea38a6..5201fd0b 100644 --- a/protocols/rdp/src/rdp_glyph.c +++ b/protocols/rdp/src/rdp_glyph.c @@ -20,6 +20,7 @@ * the Initial Developer. All Rights Reserved. * * Contributor(s): + * Matt Hortman * * Alternatively, the contents of this file may be used under the terms of * either the GNU General Public License Version 2 or later (the "GPL"), or From 4e04a670af105b6eb0b3f6ab36655380f962d6fb Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Wed, 7 Mar 2012 13:57:49 -0800 Subject: [PATCH 091/253] Reformatted comments, fixed ticket #107 (background not being drawn). --- protocols/rdp/src/client.c | 8 ++++---- protocols/rdp/src/rdp_glyph.c | 3 ++- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/protocols/rdp/src/client.c b/protocols/rdp/src/client.c index c4d8e18a..6109297f 100644 --- a/protocols/rdp/src/client.c +++ b/protocols/rdp/src/client.c @@ -295,7 +295,7 @@ int guac_client_init(guac_client* client, int argc, char** argv) { settings->os_major_type = OSMAJORTYPE_UNSPECIFIED; settings->os_minor_type = OSMINORTYPE_UNSPECIFIED; settings->order_support[NEG_DSTBLT_INDEX] = true; - settings->order_support[NEG_PATBLT_INDEX] = false; //true; + settings->order_support[NEG_PATBLT_INDEX] = false; /* PATBLT not yet supported */ settings->order_support[NEG_SCRBLT_INDEX] = true; settings->order_support[NEG_OPAQUE_RECT_INDEX] = true; settings->order_support[NEG_DRAWNINEGRID_INDEX] = false; @@ -311,9 +311,9 @@ int guac_client_init(guac_client* client, int argc, char** argv) { settings->order_support[NEG_MEMBLT_V2_INDEX] = bitmap_cache; settings->order_support[NEG_MEM3BLT_V2_INDEX] = false; settings->order_support[NEG_SAVEBITMAP_INDEX] = false; - settings->order_support[NEG_GLYPH_INDEX_INDEX] = false; - settings->order_support[NEG_FAST_INDEX_INDEX] = false; - settings->order_support[NEG_FAST_GLYPH_INDEX] = false; + settings->order_support[NEG_GLYPH_INDEX_INDEX] = true; + settings->order_support[NEG_FAST_INDEX_INDEX] = true; + settings->order_support[NEG_FAST_GLYPH_INDEX] = true; settings->order_support[NEG_POLYGON_SC_INDEX] = false; settings->order_support[NEG_POLYGON_CB_INDEX] = false; settings->order_support[NEG_ELLIPSE_SC_INDEX] = false; diff --git a/protocols/rdp/src/rdp_glyph.c b/protocols/rdp/src/rdp_glyph.c index 5201fd0b..462d5908 100644 --- a/protocols/rdp/src/rdp_glyph.c +++ b/protocols/rdp/src/rdp_glyph.c @@ -160,7 +160,7 @@ void guac_rdp_glyph_begindraw(rdpContext* context, guac_client_data->background.green = (bgcolor & 0x00FF00) >> 8; guac_client_data->background.red = (bgcolor & 0xFF0000) >> 16; - /* paint background on destination */ + /* Paint background on destination */ guac_protocol_send_rect(client->socket, GUAC_COMP_OVER, current_layer, x, y, width, height, @@ -168,6 +168,7 @@ void guac_rdp_glyph_begindraw(rdpContext* context, guac_client_data->background.green, guac_client_data->background.blue, 255); + } void guac_rdp_glyph_enddraw(rdpContext* context, From 7414b9cfc7b142080c5518f53156c32e776db48d Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Wed, 7 Mar 2012 15:28:35 -0800 Subject: [PATCH 092/253] Add other raster operations (all having only src and dst). --- protocols/rdp/src/rdp_gdi.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/protocols/rdp/src/rdp_gdi.c b/protocols/rdp/src/rdp_gdi.c index 6c925893..46ac9f30 100644 --- a/protocols/rdp/src/rdp_gdi.c +++ b/protocols/rdp/src/rdp_gdi.c @@ -49,21 +49,49 @@ guac_transfer_function guac_rdp_rop3_transfer_function(guac_client* client, /* Translate supported ROP3 opcodes into composite modes */ switch (rop3) { + /* "DSon" !(src | dest) */ + case 0x11: return GUAC_TRANSFER_BINARY_NOR; + + /* "DSna" !src & dest */ + case 0x22: return GUAC_TRANSFER_BINARY_NSRC_AND; + + /* "Sn" !src */ + case 0x33: return GUAC_TRANSFER_BINARY_NSRC; + + /* "SDna" (src & !dest) */ + case 0x44: return GUAC_TRANSFER_BINARY_NDEST_AND; + + /* "Dn" !dest */ + case 0x55: return GUAC_TRANSFER_BINARY_NDEST; + /* "SRCINVERT" (src ^ dest) */ case 0x66: return GUAC_TRANSFER_BINARY_XOR; + /* "DSan" !(src & dest) */ + case 0x77: return GUAC_TRANSFER_BINARY_NAND; + /* "SRCAND" (src & dest) */ case 0x88: return GUAC_TRANSFER_BINARY_AND; + /* "DSxn" !(src ^ dest) */ + case 0x99: return GUAC_TRANSFER_BINARY_XNOR; + /* "MERGEPAINT" (!src | dest)*/ case 0xBB: return GUAC_TRANSFER_BINARY_NSRC_OR; /* "SRCCOPY" (src) */ case 0xCC: return GUAC_TRANSFER_BINARY_SRC; + /* "SDno" (src | !dest) */ + case 0xDD: return GUAC_TRANSFER_BINARY_NDEST_OR; + /* "SRCPAINT" (src | dest) */ case 0xEE: return GUAC_TRANSFER_BINARY_OR; + /* 0x00 = "BLACKNESS" (0) */ + /* 0xAA = "NOP" (dest) */ + /* 0xFF = "WHITENESS" (1) */ + } /* Log warning if ROP3 opcode not supported */ From ea26d99b44329a0b18aeaf4e54bb39f04edb80f7 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Wed, 7 Mar 2012 15:35:38 -0800 Subject: [PATCH 093/253] Implement constant and copy/NOP raster operations without transfer. --- protocols/rdp/src/rdp_gdi.c | 33 ++++++++++++++++++++++++++++----- 1 file changed, 28 insertions(+), 5 deletions(-) diff --git a/protocols/rdp/src/rdp_gdi.c b/protocols/rdp/src/rdp_gdi.c index 46ac9f30..0b027a6b 100644 --- a/protocols/rdp/src/rdp_gdi.c +++ b/protocols/rdp/src/rdp_gdi.c @@ -79,9 +79,6 @@ guac_transfer_function guac_rdp_rop3_transfer_function(guac_client* client, /* "MERGEPAINT" (!src | dest)*/ case 0xBB: return GUAC_TRANSFER_BINARY_NSRC_OR; - /* "SRCCOPY" (src) */ - case 0xCC: return GUAC_TRANSFER_BINARY_SRC; - /* "SDno" (src | !dest) */ case 0xDD: return GUAC_TRANSFER_BINARY_NDEST_OR; @@ -90,6 +87,7 @@ guac_transfer_function guac_rdp_rop3_transfer_function(guac_client* client, /* 0x00 = "BLACKNESS" (0) */ /* 0xAA = "NOP" (dest) */ + /* 0xCC = "SRCCOPY" (src) */ /* 0xFF = "WHITENESS" (1) */ } @@ -160,17 +158,42 @@ void guac_rdp_gdi_memblt(rdpContext* context, MEMBLT_ORDER* memblt) { if (bitmap->layer != NULL) { + switch (memblt->bRop) { + + /* If blackness, send black rectangle */ + case 0x00: + guac_protocol_send_rect(client->socket, + GUAC_COMP_OVER, current_layer, + memblt->nLeftRect, memblt->nTopRect, + memblt->nWidth, memblt->nHeight, + 0x00, 0x00, 0x00, 0xFF); + break; + + /* If NOP, do nothing */ + case 0xAA: + break; + /* If operation is just SRC, simply copy */ - if (memblt->bRop == 0xCC) + case 0xCC: guac_protocol_send_copy(socket, bitmap->layer, memblt->nXSrc, memblt->nYSrc, memblt->nWidth, memblt->nHeight, GUAC_COMP_OVER, current_layer, memblt->nLeftRect, memblt->nTopRect); + break; + + /* If whiteness, send white rectangle */ + case 0xFF: + guac_protocol_send_rect(client->socket, + GUAC_COMP_OVER, current_layer, + memblt->nLeftRect, memblt->nTopRect, + memblt->nWidth, memblt->nHeight, + 0xFF, 0xFF, 0xFF, 0xFF); + break; /* Otherwise, use transfer */ - else + default: guac_protocol_send_transfer(socket, bitmap->layer, memblt->nXSrc, memblt->nYSrc, From d4a3b76015834576a5075b3362412b9fcc6642b8 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Wed, 7 Mar 2012 15:36:31 -0800 Subject: [PATCH 094/253] Added missing brace... --- protocols/rdp/src/rdp_gdi.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/protocols/rdp/src/rdp_gdi.c b/protocols/rdp/src/rdp_gdi.c index 0b027a6b..bedfc809 100644 --- a/protocols/rdp/src/rdp_gdi.c +++ b/protocols/rdp/src/rdp_gdi.c @@ -201,7 +201,9 @@ void guac_rdp_gdi_memblt(rdpContext* context, MEMBLT_ORDER* memblt) { guac_rdp_rop3_transfer_function(client, memblt->bRop), current_layer, memblt->nLeftRect, memblt->nTopRect); - } + } + + } /* end if layer not NULL */ } From 17c7561b3a406b969f0771a2d5579155f540ff02 Mon Sep 17 00:00:00 2001 From: Matt Hortman Date: Thu, 8 Mar 2012 09:57:08 -0500 Subject: [PATCH 095/253] added scancodes for Menu, Alt, and Super keys --- protocols/rdp/src/rdp_keymap.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/protocols/rdp/src/rdp_keymap.c b/protocols/rdp/src/rdp_keymap.c index 6ad28dc0..2df67c5a 100644 --- a/protocols/rdp/src/rdp_keymap.c +++ b/protocols/rdp/src/rdp_keymap.c @@ -5282,7 +5282,7 @@ const guac_rdp_keymap guac_rdp_keysym_scancode[256][256] = { { .scancode = 0x00, .flags = 0x00 }, /* 0xff64 */ { .scancode = 0x00, .flags = 0x00 }, /* 0xff65 (Undo) */ { .scancode = 0x00, .flags = 0x00 }, /* 0xff66 (Redo) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff67 (Menu) */ + { .scancode = 0x5D, .flags = KBD_FLAGS_EXTENDED }, /* 0xff67 (Menu) */ { .scancode = 0x00, .flags = 0x00 }, /* 0xff68 (Find) */ { .scancode = 0x00, .flags = 0x00 }, /* 0xff69 (Cancel) */ { .scancode = 0x00, .flags = 0x00 }, /* 0xff6a (Help) */ @@ -5412,10 +5412,10 @@ const guac_rdp_keymap guac_rdp_keysym_scancode[256][256] = { { .scancode = 0x00, .flags = 0x00 }, /* 0xffe6 (Shift_Lock) */ { .scancode = 0x00, .flags = 0x00 }, /* 0xffe7 (Meta_L) */ { .scancode = 0x00, .flags = 0x00 }, /* 0xffe8 (Meta_R) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xffe9 (Alt_L) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xffea (Alt_R) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xffeb (Super_L) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xffec (Super_R) */ + { .scancode = 0x38, .flags = 0x00 }, /* 0xffe9 (Alt_L) */ + { .scancode = 0x38, .flags = 0x00 }, /* 0xffea (Alt_R) */ + { .scancode = 0x5B, .flags = KBD_FLAGS_EXTENDED }, /* 0xffeb (Super_L) */ + { .scancode = 0x5C, .flags = KBD_FLAGS_EXTENDED }, /* 0xffec (Super_R) */ { .scancode = 0x00, .flags = 0x00 }, /* 0xffed (Hyper_L) */ { .scancode = 0x00, .flags = 0x00 }, /* 0xffee (Hyper_R) */ { .scancode = 0x00, .flags = 0x00 }, /* 0xffef */ From 01ad7ea86e0eb554e76392300b9c3c105d3c5b6e Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Thu, 8 Mar 2012 08:12:48 -0800 Subject: [PATCH 096/253] Added Matt Hortman to list of contributors. --- protocols/rdp/src/rdp_keymap.c | 1 + 1 file changed, 1 insertion(+) diff --git a/protocols/rdp/src/rdp_keymap.c b/protocols/rdp/src/rdp_keymap.c index 2df67c5a..0a568f69 100644 --- a/protocols/rdp/src/rdp_keymap.c +++ b/protocols/rdp/src/rdp_keymap.c @@ -20,6 +20,7 @@ * the Initial Developer. All Rights Reserved. * * Contributor(s): + * Matt Hortman * * Alternatively, the contents of this file may be used under the terms of * either the GNU General Public License Version 2 or later (the "GPL"), or From acb573b9650ceaaaafaa123469db9c8827d601ca Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Sun, 11 Mar 2012 21:32:06 -0700 Subject: [PATCH 097/253] Refactor supporting new instruction set. --- protocols/rdp/src/rdp_gdi.c | 55 ++++++++++++++++++----------------- protocols/rdp/src/rdp_glyph.c | 12 +++++--- 2 files changed, 37 insertions(+), 30 deletions(-) diff --git a/protocols/rdp/src/rdp_gdi.c b/protocols/rdp/src/rdp_gdi.c index bedfc809..e2202e73 100644 --- a/protocols/rdp/src/rdp_gdi.c +++ b/protocols/rdp/src/rdp_gdi.c @@ -112,11 +112,14 @@ void guac_rdp_gdi_dstblt(rdpContext* context, DSTBLT_ORDER* dstblt) { case 0: /* Send black rectangle */ - guac_protocol_send_rect(client->socket, - GUAC_COMP_OVER, current_layer, + guac_protocol_send_rect(client->socket, current_layer, dstblt->nLeftRect, dstblt->nTopRect, - dstblt->nWidth, dstblt->nHeight, + dstblt->nWidth, dstblt->nHeight); + + guac_protocol_send_cfill(client->socket, + GUAC_COMP_OVER, current_layer, 0, 0, 0, 255); + break; /* Unsupported ROP3 */ @@ -162,10 +165,12 @@ void guac_rdp_gdi_memblt(rdpContext* context, MEMBLT_ORDER* memblt) { /* If blackness, send black rectangle */ case 0x00: - guac_protocol_send_rect(client->socket, - GUAC_COMP_OVER, current_layer, + guac_protocol_send_rect(client->socket, current_layer, memblt->nLeftRect, memblt->nTopRect, - memblt->nWidth, memblt->nHeight, + memblt->nWidth, memblt->nHeight); + + guac_protocol_send_cfill(client->socket, + GUAC_COMP_OVER, current_layer, 0x00, 0x00, 0x00, 0xFF); break; @@ -185,10 +190,12 @@ void guac_rdp_gdi_memblt(rdpContext* context, MEMBLT_ORDER* memblt) { /* If whiteness, send white rectangle */ case 0xFF: - guac_protocol_send_rect(client->socket, - GUAC_COMP_OVER, current_layer, + guac_protocol_send_rect(client->socket, current_layer, memblt->nLeftRect, memblt->nTopRect, - memblt->nWidth, memblt->nHeight, + memblt->nWidth, memblt->nHeight); + + guac_protocol_send_cfill(client->socket, + GUAC_COMP_OVER, current_layer, 0xFF, 0xFF, 0xFF, 0xFF); break; @@ -216,10 +223,12 @@ void guac_rdp_gdi_opaquerect(rdpContext* context, OPAQUE_RECT_ORDER* opaque_rect const guac_layer* current_layer = ((rdp_guac_client_data*) client->data)->current_surface; - guac_protocol_send_rect(client->socket, - GUAC_COMP_OVER, current_layer, + guac_protocol_send_rect(client->socket, current_layer, opaque_rect->nLeftRect, opaque_rect->nTopRect, - opaque_rect->nWidth, opaque_rect->nHeight, + opaque_rect->nWidth, opaque_rect->nHeight); + + guac_protocol_send_cfill(client->socket, + GUAC_COMP_OVER, current_layer, (color >> 16) & 0xFF, (color >> 8 ) & 0xFF, (color ) & 0xFF, @@ -240,24 +249,18 @@ void guac_rdp_gdi_set_bounds(rdpContext* context, rdpBounds* bounds) { guac_client* client = ((rdp_freerdp_context*) context)->client; const guac_layer* current_layer = ((rdp_guac_client_data*) client->data)->current_surface; + /* Reset clip */ + guac_protocol_send_reset(client->socket, current_layer); + /* Set clip if specified */ - if (bounds != NULL) - guac_protocol_send_clip( - client->socket, - current_layer, - bounds->left, - bounds->top, + if (bounds != NULL) { + guac_protocol_send_rect(client->socket, current_layer, + bounds->left, bounds->top, bounds->right - bounds->left + 1, bounds->bottom - bounds->top + 1); - /* Otherwise, reset clip */ - else - guac_protocol_send_clip( - client->socket, - current_layer, - 0, 0, - context->instance->settings->width, - context->instance->settings->height); + guac_protocol_send_clip(client->socket, current_layer); + } } diff --git a/protocols/rdp/src/rdp_glyph.c b/protocols/rdp/src/rdp_glyph.c index 462d5908..9e33ba09 100644 --- a/protocols/rdp/src/rdp_glyph.c +++ b/protocols/rdp/src/rdp_glyph.c @@ -117,9 +117,11 @@ void guac_rdp_glyph_draw(rdpContext* context, rdpGlyph* glyph, int x, int y) { const guac_layer* current_layer = ((rdp_guac_client_data*) client->data)->current_surface; /* Colorize glyph */ - guac_protocol_send_rect(client->socket, + guac_protocol_send_rect(client->socket, ((guac_rdp_glyph*) glyph)->layer, + 0, 0, glyph->cx, glyph->cy); + + guac_protocol_send_cfill(client->socket, GUAC_COMP_ATOP, ((guac_rdp_glyph*) glyph)->layer, - 0, 0, glyph->cx, glyph->cy, guac_client_data->foreground.red, guac_client_data->foreground.green, guac_client_data->foreground.blue, @@ -161,9 +163,11 @@ void guac_rdp_glyph_begindraw(rdpContext* context, guac_client_data->background.red = (bgcolor & 0xFF0000) >> 16; /* Paint background on destination */ - guac_protocol_send_rect(client->socket, + guac_protocol_send_rect(client->socket, current_layer, + x, y, width, height); + + guac_protocol_send_cfill(client->socket, GUAC_COMP_OVER, current_layer, - x, y, width, height, guac_client_data->background.red, guac_client_data->background.green, guac_client_data->background.blue, From 6eb3e6d297139b375faa4bb2a92cca163a0cfdc8 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Tue, 20 Mar 2012 14:13:17 -0700 Subject: [PATCH 098/253] Augmented keymap struct to support prerequisite keysyms. --- protocols/rdp/include/rdp_keymap.h | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/protocols/rdp/include/rdp_keymap.h b/protocols/rdp/include/rdp_keymap.h index 23c93679..754e00e7 100644 --- a/protocols/rdp/include/rdp_keymap.h +++ b/protocols/rdp/include/rdp_keymap.h @@ -38,9 +38,34 @@ #ifndef _GUAC_RDP_RDP_KEYMAP_H #define _GUAC_RDP_RDP_KEYMAP_H +/** + * Represents a keysym-to-scancode mapping for RDP, with extra information + * about the state of prerequisite keysyms. + */ typedef struct guac_rdp_keymap { + + /** + * The scancode this keysym maps to. + */ int scancode; + + /** + * Required RDP-specific flags + */ int flags; + + /** + * Null-terminated list of keysyms which must be down for this keysym + * to be properly typed. + */ + int* set_keysyms; + + /** + * Null-terminated list of keysyms which must be up for this keysym + * to be properly typed. + */ + int* clear_keysyms; + } guac_rdp_keymap; extern const guac_rdp_keymap guac_rdp_keysym_scancode[256][256]; From b98483268710595a047df16baf8bdf359d249bea Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Tue, 20 Mar 2012 14:18:48 -0700 Subject: [PATCH 099/253] Added alt-code mapping structures. --- protocols/rdp/include/rdp_keymap.h | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/protocols/rdp/include/rdp_keymap.h b/protocols/rdp/include/rdp_keymap.h index 754e00e7..60fde703 100644 --- a/protocols/rdp/include/rdp_keymap.h +++ b/protocols/rdp/include/rdp_keymap.h @@ -68,7 +68,30 @@ typedef struct guac_rdp_keymap { } guac_rdp_keymap; +/** + * Represents the Alt-code which types a given keysym. This is used as a + * fallback mapping, should a particular keymap not support a certain keysym. + * + * See: http://en.wikipedia.org/wiki/Alt_code + */ +typedef struct guac_rdp_alt_keymap { + + /** + * The 4-digit Alt-code which types this keysym. + */ + char alt_code[4]; + +} guac_rdp_alt_keymap; + +/** + * Map of X11 keysyms to RDP scancodes. + */ extern const guac_rdp_keymap guac_rdp_keysym_scancode[256][256]; +/** + * Map of X11 keysyms to Windows Alt-codes. + */ +extern const guac_rdp_alt_keymap guac_rdp_keysym_altcode[256][256]; + #endif From a366c189c52613a055437f89a48bb3673bb82bf7 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Tue, 20 Mar 2012 15:33:08 -0700 Subject: [PATCH 100/253] Simplified mapping and lookups, added required structuring for future selectable keymaps. --- protocols/rdp/Makefile.am | 3 +- protocols/rdp/include/client.h | 4 +++ protocols/rdp/include/rdp_keymap.h | 31 ++++++++++++++----- protocols/rdp/src/client.c | 1 + protocols/rdp/src/guac_handlers.c | 12 +++---- .../src/{rdp_keymap.c => rdp_keymap_en_us.c} | 2 +- 6 files changed, 37 insertions(+), 16 deletions(-) rename protocols/rdp/src/{rdp_keymap.c => rdp_keymap_en_us.c} (99%) diff --git a/protocols/rdp/Makefile.am b/protocols/rdp/Makefile.am index d4f143bb..c5cdeff6 100644 --- a/protocols/rdp/Makefile.am +++ b/protocols/rdp/Makefile.am @@ -41,7 +41,8 @@ AM_CFLAGS = -Werror -Wall -pedantic -Iinclude lib_LTLIBRARIES = libguac-client-rdp.la -libguac_client_rdp_la_SOURCES = src/client.c src/rdp_keymap.c src/rdp_bitmap.c src/rdp_glyph.c src/rdp_pointer.c src/rdp_gdi.c src/guac_handlers.c +libguac_client_rdp_la_SOURCES = src/client.c src/rdp_bitmap.c src/rdp_glyph.c src/rdp_pointer.c src/rdp_gdi.c src/guac_handlers.c \ + src/rdp_keymap_en_us.c libguac_client_rdp_la_LDFLAGS = -version-info 0:0:0 diff --git a/protocols/rdp/include/client.h b/protocols/rdp/include/client.h index 27500a63..e56dbb6a 100644 --- a/protocols/rdp/include/client.h +++ b/protocols/rdp/include/client.h @@ -43,6 +43,8 @@ #include +#include "rdp_keymap.h" + #define RDP_DEFAULT_PORT 3389 typedef struct guac_rdp_color { @@ -63,6 +65,8 @@ typedef struct rdp_guac_client_data { const guac_layer* current_surface; + const guac_rdp_keysym_scancode_map* keysym_scancodes; + } rdp_guac_client_data; typedef struct rdp_freerdp_context { diff --git a/protocols/rdp/include/rdp_keymap.h b/protocols/rdp/include/rdp_keymap.h index 60fde703..99dfb8a6 100644 --- a/protocols/rdp/include/rdp_keymap.h +++ b/protocols/rdp/include/rdp_keymap.h @@ -42,7 +42,7 @@ * Represents a keysym-to-scancode mapping for RDP, with extra information * about the state of prerequisite keysyms. */ -typedef struct guac_rdp_keymap { +typedef struct guac_rdp_scancode_map { /** * The scancode this keysym maps to. @@ -66,7 +66,7 @@ typedef struct guac_rdp_keymap { */ int* clear_keysyms; -} guac_rdp_keymap; +} guac_rdp_scancode_map; /** * Represents the Alt-code which types a given keysym. This is used as a @@ -74,24 +74,39 @@ typedef struct guac_rdp_keymap { * * See: http://en.wikipedia.org/wiki/Alt_code */ -typedef struct guac_rdp_alt_keymap { +typedef struct guac_rdp_altcode_map { /** * The 4-digit Alt-code which types this keysym. */ - char alt_code[4]; + char altcode[4]; -} guac_rdp_alt_keymap; +} guac_rdp_altcode_map; /** - * Map of X11 keysyms to RDP scancodes. + * Static mapping from keysyms to scancodes. */ -extern const guac_rdp_keymap guac_rdp_keysym_scancode[256][256]; +typedef guac_rdp_scancode_map guac_rdp_keysym_scancode_map[256][256]; + +/** + * Static mapping from keysyms to Alt-codes. + */ +typedef guac_rdp_altcode_map guac_rdp_keysym_altcode_map[256][256]; + +/** + * Map of X11 keysyms to RDP scancodes (US English). + */ +extern const guac_rdp_keysym_scancode_map guac_rdp_keysym_scancode_en_us; /** * Map of X11 keysyms to Windows Alt-codes. */ -extern const guac_rdp_alt_keymap guac_rdp_keysym_altcode[256][256]; +extern const guac_rdp_keysym_altcode_map guac_rdp_keysym_altcode; + +/** + * Simple macro for referencing the mapped value of an altcode or scancode for a given keysym. + */ +#define GUAC_RDP_KEYSYM_LOOKUP(keysym_mapping, keysym) (&((keysym_mapping)[((keysym) & 0xFF00) >> 8][(keysym) & 0xFF])) #endif diff --git a/protocols/rdp/src/client.c b/protocols/rdp/src/client.c index 6109297f..dc6a081a 100644 --- a/protocols/rdp/src/client.c +++ b/protocols/rdp/src/client.c @@ -323,6 +323,7 @@ int guac_client_init(guac_client* client, int argc, char** argv) { guac_client_data->rdp_inst = rdp_inst; guac_client_data->mouse_button_mask = 0; guac_client_data->current_surface = GUAC_DEFAULT_LAYER; + guac_client_data->keysym_scancodes = &guac_rdp_keysym_scancode_en_us; ((rdp_freerdp_context*) rdp_inst->context)->client = client; client->data = guac_client_data; diff --git a/protocols/rdp/src/guac_handlers.c b/protocols/rdp/src/guac_handlers.c index 73d19302..3236c8a2 100644 --- a/protocols/rdp/src/guac_handlers.c +++ b/protocols/rdp/src/guac_handlers.c @@ -227,21 +227,21 @@ int rdp_guac_client_key_handler(guac_client* client, int keysym, int pressed) { rdp_guac_client_data* guac_client_data = (rdp_guac_client_data*) client->data; freerdp* rdp_inst = guac_client_data->rdp_inst; + const guac_rdp_keysym_scancode_map* keysym_scancodes = guac_client_data->keysym_scancodes; /* If keysym can be in lookup table */ if (keysym <= 0xFFFF) { - /* Look up scancode */ - const guac_rdp_keymap* keymap = - &guac_rdp_keysym_scancode[(keysym & 0xFF00) >> 8][keysym & 0xFF]; + /* Look up scancode mapping */ + const guac_rdp_scancode_map* scancode_map = GUAC_RDP_KEYSYM_LOOKUP(*keysym_scancodes, keysym); /* If defined, send event */ - if (keymap->scancode != 0) + if (scancode_map->scancode != 0) rdp_inst->input->KeyboardEvent( rdp_inst->input, - keymap->flags + scancode_map->flags | (pressed ? KBD_FLAGS_DOWN : KBD_FLAGS_RELEASE), - keymap->scancode); + scancode_map->scancode); else guac_client_log_info(client, "unmapped keysym: 0x%x", keysym); diff --git a/protocols/rdp/src/rdp_keymap.c b/protocols/rdp/src/rdp_keymap_en_us.c similarity index 99% rename from protocols/rdp/src/rdp_keymap.c rename to protocols/rdp/src/rdp_keymap_en_us.c index 0a568f69..d91faf74 100644 --- a/protocols/rdp/src/rdp_keymap.c +++ b/protocols/rdp/src/rdp_keymap_en_us.c @@ -40,7 +40,7 @@ #include "rdp_keymap.h" -const guac_rdp_keymap guac_rdp_keysym_scancode[256][256] = { +const guac_rdp_scancode_map guac_rdp_keysym_scancode_en_us[256][256] = { { /* 0x00?? */ { .scancode = 0x00, .flags = 0x00 }, /* 0x0000 */ { .scancode = 0x00, .flags = 0x00 }, /* 0x0001 */ From 705c8c037baa6e90fa4b657ee4041f98bf20e912 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Tue, 20 Mar 2012 15:36:19 -0700 Subject: [PATCH 101/253] Use new typedef. --- protocols/rdp/src/rdp_keymap_en_us.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/protocols/rdp/src/rdp_keymap_en_us.c b/protocols/rdp/src/rdp_keymap_en_us.c index d91faf74..9dbae407 100644 --- a/protocols/rdp/src/rdp_keymap_en_us.c +++ b/protocols/rdp/src/rdp_keymap_en_us.c @@ -40,7 +40,7 @@ #include "rdp_keymap.h" -const guac_rdp_scancode_map guac_rdp_keysym_scancode_en_us[256][256] = { +const guac_rdp_keysym_scancode_map guac_rdp_keysym_scancode_en_us = { { /* 0x00?? */ { .scancode = 0x00, .flags = 0x00 }, /* 0x0000 */ { .scancode = 0x00, .flags = 0x00 }, /* 0x0001 */ From 1990269f99f983b7395cf012d0a7e23b58f5bb9e Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Tue, 20 Mar 2012 15:50:40 -0700 Subject: [PATCH 102/253] Add Alt-code map. --- protocols/rdp/Makefile.am | 3 +- protocols/rdp/src/rdp_keymap_alt.c | 5441 ++++++++++++++++++++++++++++ 2 files changed, 5443 insertions(+), 1 deletion(-) create mode 100644 protocols/rdp/src/rdp_keymap_alt.c diff --git a/protocols/rdp/Makefile.am b/protocols/rdp/Makefile.am index c5cdeff6..3debd4f3 100644 --- a/protocols/rdp/Makefile.am +++ b/protocols/rdp/Makefile.am @@ -42,7 +42,8 @@ AM_CFLAGS = -Werror -Wall -pedantic -Iinclude lib_LTLIBRARIES = libguac-client-rdp.la libguac_client_rdp_la_SOURCES = src/client.c src/rdp_bitmap.c src/rdp_glyph.c src/rdp_pointer.c src/rdp_gdi.c src/guac_handlers.c \ - src/rdp_keymap_en_us.c + src/rdp_keymap_en_us.c \ + src/rdp_keymap_alt.c libguac_client_rdp_la_LDFLAGS = -version-info 0:0:0 diff --git a/protocols/rdp/src/rdp_keymap_alt.c b/protocols/rdp/src/rdp_keymap_alt.c new file mode 100644 index 00000000..9b971f39 --- /dev/null +++ b/protocols/rdp/src/rdp_keymap_alt.c @@ -0,0 +1,5441 @@ + +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is libguac-client-rdp. + * + * The Initial Developer of the Original Code is + * Michael Jumper. + * Portions created by the Initial Developer are Copyright (C) 2011 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Matt Hortman + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#include + +#include "rdp_keymap.h" + +const guac_rdp_keysym_altcode_map guac_rdp_keysym_altcode = { + { /* 0x00?? */ + { .altcode = "" }, /* 0x0000 */ + { .altcode = "" }, /* 0x0001 */ + { .altcode = "" }, /* 0x0002 */ + { .altcode = "" }, /* 0x0003 */ + { .altcode = "" }, /* 0x0004 */ + { .altcode = "" }, /* 0x0005 */ + { .altcode = "" }, /* 0x0006 */ + { .altcode = "" }, /* 0x0007 */ + { .altcode = "" }, /* 0x0008 */ + { .altcode = "" }, /* 0x0009 */ + { .altcode = "" }, /* 0x000a */ + { .altcode = "" }, /* 0x000b */ + { .altcode = "" }, /* 0x000c */ + { .altcode = "" }, /* 0x000d */ + { .altcode = "" }, /* 0x000e */ + { .altcode = "" }, /* 0x000f */ + { .altcode = "" }, /* 0x0010 */ + { .altcode = "" }, /* 0x0011 */ + { .altcode = "" }, /* 0x0012 */ + { .altcode = "" }, /* 0x0013 */ + { .altcode = "" }, /* 0x0014 */ + { .altcode = "" }, /* 0x0015 */ + { .altcode = "" }, /* 0x0016 */ + { .altcode = "" }, /* 0x0017 */ + { .altcode = "" }, /* 0x0018 */ + { .altcode = "" }, /* 0x0019 */ + { .altcode = "" }, /* 0x001a */ + { .altcode = "" }, /* 0x001b */ + { .altcode = "" }, /* 0x001c */ + { .altcode = "" }, /* 0x001d */ + { .altcode = "" }, /* 0x001e */ + { .altcode = "" }, /* 0x001f */ + { .altcode = "" }, /* 0x0020 (space) */ + { .altcode = "" }, /* 0x0021 (exclam) */ + { .altcode = "" }, /* 0x0022 (quotedbl) */ + { .altcode = "" }, /* 0x0023 (numbersign) */ + { .altcode = "" }, /* 0x0024 (dollar) */ + { .altcode = "" }, /* 0x0025 (percent) */ + { .altcode = "" }, /* 0x0026 (ampersand) */ + { .altcode = "" }, /* 0x0027 (quoteright) */ + { .altcode = "" }, /* 0x0028 (parenleft) */ + { .altcode = "" }, /* 0x0029 (parenright) */ + { .altcode = "" }, /* 0x002a (asterisk) */ + { .altcode = "" }, /* 0x002b (plus) */ + { .altcode = "" }, /* 0x002c (comma) */ + { .altcode = "" }, /* 0x002d (minus) */ + { .altcode = "" }, /* 0x002e (period) */ + { .altcode = "" }, /* 0x002f (slash) */ + { .altcode = "" }, /* 0x0030 (0) */ + { .altcode = "" }, /* 0x0031 (1) */ + { .altcode = "" }, /* 0x0032 (2) */ + { .altcode = "" }, /* 0x0033 (3) */ + { .altcode = "" }, /* 0x0034 (4) */ + { .altcode = "" }, /* 0x0035 (5) */ + { .altcode = "" }, /* 0x0036 (6) */ + { .altcode = "" }, /* 0x0037 (7) */ + { .altcode = "" }, /* 0x0038 (8) */ + { .altcode = "" }, /* 0x0039 (9) */ + { .altcode = "" }, /* 0x003a (colon) */ + { .altcode = "" }, /* 0x003b (semicolon) */ + { .altcode = "" }, /* 0x003c (less) */ + { .altcode = "" }, /* 0x003d (equal) */ + { .altcode = "" }, /* 0x003e (greater) */ + { .altcode = "" }, /* 0x003f (question) */ + { .altcode = "" }, /* 0x0040 (at) */ + { .altcode = "" }, /* 0x0041 (A) */ + { .altcode = "" }, /* 0x0042 (B) */ + { .altcode = "" }, /* 0x0043 (C) */ + { .altcode = "" }, /* 0x0044 (D) */ + { .altcode = "" }, /* 0x0045 (E) */ + { .altcode = "" }, /* 0x0046 (F) */ + { .altcode = "" }, /* 0x0047 (G) */ + { .altcode = "" }, /* 0x0048 (H) */ + { .altcode = "" }, /* 0x0049 (I) */ + { .altcode = "" }, /* 0x004a (J) */ + { .altcode = "" }, /* 0x004b (K) */ + { .altcode = "" }, /* 0x004c (L) */ + { .altcode = "" }, /* 0x004d (M) */ + { .altcode = "" }, /* 0x004e (N) */ + { .altcode = "" }, /* 0x004f (O) */ + { .altcode = "" }, /* 0x0050 (P) */ + { .altcode = "" }, /* 0x0051 (Q) */ + { .altcode = "" }, /* 0x0052 (R) */ + { .altcode = "" }, /* 0x0053 (S) */ + { .altcode = "" }, /* 0x0054 (T) */ + { .altcode = "" }, /* 0x0055 (U) */ + { .altcode = "" }, /* 0x0056 (V) */ + { .altcode = "" }, /* 0x0057 (W) */ + { .altcode = "" }, /* 0x0058 (X) */ + { .altcode = "" }, /* 0x0059 (Y) */ + { .altcode = "" }, /* 0x005a (Z) */ + { .altcode = "" }, /* 0x005b (bracketleft) */ + { .altcode = "" }, /* 0x005c (backslash) */ + { .altcode = "" }, /* 0x005d (bracketright) */ + { .altcode = "" }, /* 0x005e (asciicircum) */ + { .altcode = "" }, /* 0x005f (underscore) */ + { .altcode = "" }, /* 0x0060 (quoteleft) */ + { .altcode = "" }, /* 0x0061 (a) */ + { .altcode = "" }, /* 0x0062 (b) */ + { .altcode = "" }, /* 0x0063 (c) */ + { .altcode = "" }, /* 0x0064 (d) */ + { .altcode = "" }, /* 0x0065 (e) */ + { .altcode = "" }, /* 0x0066 (f) */ + { .altcode = "" }, /* 0x0067 (g) */ + { .altcode = "" }, /* 0x0068 (h) */ + { .altcode = "" }, /* 0x0069 (i) */ + { .altcode = "" }, /* 0x006a (j) */ + { .altcode = "" }, /* 0x006b (k) */ + { .altcode = "" }, /* 0x006c (l) */ + { .altcode = "" }, /* 0x006d (m) */ + { .altcode = "" }, /* 0x006e (n) */ + { .altcode = "" }, /* 0x006f (o) */ + { .altcode = "" }, /* 0x0070 (p) */ + { .altcode = "" }, /* 0x0071 (q) */ + { .altcode = "" }, /* 0x0072 (r) */ + { .altcode = "" }, /* 0x0073 (s) */ + { .altcode = "" }, /* 0x0074 (t) */ + { .altcode = "" }, /* 0x0075 (u) */ + { .altcode = "" }, /* 0x0076 (v) */ + { .altcode = "" }, /* 0x0077 (w) */ + { .altcode = "" }, /* 0x0078 (x) */ + { .altcode = "" }, /* 0x0079 (y) */ + { .altcode = "" }, /* 0x007a (z) */ + { .altcode = "" }, /* 0x007b (braceleft) */ + { .altcode = "" }, /* 0x007c (bar) */ + { .altcode = "" }, /* 0x007d (braceright) */ + { .altcode = "" }, /* 0x007e (asciitilde) */ + { .altcode = "" }, /* 0x007f */ + { .altcode = "" }, /* 0x0080 */ + { .altcode = "" }, /* 0x0081 */ + { .altcode = "" }, /* 0x0082 */ + { .altcode = "" }, /* 0x0083 */ + { .altcode = "" }, /* 0x0084 */ + { .altcode = "" }, /* 0x0085 */ + { .altcode = "" }, /* 0x0086 */ + { .altcode = "" }, /* 0x0087 */ + { .altcode = "" }, /* 0x0088 */ + { .altcode = "" }, /* 0x0089 */ + { .altcode = "" }, /* 0x008a */ + { .altcode = "" }, /* 0x008b */ + { .altcode = "" }, /* 0x008c */ + { .altcode = "" }, /* 0x008d */ + { .altcode = "" }, /* 0x008e */ + { .altcode = "" }, /* 0x008f */ + { .altcode = "" }, /* 0x0090 */ + { .altcode = "" }, /* 0x0091 */ + { .altcode = "" }, /* 0x0092 */ + { .altcode = "" }, /* 0x0093 */ + { .altcode = "" }, /* 0x0094 */ + { .altcode = "" }, /* 0x0095 */ + { .altcode = "" }, /* 0x0096 */ + { .altcode = "" }, /* 0x0097 */ + { .altcode = "" }, /* 0x0098 */ + { .altcode = "" }, /* 0x0099 */ + { .altcode = "" }, /* 0x009a */ + { .altcode = "" }, /* 0x009b */ + { .altcode = "" }, /* 0x009c */ + { .altcode = "" }, /* 0x009d */ + { .altcode = "" }, /* 0x009e */ + { .altcode = "" }, /* 0x009f */ + { .altcode = "" }, /* 0x00a0 (nobreakspace) */ + { .altcode = "" }, /* 0x00a1 (exclamdown) */ + { .altcode = "" }, /* 0x00a2 (cent) */ + { .altcode = "" }, /* 0x00a3 (sterling) */ + { .altcode = "" }, /* 0x00a4 (currency) */ + { .altcode = "" }, /* 0x00a5 (yen) */ + { .altcode = "" }, /* 0x00a6 (brokenbar) */ + { .altcode = "" }, /* 0x00a7 (section) */ + { .altcode = "" }, /* 0x00a8 (diaeresis) */ + { .altcode = "" }, /* 0x00a9 (copyright) */ + { .altcode = "" }, /* 0x00aa (ordfeminine) */ + { .altcode = "" }, /* 0x00ab (guillemotleft) */ + { .altcode = "" }, /* 0x00ac (notsign) */ + { .altcode = "" }, /* 0x00ad (hyphen) */ + { .altcode = "" }, /* 0x00ae (registered) */ + { .altcode = "" }, /* 0x00af (macron) */ + { .altcode = "" }, /* 0x00b0 (degree) */ + { .altcode = "" }, /* 0x00b1 (plusminus) */ + { .altcode = "" }, /* 0x00b2 (twosuperior) */ + { .altcode = "" }, /* 0x00b3 (threesuperior) */ + { .altcode = "" }, /* 0x00b4 (acute) */ + { .altcode = "" }, /* 0x00b5 (mu) */ + { .altcode = "" }, /* 0x00b6 (paragraph) */ + { .altcode = "" }, /* 0x00b7 (periodcentered) */ + { .altcode = "" }, /* 0x00b8 (cedilla) */ + { .altcode = "" }, /* 0x00b9 (onesuperior) */ + { .altcode = "" }, /* 0x00ba (masculine) */ + { .altcode = "" }, /* 0x00bb (guillemotright) */ + { .altcode = "" }, /* 0x00bc (onequarter) */ + { .altcode = "" }, /* 0x00bd (onehalf) */ + { .altcode = "" }, /* 0x00be (threequarters) */ + { .altcode = "" }, /* 0x00bf (questiondown) */ + { .altcode = "" }, /* 0x00c0 (Agrave) */ + { .altcode = "" }, /* 0x00c1 (Aacute) */ + { .altcode = "" }, /* 0x00c2 (Acircumflex) */ + { .altcode = "" }, /* 0x00c3 (Atilde) */ + { .altcode = "" }, /* 0x00c4 (Adiaeresis) */ + { .altcode = "" }, /* 0x00c5 (Aring) */ + { .altcode = "" }, /* 0x00c6 (AE) */ + { .altcode = "" }, /* 0x00c7 (Ccedilla) */ + { .altcode = "" }, /* 0x00c8 (Egrave) */ + { .altcode = "" }, /* 0x00c9 (Eacute) */ + { .altcode = "" }, /* 0x00ca (Ecircumflex) */ + { .altcode = "" }, /* 0x00cb (Ediaeresis) */ + { .altcode = "" }, /* 0x00cc (Igrave) */ + { .altcode = "" }, /* 0x00cd (Iacute) */ + { .altcode = "" }, /* 0x00ce (Icircumflex) */ + { .altcode = "" }, /* 0x00cf (Idiaeresis) */ + { .altcode = "" }, /* 0x00d0 (Eth) */ + { .altcode = "" }, /* 0x00d1 (Ntilde) */ + { .altcode = "" }, /* 0x00d2 (Ograve) */ + { .altcode = "" }, /* 0x00d3 (Oacute) */ + { .altcode = "" }, /* 0x00d4 (Ocircumflex) */ + { .altcode = "" }, /* 0x00d5 (Otilde) */ + { .altcode = "" }, /* 0x00d6 (Odiaeresis) */ + { .altcode = "" }, /* 0x00d7 (multiply) */ + { .altcode = "" }, /* 0x00d8 (Ooblique) */ + { .altcode = "" }, /* 0x00d9 (Ugrave) */ + { .altcode = "" }, /* 0x00da (Uacute) */ + { .altcode = "" }, /* 0x00db (Ucircumflex) */ + { .altcode = "" }, /* 0x00dc (Udiaeresis) */ + { .altcode = "" }, /* 0x00dd (Yacute) */ + { .altcode = "" }, /* 0x00de (Thorn) */ + { .altcode = "" }, /* 0x00df (ssharp) */ + { .altcode = "" }, /* 0x00e0 (agrave) */ + { .altcode = "" }, /* 0x00e1 (aacute) */ + { .altcode = "" }, /* 0x00e2 (acircumflex) */ + { .altcode = "" }, /* 0x00e3 (atilde) */ + { .altcode = "" }, /* 0x00e4 (adiaeresis) */ + { .altcode = "" }, /* 0x00e5 (aring) */ + { .altcode = "" }, /* 0x00e6 (ae) */ + { .altcode = "" }, /* 0x00e7 (ccedilla) */ + { .altcode = "" }, /* 0x00e8 (egrave) */ + { .altcode = "" }, /* 0x00e9 (eacute) */ + { .altcode = "" }, /* 0x00ea (ecircumflex) */ + { .altcode = "" }, /* 0x00eb (ediaeresis) */ + { .altcode = "" }, /* 0x00ec (igrave) */ + { .altcode = "" }, /* 0x00ed (iacute) */ + { .altcode = "" }, /* 0x00ee (icircumflex) */ + { .altcode = "" }, /* 0x00ef (idiaeresis) */ + { .altcode = "" }, /* 0x00f0 (eth) */ + { .altcode = "" }, /* 0x00f1 (ntilde) */ + { .altcode = "" }, /* 0x00f2 (ograve) */ + { .altcode = "" }, /* 0x00f3 (oacute) */ + { .altcode = "" }, /* 0x00f4 (ocircumflex) */ + { .altcode = "" }, /* 0x00f5 (otilde) */ + { .altcode = "" }, /* 0x00f6 (odiaeresis) */ + { .altcode = "" }, /* 0x00f7 (division) */ + { .altcode = "" }, /* 0x00f8 (ooblique) */ + { .altcode = "" }, /* 0x00f9 (ugrave) */ + { .altcode = "" }, /* 0x00fa (uacute) */ + { .altcode = "" }, /* 0x00fb (ucircumflex) */ + { .altcode = "" }, /* 0x00fc (udiaeresis) */ + { .altcode = "" }, /* 0x00fd (yacute) */ + { .altcode = "" }, /* 0x00fe (thorn) */ + { .altcode = "" }, /* 0x00ff (ydiaeresis) */ + }, + { /* 0x01?? */ + { .altcode = "" }, /* 0x0100 */ + { .altcode = "" }, /* 0x0101 */ + { .altcode = "" }, /* 0x0102 */ + { .altcode = "" }, /* 0x0103 */ + { .altcode = "" }, /* 0x0104 */ + { .altcode = "" }, /* 0x0105 */ + { .altcode = "" }, /* 0x0106 */ + { .altcode = "" }, /* 0x0107 */ + { .altcode = "" }, /* 0x0108 */ + { .altcode = "" }, /* 0x0109 */ + { .altcode = "" }, /* 0x010a */ + { .altcode = "" }, /* 0x010b */ + { .altcode = "" }, /* 0x010c */ + { .altcode = "" }, /* 0x010d */ + { .altcode = "" }, /* 0x010e */ + { .altcode = "" }, /* 0x010f */ + { .altcode = "" }, /* 0x0110 */ + { .altcode = "" }, /* 0x0111 */ + { .altcode = "" }, /* 0x0112 */ + { .altcode = "" }, /* 0x0113 */ + { .altcode = "" }, /* 0x0114 */ + { .altcode = "" }, /* 0x0115 */ + { .altcode = "" }, /* 0x0116 */ + { .altcode = "" }, /* 0x0117 */ + { .altcode = "" }, /* 0x0118 */ + { .altcode = "" }, /* 0x0119 */ + { .altcode = "" }, /* 0x011a */ + { .altcode = "" }, /* 0x011b */ + { .altcode = "" }, /* 0x011c */ + { .altcode = "" }, /* 0x011d */ + { .altcode = "" }, /* 0x011e */ + { .altcode = "" }, /* 0x011f */ + { .altcode = "" }, /* 0x0120 */ + { .altcode = "" }, /* 0x0121 */ + { .altcode = "" }, /* 0x0122 */ + { .altcode = "" }, /* 0x0123 */ + { .altcode = "" }, /* 0x0124 */ + { .altcode = "" }, /* 0x0125 */ + { .altcode = "" }, /* 0x0126 */ + { .altcode = "" }, /* 0x0127 */ + { .altcode = "" }, /* 0x0128 */ + { .altcode = "" }, /* 0x0129 */ + { .altcode = "" }, /* 0x012a */ + { .altcode = "" }, /* 0x012b */ + { .altcode = "" }, /* 0x012c */ + { .altcode = "" }, /* 0x012d */ + { .altcode = "" }, /* 0x012e */ + { .altcode = "" }, /* 0x012f */ + { .altcode = "" }, /* 0x0130 */ + { .altcode = "" }, /* 0x0131 */ + { .altcode = "" }, /* 0x0132 */ + { .altcode = "" }, /* 0x0133 */ + { .altcode = "" }, /* 0x0134 */ + { .altcode = "" }, /* 0x0135 */ + { .altcode = "" }, /* 0x0136 */ + { .altcode = "" }, /* 0x0137 */ + { .altcode = "" }, /* 0x0138 */ + { .altcode = "" }, /* 0x0139 */ + { .altcode = "" }, /* 0x013a */ + { .altcode = "" }, /* 0x013b */ + { .altcode = "" }, /* 0x013c */ + { .altcode = "" }, /* 0x013d */ + { .altcode = "" }, /* 0x013e */ + { .altcode = "" }, /* 0x013f */ + { .altcode = "" }, /* 0x0140 */ + { .altcode = "" }, /* 0x0141 */ + { .altcode = "" }, /* 0x0142 */ + { .altcode = "" }, /* 0x0143 */ + { .altcode = "" }, /* 0x0144 */ + { .altcode = "" }, /* 0x0145 */ + { .altcode = "" }, /* 0x0146 */ + { .altcode = "" }, /* 0x0147 */ + { .altcode = "" }, /* 0x0148 */ + { .altcode = "" }, /* 0x0149 */ + { .altcode = "" }, /* 0x014a */ + { .altcode = "" }, /* 0x014b */ + { .altcode = "" }, /* 0x014c */ + { .altcode = "" }, /* 0x014d */ + { .altcode = "" }, /* 0x014e */ + { .altcode = "" }, /* 0x014f */ + { .altcode = "" }, /* 0x0150 */ + { .altcode = "" }, /* 0x0151 */ + { .altcode = "" }, /* 0x0152 */ + { .altcode = "" }, /* 0x0153 */ + { .altcode = "" }, /* 0x0154 */ + { .altcode = "" }, /* 0x0155 */ + { .altcode = "" }, /* 0x0156 */ + { .altcode = "" }, /* 0x0157 */ + { .altcode = "" }, /* 0x0158 */ + { .altcode = "" }, /* 0x0159 */ + { .altcode = "" }, /* 0x015a */ + { .altcode = "" }, /* 0x015b */ + { .altcode = "" }, /* 0x015c */ + { .altcode = "" }, /* 0x015d */ + { .altcode = "" }, /* 0x015e */ + { .altcode = "" }, /* 0x015f */ + { .altcode = "" }, /* 0x0160 */ + { .altcode = "" }, /* 0x0161 */ + { .altcode = "" }, /* 0x0162 */ + { .altcode = "" }, /* 0x0163 */ + { .altcode = "" }, /* 0x0164 */ + { .altcode = "" }, /* 0x0165 */ + { .altcode = "" }, /* 0x0166 */ + { .altcode = "" }, /* 0x0167 */ + { .altcode = "" }, /* 0x0168 */ + { .altcode = "" }, /* 0x0169 */ + { .altcode = "" }, /* 0x016a */ + { .altcode = "" }, /* 0x016b */ + { .altcode = "" }, /* 0x016c */ + { .altcode = "" }, /* 0x016d */ + { .altcode = "" }, /* 0x016e */ + { .altcode = "" }, /* 0x016f */ + { .altcode = "" }, /* 0x0170 */ + { .altcode = "" }, /* 0x0171 */ + { .altcode = "" }, /* 0x0172 */ + { .altcode = "" }, /* 0x0173 */ + { .altcode = "" }, /* 0x0174 */ + { .altcode = "" }, /* 0x0175 */ + { .altcode = "" }, /* 0x0176 */ + { .altcode = "" }, /* 0x0177 */ + { .altcode = "" }, /* 0x0178 */ + { .altcode = "" }, /* 0x0179 */ + { .altcode = "" }, /* 0x017a */ + { .altcode = "" }, /* 0x017b */ + { .altcode = "" }, /* 0x017c */ + { .altcode = "" }, /* 0x017d */ + { .altcode = "" }, /* 0x017e */ + { .altcode = "" }, /* 0x017f */ + { .altcode = "" }, /* 0x0180 */ + { .altcode = "" }, /* 0x0181 */ + { .altcode = "" }, /* 0x0182 */ + { .altcode = "" }, /* 0x0183 */ + { .altcode = "" }, /* 0x0184 */ + { .altcode = "" }, /* 0x0185 */ + { .altcode = "" }, /* 0x0186 */ + { .altcode = "" }, /* 0x0187 */ + { .altcode = "" }, /* 0x0188 */ + { .altcode = "" }, /* 0x0189 */ + { .altcode = "" }, /* 0x018a */ + { .altcode = "" }, /* 0x018b */ + { .altcode = "" }, /* 0x018c */ + { .altcode = "" }, /* 0x018d */ + { .altcode = "" }, /* 0x018e */ + { .altcode = "" }, /* 0x018f */ + { .altcode = "" }, /* 0x0190 */ + { .altcode = "" }, /* 0x0191 */ + { .altcode = "" }, /* 0x0192 */ + { .altcode = "" }, /* 0x0193 */ + { .altcode = "" }, /* 0x0194 */ + { .altcode = "" }, /* 0x0195 */ + { .altcode = "" }, /* 0x0196 */ + { .altcode = "" }, /* 0x0197 */ + { .altcode = "" }, /* 0x0198 */ + { .altcode = "" }, /* 0x0199 */ + { .altcode = "" }, /* 0x019a */ + { .altcode = "" }, /* 0x019b */ + { .altcode = "" }, /* 0x019c */ + { .altcode = "" }, /* 0x019d */ + { .altcode = "" }, /* 0x019e */ + { .altcode = "" }, /* 0x019f */ + { .altcode = "" }, /* 0x01a0 */ + { .altcode = "" }, /* 0x01a1 (Aogonek) */ + { .altcode = "" }, /* 0x01a2 (breve) */ + { .altcode = "" }, /* 0x01a3 (Lstroke) */ + { .altcode = "" }, /* 0x01a4 */ + { .altcode = "" }, /* 0x01a5 (Lcaron) */ + { .altcode = "" }, /* 0x01a6 (Sacute) */ + { .altcode = "" }, /* 0x01a7 */ + { .altcode = "" }, /* 0x01a8 */ + { .altcode = "" }, /* 0x01a9 (Scaron) */ + { .altcode = "" }, /* 0x01aa (Scedilla) */ + { .altcode = "" }, /* 0x01ab (Tcaron) */ + { .altcode = "" }, /* 0x01ac (Zacute) */ + { .altcode = "" }, /* 0x01ad */ + { .altcode = "" }, /* 0x01ae (Zcaron) */ + { .altcode = "" }, /* 0x01af (Zabovedot) */ + { .altcode = "" }, /* 0x01b0 */ + { .altcode = "" }, /* 0x01b1 (aogonek) */ + { .altcode = "" }, /* 0x01b2 (ogonek) */ + { .altcode = "" }, /* 0x01b3 (lstroke) */ + { .altcode = "" }, /* 0x01b4 */ + { .altcode = "" }, /* 0x01b5 (lcaron) */ + { .altcode = "" }, /* 0x01b6 (sacute) */ + { .altcode = "" }, /* 0x01b7 (caron) */ + { .altcode = "" }, /* 0x01b8 */ + { .altcode = "" }, /* 0x01b9 (scaron) */ + { .altcode = "" }, /* 0x01ba (scedilla) */ + { .altcode = "" }, /* 0x01bb (tcaron) */ + { .altcode = "" }, /* 0x01bc (zacute) */ + { .altcode = "" }, /* 0x01bd (doubleacute) */ + { .altcode = "" }, /* 0x01be (zcaron) */ + { .altcode = "" }, /* 0x01bf (zabovedot) */ + { .altcode = "" }, /* 0x01c0 (Racute) */ + { .altcode = "" }, /* 0x01c1 */ + { .altcode = "" }, /* 0x01c2 */ + { .altcode = "" }, /* 0x01c3 (Abreve) */ + { .altcode = "" }, /* 0x01c4 */ + { .altcode = "" }, /* 0x01c5 (Lacute) */ + { .altcode = "" }, /* 0x01c6 (Cacute) */ + { .altcode = "" }, /* 0x01c7 */ + { .altcode = "" }, /* 0x01c8 (Ccaron) */ + { .altcode = "" }, /* 0x01c9 */ + { .altcode = "" }, /* 0x01ca (Eogonek) */ + { .altcode = "" }, /* 0x01cb */ + { .altcode = "" }, /* 0x01cc (Ecaron) */ + { .altcode = "" }, /* 0x01cd */ + { .altcode = "" }, /* 0x01ce */ + { .altcode = "" }, /* 0x01cf (Dcaron) */ + { .altcode = "" }, /* 0x01d0 (Dstroke) */ + { .altcode = "" }, /* 0x01d1 (Nacute) */ + { .altcode = "" }, /* 0x01d2 (Ncaron) */ + { .altcode = "" }, /* 0x01d3 */ + { .altcode = "" }, /* 0x01d4 */ + { .altcode = "" }, /* 0x01d5 (Odoubleacute) */ + { .altcode = "" }, /* 0x01d6 */ + { .altcode = "" }, /* 0x01d7 */ + { .altcode = "" }, /* 0x01d8 (Rcaron) */ + { .altcode = "" }, /* 0x01d9 (Uring) */ + { .altcode = "" }, /* 0x01da */ + { .altcode = "" }, /* 0x01db (Udoubleacute) */ + { .altcode = "" }, /* 0x01dc */ + { .altcode = "" }, /* 0x01dd */ + { .altcode = "" }, /* 0x01de (Tcedilla) */ + { .altcode = "" }, /* 0x01df */ + { .altcode = "" }, /* 0x01e0 (racute) */ + { .altcode = "" }, /* 0x01e1 */ + { .altcode = "" }, /* 0x01e2 */ + { .altcode = "" }, /* 0x01e3 (abreve) */ + { .altcode = "" }, /* 0x01e4 */ + { .altcode = "" }, /* 0x01e5 (lacute) */ + { .altcode = "" }, /* 0x01e6 (cacute) */ + { .altcode = "" }, /* 0x01e7 */ + { .altcode = "" }, /* 0x01e8 (ccaron) */ + { .altcode = "" }, /* 0x01e9 */ + { .altcode = "" }, /* 0x01ea (eogonek) */ + { .altcode = "" }, /* 0x01eb */ + { .altcode = "" }, /* 0x01ec (ecaron) */ + { .altcode = "" }, /* 0x01ed */ + { .altcode = "" }, /* 0x01ee */ + { .altcode = "" }, /* 0x01ef (dcaron) */ + { .altcode = "" }, /* 0x01f0 (dstroke) */ + { .altcode = "" }, /* 0x01f1 (nacute) */ + { .altcode = "" }, /* 0x01f2 (ncaron) */ + { .altcode = "" }, /* 0x01f3 */ + { .altcode = "" }, /* 0x01f4 */ + { .altcode = "" }, /* 0x01f5 (odoubleacute) */ + { .altcode = "" }, /* 0x01f6 */ + { .altcode = "" }, /* 0x01f7 */ + { .altcode = "" }, /* 0x01f8 (rcaron) */ + { .altcode = "" }, /* 0x01f9 (uring) */ + { .altcode = "" }, /* 0x01fa */ + { .altcode = "" }, /* 0x01fb (udoubleacute) */ + { .altcode = "" }, /* 0x01fc */ + { .altcode = "" }, /* 0x01fd */ + { .altcode = "" }, /* 0x01fe (tcedilla) */ + { .altcode = "" }, /* 0x01ff (abovedot) */ + }, + { /* 0x02?? */ + { .altcode = "" }, /* 0x0200 */ + { .altcode = "" }, /* 0x0201 */ + { .altcode = "" }, /* 0x0202 */ + { .altcode = "" }, /* 0x0203 */ + { .altcode = "" }, /* 0x0204 */ + { .altcode = "" }, /* 0x0205 */ + { .altcode = "" }, /* 0x0206 */ + { .altcode = "" }, /* 0x0207 */ + { .altcode = "" }, /* 0x0208 */ + { .altcode = "" }, /* 0x0209 */ + { .altcode = "" }, /* 0x020a */ + { .altcode = "" }, /* 0x020b */ + { .altcode = "" }, /* 0x020c */ + { .altcode = "" }, /* 0x020d */ + { .altcode = "" }, /* 0x020e */ + { .altcode = "" }, /* 0x020f */ + { .altcode = "" }, /* 0x0210 */ + { .altcode = "" }, /* 0x0211 */ + { .altcode = "" }, /* 0x0212 */ + { .altcode = "" }, /* 0x0213 */ + { .altcode = "" }, /* 0x0214 */ + { .altcode = "" }, /* 0x0215 */ + { .altcode = "" }, /* 0x0216 */ + { .altcode = "" }, /* 0x0217 */ + { .altcode = "" }, /* 0x0218 */ + { .altcode = "" }, /* 0x0219 */ + { .altcode = "" }, /* 0x021a */ + { .altcode = "" }, /* 0x021b */ + { .altcode = "" }, /* 0x021c */ + { .altcode = "" }, /* 0x021d */ + { .altcode = "" }, /* 0x021e */ + { .altcode = "" }, /* 0x021f */ + { .altcode = "" }, /* 0x0220 */ + { .altcode = "" }, /* 0x0221 */ + { .altcode = "" }, /* 0x0222 */ + { .altcode = "" }, /* 0x0223 */ + { .altcode = "" }, /* 0x0224 */ + { .altcode = "" }, /* 0x0225 */ + { .altcode = "" }, /* 0x0226 */ + { .altcode = "" }, /* 0x0227 */ + { .altcode = "" }, /* 0x0228 */ + { .altcode = "" }, /* 0x0229 */ + { .altcode = "" }, /* 0x022a */ + { .altcode = "" }, /* 0x022b */ + { .altcode = "" }, /* 0x022c */ + { .altcode = "" }, /* 0x022d */ + { .altcode = "" }, /* 0x022e */ + { .altcode = "" }, /* 0x022f */ + { .altcode = "" }, /* 0x0230 */ + { .altcode = "" }, /* 0x0231 */ + { .altcode = "" }, /* 0x0232 */ + { .altcode = "" }, /* 0x0233 */ + { .altcode = "" }, /* 0x0234 */ + { .altcode = "" }, /* 0x0235 */ + { .altcode = "" }, /* 0x0236 */ + { .altcode = "" }, /* 0x0237 */ + { .altcode = "" }, /* 0x0238 */ + { .altcode = "" }, /* 0x0239 */ + { .altcode = "" }, /* 0x023a */ + { .altcode = "" }, /* 0x023b */ + { .altcode = "" }, /* 0x023c */ + { .altcode = "" }, /* 0x023d */ + { .altcode = "" }, /* 0x023e */ + { .altcode = "" }, /* 0x023f */ + { .altcode = "" }, /* 0x0240 */ + { .altcode = "" }, /* 0x0241 */ + { .altcode = "" }, /* 0x0242 */ + { .altcode = "" }, /* 0x0243 */ + { .altcode = "" }, /* 0x0244 */ + { .altcode = "" }, /* 0x0245 */ + { .altcode = "" }, /* 0x0246 */ + { .altcode = "" }, /* 0x0247 */ + { .altcode = "" }, /* 0x0248 */ + { .altcode = "" }, /* 0x0249 */ + { .altcode = "" }, /* 0x024a */ + { .altcode = "" }, /* 0x024b */ + { .altcode = "" }, /* 0x024c */ + { .altcode = "" }, /* 0x024d */ + { .altcode = "" }, /* 0x024e */ + { .altcode = "" }, /* 0x024f */ + { .altcode = "" }, /* 0x0250 */ + { .altcode = "" }, /* 0x0251 */ + { .altcode = "" }, /* 0x0252 */ + { .altcode = "" }, /* 0x0253 */ + { .altcode = "" }, /* 0x0254 */ + { .altcode = "" }, /* 0x0255 */ + { .altcode = "" }, /* 0x0256 */ + { .altcode = "" }, /* 0x0257 */ + { .altcode = "" }, /* 0x0258 */ + { .altcode = "" }, /* 0x0259 */ + { .altcode = "" }, /* 0x025a */ + { .altcode = "" }, /* 0x025b */ + { .altcode = "" }, /* 0x025c */ + { .altcode = "" }, /* 0x025d */ + { .altcode = "" }, /* 0x025e */ + { .altcode = "" }, /* 0x025f */ + { .altcode = "" }, /* 0x0260 */ + { .altcode = "" }, /* 0x0261 */ + { .altcode = "" }, /* 0x0262 */ + { .altcode = "" }, /* 0x0263 */ + { .altcode = "" }, /* 0x0264 */ + { .altcode = "" }, /* 0x0265 */ + { .altcode = "" }, /* 0x0266 */ + { .altcode = "" }, /* 0x0267 */ + { .altcode = "" }, /* 0x0268 */ + { .altcode = "" }, /* 0x0269 */ + { .altcode = "" }, /* 0x026a */ + { .altcode = "" }, /* 0x026b */ + { .altcode = "" }, /* 0x026c */ + { .altcode = "" }, /* 0x026d */ + { .altcode = "" }, /* 0x026e */ + { .altcode = "" }, /* 0x026f */ + { .altcode = "" }, /* 0x0270 */ + { .altcode = "" }, /* 0x0271 */ + { .altcode = "" }, /* 0x0272 */ + { .altcode = "" }, /* 0x0273 */ + { .altcode = "" }, /* 0x0274 */ + { .altcode = "" }, /* 0x0275 */ + { .altcode = "" }, /* 0x0276 */ + { .altcode = "" }, /* 0x0277 */ + { .altcode = "" }, /* 0x0278 */ + { .altcode = "" }, /* 0x0279 */ + { .altcode = "" }, /* 0x027a */ + { .altcode = "" }, /* 0x027b */ + { .altcode = "" }, /* 0x027c */ + { .altcode = "" }, /* 0x027d */ + { .altcode = "" }, /* 0x027e */ + { .altcode = "" }, /* 0x027f */ + { .altcode = "" }, /* 0x0280 */ + { .altcode = "" }, /* 0x0281 */ + { .altcode = "" }, /* 0x0282 */ + { .altcode = "" }, /* 0x0283 */ + { .altcode = "" }, /* 0x0284 */ + { .altcode = "" }, /* 0x0285 */ + { .altcode = "" }, /* 0x0286 */ + { .altcode = "" }, /* 0x0287 */ + { .altcode = "" }, /* 0x0288 */ + { .altcode = "" }, /* 0x0289 */ + { .altcode = "" }, /* 0x028a */ + { .altcode = "" }, /* 0x028b */ + { .altcode = "" }, /* 0x028c */ + { .altcode = "" }, /* 0x028d */ + { .altcode = "" }, /* 0x028e */ + { .altcode = "" }, /* 0x028f */ + { .altcode = "" }, /* 0x0290 */ + { .altcode = "" }, /* 0x0291 */ + { .altcode = "" }, /* 0x0292 */ + { .altcode = "" }, /* 0x0293 */ + { .altcode = "" }, /* 0x0294 */ + { .altcode = "" }, /* 0x0295 */ + { .altcode = "" }, /* 0x0296 */ + { .altcode = "" }, /* 0x0297 */ + { .altcode = "" }, /* 0x0298 */ + { .altcode = "" }, /* 0x0299 */ + { .altcode = "" }, /* 0x029a */ + { .altcode = "" }, /* 0x029b */ + { .altcode = "" }, /* 0x029c */ + { .altcode = "" }, /* 0x029d */ + { .altcode = "" }, /* 0x029e */ + { .altcode = "" }, /* 0x029f */ + { .altcode = "" }, /* 0x02a0 */ + { .altcode = "" }, /* 0x02a1 (Hstroke) */ + { .altcode = "" }, /* 0x02a2 */ + { .altcode = "" }, /* 0x02a3 */ + { .altcode = "" }, /* 0x02a4 */ + { .altcode = "" }, /* 0x02a5 */ + { .altcode = "" }, /* 0x02a6 (Hcircumflex) */ + { .altcode = "" }, /* 0x02a7 */ + { .altcode = "" }, /* 0x02a8 */ + { .altcode = "" }, /* 0x02a9 (Iabovedot) */ + { .altcode = "" }, /* 0x02aa */ + { .altcode = "" }, /* 0x02ab (Gbreve) */ + { .altcode = "" }, /* 0x02ac (Jcircumflex) */ + { .altcode = "" }, /* 0x02ad */ + { .altcode = "" }, /* 0x02ae */ + { .altcode = "" }, /* 0x02af */ + { .altcode = "" }, /* 0x02b0 */ + { .altcode = "" }, /* 0x02b1 (hstroke) */ + { .altcode = "" }, /* 0x02b2 */ + { .altcode = "" }, /* 0x02b3 */ + { .altcode = "" }, /* 0x02b4 */ + { .altcode = "" }, /* 0x02b5 */ + { .altcode = "" }, /* 0x02b6 (hcircumflex) */ + { .altcode = "" }, /* 0x02b7 */ + { .altcode = "" }, /* 0x02b8 */ + { .altcode = "" }, /* 0x02b9 (idotless) */ + { .altcode = "" }, /* 0x02ba */ + { .altcode = "" }, /* 0x02bb (gbreve) */ + { .altcode = "" }, /* 0x02bc (jcircumflex) */ + { .altcode = "" }, /* 0x02bd */ + { .altcode = "" }, /* 0x02be */ + { .altcode = "" }, /* 0x02bf */ + { .altcode = "" }, /* 0x02c0 */ + { .altcode = "" }, /* 0x02c1 */ + { .altcode = "" }, /* 0x02c2 */ + { .altcode = "" }, /* 0x02c3 */ + { .altcode = "" }, /* 0x02c4 */ + { .altcode = "" }, /* 0x02c5 (Cabovedot) */ + { .altcode = "" }, /* 0x02c6 (Ccircumflex) */ + { .altcode = "" }, /* 0x02c7 */ + { .altcode = "" }, /* 0x02c8 */ + { .altcode = "" }, /* 0x02c9 */ + { .altcode = "" }, /* 0x02ca */ + { .altcode = "" }, /* 0x02cb */ + { .altcode = "" }, /* 0x02cc */ + { .altcode = "" }, /* 0x02cd */ + { .altcode = "" }, /* 0x02ce */ + { .altcode = "" }, /* 0x02cf */ + { .altcode = "" }, /* 0x02d0 */ + { .altcode = "" }, /* 0x02d1 */ + { .altcode = "" }, /* 0x02d2 */ + { .altcode = "" }, /* 0x02d3 */ + { .altcode = "" }, /* 0x02d4 */ + { .altcode = "" }, /* 0x02d5 (Gabovedot) */ + { .altcode = "" }, /* 0x02d6 */ + { .altcode = "" }, /* 0x02d7 */ + { .altcode = "" }, /* 0x02d8 (Gcircumflex) */ + { .altcode = "" }, /* 0x02d9 */ + { .altcode = "" }, /* 0x02da */ + { .altcode = "" }, /* 0x02db */ + { .altcode = "" }, /* 0x02dc */ + { .altcode = "" }, /* 0x02dd (Ubreve) */ + { .altcode = "" }, /* 0x02de (Scircumflex) */ + { .altcode = "" }, /* 0x02df */ + { .altcode = "" }, /* 0x02e0 */ + { .altcode = "" }, /* 0x02e1 */ + { .altcode = "" }, /* 0x02e2 */ + { .altcode = "" }, /* 0x02e3 */ + { .altcode = "" }, /* 0x02e4 */ + { .altcode = "" }, /* 0x02e5 (cabovedot) */ + { .altcode = "" }, /* 0x02e6 (ccircumflex) */ + { .altcode = "" }, /* 0x02e7 */ + { .altcode = "" }, /* 0x02e8 */ + { .altcode = "" }, /* 0x02e9 */ + { .altcode = "" }, /* 0x02ea */ + { .altcode = "" }, /* 0x02eb */ + { .altcode = "" }, /* 0x02ec */ + { .altcode = "" }, /* 0x02ed */ + { .altcode = "" }, /* 0x02ee */ + { .altcode = "" }, /* 0x02ef */ + { .altcode = "" }, /* 0x02f0 */ + { .altcode = "" }, /* 0x02f1 */ + { .altcode = "" }, /* 0x02f2 */ + { .altcode = "" }, /* 0x02f3 */ + { .altcode = "" }, /* 0x02f4 */ + { .altcode = "" }, /* 0x02f5 (gabovedot) */ + { .altcode = "" }, /* 0x02f6 */ + { .altcode = "" }, /* 0x02f7 */ + { .altcode = "" }, /* 0x02f8 (gcircumflex) */ + { .altcode = "" }, /* 0x02f9 */ + { .altcode = "" }, /* 0x02fa */ + { .altcode = "" }, /* 0x02fb */ + { .altcode = "" }, /* 0x02fc */ + { .altcode = "" }, /* 0x02fd (ubreve) */ + { .altcode = "" }, /* 0x02fe (scircumflex) */ + { .altcode = "" }, /* 0x02ff */ + }, + { /* 0x03?? */ + { .altcode = "" }, /* 0x0300 */ + { .altcode = "" }, /* 0x0301 */ + { .altcode = "" }, /* 0x0302 */ + { .altcode = "" }, /* 0x0303 */ + { .altcode = "" }, /* 0x0304 */ + { .altcode = "" }, /* 0x0305 */ + { .altcode = "" }, /* 0x0306 */ + { .altcode = "" }, /* 0x0307 */ + { .altcode = "" }, /* 0x0308 */ + { .altcode = "" }, /* 0x0309 */ + { .altcode = "" }, /* 0x030a */ + { .altcode = "" }, /* 0x030b */ + { .altcode = "" }, /* 0x030c */ + { .altcode = "" }, /* 0x030d */ + { .altcode = "" }, /* 0x030e */ + { .altcode = "" }, /* 0x030f */ + { .altcode = "" }, /* 0x0310 */ + { .altcode = "" }, /* 0x0311 */ + { .altcode = "" }, /* 0x0312 */ + { .altcode = "" }, /* 0x0313 */ + { .altcode = "" }, /* 0x0314 */ + { .altcode = "" }, /* 0x0315 */ + { .altcode = "" }, /* 0x0316 */ + { .altcode = "" }, /* 0x0317 */ + { .altcode = "" }, /* 0x0318 */ + { .altcode = "" }, /* 0x0319 */ + { .altcode = "" }, /* 0x031a */ + { .altcode = "" }, /* 0x031b */ + { .altcode = "" }, /* 0x031c */ + { .altcode = "" }, /* 0x031d */ + { .altcode = "" }, /* 0x031e */ + { .altcode = "" }, /* 0x031f */ + { .altcode = "" }, /* 0x0320 */ + { .altcode = "" }, /* 0x0321 */ + { .altcode = "" }, /* 0x0322 */ + { .altcode = "" }, /* 0x0323 */ + { .altcode = "" }, /* 0x0324 */ + { .altcode = "" }, /* 0x0325 */ + { .altcode = "" }, /* 0x0326 */ + { .altcode = "" }, /* 0x0327 */ + { .altcode = "" }, /* 0x0328 */ + { .altcode = "" }, /* 0x0329 */ + { .altcode = "" }, /* 0x032a */ + { .altcode = "" }, /* 0x032b */ + { .altcode = "" }, /* 0x032c */ + { .altcode = "" }, /* 0x032d */ + { .altcode = "" }, /* 0x032e */ + { .altcode = "" }, /* 0x032f */ + { .altcode = "" }, /* 0x0330 */ + { .altcode = "" }, /* 0x0331 */ + { .altcode = "" }, /* 0x0332 */ + { .altcode = "" }, /* 0x0333 */ + { .altcode = "" }, /* 0x0334 */ + { .altcode = "" }, /* 0x0335 */ + { .altcode = "" }, /* 0x0336 */ + { .altcode = "" }, /* 0x0337 */ + { .altcode = "" }, /* 0x0338 */ + { .altcode = "" }, /* 0x0339 */ + { .altcode = "" }, /* 0x033a */ + { .altcode = "" }, /* 0x033b */ + { .altcode = "" }, /* 0x033c */ + { .altcode = "" }, /* 0x033d */ + { .altcode = "" }, /* 0x033e */ + { .altcode = "" }, /* 0x033f */ + { .altcode = "" }, /* 0x0340 */ + { .altcode = "" }, /* 0x0341 */ + { .altcode = "" }, /* 0x0342 */ + { .altcode = "" }, /* 0x0343 */ + { .altcode = "" }, /* 0x0344 */ + { .altcode = "" }, /* 0x0345 */ + { .altcode = "" }, /* 0x0346 */ + { .altcode = "" }, /* 0x0347 */ + { .altcode = "" }, /* 0x0348 */ + { .altcode = "" }, /* 0x0349 */ + { .altcode = "" }, /* 0x034a */ + { .altcode = "" }, /* 0x034b */ + { .altcode = "" }, /* 0x034c */ + { .altcode = "" }, /* 0x034d */ + { .altcode = "" }, /* 0x034e */ + { .altcode = "" }, /* 0x034f */ + { .altcode = "" }, /* 0x0350 */ + { .altcode = "" }, /* 0x0351 */ + { .altcode = "" }, /* 0x0352 */ + { .altcode = "" }, /* 0x0353 */ + { .altcode = "" }, /* 0x0354 */ + { .altcode = "" }, /* 0x0355 */ + { .altcode = "" }, /* 0x0356 */ + { .altcode = "" }, /* 0x0357 */ + { .altcode = "" }, /* 0x0358 */ + { .altcode = "" }, /* 0x0359 */ + { .altcode = "" }, /* 0x035a */ + { .altcode = "" }, /* 0x035b */ + { .altcode = "" }, /* 0x035c */ + { .altcode = "" }, /* 0x035d */ + { .altcode = "" }, /* 0x035e */ + { .altcode = "" }, /* 0x035f */ + { .altcode = "" }, /* 0x0360 */ + { .altcode = "" }, /* 0x0361 */ + { .altcode = "" }, /* 0x0362 */ + { .altcode = "" }, /* 0x0363 */ + { .altcode = "" }, /* 0x0364 */ + { .altcode = "" }, /* 0x0365 */ + { .altcode = "" }, /* 0x0366 */ + { .altcode = "" }, /* 0x0367 */ + { .altcode = "" }, /* 0x0368 */ + { .altcode = "" }, /* 0x0369 */ + { .altcode = "" }, /* 0x036a */ + { .altcode = "" }, /* 0x036b */ + { .altcode = "" }, /* 0x036c */ + { .altcode = "" }, /* 0x036d */ + { .altcode = "" }, /* 0x036e */ + { .altcode = "" }, /* 0x036f */ + { .altcode = "" }, /* 0x0370 */ + { .altcode = "" }, /* 0x0371 */ + { .altcode = "" }, /* 0x0372 */ + { .altcode = "" }, /* 0x0373 */ + { .altcode = "" }, /* 0x0374 */ + { .altcode = "" }, /* 0x0375 */ + { .altcode = "" }, /* 0x0376 */ + { .altcode = "" }, /* 0x0377 */ + { .altcode = "" }, /* 0x0378 */ + { .altcode = "" }, /* 0x0379 */ + { .altcode = "" }, /* 0x037a */ + { .altcode = "" }, /* 0x037b */ + { .altcode = "" }, /* 0x037c */ + { .altcode = "" }, /* 0x037d */ + { .altcode = "" }, /* 0x037e */ + { .altcode = "" }, /* 0x037f */ + { .altcode = "" }, /* 0x0380 */ + { .altcode = "" }, /* 0x0381 */ + { .altcode = "" }, /* 0x0382 */ + { .altcode = "" }, /* 0x0383 */ + { .altcode = "" }, /* 0x0384 */ + { .altcode = "" }, /* 0x0385 */ + { .altcode = "" }, /* 0x0386 */ + { .altcode = "" }, /* 0x0387 */ + { .altcode = "" }, /* 0x0388 */ + { .altcode = "" }, /* 0x0389 */ + { .altcode = "" }, /* 0x038a */ + { .altcode = "" }, /* 0x038b */ + { .altcode = "" }, /* 0x038c */ + { .altcode = "" }, /* 0x038d */ + { .altcode = "" }, /* 0x038e */ + { .altcode = "" }, /* 0x038f */ + { .altcode = "" }, /* 0x0390 */ + { .altcode = "" }, /* 0x0391 */ + { .altcode = "" }, /* 0x0392 */ + { .altcode = "" }, /* 0x0393 */ + { .altcode = "" }, /* 0x0394 */ + { .altcode = "" }, /* 0x0395 */ + { .altcode = "" }, /* 0x0396 */ + { .altcode = "" }, /* 0x0397 */ + { .altcode = "" }, /* 0x0398 */ + { .altcode = "" }, /* 0x0399 */ + { .altcode = "" }, /* 0x039a */ + { .altcode = "" }, /* 0x039b */ + { .altcode = "" }, /* 0x039c */ + { .altcode = "" }, /* 0x039d */ + { .altcode = "" }, /* 0x039e */ + { .altcode = "" }, /* 0x039f */ + { .altcode = "" }, /* 0x03a0 */ + { .altcode = "" }, /* 0x03a1 */ + { .altcode = "" }, /* 0x03a2 (kappa) */ + { .altcode = "" }, /* 0x03a3 (Rcedilla) */ + { .altcode = "" }, /* 0x03a4 */ + { .altcode = "" }, /* 0x03a5 (Itilde) */ + { .altcode = "" }, /* 0x03a6 (Lcedilla) */ + { .altcode = "" }, /* 0x03a7 */ + { .altcode = "" }, /* 0x03a8 */ + { .altcode = "" }, /* 0x03a9 */ + { .altcode = "" }, /* 0x03aa (Emacron) */ + { .altcode = "" }, /* 0x03ab (Gcedilla) */ + { .altcode = "" }, /* 0x03ac (Tslash) */ + { .altcode = "" }, /* 0x03ad */ + { .altcode = "" }, /* 0x03ae */ + { .altcode = "" }, /* 0x03af */ + { .altcode = "" }, /* 0x03b0 */ + { .altcode = "" }, /* 0x03b1 */ + { .altcode = "" }, /* 0x03b2 */ + { .altcode = "" }, /* 0x03b3 (rcedilla) */ + { .altcode = "" }, /* 0x03b4 */ + { .altcode = "" }, /* 0x03b5 (itilde) */ + { .altcode = "" }, /* 0x03b6 (lcedilla) */ + { .altcode = "" }, /* 0x03b7 */ + { .altcode = "" }, /* 0x03b8 */ + { .altcode = "" }, /* 0x03b9 */ + { .altcode = "" }, /* 0x03ba (emacron) */ + { .altcode = "" }, /* 0x03bb (gcedilla) */ + { .altcode = "" }, /* 0x03bc (tslash) */ + { .altcode = "" }, /* 0x03bd (ENG) */ + { .altcode = "" }, /* 0x03be */ + { .altcode = "" }, /* 0x03bf (eng) */ + { .altcode = "" }, /* 0x03c0 (Amacron) */ + { .altcode = "" }, /* 0x03c1 */ + { .altcode = "" }, /* 0x03c2 */ + { .altcode = "" }, /* 0x03c3 */ + { .altcode = "" }, /* 0x03c4 */ + { .altcode = "" }, /* 0x03c5 */ + { .altcode = "" }, /* 0x03c6 */ + { .altcode = "" }, /* 0x03c7 (Iogonek) */ + { .altcode = "" }, /* 0x03c8 */ + { .altcode = "" }, /* 0x03c9 */ + { .altcode = "" }, /* 0x03ca */ + { .altcode = "" }, /* 0x03cb */ + { .altcode = "" }, /* 0x03cc (Eabovedot) */ + { .altcode = "" }, /* 0x03cd */ + { .altcode = "" }, /* 0x03ce */ + { .altcode = "" }, /* 0x03cf (Imacron) */ + { .altcode = "" }, /* 0x03d0 */ + { .altcode = "" }, /* 0x03d1 (Ncedilla) */ + { .altcode = "" }, /* 0x03d2 (Omacron) */ + { .altcode = "" }, /* 0x03d3 (Kcedilla) */ + { .altcode = "" }, /* 0x03d4 */ + { .altcode = "" }, /* 0x03d5 */ + { .altcode = "" }, /* 0x03d6 */ + { .altcode = "" }, /* 0x03d7 */ + { .altcode = "" }, /* 0x03d8 */ + { .altcode = "" }, /* 0x03d9 (Uogonek) */ + { .altcode = "" }, /* 0x03da */ + { .altcode = "" }, /* 0x03db */ + { .altcode = "" }, /* 0x03dc */ + { .altcode = "" }, /* 0x03dd (Utilde) */ + { .altcode = "" }, /* 0x03de (Umacron) */ + { .altcode = "" }, /* 0x03df */ + { .altcode = "" }, /* 0x03e0 (amacron) */ + { .altcode = "" }, /* 0x03e1 */ + { .altcode = "" }, /* 0x03e2 */ + { .altcode = "" }, /* 0x03e3 */ + { .altcode = "" }, /* 0x03e4 */ + { .altcode = "" }, /* 0x03e5 */ + { .altcode = "" }, /* 0x03e6 */ + { .altcode = "" }, /* 0x03e7 (iogonek) */ + { .altcode = "" }, /* 0x03e8 */ + { .altcode = "" }, /* 0x03e9 */ + { .altcode = "" }, /* 0x03ea */ + { .altcode = "" }, /* 0x03eb */ + { .altcode = "" }, /* 0x03ec (eabovedot) */ + { .altcode = "" }, /* 0x03ed */ + { .altcode = "" }, /* 0x03ee */ + { .altcode = "" }, /* 0x03ef (imacron) */ + { .altcode = "" }, /* 0x03f0 */ + { .altcode = "" }, /* 0x03f1 (ncedilla) */ + { .altcode = "" }, /* 0x03f2 (omacron) */ + { .altcode = "" }, /* 0x03f3 (kcedilla) */ + { .altcode = "" }, /* 0x03f4 */ + { .altcode = "" }, /* 0x03f5 */ + { .altcode = "" }, /* 0x03f6 */ + { .altcode = "" }, /* 0x03f7 */ + { .altcode = "" }, /* 0x03f8 */ + { .altcode = "" }, /* 0x03f9 (uogonek) */ + { .altcode = "" }, /* 0x03fa */ + { .altcode = "" }, /* 0x03fb */ + { .altcode = "" }, /* 0x03fc */ + { .altcode = "" }, /* 0x03fd (utilde) */ + { .altcode = "" }, /* 0x03fe (umacron) */ + { .altcode = "" }, /* 0x03ff */ + }, + { /* 0x04?? */ + { .altcode = "" }, /* 0x0400 */ + { .altcode = "" }, /* 0x0401 */ + { .altcode = "" }, /* 0x0402 */ + { .altcode = "" }, /* 0x0403 */ + { .altcode = "" }, /* 0x0404 */ + { .altcode = "" }, /* 0x0405 */ + { .altcode = "" }, /* 0x0406 */ + { .altcode = "" }, /* 0x0407 */ + { .altcode = "" }, /* 0x0408 */ + { .altcode = "" }, /* 0x0409 */ + { .altcode = "" }, /* 0x040a */ + { .altcode = "" }, /* 0x040b */ + { .altcode = "" }, /* 0x040c */ + { .altcode = "" }, /* 0x040d */ + { .altcode = "" }, /* 0x040e */ + { .altcode = "" }, /* 0x040f */ + { .altcode = "" }, /* 0x0410 */ + { .altcode = "" }, /* 0x0411 */ + { .altcode = "" }, /* 0x0412 */ + { .altcode = "" }, /* 0x0413 */ + { .altcode = "" }, /* 0x0414 */ + { .altcode = "" }, /* 0x0415 */ + { .altcode = "" }, /* 0x0416 */ + { .altcode = "" }, /* 0x0417 */ + { .altcode = "" }, /* 0x0418 */ + { .altcode = "" }, /* 0x0419 */ + { .altcode = "" }, /* 0x041a */ + { .altcode = "" }, /* 0x041b */ + { .altcode = "" }, /* 0x041c */ + { .altcode = "" }, /* 0x041d */ + { .altcode = "" }, /* 0x041e */ + { .altcode = "" }, /* 0x041f */ + { .altcode = "" }, /* 0x0420 */ + { .altcode = "" }, /* 0x0421 */ + { .altcode = "" }, /* 0x0422 */ + { .altcode = "" }, /* 0x0423 */ + { .altcode = "" }, /* 0x0424 */ + { .altcode = "" }, /* 0x0425 */ + { .altcode = "" }, /* 0x0426 */ + { .altcode = "" }, /* 0x0427 */ + { .altcode = "" }, /* 0x0428 */ + { .altcode = "" }, /* 0x0429 */ + { .altcode = "" }, /* 0x042a */ + { .altcode = "" }, /* 0x042b */ + { .altcode = "" }, /* 0x042c */ + { .altcode = "" }, /* 0x042d */ + { .altcode = "" }, /* 0x042e */ + { .altcode = "" }, /* 0x042f */ + { .altcode = "" }, /* 0x0430 */ + { .altcode = "" }, /* 0x0431 */ + { .altcode = "" }, /* 0x0432 */ + { .altcode = "" }, /* 0x0433 */ + { .altcode = "" }, /* 0x0434 */ + { .altcode = "" }, /* 0x0435 */ + { .altcode = "" }, /* 0x0436 */ + { .altcode = "" }, /* 0x0437 */ + { .altcode = "" }, /* 0x0438 */ + { .altcode = "" }, /* 0x0439 */ + { .altcode = "" }, /* 0x043a */ + { .altcode = "" }, /* 0x043b */ + { .altcode = "" }, /* 0x043c */ + { .altcode = "" }, /* 0x043d */ + { .altcode = "" }, /* 0x043e */ + { .altcode = "" }, /* 0x043f */ + { .altcode = "" }, /* 0x0440 */ + { .altcode = "" }, /* 0x0441 */ + { .altcode = "" }, /* 0x0442 */ + { .altcode = "" }, /* 0x0443 */ + { .altcode = "" }, /* 0x0444 */ + { .altcode = "" }, /* 0x0445 */ + { .altcode = "" }, /* 0x0446 */ + { .altcode = "" }, /* 0x0447 */ + { .altcode = "" }, /* 0x0448 */ + { .altcode = "" }, /* 0x0449 */ + { .altcode = "" }, /* 0x044a */ + { .altcode = "" }, /* 0x044b */ + { .altcode = "" }, /* 0x044c */ + { .altcode = "" }, /* 0x044d */ + { .altcode = "" }, /* 0x044e */ + { .altcode = "" }, /* 0x044f */ + { .altcode = "" }, /* 0x0450 */ + { .altcode = "" }, /* 0x0451 */ + { .altcode = "" }, /* 0x0452 */ + { .altcode = "" }, /* 0x0453 */ + { .altcode = "" }, /* 0x0454 */ + { .altcode = "" }, /* 0x0455 */ + { .altcode = "" }, /* 0x0456 */ + { .altcode = "" }, /* 0x0457 */ + { .altcode = "" }, /* 0x0458 */ + { .altcode = "" }, /* 0x0459 */ + { .altcode = "" }, /* 0x045a */ + { .altcode = "" }, /* 0x045b */ + { .altcode = "" }, /* 0x045c */ + { .altcode = "" }, /* 0x045d */ + { .altcode = "" }, /* 0x045e */ + { .altcode = "" }, /* 0x045f */ + { .altcode = "" }, /* 0x0460 */ + { .altcode = "" }, /* 0x0461 */ + { .altcode = "" }, /* 0x0462 */ + { .altcode = "" }, /* 0x0463 */ + { .altcode = "" }, /* 0x0464 */ + { .altcode = "" }, /* 0x0465 */ + { .altcode = "" }, /* 0x0466 */ + { .altcode = "" }, /* 0x0467 */ + { .altcode = "" }, /* 0x0468 */ + { .altcode = "" }, /* 0x0469 */ + { .altcode = "" }, /* 0x046a */ + { .altcode = "" }, /* 0x046b */ + { .altcode = "" }, /* 0x046c */ + { .altcode = "" }, /* 0x046d */ + { .altcode = "" }, /* 0x046e */ + { .altcode = "" }, /* 0x046f */ + { .altcode = "" }, /* 0x0470 */ + { .altcode = "" }, /* 0x0471 */ + { .altcode = "" }, /* 0x0472 */ + { .altcode = "" }, /* 0x0473 */ + { .altcode = "" }, /* 0x0474 */ + { .altcode = "" }, /* 0x0475 */ + { .altcode = "" }, /* 0x0476 */ + { .altcode = "" }, /* 0x0477 */ + { .altcode = "" }, /* 0x0478 */ + { .altcode = "" }, /* 0x0479 */ + { .altcode = "" }, /* 0x047a */ + { .altcode = "" }, /* 0x047b */ + { .altcode = "" }, /* 0x047c */ + { .altcode = "" }, /* 0x047d */ + { .altcode = "" }, /* 0x047e (overline) */ + { .altcode = "" }, /* 0x047f */ + { .altcode = "" }, /* 0x0480 */ + { .altcode = "" }, /* 0x0481 */ + { .altcode = "" }, /* 0x0482 */ + { .altcode = "" }, /* 0x0483 */ + { .altcode = "" }, /* 0x0484 */ + { .altcode = "" }, /* 0x0485 */ + { .altcode = "" }, /* 0x0486 */ + { .altcode = "" }, /* 0x0487 */ + { .altcode = "" }, /* 0x0488 */ + { .altcode = "" }, /* 0x0489 */ + { .altcode = "" }, /* 0x048a */ + { .altcode = "" }, /* 0x048b */ + { .altcode = "" }, /* 0x048c */ + { .altcode = "" }, /* 0x048d */ + { .altcode = "" }, /* 0x048e */ + { .altcode = "" }, /* 0x048f */ + { .altcode = "" }, /* 0x0490 */ + { .altcode = "" }, /* 0x0491 */ + { .altcode = "" }, /* 0x0492 */ + { .altcode = "" }, /* 0x0493 */ + { .altcode = "" }, /* 0x0494 */ + { .altcode = "" }, /* 0x0495 */ + { .altcode = "" }, /* 0x0496 */ + { .altcode = "" }, /* 0x0497 */ + { .altcode = "" }, /* 0x0498 */ + { .altcode = "" }, /* 0x0499 */ + { .altcode = "" }, /* 0x049a */ + { .altcode = "" }, /* 0x049b */ + { .altcode = "" }, /* 0x049c */ + { .altcode = "" }, /* 0x049d */ + { .altcode = "" }, /* 0x049e */ + { .altcode = "" }, /* 0x049f */ + { .altcode = "" }, /* 0x04a0 */ + { .altcode = "" }, /* 0x04a1 (kana_fullstop) */ + { .altcode = "" }, /* 0x04a2 (kana_openingbracket) */ + { .altcode = "" }, /* 0x04a3 (kana_closingbracket) */ + { .altcode = "" }, /* 0x04a4 (kana_comma) */ + { .altcode = "" }, /* 0x04a5 (kana_middledot) */ + { .altcode = "" }, /* 0x04a6 (kana_WO) */ + { .altcode = "" }, /* 0x04a7 (kana_a) */ + { .altcode = "" }, /* 0x04a8 (kana_i) */ + { .altcode = "" }, /* 0x04a9 (kana_u) */ + { .altcode = "" }, /* 0x04aa (kana_e) */ + { .altcode = "" }, /* 0x04ab (kana_o) */ + { .altcode = "" }, /* 0x04ac (kana_ya) */ + { .altcode = "" }, /* 0x04ad (kana_yu) */ + { .altcode = "" }, /* 0x04ae (kana_yo) */ + { .altcode = "" }, /* 0x04af (kana_tu) */ + { .altcode = "" }, /* 0x04b0 (prolongedsound) */ + { .altcode = "" }, /* 0x04b1 (kana_A) */ + { .altcode = "" }, /* 0x04b2 (kana_I) */ + { .altcode = "" }, /* 0x04b3 (kana_U) */ + { .altcode = "" }, /* 0x04b4 (kana_E) */ + { .altcode = "" }, /* 0x04b5 (kana_O) */ + { .altcode = "" }, /* 0x04b6 (kana_KA) */ + { .altcode = "" }, /* 0x04b7 (kana_KI) */ + { .altcode = "" }, /* 0x04b8 (kana_KU) */ + { .altcode = "" }, /* 0x04b9 (kana_KE) */ + { .altcode = "" }, /* 0x04ba (kana_KO) */ + { .altcode = "" }, /* 0x04bb (kana_SA) */ + { .altcode = "" }, /* 0x04bc (kana_SHI) */ + { .altcode = "" }, /* 0x04bd (kana_SU) */ + { .altcode = "" }, /* 0x04be (kana_SE) */ + { .altcode = "" }, /* 0x04bf (kana_SO) */ + { .altcode = "" }, /* 0x04c0 (kana_TA) */ + { .altcode = "" }, /* 0x04c1 (kana_TI) */ + { .altcode = "" }, /* 0x04c2 (kana_TU) */ + { .altcode = "" }, /* 0x04c3 (kana_TE) */ + { .altcode = "" }, /* 0x04c4 (kana_TO) */ + { .altcode = "" }, /* 0x04c5 (kana_NA) */ + { .altcode = "" }, /* 0x04c6 (kana_NI) */ + { .altcode = "" }, /* 0x04c7 (kana_NU) */ + { .altcode = "" }, /* 0x04c8 (kana_NE) */ + { .altcode = "" }, /* 0x04c9 (kana_NO) */ + { .altcode = "" }, /* 0x04ca (kana_HA) */ + { .altcode = "" }, /* 0x04cb (kana_HI) */ + { .altcode = "" }, /* 0x04cc (kana_HU) */ + { .altcode = "" }, /* 0x04cd (kana_HE) */ + { .altcode = "" }, /* 0x04ce (kana_HO) */ + { .altcode = "" }, /* 0x04cf (kana_MA) */ + { .altcode = "" }, /* 0x04d0 (kana_MI) */ + { .altcode = "" }, /* 0x04d1 (kana_MU) */ + { .altcode = "" }, /* 0x04d2 (kana_ME) */ + { .altcode = "" }, /* 0x04d3 (kana_MO) */ + { .altcode = "" }, /* 0x04d4 (kana_YA) */ + { .altcode = "" }, /* 0x04d5 (kana_YU) */ + { .altcode = "" }, /* 0x04d6 (kana_YO) */ + { .altcode = "" }, /* 0x04d7 (kana_RA) */ + { .altcode = "" }, /* 0x04d8 (kana_RI) */ + { .altcode = "" }, /* 0x04d9 (kana_RU) */ + { .altcode = "" }, /* 0x04da (kana_RE) */ + { .altcode = "" }, /* 0x04db (kana_RO) */ + { .altcode = "" }, /* 0x04dc (kana_WA) */ + { .altcode = "" }, /* 0x04dd (kana_N) */ + { .altcode = "" }, /* 0x04de (voicedsound) */ + { .altcode = "" }, /* 0x04df (semivoicedsound) */ + { .altcode = "" }, /* 0x04e0 */ + { .altcode = "" }, /* 0x04e1 */ + { .altcode = "" }, /* 0x04e2 */ + { .altcode = "" }, /* 0x04e3 */ + { .altcode = "" }, /* 0x04e4 */ + { .altcode = "" }, /* 0x04e5 */ + { .altcode = "" }, /* 0x04e6 */ + { .altcode = "" }, /* 0x04e7 */ + { .altcode = "" }, /* 0x04e8 */ + { .altcode = "" }, /* 0x04e9 */ + { .altcode = "" }, /* 0x04ea */ + { .altcode = "" }, /* 0x04eb */ + { .altcode = "" }, /* 0x04ec */ + { .altcode = "" }, /* 0x04ed */ + { .altcode = "" }, /* 0x04ee */ + { .altcode = "" }, /* 0x04ef */ + { .altcode = "" }, /* 0x04f0 */ + { .altcode = "" }, /* 0x04f1 */ + { .altcode = "" }, /* 0x04f2 */ + { .altcode = "" }, /* 0x04f3 */ + { .altcode = "" }, /* 0x04f4 */ + { .altcode = "" }, /* 0x04f5 */ + { .altcode = "" }, /* 0x04f6 */ + { .altcode = "" }, /* 0x04f7 */ + { .altcode = "" }, /* 0x04f8 */ + { .altcode = "" }, /* 0x04f9 */ + { .altcode = "" }, /* 0x04fa */ + { .altcode = "" }, /* 0x04fb */ + { .altcode = "" }, /* 0x04fc */ + { .altcode = "" }, /* 0x04fd */ + { .altcode = "" }, /* 0x04fe */ + { .altcode = "" }, /* 0x04ff */ + }, + { /* 0x05?? */ + { .altcode = "" }, /* 0x0500 */ + { .altcode = "" }, /* 0x0501 */ + { .altcode = "" }, /* 0x0502 */ + { .altcode = "" }, /* 0x0503 */ + { .altcode = "" }, /* 0x0504 */ + { .altcode = "" }, /* 0x0505 */ + { .altcode = "" }, /* 0x0506 */ + { .altcode = "" }, /* 0x0507 */ + { .altcode = "" }, /* 0x0508 */ + { .altcode = "" }, /* 0x0509 */ + { .altcode = "" }, /* 0x050a */ + { .altcode = "" }, /* 0x050b */ + { .altcode = "" }, /* 0x050c */ + { .altcode = "" }, /* 0x050d */ + { .altcode = "" }, /* 0x050e */ + { .altcode = "" }, /* 0x050f */ + { .altcode = "" }, /* 0x0510 */ + { .altcode = "" }, /* 0x0511 */ + { .altcode = "" }, /* 0x0512 */ + { .altcode = "" }, /* 0x0513 */ + { .altcode = "" }, /* 0x0514 */ + { .altcode = "" }, /* 0x0515 */ + { .altcode = "" }, /* 0x0516 */ + { .altcode = "" }, /* 0x0517 */ + { .altcode = "" }, /* 0x0518 */ + { .altcode = "" }, /* 0x0519 */ + { .altcode = "" }, /* 0x051a */ + { .altcode = "" }, /* 0x051b */ + { .altcode = "" }, /* 0x051c */ + { .altcode = "" }, /* 0x051d */ + { .altcode = "" }, /* 0x051e */ + { .altcode = "" }, /* 0x051f */ + { .altcode = "" }, /* 0x0520 */ + { .altcode = "" }, /* 0x0521 */ + { .altcode = "" }, /* 0x0522 */ + { .altcode = "" }, /* 0x0523 */ + { .altcode = "" }, /* 0x0524 */ + { .altcode = "" }, /* 0x0525 */ + { .altcode = "" }, /* 0x0526 */ + { .altcode = "" }, /* 0x0527 */ + { .altcode = "" }, /* 0x0528 */ + { .altcode = "" }, /* 0x0529 */ + { .altcode = "" }, /* 0x052a */ + { .altcode = "" }, /* 0x052b */ + { .altcode = "" }, /* 0x052c */ + { .altcode = "" }, /* 0x052d */ + { .altcode = "" }, /* 0x052e */ + { .altcode = "" }, /* 0x052f */ + { .altcode = "" }, /* 0x0530 */ + { .altcode = "" }, /* 0x0531 */ + { .altcode = "" }, /* 0x0532 */ + { .altcode = "" }, /* 0x0533 */ + { .altcode = "" }, /* 0x0534 */ + { .altcode = "" }, /* 0x0535 */ + { .altcode = "" }, /* 0x0536 */ + { .altcode = "" }, /* 0x0537 */ + { .altcode = "" }, /* 0x0538 */ + { .altcode = "" }, /* 0x0539 */ + { .altcode = "" }, /* 0x053a */ + { .altcode = "" }, /* 0x053b */ + { .altcode = "" }, /* 0x053c */ + { .altcode = "" }, /* 0x053d */ + { .altcode = "" }, /* 0x053e */ + { .altcode = "" }, /* 0x053f */ + { .altcode = "" }, /* 0x0540 */ + { .altcode = "" }, /* 0x0541 */ + { .altcode = "" }, /* 0x0542 */ + { .altcode = "" }, /* 0x0543 */ + { .altcode = "" }, /* 0x0544 */ + { .altcode = "" }, /* 0x0545 */ + { .altcode = "" }, /* 0x0546 */ + { .altcode = "" }, /* 0x0547 */ + { .altcode = "" }, /* 0x0548 */ + { .altcode = "" }, /* 0x0549 */ + { .altcode = "" }, /* 0x054a */ + { .altcode = "" }, /* 0x054b */ + { .altcode = "" }, /* 0x054c */ + { .altcode = "" }, /* 0x054d */ + { .altcode = "" }, /* 0x054e */ + { .altcode = "" }, /* 0x054f */ + { .altcode = "" }, /* 0x0550 */ + { .altcode = "" }, /* 0x0551 */ + { .altcode = "" }, /* 0x0552 */ + { .altcode = "" }, /* 0x0553 */ + { .altcode = "" }, /* 0x0554 */ + { .altcode = "" }, /* 0x0555 */ + { .altcode = "" }, /* 0x0556 */ + { .altcode = "" }, /* 0x0557 */ + { .altcode = "" }, /* 0x0558 */ + { .altcode = "" }, /* 0x0559 */ + { .altcode = "" }, /* 0x055a */ + { .altcode = "" }, /* 0x055b */ + { .altcode = "" }, /* 0x055c */ + { .altcode = "" }, /* 0x055d */ + { .altcode = "" }, /* 0x055e */ + { .altcode = "" }, /* 0x055f */ + { .altcode = "" }, /* 0x0560 */ + { .altcode = "" }, /* 0x0561 */ + { .altcode = "" }, /* 0x0562 */ + { .altcode = "" }, /* 0x0563 */ + { .altcode = "" }, /* 0x0564 */ + { .altcode = "" }, /* 0x0565 */ + { .altcode = "" }, /* 0x0566 */ + { .altcode = "" }, /* 0x0567 */ + { .altcode = "" }, /* 0x0568 */ + { .altcode = "" }, /* 0x0569 */ + { .altcode = "" }, /* 0x056a */ + { .altcode = "" }, /* 0x056b */ + { .altcode = "" }, /* 0x056c */ + { .altcode = "" }, /* 0x056d */ + { .altcode = "" }, /* 0x056e */ + { .altcode = "" }, /* 0x056f */ + { .altcode = "" }, /* 0x0570 */ + { .altcode = "" }, /* 0x0571 */ + { .altcode = "" }, /* 0x0572 */ + { .altcode = "" }, /* 0x0573 */ + { .altcode = "" }, /* 0x0574 */ + { .altcode = "" }, /* 0x0575 */ + { .altcode = "" }, /* 0x0576 */ + { .altcode = "" }, /* 0x0577 */ + { .altcode = "" }, /* 0x0578 */ + { .altcode = "" }, /* 0x0579 */ + { .altcode = "" }, /* 0x057a */ + { .altcode = "" }, /* 0x057b */ + { .altcode = "" }, /* 0x057c */ + { .altcode = "" }, /* 0x057d */ + { .altcode = "" }, /* 0x057e */ + { .altcode = "" }, /* 0x057f */ + { .altcode = "" }, /* 0x0580 */ + { .altcode = "" }, /* 0x0581 */ + { .altcode = "" }, /* 0x0582 */ + { .altcode = "" }, /* 0x0583 */ + { .altcode = "" }, /* 0x0584 */ + { .altcode = "" }, /* 0x0585 */ + { .altcode = "" }, /* 0x0586 */ + { .altcode = "" }, /* 0x0587 */ + { .altcode = "" }, /* 0x0588 */ + { .altcode = "" }, /* 0x0589 */ + { .altcode = "" }, /* 0x058a */ + { .altcode = "" }, /* 0x058b */ + { .altcode = "" }, /* 0x058c */ + { .altcode = "" }, /* 0x058d */ + { .altcode = "" }, /* 0x058e */ + { .altcode = "" }, /* 0x058f */ + { .altcode = "" }, /* 0x0590 */ + { .altcode = "" }, /* 0x0591 */ + { .altcode = "" }, /* 0x0592 */ + { .altcode = "" }, /* 0x0593 */ + { .altcode = "" }, /* 0x0594 */ + { .altcode = "" }, /* 0x0595 */ + { .altcode = "" }, /* 0x0596 */ + { .altcode = "" }, /* 0x0597 */ + { .altcode = "" }, /* 0x0598 */ + { .altcode = "" }, /* 0x0599 */ + { .altcode = "" }, /* 0x059a */ + { .altcode = "" }, /* 0x059b */ + { .altcode = "" }, /* 0x059c */ + { .altcode = "" }, /* 0x059d */ + { .altcode = "" }, /* 0x059e */ + { .altcode = "" }, /* 0x059f */ + { .altcode = "" }, /* 0x05a0 */ + { .altcode = "" }, /* 0x05a1 */ + { .altcode = "" }, /* 0x05a2 */ + { .altcode = "" }, /* 0x05a3 */ + { .altcode = "" }, /* 0x05a4 */ + { .altcode = "" }, /* 0x05a5 */ + { .altcode = "" }, /* 0x05a6 */ + { .altcode = "" }, /* 0x05a7 */ + { .altcode = "" }, /* 0x05a8 */ + { .altcode = "" }, /* 0x05a9 */ + { .altcode = "" }, /* 0x05aa */ + { .altcode = "" }, /* 0x05ab */ + { .altcode = "" }, /* 0x05ac (Arabic_comma) */ + { .altcode = "" }, /* 0x05ad */ + { .altcode = "" }, /* 0x05ae */ + { .altcode = "" }, /* 0x05af */ + { .altcode = "" }, /* 0x05b0 */ + { .altcode = "" }, /* 0x05b1 */ + { .altcode = "" }, /* 0x05b2 */ + { .altcode = "" }, /* 0x05b3 */ + { .altcode = "" }, /* 0x05b4 */ + { .altcode = "" }, /* 0x05b5 */ + { .altcode = "" }, /* 0x05b6 */ + { .altcode = "" }, /* 0x05b7 */ + { .altcode = "" }, /* 0x05b8 */ + { .altcode = "" }, /* 0x05b9 */ + { .altcode = "" }, /* 0x05ba */ + { .altcode = "" }, /* 0x05bb (Arabic_semicolon) */ + { .altcode = "" }, /* 0x05bc */ + { .altcode = "" }, /* 0x05bd */ + { .altcode = "" }, /* 0x05be */ + { .altcode = "" }, /* 0x05bf (Arabic_question_mark) */ + { .altcode = "" }, /* 0x05c0 */ + { .altcode = "" }, /* 0x05c1 (Arabic_hamza) */ + { .altcode = "" }, /* 0x05c2 (Arabic_maddaonalef) */ + { .altcode = "" }, /* 0x05c3 (Arabic_hamzaonalef) */ + { .altcode = "" }, /* 0x05c4 (Arabic_hamzaonwaw) */ + { .altcode = "" }, /* 0x05c5 (Arabic_hamzaunderalef) */ + { .altcode = "" }, /* 0x05c6 (Arabic_hamzaonyeh) */ + { .altcode = "" }, /* 0x05c7 (Arabic_alef) */ + { .altcode = "" }, /* 0x05c8 (Arabic_beh) */ + { .altcode = "" }, /* 0x05c9 (Arabic_tehmarbuta) */ + { .altcode = "" }, /* 0x05ca (Arabic_teh) */ + { .altcode = "" }, /* 0x05cb (Arabic_theh) */ + { .altcode = "" }, /* 0x05cc (Arabic_jeem) */ + { .altcode = "" }, /* 0x05cd (Arabic_hah) */ + { .altcode = "" }, /* 0x05ce (Arabic_khah) */ + { .altcode = "" }, /* 0x05cf (Arabic_dal) */ + { .altcode = "" }, /* 0x05d0 (Arabic_thal) */ + { .altcode = "" }, /* 0x05d1 (Arabic_ra) */ + { .altcode = "" }, /* 0x05d2 (Arabic_zain) */ + { .altcode = "" }, /* 0x05d3 (Arabic_seen) */ + { .altcode = "" }, /* 0x05d4 (Arabic_sheen) */ + { .altcode = "" }, /* 0x05d5 (Arabic_sad) */ + { .altcode = "" }, /* 0x05d6 (Arabic_dad) */ + { .altcode = "" }, /* 0x05d7 (Arabic_tah) */ + { .altcode = "" }, /* 0x05d8 (Arabic_zah) */ + { .altcode = "" }, /* 0x05d9 (Arabic_ain) */ + { .altcode = "" }, /* 0x05da (Arabic_ghain) */ + { .altcode = "" }, /* 0x05db */ + { .altcode = "" }, /* 0x05dc */ + { .altcode = "" }, /* 0x05dd */ + { .altcode = "" }, /* 0x05de */ + { .altcode = "" }, /* 0x05df */ + { .altcode = "" }, /* 0x05e0 (Arabic_tatweel) */ + { .altcode = "" }, /* 0x05e1 (Arabic_feh) */ + { .altcode = "" }, /* 0x05e2 (Arabic_qaf) */ + { .altcode = "" }, /* 0x05e3 (Arabic_kaf) */ + { .altcode = "" }, /* 0x05e4 (Arabic_lam) */ + { .altcode = "" }, /* 0x05e5 (Arabic_meem) */ + { .altcode = "" }, /* 0x05e6 (Arabic_noon) */ + { .altcode = "" }, /* 0x05e7 (Arabic_heh) */ + { .altcode = "" }, /* 0x05e8 (Arabic_waw) */ + { .altcode = "" }, /* 0x05e9 (Arabic_alefmaksura) */ + { .altcode = "" }, /* 0x05ea (Arabic_yeh) */ + { .altcode = "" }, /* 0x05eb (Arabic_fathatan) */ + { .altcode = "" }, /* 0x05ec (Arabic_dammatan) */ + { .altcode = "" }, /* 0x05ed (Arabic_kasratan) */ + { .altcode = "" }, /* 0x05ee (Arabic_fatha) */ + { .altcode = "" }, /* 0x05ef (Arabic_damma) */ + { .altcode = "" }, /* 0x05f0 (Arabic_kasra) */ + { .altcode = "" }, /* 0x05f1 (Arabic_shadda) */ + { .altcode = "" }, /* 0x05f2 (Arabic_sukun) */ + { .altcode = "" }, /* 0x05f3 */ + { .altcode = "" }, /* 0x05f4 */ + { .altcode = "" }, /* 0x05f5 */ + { .altcode = "" }, /* 0x05f6 */ + { .altcode = "" }, /* 0x05f7 */ + { .altcode = "" }, /* 0x05f8 */ + { .altcode = "" }, /* 0x05f9 */ + { .altcode = "" }, /* 0x05fa */ + { .altcode = "" }, /* 0x05fb */ + { .altcode = "" }, /* 0x05fc */ + { .altcode = "" }, /* 0x05fd */ + { .altcode = "" }, /* 0x05fe */ + { .altcode = "" }, /* 0x05ff */ + }, + { /* 0x06?? */ + { .altcode = "" }, /* 0x0600 */ + { .altcode = "" }, /* 0x0601 */ + { .altcode = "" }, /* 0x0602 */ + { .altcode = "" }, /* 0x0603 */ + { .altcode = "" }, /* 0x0604 */ + { .altcode = "" }, /* 0x0605 */ + { .altcode = "" }, /* 0x0606 */ + { .altcode = "" }, /* 0x0607 */ + { .altcode = "" }, /* 0x0608 */ + { .altcode = "" }, /* 0x0609 */ + { .altcode = "" }, /* 0x060a */ + { .altcode = "" }, /* 0x060b */ + { .altcode = "" }, /* 0x060c */ + { .altcode = "" }, /* 0x060d */ + { .altcode = "" }, /* 0x060e */ + { .altcode = "" }, /* 0x060f */ + { .altcode = "" }, /* 0x0610 */ + { .altcode = "" }, /* 0x0611 */ + { .altcode = "" }, /* 0x0612 */ + { .altcode = "" }, /* 0x0613 */ + { .altcode = "" }, /* 0x0614 */ + { .altcode = "" }, /* 0x0615 */ + { .altcode = "" }, /* 0x0616 */ + { .altcode = "" }, /* 0x0617 */ + { .altcode = "" }, /* 0x0618 */ + { .altcode = "" }, /* 0x0619 */ + { .altcode = "" }, /* 0x061a */ + { .altcode = "" }, /* 0x061b */ + { .altcode = "" }, /* 0x061c */ + { .altcode = "" }, /* 0x061d */ + { .altcode = "" }, /* 0x061e */ + { .altcode = "" }, /* 0x061f */ + { .altcode = "" }, /* 0x0620 */ + { .altcode = "" }, /* 0x0621 */ + { .altcode = "" }, /* 0x0622 */ + { .altcode = "" }, /* 0x0623 */ + { .altcode = "" }, /* 0x0624 */ + { .altcode = "" }, /* 0x0625 */ + { .altcode = "" }, /* 0x0626 */ + { .altcode = "" }, /* 0x0627 */ + { .altcode = "" }, /* 0x0628 */ + { .altcode = "" }, /* 0x0629 */ + { .altcode = "" }, /* 0x062a */ + { .altcode = "" }, /* 0x062b */ + { .altcode = "" }, /* 0x062c */ + { .altcode = "" }, /* 0x062d */ + { .altcode = "" }, /* 0x062e */ + { .altcode = "" }, /* 0x062f */ + { .altcode = "" }, /* 0x0630 */ + { .altcode = "" }, /* 0x0631 */ + { .altcode = "" }, /* 0x0632 */ + { .altcode = "" }, /* 0x0633 */ + { .altcode = "" }, /* 0x0634 */ + { .altcode = "" }, /* 0x0635 */ + { .altcode = "" }, /* 0x0636 */ + { .altcode = "" }, /* 0x0637 */ + { .altcode = "" }, /* 0x0638 */ + { .altcode = "" }, /* 0x0639 */ + { .altcode = "" }, /* 0x063a */ + { .altcode = "" }, /* 0x063b */ + { .altcode = "" }, /* 0x063c */ + { .altcode = "" }, /* 0x063d */ + { .altcode = "" }, /* 0x063e */ + { .altcode = "" }, /* 0x063f */ + { .altcode = "" }, /* 0x0640 */ + { .altcode = "" }, /* 0x0641 */ + { .altcode = "" }, /* 0x0642 */ + { .altcode = "" }, /* 0x0643 */ + { .altcode = "" }, /* 0x0644 */ + { .altcode = "" }, /* 0x0645 */ + { .altcode = "" }, /* 0x0646 */ + { .altcode = "" }, /* 0x0647 */ + { .altcode = "" }, /* 0x0648 */ + { .altcode = "" }, /* 0x0649 */ + { .altcode = "" }, /* 0x064a */ + { .altcode = "" }, /* 0x064b */ + { .altcode = "" }, /* 0x064c */ + { .altcode = "" }, /* 0x064d */ + { .altcode = "" }, /* 0x064e */ + { .altcode = "" }, /* 0x064f */ + { .altcode = "" }, /* 0x0650 */ + { .altcode = "" }, /* 0x0651 */ + { .altcode = "" }, /* 0x0652 */ + { .altcode = "" }, /* 0x0653 */ + { .altcode = "" }, /* 0x0654 */ + { .altcode = "" }, /* 0x0655 */ + { .altcode = "" }, /* 0x0656 */ + { .altcode = "" }, /* 0x0657 */ + { .altcode = "" }, /* 0x0658 */ + { .altcode = "" }, /* 0x0659 */ + { .altcode = "" }, /* 0x065a */ + { .altcode = "" }, /* 0x065b */ + { .altcode = "" }, /* 0x065c */ + { .altcode = "" }, /* 0x065d */ + { .altcode = "" }, /* 0x065e */ + { .altcode = "" }, /* 0x065f */ + { .altcode = "" }, /* 0x0660 */ + { .altcode = "" }, /* 0x0661 */ + { .altcode = "" }, /* 0x0662 */ + { .altcode = "" }, /* 0x0663 */ + { .altcode = "" }, /* 0x0664 */ + { .altcode = "" }, /* 0x0665 */ + { .altcode = "" }, /* 0x0666 */ + { .altcode = "" }, /* 0x0667 */ + { .altcode = "" }, /* 0x0668 */ + { .altcode = "" }, /* 0x0669 */ + { .altcode = "" }, /* 0x066a */ + { .altcode = "" }, /* 0x066b */ + { .altcode = "" }, /* 0x066c */ + { .altcode = "" }, /* 0x066d */ + { .altcode = "" }, /* 0x066e */ + { .altcode = "" }, /* 0x066f */ + { .altcode = "" }, /* 0x0670 */ + { .altcode = "" }, /* 0x0671 */ + { .altcode = "" }, /* 0x0672 */ + { .altcode = "" }, /* 0x0673 */ + { .altcode = "" }, /* 0x0674 */ + { .altcode = "" }, /* 0x0675 */ + { .altcode = "" }, /* 0x0676 */ + { .altcode = "" }, /* 0x0677 */ + { .altcode = "" }, /* 0x0678 */ + { .altcode = "" }, /* 0x0679 */ + { .altcode = "" }, /* 0x067a */ + { .altcode = "" }, /* 0x067b */ + { .altcode = "" }, /* 0x067c */ + { .altcode = "" }, /* 0x067d */ + { .altcode = "" }, /* 0x067e */ + { .altcode = "" }, /* 0x067f */ + { .altcode = "" }, /* 0x0680 */ + { .altcode = "" }, /* 0x0681 */ + { .altcode = "" }, /* 0x0682 */ + { .altcode = "" }, /* 0x0683 */ + { .altcode = "" }, /* 0x0684 */ + { .altcode = "" }, /* 0x0685 */ + { .altcode = "" }, /* 0x0686 */ + { .altcode = "" }, /* 0x0687 */ + { .altcode = "" }, /* 0x0688 */ + { .altcode = "" }, /* 0x0689 */ + { .altcode = "" }, /* 0x068a */ + { .altcode = "" }, /* 0x068b */ + { .altcode = "" }, /* 0x068c */ + { .altcode = "" }, /* 0x068d */ + { .altcode = "" }, /* 0x068e */ + { .altcode = "" }, /* 0x068f */ + { .altcode = "" }, /* 0x0690 */ + { .altcode = "" }, /* 0x0691 */ + { .altcode = "" }, /* 0x0692 */ + { .altcode = "" }, /* 0x0693 */ + { .altcode = "" }, /* 0x0694 */ + { .altcode = "" }, /* 0x0695 */ + { .altcode = "" }, /* 0x0696 */ + { .altcode = "" }, /* 0x0697 */ + { .altcode = "" }, /* 0x0698 */ + { .altcode = "" }, /* 0x0699 */ + { .altcode = "" }, /* 0x069a */ + { .altcode = "" }, /* 0x069b */ + { .altcode = "" }, /* 0x069c */ + { .altcode = "" }, /* 0x069d */ + { .altcode = "" }, /* 0x069e */ + { .altcode = "" }, /* 0x069f */ + { .altcode = "" }, /* 0x06a0 */ + { .altcode = "" }, /* 0x06a1 (Serbian_dje) */ + { .altcode = "" }, /* 0x06a2 (Macedonia_gje) */ + { .altcode = "" }, /* 0x06a3 (Cyrillic_io) */ + { .altcode = "" }, /* 0x06a4 (Ukranian_je) */ + { .altcode = "" }, /* 0x06a5 (Macedonia_dse) */ + { .altcode = "" }, /* 0x06a6 (Ukranian_i) */ + { .altcode = "" }, /* 0x06a7 (Ukranian_yi) */ + { .altcode = "" }, /* 0x06a8 (Serbian_je) */ + { .altcode = "" }, /* 0x06a9 (Serbian_lje) */ + { .altcode = "" }, /* 0x06aa (Serbian_nje) */ + { .altcode = "" }, /* 0x06ab (Serbian_tshe) */ + { .altcode = "" }, /* 0x06ac (Macedonia_kje) */ + { .altcode = "" }, /* 0x06ad (Ukrainian_ghe_with_upturn) */ + { .altcode = "" }, /* 0x06ae (Byelorussian_shortu) */ + { .altcode = "" }, /* 0x06af (Serbian_dze) */ + { .altcode = "" }, /* 0x06b0 (numerosign) */ + { .altcode = "" }, /* 0x06b1 (Serbian_DJE) */ + { .altcode = "" }, /* 0x06b2 (Macedonia_GJE) */ + { .altcode = "" }, /* 0x06b3 (Cyrillic_IO) */ + { .altcode = "" }, /* 0x06b4 (Ukranian_JE) */ + { .altcode = "" }, /* 0x06b5 (Macedonia_DSE) */ + { .altcode = "" }, /* 0x06b6 (Ukranian_I) */ + { .altcode = "" }, /* 0x06b7 (Ukranian_YI) */ + { .altcode = "" }, /* 0x06b8 (Serbian_JE) */ + { .altcode = "" }, /* 0x06b9 (Serbian_LJE) */ + { .altcode = "" }, /* 0x06ba (Serbian_NJE) */ + { .altcode = "" }, /* 0x06bb (Serbian_TSHE) */ + { .altcode = "" }, /* 0x06bc (Macedonia_KJE) */ + { .altcode = "" }, /* 0x06bd (Ukrainian_GHE_WITH_UPTURN) */ + { .altcode = "" }, /* 0x06be (Byelorussian_SHORTU) */ + { .altcode = "" }, /* 0x06bf (Serbian_DZE) */ + { .altcode = "" }, /* 0x06c0 (Cyrillic_yu) */ + { .altcode = "" }, /* 0x06c1 (Cyrillic_a) */ + { .altcode = "" }, /* 0x06c2 (Cyrillic_be) */ + { .altcode = "" }, /* 0x06c3 (Cyrillic_tse) */ + { .altcode = "" }, /* 0x06c4 (Cyrillic_de) */ + { .altcode = "" }, /* 0x06c5 (Cyrillic_ie) */ + { .altcode = "" }, /* 0x06c6 (Cyrillic_ef) */ + { .altcode = "" }, /* 0x06c7 (Cyrillic_ghe) */ + { .altcode = "" }, /* 0x06c8 (Cyrillic_ha) */ + { .altcode = "" }, /* 0x06c9 (Cyrillic_i) */ + { .altcode = "" }, /* 0x06ca (Cyrillic_shorti) */ + { .altcode = "" }, /* 0x06cb (Cyrillic_ka) */ + { .altcode = "" }, /* 0x06cc (Cyrillic_el) */ + { .altcode = "" }, /* 0x06cd (Cyrillic_em) */ + { .altcode = "" }, /* 0x06ce (Cyrillic_en) */ + { .altcode = "" }, /* 0x06cf (Cyrillic_o) */ + { .altcode = "" }, /* 0x06d0 (Cyrillic_pe) */ + { .altcode = "" }, /* 0x06d1 (Cyrillic_ya) */ + { .altcode = "" }, /* 0x06d2 (Cyrillic_er) */ + { .altcode = "" }, /* 0x06d3 (Cyrillic_es) */ + { .altcode = "" }, /* 0x06d4 (Cyrillic_te) */ + { .altcode = "" }, /* 0x06d5 (Cyrillic_u) */ + { .altcode = "" }, /* 0x06d6 (Cyrillic_zhe) */ + { .altcode = "" }, /* 0x06d7 (Cyrillic_ve) */ + { .altcode = "" }, /* 0x06d8 (Cyrillic_softsign) */ + { .altcode = "" }, /* 0x06d9 (Cyrillic_yeru) */ + { .altcode = "" }, /* 0x06da (Cyrillic_ze) */ + { .altcode = "" }, /* 0x06db (Cyrillic_sha) */ + { .altcode = "" }, /* 0x06dc (Cyrillic_e) */ + { .altcode = "" }, /* 0x06dd (Cyrillic_shcha) */ + { .altcode = "" }, /* 0x06de (Cyrillic_che) */ + { .altcode = "" }, /* 0x06df (Cyrillic_hardsign) */ + { .altcode = "" }, /* 0x06e0 (Cyrillic_YU) */ + { .altcode = "" }, /* 0x06e1 (Cyrillic_A) */ + { .altcode = "" }, /* 0x06e2 (Cyrillic_BE) */ + { .altcode = "" }, /* 0x06e3 (Cyrillic_TSE) */ + { .altcode = "" }, /* 0x06e4 (Cyrillic_DE) */ + { .altcode = "" }, /* 0x06e5 (Cyrillic_IE) */ + { .altcode = "" }, /* 0x06e6 (Cyrillic_EF) */ + { .altcode = "" }, /* 0x06e7 (Cyrillic_GHE) */ + { .altcode = "" }, /* 0x06e8 (Cyrillic_HA) */ + { .altcode = "" }, /* 0x06e9 (Cyrillic_I) */ + { .altcode = "" }, /* 0x06ea (Cyrillic_SHORTI) */ + { .altcode = "" }, /* 0x06eb (Cyrillic_KA) */ + { .altcode = "" }, /* 0x06ec (Cyrillic_EL) */ + { .altcode = "" }, /* 0x06ed (Cyrillic_EM) */ + { .altcode = "" }, /* 0x06ee (Cyrillic_EN) */ + { .altcode = "" }, /* 0x06ef (Cyrillic_O) */ + { .altcode = "" }, /* 0x06f0 (Cyrillic_PE) */ + { .altcode = "" }, /* 0x06f1 (Cyrillic_YA) */ + { .altcode = "" }, /* 0x06f2 (Cyrillic_ER) */ + { .altcode = "" }, /* 0x06f3 (Cyrillic_ES) */ + { .altcode = "" }, /* 0x06f4 (Cyrillic_TE) */ + { .altcode = "" }, /* 0x06f5 (Cyrillic_U) */ + { .altcode = "" }, /* 0x06f6 (Cyrillic_ZHE) */ + { .altcode = "" }, /* 0x06f7 (Cyrillic_VE) */ + { .altcode = "" }, /* 0x06f8 (Cyrillic_SOFTSIGN) */ + { .altcode = "" }, /* 0x06f9 (Cyrillic_YERU) */ + { .altcode = "" }, /* 0x06fa (Cyrillic_ZE) */ + { .altcode = "" }, /* 0x06fb (Cyrillic_SHA) */ + { .altcode = "" }, /* 0x06fc (Cyrillic_E) */ + { .altcode = "" }, /* 0x06fd (Cyrillic_SHCHA) */ + { .altcode = "" }, /* 0x06fe (Cyrillic_CHE) */ + { .altcode = "" }, /* 0x06ff (Cyrillic_HARDSIGN) */ + }, + { /* 0x07?? */ + { .altcode = "" }, /* 0x0700 */ + { .altcode = "" }, /* 0x0701 */ + { .altcode = "" }, /* 0x0702 */ + { .altcode = "" }, /* 0x0703 */ + { .altcode = "" }, /* 0x0704 */ + { .altcode = "" }, /* 0x0705 */ + { .altcode = "" }, /* 0x0706 */ + { .altcode = "" }, /* 0x0707 */ + { .altcode = "" }, /* 0x0708 */ + { .altcode = "" }, /* 0x0709 */ + { .altcode = "" }, /* 0x070a */ + { .altcode = "" }, /* 0x070b */ + { .altcode = "" }, /* 0x070c */ + { .altcode = "" }, /* 0x070d */ + { .altcode = "" }, /* 0x070e */ + { .altcode = "" }, /* 0x070f */ + { .altcode = "" }, /* 0x0710 */ + { .altcode = "" }, /* 0x0711 */ + { .altcode = "" }, /* 0x0712 */ + { .altcode = "" }, /* 0x0713 */ + { .altcode = "" }, /* 0x0714 */ + { .altcode = "" }, /* 0x0715 */ + { .altcode = "" }, /* 0x0716 */ + { .altcode = "" }, /* 0x0717 */ + { .altcode = "" }, /* 0x0718 */ + { .altcode = "" }, /* 0x0719 */ + { .altcode = "" }, /* 0x071a */ + { .altcode = "" }, /* 0x071b */ + { .altcode = "" }, /* 0x071c */ + { .altcode = "" }, /* 0x071d */ + { .altcode = "" }, /* 0x071e */ + { .altcode = "" }, /* 0x071f */ + { .altcode = "" }, /* 0x0720 */ + { .altcode = "" }, /* 0x0721 */ + { .altcode = "" }, /* 0x0722 */ + { .altcode = "" }, /* 0x0723 */ + { .altcode = "" }, /* 0x0724 */ + { .altcode = "" }, /* 0x0725 */ + { .altcode = "" }, /* 0x0726 */ + { .altcode = "" }, /* 0x0727 */ + { .altcode = "" }, /* 0x0728 */ + { .altcode = "" }, /* 0x0729 */ + { .altcode = "" }, /* 0x072a */ + { .altcode = "" }, /* 0x072b */ + { .altcode = "" }, /* 0x072c */ + { .altcode = "" }, /* 0x072d */ + { .altcode = "" }, /* 0x072e */ + { .altcode = "" }, /* 0x072f */ + { .altcode = "" }, /* 0x0730 */ + { .altcode = "" }, /* 0x0731 */ + { .altcode = "" }, /* 0x0732 */ + { .altcode = "" }, /* 0x0733 */ + { .altcode = "" }, /* 0x0734 */ + { .altcode = "" }, /* 0x0735 */ + { .altcode = "" }, /* 0x0736 */ + { .altcode = "" }, /* 0x0737 */ + { .altcode = "" }, /* 0x0738 */ + { .altcode = "" }, /* 0x0739 */ + { .altcode = "" }, /* 0x073a */ + { .altcode = "" }, /* 0x073b */ + { .altcode = "" }, /* 0x073c */ + { .altcode = "" }, /* 0x073d */ + { .altcode = "" }, /* 0x073e */ + { .altcode = "" }, /* 0x073f */ + { .altcode = "" }, /* 0x0740 */ + { .altcode = "" }, /* 0x0741 */ + { .altcode = "" }, /* 0x0742 */ + { .altcode = "" }, /* 0x0743 */ + { .altcode = "" }, /* 0x0744 */ + { .altcode = "" }, /* 0x0745 */ + { .altcode = "" }, /* 0x0746 */ + { .altcode = "" }, /* 0x0747 */ + { .altcode = "" }, /* 0x0748 */ + { .altcode = "" }, /* 0x0749 */ + { .altcode = "" }, /* 0x074a */ + { .altcode = "" }, /* 0x074b */ + { .altcode = "" }, /* 0x074c */ + { .altcode = "" }, /* 0x074d */ + { .altcode = "" }, /* 0x074e */ + { .altcode = "" }, /* 0x074f */ + { .altcode = "" }, /* 0x0750 */ + { .altcode = "" }, /* 0x0751 */ + { .altcode = "" }, /* 0x0752 */ + { .altcode = "" }, /* 0x0753 */ + { .altcode = "" }, /* 0x0754 */ + { .altcode = "" }, /* 0x0755 */ + { .altcode = "" }, /* 0x0756 */ + { .altcode = "" }, /* 0x0757 */ + { .altcode = "" }, /* 0x0758 */ + { .altcode = "" }, /* 0x0759 */ + { .altcode = "" }, /* 0x075a */ + { .altcode = "" }, /* 0x075b */ + { .altcode = "" }, /* 0x075c */ + { .altcode = "" }, /* 0x075d */ + { .altcode = "" }, /* 0x075e */ + { .altcode = "" }, /* 0x075f */ + { .altcode = "" }, /* 0x0760 */ + { .altcode = "" }, /* 0x0761 */ + { .altcode = "" }, /* 0x0762 */ + { .altcode = "" }, /* 0x0763 */ + { .altcode = "" }, /* 0x0764 */ + { .altcode = "" }, /* 0x0765 */ + { .altcode = "" }, /* 0x0766 */ + { .altcode = "" }, /* 0x0767 */ + { .altcode = "" }, /* 0x0768 */ + { .altcode = "" }, /* 0x0769 */ + { .altcode = "" }, /* 0x076a */ + { .altcode = "" }, /* 0x076b */ + { .altcode = "" }, /* 0x076c */ + { .altcode = "" }, /* 0x076d */ + { .altcode = "" }, /* 0x076e */ + { .altcode = "" }, /* 0x076f */ + { .altcode = "" }, /* 0x0770 */ + { .altcode = "" }, /* 0x0771 */ + { .altcode = "" }, /* 0x0772 */ + { .altcode = "" }, /* 0x0773 */ + { .altcode = "" }, /* 0x0774 */ + { .altcode = "" }, /* 0x0775 */ + { .altcode = "" }, /* 0x0776 */ + { .altcode = "" }, /* 0x0777 */ + { .altcode = "" }, /* 0x0778 */ + { .altcode = "" }, /* 0x0779 */ + { .altcode = "" }, /* 0x077a */ + { .altcode = "" }, /* 0x077b */ + { .altcode = "" }, /* 0x077c */ + { .altcode = "" }, /* 0x077d */ + { .altcode = "" }, /* 0x077e */ + { .altcode = "" }, /* 0x077f */ + { .altcode = "" }, /* 0x0780 */ + { .altcode = "" }, /* 0x0781 */ + { .altcode = "" }, /* 0x0782 */ + { .altcode = "" }, /* 0x0783 */ + { .altcode = "" }, /* 0x0784 */ + { .altcode = "" }, /* 0x0785 */ + { .altcode = "" }, /* 0x0786 */ + { .altcode = "" }, /* 0x0787 */ + { .altcode = "" }, /* 0x0788 */ + { .altcode = "" }, /* 0x0789 */ + { .altcode = "" }, /* 0x078a */ + { .altcode = "" }, /* 0x078b */ + { .altcode = "" }, /* 0x078c */ + { .altcode = "" }, /* 0x078d */ + { .altcode = "" }, /* 0x078e */ + { .altcode = "" }, /* 0x078f */ + { .altcode = "" }, /* 0x0790 */ + { .altcode = "" }, /* 0x0791 */ + { .altcode = "" }, /* 0x0792 */ + { .altcode = "" }, /* 0x0793 */ + { .altcode = "" }, /* 0x0794 */ + { .altcode = "" }, /* 0x0795 */ + { .altcode = "" }, /* 0x0796 */ + { .altcode = "" }, /* 0x0797 */ + { .altcode = "" }, /* 0x0798 */ + { .altcode = "" }, /* 0x0799 */ + { .altcode = "" }, /* 0x079a */ + { .altcode = "" }, /* 0x079b */ + { .altcode = "" }, /* 0x079c */ + { .altcode = "" }, /* 0x079d */ + { .altcode = "" }, /* 0x079e */ + { .altcode = "" }, /* 0x079f */ + { .altcode = "" }, /* 0x07a0 */ + { .altcode = "" }, /* 0x07a1 (Greek_ALPHAaccent) */ + { .altcode = "" }, /* 0x07a2 (Greek_EPSILONaccent) */ + { .altcode = "" }, /* 0x07a3 (Greek_ETAaccent) */ + { .altcode = "" }, /* 0x07a4 (Greek_IOTAaccent) */ + { .altcode = "" }, /* 0x07a5 (Greek_IOTAdiaeresis) */ + { .altcode = "" }, /* 0x07a6 */ + { .altcode = "" }, /* 0x07a7 (Greek_OMICRONaccent) */ + { .altcode = "" }, /* 0x07a8 (Greek_UPSILONaccent) */ + { .altcode = "" }, /* 0x07a9 (Greek_UPSILONdieresis) */ + { .altcode = "" }, /* 0x07aa */ + { .altcode = "" }, /* 0x07ab (Greek_OMEGAaccent) */ + { .altcode = "" }, /* 0x07ac */ + { .altcode = "" }, /* 0x07ad */ + { .altcode = "" }, /* 0x07ae (Greek_accentdieresis) */ + { .altcode = "" }, /* 0x07af (Greek_horizbar) */ + { .altcode = "" }, /* 0x07b0 */ + { .altcode = "" }, /* 0x07b1 (Greek_alphaaccent) */ + { .altcode = "" }, /* 0x07b2 (Greek_epsilonaccent) */ + { .altcode = "" }, /* 0x07b3 (Greek_etaaccent) */ + { .altcode = "" }, /* 0x07b4 (Greek_iotaaccent) */ + { .altcode = "" }, /* 0x07b5 (Greek_iotadieresis) */ + { .altcode = "" }, /* 0x07b6 (Greek_iotaaccentdieresis) */ + { .altcode = "" }, /* 0x07b7 (Greek_omicronaccent) */ + { .altcode = "" }, /* 0x07b8 (Greek_upsilonaccent) */ + { .altcode = "" }, /* 0x07b9 (Greek_upsilondieresis) */ + { .altcode = "" }, /* 0x07ba (Greek_upsilonaccentdieresis) */ + { .altcode = "" }, /* 0x07bb (Greek_omegaaccent) */ + { .altcode = "" }, /* 0x07bc */ + { .altcode = "" }, /* 0x07bd */ + { .altcode = "" }, /* 0x07be */ + { .altcode = "" }, /* 0x07bf */ + { .altcode = "" }, /* 0x07c0 */ + { .altcode = "" }, /* 0x07c1 (Greek_ALPHA) */ + { .altcode = "" }, /* 0x07c2 (Greek_BETA) */ + { .altcode = "" }, /* 0x07c3 (Greek_GAMMA) */ + { .altcode = "" }, /* 0x07c4 (Greek_DELTA) */ + { .altcode = "" }, /* 0x07c5 (Greek_EPSILON) */ + { .altcode = "" }, /* 0x07c6 (Greek_ZETA) */ + { .altcode = "" }, /* 0x07c7 (Greek_ETA) */ + { .altcode = "" }, /* 0x07c8 (Greek_THETA) */ + { .altcode = "" }, /* 0x07c9 (Greek_IOTA) */ + { .altcode = "" }, /* 0x07ca (Greek_KAPPA) */ + { .altcode = "" }, /* 0x07cb (Greek_LAMBDA) */ + { .altcode = "" }, /* 0x07cc (Greek_MU) */ + { .altcode = "" }, /* 0x07cd (Greek_NU) */ + { .altcode = "" }, /* 0x07ce (Greek_XI) */ + { .altcode = "" }, /* 0x07cf (Greek_OMICRON) */ + { .altcode = "" }, /* 0x07d0 (Greek_PI) */ + { .altcode = "" }, /* 0x07d1 (Greek_RHO) */ + { .altcode = "" }, /* 0x07d2 (Greek_SIGMA) */ + { .altcode = "" }, /* 0x07d3 */ + { .altcode = "" }, /* 0x07d4 (Greek_TAU) */ + { .altcode = "" }, /* 0x07d5 (Greek_UPSILON) */ + { .altcode = "" }, /* 0x07d6 (Greek_PHI) */ + { .altcode = "" }, /* 0x07d7 (Greek_CHI) */ + { .altcode = "" }, /* 0x07d8 (Greek_PSI) */ + { .altcode = "" }, /* 0x07d9 (Greek_OMEGA) */ + { .altcode = "" }, /* 0x07da */ + { .altcode = "" }, /* 0x07db */ + { .altcode = "" }, /* 0x07dc */ + { .altcode = "" }, /* 0x07dd */ + { .altcode = "" }, /* 0x07de */ + { .altcode = "" }, /* 0x07df */ + { .altcode = "" }, /* 0x07e0 */ + { .altcode = "" }, /* 0x07e1 (Greek_alpha) */ + { .altcode = "" }, /* 0x07e2 (Greek_beta) */ + { .altcode = "" }, /* 0x07e3 (Greek_gamma) */ + { .altcode = "" }, /* 0x07e4 (Greek_delta) */ + { .altcode = "" }, /* 0x07e5 (Greek_epsilon) */ + { .altcode = "" }, /* 0x07e6 (Greek_zeta) */ + { .altcode = "" }, /* 0x07e7 (Greek_eta) */ + { .altcode = "" }, /* 0x07e8 (Greek_theta) */ + { .altcode = "" }, /* 0x07e9 (Greek_iota) */ + { .altcode = "" }, /* 0x07ea (Greek_kappa) */ + { .altcode = "" }, /* 0x07eb (Greek_lambda) */ + { .altcode = "" }, /* 0x07ec (Greek_mu) */ + { .altcode = "" }, /* 0x07ed (Greek_nu) */ + { .altcode = "" }, /* 0x07ee (Greek_xi) */ + { .altcode = "" }, /* 0x07ef (Greek_omicron) */ + { .altcode = "" }, /* 0x07f0 (Greek_pi) */ + { .altcode = "" }, /* 0x07f1 (Greek_rho) */ + { .altcode = "" }, /* 0x07f2 (Greek_sigma) */ + { .altcode = "" }, /* 0x07f3 (Greek_finalsmallsigma) */ + { .altcode = "" }, /* 0x07f4 (Greek_tau) */ + { .altcode = "" }, /* 0x07f5 (Greek_upsilon) */ + { .altcode = "" }, /* 0x07f6 (Greek_phi) */ + { .altcode = "" }, /* 0x07f7 (Greek_chi) */ + { .altcode = "" }, /* 0x07f8 (Greek_psi) */ + { .altcode = "" }, /* 0x07f9 (Greek_omega) */ + { .altcode = "" }, /* 0x07fa */ + { .altcode = "" }, /* 0x07fb */ + { .altcode = "" }, /* 0x07fc */ + { .altcode = "" }, /* 0x07fd */ + { .altcode = "" }, /* 0x07fe */ + { .altcode = "" }, /* 0x07ff */ + }, + { /* 0x08?? */ + { .altcode = "" }, /* 0x0800 */ + { .altcode = "" }, /* 0x0801 */ + { .altcode = "" }, /* 0x0802 */ + { .altcode = "" }, /* 0x0803 */ + { .altcode = "" }, /* 0x0804 */ + { .altcode = "" }, /* 0x0805 */ + { .altcode = "" }, /* 0x0806 */ + { .altcode = "" }, /* 0x0807 */ + { .altcode = "" }, /* 0x0808 */ + { .altcode = "" }, /* 0x0809 */ + { .altcode = "" }, /* 0x080a */ + { .altcode = "" }, /* 0x080b */ + { .altcode = "" }, /* 0x080c */ + { .altcode = "" }, /* 0x080d */ + { .altcode = "" }, /* 0x080e */ + { .altcode = "" }, /* 0x080f */ + { .altcode = "" }, /* 0x0810 */ + { .altcode = "" }, /* 0x0811 */ + { .altcode = "" }, /* 0x0812 */ + { .altcode = "" }, /* 0x0813 */ + { .altcode = "" }, /* 0x0814 */ + { .altcode = "" }, /* 0x0815 */ + { .altcode = "" }, /* 0x0816 */ + { .altcode = "" }, /* 0x0817 */ + { .altcode = "" }, /* 0x0818 */ + { .altcode = "" }, /* 0x0819 */ + { .altcode = "" }, /* 0x081a */ + { .altcode = "" }, /* 0x081b */ + { .altcode = "" }, /* 0x081c */ + { .altcode = "" }, /* 0x081d */ + { .altcode = "" }, /* 0x081e */ + { .altcode = "" }, /* 0x081f */ + { .altcode = "" }, /* 0x0820 */ + { .altcode = "" }, /* 0x0821 */ + { .altcode = "" }, /* 0x0822 */ + { .altcode = "" }, /* 0x0823 */ + { .altcode = "" }, /* 0x0824 */ + { .altcode = "" }, /* 0x0825 */ + { .altcode = "" }, /* 0x0826 */ + { .altcode = "" }, /* 0x0827 */ + { .altcode = "" }, /* 0x0828 */ + { .altcode = "" }, /* 0x0829 */ + { .altcode = "" }, /* 0x082a */ + { .altcode = "" }, /* 0x082b */ + { .altcode = "" }, /* 0x082c */ + { .altcode = "" }, /* 0x082d */ + { .altcode = "" }, /* 0x082e */ + { .altcode = "" }, /* 0x082f */ + { .altcode = "" }, /* 0x0830 */ + { .altcode = "" }, /* 0x0831 */ + { .altcode = "" }, /* 0x0832 */ + { .altcode = "" }, /* 0x0833 */ + { .altcode = "" }, /* 0x0834 */ + { .altcode = "" }, /* 0x0835 */ + { .altcode = "" }, /* 0x0836 */ + { .altcode = "" }, /* 0x0837 */ + { .altcode = "" }, /* 0x0838 */ + { .altcode = "" }, /* 0x0839 */ + { .altcode = "" }, /* 0x083a */ + { .altcode = "" }, /* 0x083b */ + { .altcode = "" }, /* 0x083c */ + { .altcode = "" }, /* 0x083d */ + { .altcode = "" }, /* 0x083e */ + { .altcode = "" }, /* 0x083f */ + { .altcode = "" }, /* 0x0840 */ + { .altcode = "" }, /* 0x0841 */ + { .altcode = "" }, /* 0x0842 */ + { .altcode = "" }, /* 0x0843 */ + { .altcode = "" }, /* 0x0844 */ + { .altcode = "" }, /* 0x0845 */ + { .altcode = "" }, /* 0x0846 */ + { .altcode = "" }, /* 0x0847 */ + { .altcode = "" }, /* 0x0848 */ + { .altcode = "" }, /* 0x0849 */ + { .altcode = "" }, /* 0x084a */ + { .altcode = "" }, /* 0x084b */ + { .altcode = "" }, /* 0x084c */ + { .altcode = "" }, /* 0x084d */ + { .altcode = "" }, /* 0x084e */ + { .altcode = "" }, /* 0x084f */ + { .altcode = "" }, /* 0x0850 */ + { .altcode = "" }, /* 0x0851 */ + { .altcode = "" }, /* 0x0852 */ + { .altcode = "" }, /* 0x0853 */ + { .altcode = "" }, /* 0x0854 */ + { .altcode = "" }, /* 0x0855 */ + { .altcode = "" }, /* 0x0856 */ + { .altcode = "" }, /* 0x0857 */ + { .altcode = "" }, /* 0x0858 */ + { .altcode = "" }, /* 0x0859 */ + { .altcode = "" }, /* 0x085a */ + { .altcode = "" }, /* 0x085b */ + { .altcode = "" }, /* 0x085c */ + { .altcode = "" }, /* 0x085d */ + { .altcode = "" }, /* 0x085e */ + { .altcode = "" }, /* 0x085f */ + { .altcode = "" }, /* 0x0860 */ + { .altcode = "" }, /* 0x0861 */ + { .altcode = "" }, /* 0x0862 */ + { .altcode = "" }, /* 0x0863 */ + { .altcode = "" }, /* 0x0864 */ + { .altcode = "" }, /* 0x0865 */ + { .altcode = "" }, /* 0x0866 */ + { .altcode = "" }, /* 0x0867 */ + { .altcode = "" }, /* 0x0868 */ + { .altcode = "" }, /* 0x0869 */ + { .altcode = "" }, /* 0x086a */ + { .altcode = "" }, /* 0x086b */ + { .altcode = "" }, /* 0x086c */ + { .altcode = "" }, /* 0x086d */ + { .altcode = "" }, /* 0x086e */ + { .altcode = "" }, /* 0x086f */ + { .altcode = "" }, /* 0x0870 */ + { .altcode = "" }, /* 0x0871 */ + { .altcode = "" }, /* 0x0872 */ + { .altcode = "" }, /* 0x0873 */ + { .altcode = "" }, /* 0x0874 */ + { .altcode = "" }, /* 0x0875 */ + { .altcode = "" }, /* 0x0876 */ + { .altcode = "" }, /* 0x0877 */ + { .altcode = "" }, /* 0x0878 */ + { .altcode = "" }, /* 0x0879 */ + { .altcode = "" }, /* 0x087a */ + { .altcode = "" }, /* 0x087b */ + { .altcode = "" }, /* 0x087c */ + { .altcode = "" }, /* 0x087d */ + { .altcode = "" }, /* 0x087e */ + { .altcode = "" }, /* 0x087f */ + { .altcode = "" }, /* 0x0880 */ + { .altcode = "" }, /* 0x0881 */ + { .altcode = "" }, /* 0x0882 */ + { .altcode = "" }, /* 0x0883 */ + { .altcode = "" }, /* 0x0884 */ + { .altcode = "" }, /* 0x0885 */ + { .altcode = "" }, /* 0x0886 */ + { .altcode = "" }, /* 0x0887 */ + { .altcode = "" }, /* 0x0888 */ + { .altcode = "" }, /* 0x0889 */ + { .altcode = "" }, /* 0x088a */ + { .altcode = "" }, /* 0x088b */ + { .altcode = "" }, /* 0x088c */ + { .altcode = "" }, /* 0x088d */ + { .altcode = "" }, /* 0x088e */ + { .altcode = "" }, /* 0x088f */ + { .altcode = "" }, /* 0x0890 */ + { .altcode = "" }, /* 0x0891 */ + { .altcode = "" }, /* 0x0892 */ + { .altcode = "" }, /* 0x0893 */ + { .altcode = "" }, /* 0x0894 */ + { .altcode = "" }, /* 0x0895 */ + { .altcode = "" }, /* 0x0896 */ + { .altcode = "" }, /* 0x0897 */ + { .altcode = "" }, /* 0x0898 */ + { .altcode = "" }, /* 0x0899 */ + { .altcode = "" }, /* 0x089a */ + { .altcode = "" }, /* 0x089b */ + { .altcode = "" }, /* 0x089c */ + { .altcode = "" }, /* 0x089d */ + { .altcode = "" }, /* 0x089e */ + { .altcode = "" }, /* 0x089f */ + { .altcode = "" }, /* 0x08a0 */ + { .altcode = "" }, /* 0x08a1 (leftradical) */ + { .altcode = "" }, /* 0x08a2 (topleftradical) */ + { .altcode = "" }, /* 0x08a3 (horizconnector) */ + { .altcode = "" }, /* 0x08a4 (topintegral) */ + { .altcode = "" }, /* 0x08a5 (botintegral) */ + { .altcode = "" }, /* 0x08a6 (vertconnector) */ + { .altcode = "" }, /* 0x08a7 (topleftsqbracket) */ + { .altcode = "" }, /* 0x08a8 (botleftsqbracket) */ + { .altcode = "" }, /* 0x08a9 (toprightsqbracket) */ + { .altcode = "" }, /* 0x08aa (botrightsqbracket) */ + { .altcode = "" }, /* 0x08ab (topleftparens) */ + { .altcode = "" }, /* 0x08ac (botleftparens) */ + { .altcode = "" }, /* 0x08ad (toprightparens) */ + { .altcode = "" }, /* 0x08ae (botrightparens) */ + { .altcode = "" }, /* 0x08af (leftmiddlecurlybrace) */ + { .altcode = "" }, /* 0x08b0 (rightmiddlecurlybrace) */ + { .altcode = "" }, /* 0x08b1 (topleftsummation) */ + { .altcode = "" }, /* 0x08b2 (botleftsummation) */ + { .altcode = "" }, /* 0x08b3 (topvertsummationconnector) */ + { .altcode = "" }, /* 0x08b4 (botvertsummationconnector) */ + { .altcode = "" }, /* 0x08b5 (toprightsummation) */ + { .altcode = "" }, /* 0x08b6 (botrightsummation) */ + { .altcode = "" }, /* 0x08b7 (rightmiddlesummation) */ + { .altcode = "" }, /* 0x08b8 */ + { .altcode = "" }, /* 0x08b9 */ + { .altcode = "" }, /* 0x08ba */ + { .altcode = "" }, /* 0x08bb */ + { .altcode = "" }, /* 0x08bc (lessthanequal) */ + { .altcode = "" }, /* 0x08bd (notequal) */ + { .altcode = "" }, /* 0x08be (greaterthanequal) */ + { .altcode = "" }, /* 0x08bf (integral) */ + { .altcode = "" }, /* 0x08c0 (therefore) */ + { .altcode = "" }, /* 0x08c1 (variation) */ + { .altcode = "" }, /* 0x08c2 (infinity) */ + { .altcode = "" }, /* 0x08c3 */ + { .altcode = "" }, /* 0x08c4 */ + { .altcode = "" }, /* 0x08c5 (nabla) */ + { .altcode = "" }, /* 0x08c6 */ + { .altcode = "" }, /* 0x08c7 */ + { .altcode = "" }, /* 0x08c8 (approximate) */ + { .altcode = "" }, /* 0x08c9 (similarequal) */ + { .altcode = "" }, /* 0x08ca */ + { .altcode = "" }, /* 0x08cb */ + { .altcode = "" }, /* 0x08cc */ + { .altcode = "" }, /* 0x08cd (ifonlyif) */ + { .altcode = "" }, /* 0x08ce (implies) */ + { .altcode = "" }, /* 0x08cf (identical) */ + { .altcode = "" }, /* 0x08d0 */ + { .altcode = "" }, /* 0x08d1 */ + { .altcode = "" }, /* 0x08d2 */ + { .altcode = "" }, /* 0x08d3 */ + { .altcode = "" }, /* 0x08d4 */ + { .altcode = "" }, /* 0x08d5 */ + { .altcode = "" }, /* 0x08d6 (radical) */ + { .altcode = "" }, /* 0x08d7 */ + { .altcode = "" }, /* 0x08d8 */ + { .altcode = "" }, /* 0x08d9 */ + { .altcode = "" }, /* 0x08da (includedin) */ + { .altcode = "" }, /* 0x08db (includes) */ + { .altcode = "" }, /* 0x08dc (intersection) */ + { .altcode = "" }, /* 0x08dd (union) */ + { .altcode = "" }, /* 0x08de (logicaland) */ + { .altcode = "" }, /* 0x08df (logicalor) */ + { .altcode = "" }, /* 0x08e0 */ + { .altcode = "" }, /* 0x08e1 */ + { .altcode = "" }, /* 0x08e2 */ + { .altcode = "" }, /* 0x08e3 */ + { .altcode = "" }, /* 0x08e4 */ + { .altcode = "" }, /* 0x08e5 */ + { .altcode = "" }, /* 0x08e6 */ + { .altcode = "" }, /* 0x08e7 */ + { .altcode = "" }, /* 0x08e8 */ + { .altcode = "" }, /* 0x08e9 */ + { .altcode = "" }, /* 0x08ea */ + { .altcode = "" }, /* 0x08eb */ + { .altcode = "" }, /* 0x08ec */ + { .altcode = "" }, /* 0x08ed */ + { .altcode = "" }, /* 0x08ee */ + { .altcode = "" }, /* 0x08ef (partialderivative) */ + { .altcode = "" }, /* 0x08f0 */ + { .altcode = "" }, /* 0x08f1 */ + { .altcode = "" }, /* 0x08f2 */ + { .altcode = "" }, /* 0x08f3 */ + { .altcode = "" }, /* 0x08f4 */ + { .altcode = "" }, /* 0x08f5 */ + { .altcode = "" }, /* 0x08f6 (function) */ + { .altcode = "" }, /* 0x08f7 */ + { .altcode = "" }, /* 0x08f8 */ + { .altcode = "" }, /* 0x08f9 */ + { .altcode = "" }, /* 0x08fa */ + { .altcode = "" }, /* 0x08fb (leftarrow) */ + { .altcode = "" }, /* 0x08fc (uparrow) */ + { .altcode = "" }, /* 0x08fd (rightarrow) */ + { .altcode = "" }, /* 0x08fe (downarrow) */ + { .altcode = "" }, /* 0x08ff */ + }, + { /* 0x09?? */ + { .altcode = "" }, /* 0x0900 */ + { .altcode = "" }, /* 0x0901 */ + { .altcode = "" }, /* 0x0902 */ + { .altcode = "" }, /* 0x0903 */ + { .altcode = "" }, /* 0x0904 */ + { .altcode = "" }, /* 0x0905 */ + { .altcode = "" }, /* 0x0906 */ + { .altcode = "" }, /* 0x0907 */ + { .altcode = "" }, /* 0x0908 */ + { .altcode = "" }, /* 0x0909 */ + { .altcode = "" }, /* 0x090a */ + { .altcode = "" }, /* 0x090b */ + { .altcode = "" }, /* 0x090c */ + { .altcode = "" }, /* 0x090d */ + { .altcode = "" }, /* 0x090e */ + { .altcode = "" }, /* 0x090f */ + { .altcode = "" }, /* 0x0910 */ + { .altcode = "" }, /* 0x0911 */ + { .altcode = "" }, /* 0x0912 */ + { .altcode = "" }, /* 0x0913 */ + { .altcode = "" }, /* 0x0914 */ + { .altcode = "" }, /* 0x0915 */ + { .altcode = "" }, /* 0x0916 */ + { .altcode = "" }, /* 0x0917 */ + { .altcode = "" }, /* 0x0918 */ + { .altcode = "" }, /* 0x0919 */ + { .altcode = "" }, /* 0x091a */ + { .altcode = "" }, /* 0x091b */ + { .altcode = "" }, /* 0x091c */ + { .altcode = "" }, /* 0x091d */ + { .altcode = "" }, /* 0x091e */ + { .altcode = "" }, /* 0x091f */ + { .altcode = "" }, /* 0x0920 */ + { .altcode = "" }, /* 0x0921 */ + { .altcode = "" }, /* 0x0922 */ + { .altcode = "" }, /* 0x0923 */ + { .altcode = "" }, /* 0x0924 */ + { .altcode = "" }, /* 0x0925 */ + { .altcode = "" }, /* 0x0926 */ + { .altcode = "" }, /* 0x0927 */ + { .altcode = "" }, /* 0x0928 */ + { .altcode = "" }, /* 0x0929 */ + { .altcode = "" }, /* 0x092a */ + { .altcode = "" }, /* 0x092b */ + { .altcode = "" }, /* 0x092c */ + { .altcode = "" }, /* 0x092d */ + { .altcode = "" }, /* 0x092e */ + { .altcode = "" }, /* 0x092f */ + { .altcode = "" }, /* 0x0930 */ + { .altcode = "" }, /* 0x0931 */ + { .altcode = "" }, /* 0x0932 */ + { .altcode = "" }, /* 0x0933 */ + { .altcode = "" }, /* 0x0934 */ + { .altcode = "" }, /* 0x0935 */ + { .altcode = "" }, /* 0x0936 */ + { .altcode = "" }, /* 0x0937 */ + { .altcode = "" }, /* 0x0938 */ + { .altcode = "" }, /* 0x0939 */ + { .altcode = "" }, /* 0x093a */ + { .altcode = "" }, /* 0x093b */ + { .altcode = "" }, /* 0x093c */ + { .altcode = "" }, /* 0x093d */ + { .altcode = "" }, /* 0x093e */ + { .altcode = "" }, /* 0x093f */ + { .altcode = "" }, /* 0x0940 */ + { .altcode = "" }, /* 0x0941 */ + { .altcode = "" }, /* 0x0942 */ + { .altcode = "" }, /* 0x0943 */ + { .altcode = "" }, /* 0x0944 */ + { .altcode = "" }, /* 0x0945 */ + { .altcode = "" }, /* 0x0946 */ + { .altcode = "" }, /* 0x0947 */ + { .altcode = "" }, /* 0x0948 */ + { .altcode = "" }, /* 0x0949 */ + { .altcode = "" }, /* 0x094a */ + { .altcode = "" }, /* 0x094b */ + { .altcode = "" }, /* 0x094c */ + { .altcode = "" }, /* 0x094d */ + { .altcode = "" }, /* 0x094e */ + { .altcode = "" }, /* 0x094f */ + { .altcode = "" }, /* 0x0950 */ + { .altcode = "" }, /* 0x0951 */ + { .altcode = "" }, /* 0x0952 */ + { .altcode = "" }, /* 0x0953 */ + { .altcode = "" }, /* 0x0954 */ + { .altcode = "" }, /* 0x0955 */ + { .altcode = "" }, /* 0x0956 */ + { .altcode = "" }, /* 0x0957 */ + { .altcode = "" }, /* 0x0958 */ + { .altcode = "" }, /* 0x0959 */ + { .altcode = "" }, /* 0x095a */ + { .altcode = "" }, /* 0x095b */ + { .altcode = "" }, /* 0x095c */ + { .altcode = "" }, /* 0x095d */ + { .altcode = "" }, /* 0x095e */ + { .altcode = "" }, /* 0x095f */ + { .altcode = "" }, /* 0x0960 */ + { .altcode = "" }, /* 0x0961 */ + { .altcode = "" }, /* 0x0962 */ + { .altcode = "" }, /* 0x0963 */ + { .altcode = "" }, /* 0x0964 */ + { .altcode = "" }, /* 0x0965 */ + { .altcode = "" }, /* 0x0966 */ + { .altcode = "" }, /* 0x0967 */ + { .altcode = "" }, /* 0x0968 */ + { .altcode = "" }, /* 0x0969 */ + { .altcode = "" }, /* 0x096a */ + { .altcode = "" }, /* 0x096b */ + { .altcode = "" }, /* 0x096c */ + { .altcode = "" }, /* 0x096d */ + { .altcode = "" }, /* 0x096e */ + { .altcode = "" }, /* 0x096f */ + { .altcode = "" }, /* 0x0970 */ + { .altcode = "" }, /* 0x0971 */ + { .altcode = "" }, /* 0x0972 */ + { .altcode = "" }, /* 0x0973 */ + { .altcode = "" }, /* 0x0974 */ + { .altcode = "" }, /* 0x0975 */ + { .altcode = "" }, /* 0x0976 */ + { .altcode = "" }, /* 0x0977 */ + { .altcode = "" }, /* 0x0978 */ + { .altcode = "" }, /* 0x0979 */ + { .altcode = "" }, /* 0x097a */ + { .altcode = "" }, /* 0x097b */ + { .altcode = "" }, /* 0x097c */ + { .altcode = "" }, /* 0x097d */ + { .altcode = "" }, /* 0x097e */ + { .altcode = "" }, /* 0x097f */ + { .altcode = "" }, /* 0x0980 */ + { .altcode = "" }, /* 0x0981 */ + { .altcode = "" }, /* 0x0982 */ + { .altcode = "" }, /* 0x0983 */ + { .altcode = "" }, /* 0x0984 */ + { .altcode = "" }, /* 0x0985 */ + { .altcode = "" }, /* 0x0986 */ + { .altcode = "" }, /* 0x0987 */ + { .altcode = "" }, /* 0x0988 */ + { .altcode = "" }, /* 0x0989 */ + { .altcode = "" }, /* 0x098a */ + { .altcode = "" }, /* 0x098b */ + { .altcode = "" }, /* 0x098c */ + { .altcode = "" }, /* 0x098d */ + { .altcode = "" }, /* 0x098e */ + { .altcode = "" }, /* 0x098f */ + { .altcode = "" }, /* 0x0990 */ + { .altcode = "" }, /* 0x0991 */ + { .altcode = "" }, /* 0x0992 */ + { .altcode = "" }, /* 0x0993 */ + { .altcode = "" }, /* 0x0994 */ + { .altcode = "" }, /* 0x0995 */ + { .altcode = "" }, /* 0x0996 */ + { .altcode = "" }, /* 0x0997 */ + { .altcode = "" }, /* 0x0998 */ + { .altcode = "" }, /* 0x0999 */ + { .altcode = "" }, /* 0x099a */ + { .altcode = "" }, /* 0x099b */ + { .altcode = "" }, /* 0x099c */ + { .altcode = "" }, /* 0x099d */ + { .altcode = "" }, /* 0x099e */ + { .altcode = "" }, /* 0x099f */ + { .altcode = "" }, /* 0x09a0 */ + { .altcode = "" }, /* 0x09a1 */ + { .altcode = "" }, /* 0x09a2 */ + { .altcode = "" }, /* 0x09a3 */ + { .altcode = "" }, /* 0x09a4 */ + { .altcode = "" }, /* 0x09a5 */ + { .altcode = "" }, /* 0x09a6 */ + { .altcode = "" }, /* 0x09a7 */ + { .altcode = "" }, /* 0x09a8 */ + { .altcode = "" }, /* 0x09a9 */ + { .altcode = "" }, /* 0x09aa */ + { .altcode = "" }, /* 0x09ab */ + { .altcode = "" }, /* 0x09ac */ + { .altcode = "" }, /* 0x09ad */ + { .altcode = "" }, /* 0x09ae */ + { .altcode = "" }, /* 0x09af */ + { .altcode = "" }, /* 0x09b0 */ + { .altcode = "" }, /* 0x09b1 */ + { .altcode = "" }, /* 0x09b2 */ + { .altcode = "" }, /* 0x09b3 */ + { .altcode = "" }, /* 0x09b4 */ + { .altcode = "" }, /* 0x09b5 */ + { .altcode = "" }, /* 0x09b6 */ + { .altcode = "" }, /* 0x09b7 */ + { .altcode = "" }, /* 0x09b8 */ + { .altcode = "" }, /* 0x09b9 */ + { .altcode = "" }, /* 0x09ba */ + { .altcode = "" }, /* 0x09bb */ + { .altcode = "" }, /* 0x09bc */ + { .altcode = "" }, /* 0x09bd */ + { .altcode = "" }, /* 0x09be */ + { .altcode = "" }, /* 0x09bf */ + { .altcode = "" }, /* 0x09c0 */ + { .altcode = "" }, /* 0x09c1 */ + { .altcode = "" }, /* 0x09c2 */ + { .altcode = "" }, /* 0x09c3 */ + { .altcode = "" }, /* 0x09c4 */ + { .altcode = "" }, /* 0x09c5 */ + { .altcode = "" }, /* 0x09c6 */ + { .altcode = "" }, /* 0x09c7 */ + { .altcode = "" }, /* 0x09c8 */ + { .altcode = "" }, /* 0x09c9 */ + { .altcode = "" }, /* 0x09ca */ + { .altcode = "" }, /* 0x09cb */ + { .altcode = "" }, /* 0x09cc */ + { .altcode = "" }, /* 0x09cd */ + { .altcode = "" }, /* 0x09ce */ + { .altcode = "" }, /* 0x09cf */ + { .altcode = "" }, /* 0x09d0 */ + { .altcode = "" }, /* 0x09d1 */ + { .altcode = "" }, /* 0x09d2 */ + { .altcode = "" }, /* 0x09d3 */ + { .altcode = "" }, /* 0x09d4 */ + { .altcode = "" }, /* 0x09d5 */ + { .altcode = "" }, /* 0x09d6 */ + { .altcode = "" }, /* 0x09d7 */ + { .altcode = "" }, /* 0x09d8 */ + { .altcode = "" }, /* 0x09d9 */ + { .altcode = "" }, /* 0x09da */ + { .altcode = "" }, /* 0x09db */ + { .altcode = "" }, /* 0x09dc */ + { .altcode = "" }, /* 0x09dd */ + { .altcode = "" }, /* 0x09de */ + { .altcode = "" }, /* 0x09df (blank) */ + { .altcode = "" }, /* 0x09e0 (soliddiamond) */ + { .altcode = "" }, /* 0x09e1 (checkerboard) */ + { .altcode = "" }, /* 0x09e2 (ht) */ + { .altcode = "" }, /* 0x09e3 (ff) */ + { .altcode = "" }, /* 0x09e4 (cr) */ + { .altcode = "" }, /* 0x09e5 (lf) */ + { .altcode = "" }, /* 0x09e6 */ + { .altcode = "" }, /* 0x09e7 */ + { .altcode = "" }, /* 0x09e8 (nl) */ + { .altcode = "" }, /* 0x09e9 (vt) */ + { .altcode = "" }, /* 0x09ea (lowrightcorner) */ + { .altcode = "" }, /* 0x09eb (uprightcorner) */ + { .altcode = "" }, /* 0x09ec (upleftcorner) */ + { .altcode = "" }, /* 0x09ed (lowleftcorner) */ + { .altcode = "" }, /* 0x09ee (crossinglines) */ + { .altcode = "" }, /* 0x09ef (horizlinescan1) */ + { .altcode = "" }, /* 0x09f0 (horizlinescan3) */ + { .altcode = "" }, /* 0x09f1 (horizlinescan5) */ + { .altcode = "" }, /* 0x09f2 (horizlinescan7) */ + { .altcode = "" }, /* 0x09f3 (horizlinescan9) */ + { .altcode = "" }, /* 0x09f4 (leftt) */ + { .altcode = "" }, /* 0x09f5 (rightt) */ + { .altcode = "" }, /* 0x09f6 (bott) */ + { .altcode = "" }, /* 0x09f7 (topt) */ + { .altcode = "" }, /* 0x09f8 (vertbar) */ + { .altcode = "" }, /* 0x09f9 */ + { .altcode = "" }, /* 0x09fa */ + { .altcode = "" }, /* 0x09fb */ + { .altcode = "" }, /* 0x09fc */ + { .altcode = "" }, /* 0x09fd */ + { .altcode = "" }, /* 0x09fe */ + { .altcode = "" }, /* 0x09ff */ + }, + { /* 0x0a?? */ + { .altcode = "" }, /* 0x0a00 */ + { .altcode = "" }, /* 0x0a01 */ + { .altcode = "" }, /* 0x0a02 */ + { .altcode = "" }, /* 0x0a03 */ + { .altcode = "" }, /* 0x0a04 */ + { .altcode = "" }, /* 0x0a05 */ + { .altcode = "" }, /* 0x0a06 */ + { .altcode = "" }, /* 0x0a07 */ + { .altcode = "" }, /* 0x0a08 */ + { .altcode = "" }, /* 0x0a09 */ + { .altcode = "" }, /* 0x0a0a */ + { .altcode = "" }, /* 0x0a0b */ + { .altcode = "" }, /* 0x0a0c */ + { .altcode = "" }, /* 0x0a0d */ + { .altcode = "" }, /* 0x0a0e */ + { .altcode = "" }, /* 0x0a0f */ + { .altcode = "" }, /* 0x0a10 */ + { .altcode = "" }, /* 0x0a11 */ + { .altcode = "" }, /* 0x0a12 */ + { .altcode = "" }, /* 0x0a13 */ + { .altcode = "" }, /* 0x0a14 */ + { .altcode = "" }, /* 0x0a15 */ + { .altcode = "" }, /* 0x0a16 */ + { .altcode = "" }, /* 0x0a17 */ + { .altcode = "" }, /* 0x0a18 */ + { .altcode = "" }, /* 0x0a19 */ + { .altcode = "" }, /* 0x0a1a */ + { .altcode = "" }, /* 0x0a1b */ + { .altcode = "" }, /* 0x0a1c */ + { .altcode = "" }, /* 0x0a1d */ + { .altcode = "" }, /* 0x0a1e */ + { .altcode = "" }, /* 0x0a1f */ + { .altcode = "" }, /* 0x0a20 */ + { .altcode = "" }, /* 0x0a21 */ + { .altcode = "" }, /* 0x0a22 */ + { .altcode = "" }, /* 0x0a23 */ + { .altcode = "" }, /* 0x0a24 */ + { .altcode = "" }, /* 0x0a25 */ + { .altcode = "" }, /* 0x0a26 */ + { .altcode = "" }, /* 0x0a27 */ + { .altcode = "" }, /* 0x0a28 */ + { .altcode = "" }, /* 0x0a29 */ + { .altcode = "" }, /* 0x0a2a */ + { .altcode = "" }, /* 0x0a2b */ + { .altcode = "" }, /* 0x0a2c */ + { .altcode = "" }, /* 0x0a2d */ + { .altcode = "" }, /* 0x0a2e */ + { .altcode = "" }, /* 0x0a2f */ + { .altcode = "" }, /* 0x0a30 */ + { .altcode = "" }, /* 0x0a31 */ + { .altcode = "" }, /* 0x0a32 */ + { .altcode = "" }, /* 0x0a33 */ + { .altcode = "" }, /* 0x0a34 */ + { .altcode = "" }, /* 0x0a35 */ + { .altcode = "" }, /* 0x0a36 */ + { .altcode = "" }, /* 0x0a37 */ + { .altcode = "" }, /* 0x0a38 */ + { .altcode = "" }, /* 0x0a39 */ + { .altcode = "" }, /* 0x0a3a */ + { .altcode = "" }, /* 0x0a3b */ + { .altcode = "" }, /* 0x0a3c */ + { .altcode = "" }, /* 0x0a3d */ + { .altcode = "" }, /* 0x0a3e */ + { .altcode = "" }, /* 0x0a3f */ + { .altcode = "" }, /* 0x0a40 */ + { .altcode = "" }, /* 0x0a41 */ + { .altcode = "" }, /* 0x0a42 */ + { .altcode = "" }, /* 0x0a43 */ + { .altcode = "" }, /* 0x0a44 */ + { .altcode = "" }, /* 0x0a45 */ + { .altcode = "" }, /* 0x0a46 */ + { .altcode = "" }, /* 0x0a47 */ + { .altcode = "" }, /* 0x0a48 */ + { .altcode = "" }, /* 0x0a49 */ + { .altcode = "" }, /* 0x0a4a */ + { .altcode = "" }, /* 0x0a4b */ + { .altcode = "" }, /* 0x0a4c */ + { .altcode = "" }, /* 0x0a4d */ + { .altcode = "" }, /* 0x0a4e */ + { .altcode = "" }, /* 0x0a4f */ + { .altcode = "" }, /* 0x0a50 */ + { .altcode = "" }, /* 0x0a51 */ + { .altcode = "" }, /* 0x0a52 */ + { .altcode = "" }, /* 0x0a53 */ + { .altcode = "" }, /* 0x0a54 */ + { .altcode = "" }, /* 0x0a55 */ + { .altcode = "" }, /* 0x0a56 */ + { .altcode = "" }, /* 0x0a57 */ + { .altcode = "" }, /* 0x0a58 */ + { .altcode = "" }, /* 0x0a59 */ + { .altcode = "" }, /* 0x0a5a */ + { .altcode = "" }, /* 0x0a5b */ + { .altcode = "" }, /* 0x0a5c */ + { .altcode = "" }, /* 0x0a5d */ + { .altcode = "" }, /* 0x0a5e */ + { .altcode = "" }, /* 0x0a5f */ + { .altcode = "" }, /* 0x0a60 */ + { .altcode = "" }, /* 0x0a61 */ + { .altcode = "" }, /* 0x0a62 */ + { .altcode = "" }, /* 0x0a63 */ + { .altcode = "" }, /* 0x0a64 */ + { .altcode = "" }, /* 0x0a65 */ + { .altcode = "" }, /* 0x0a66 */ + { .altcode = "" }, /* 0x0a67 */ + { .altcode = "" }, /* 0x0a68 */ + { .altcode = "" }, /* 0x0a69 */ + { .altcode = "" }, /* 0x0a6a */ + { .altcode = "" }, /* 0x0a6b */ + { .altcode = "" }, /* 0x0a6c */ + { .altcode = "" }, /* 0x0a6d */ + { .altcode = "" }, /* 0x0a6e */ + { .altcode = "" }, /* 0x0a6f */ + { .altcode = "" }, /* 0x0a70 */ + { .altcode = "" }, /* 0x0a71 */ + { .altcode = "" }, /* 0x0a72 */ + { .altcode = "" }, /* 0x0a73 */ + { .altcode = "" }, /* 0x0a74 */ + { .altcode = "" }, /* 0x0a75 */ + { .altcode = "" }, /* 0x0a76 */ + { .altcode = "" }, /* 0x0a77 */ + { .altcode = "" }, /* 0x0a78 */ + { .altcode = "" }, /* 0x0a79 */ + { .altcode = "" }, /* 0x0a7a */ + { .altcode = "" }, /* 0x0a7b */ + { .altcode = "" }, /* 0x0a7c */ + { .altcode = "" }, /* 0x0a7d */ + { .altcode = "" }, /* 0x0a7e */ + { .altcode = "" }, /* 0x0a7f */ + { .altcode = "" }, /* 0x0a80 */ + { .altcode = "" }, /* 0x0a81 */ + { .altcode = "" }, /* 0x0a82 */ + { .altcode = "" }, /* 0x0a83 */ + { .altcode = "" }, /* 0x0a84 */ + { .altcode = "" }, /* 0x0a85 */ + { .altcode = "" }, /* 0x0a86 */ + { .altcode = "" }, /* 0x0a87 */ + { .altcode = "" }, /* 0x0a88 */ + { .altcode = "" }, /* 0x0a89 */ + { .altcode = "" }, /* 0x0a8a */ + { .altcode = "" }, /* 0x0a8b */ + { .altcode = "" }, /* 0x0a8c */ + { .altcode = "" }, /* 0x0a8d */ + { .altcode = "" }, /* 0x0a8e */ + { .altcode = "" }, /* 0x0a8f */ + { .altcode = "" }, /* 0x0a90 */ + { .altcode = "" }, /* 0x0a91 */ + { .altcode = "" }, /* 0x0a92 */ + { .altcode = "" }, /* 0x0a93 */ + { .altcode = "" }, /* 0x0a94 */ + { .altcode = "" }, /* 0x0a95 */ + { .altcode = "" }, /* 0x0a96 */ + { .altcode = "" }, /* 0x0a97 */ + { .altcode = "" }, /* 0x0a98 */ + { .altcode = "" }, /* 0x0a99 */ + { .altcode = "" }, /* 0x0a9a */ + { .altcode = "" }, /* 0x0a9b */ + { .altcode = "" }, /* 0x0a9c */ + { .altcode = "" }, /* 0x0a9d */ + { .altcode = "" }, /* 0x0a9e */ + { .altcode = "" }, /* 0x0a9f */ + { .altcode = "" }, /* 0x0aa0 */ + { .altcode = "" }, /* 0x0aa1 (emspace) */ + { .altcode = "" }, /* 0x0aa2 (enspace) */ + { .altcode = "" }, /* 0x0aa3 (em3space) */ + { .altcode = "" }, /* 0x0aa4 (em4space) */ + { .altcode = "" }, /* 0x0aa5 (digitspace) */ + { .altcode = "" }, /* 0x0aa6 (punctspace) */ + { .altcode = "" }, /* 0x0aa7 (thinspace) */ + { .altcode = "" }, /* 0x0aa8 (hairspace) */ + { .altcode = "" }, /* 0x0aa9 (emdash) */ + { .altcode = "" }, /* 0x0aaa (endash) */ + { .altcode = "" }, /* 0x0aab */ + { .altcode = "" }, /* 0x0aac (signifblank) */ + { .altcode = "" }, /* 0x0aad */ + { .altcode = "" }, /* 0x0aae (ellipsis) */ + { .altcode = "" }, /* 0x0aaf (doubbaselinedot) */ + { .altcode = "" }, /* 0x0ab0 (onethird) */ + { .altcode = "" }, /* 0x0ab1 (twothirds) */ + { .altcode = "" }, /* 0x0ab2 (onefifth) */ + { .altcode = "" }, /* 0x0ab3 (twofifths) */ + { .altcode = "" }, /* 0x0ab4 (threefifths) */ + { .altcode = "" }, /* 0x0ab5 (fourfifths) */ + { .altcode = "" }, /* 0x0ab6 (onesixth) */ + { .altcode = "" }, /* 0x0ab7 (fivesixths) */ + { .altcode = "" }, /* 0x0ab8 (careof) */ + { .altcode = "" }, /* 0x0ab9 */ + { .altcode = "" }, /* 0x0aba */ + { .altcode = "" }, /* 0x0abb (figdash) */ + { .altcode = "" }, /* 0x0abc (leftanglebracket) */ + { .altcode = "" }, /* 0x0abd (decimalpoint) */ + { .altcode = "" }, /* 0x0abe (rightanglebracket) */ + { .altcode = "" }, /* 0x0abf (marker) */ + { .altcode = "" }, /* 0x0ac0 */ + { .altcode = "" }, /* 0x0ac1 */ + { .altcode = "" }, /* 0x0ac2 */ + { .altcode = "" }, /* 0x0ac3 (oneeighth) */ + { .altcode = "" }, /* 0x0ac4 (threeeighths) */ + { .altcode = "" }, /* 0x0ac5 (fiveeighths) */ + { .altcode = "" }, /* 0x0ac6 (seveneighths) */ + { .altcode = "" }, /* 0x0ac7 */ + { .altcode = "" }, /* 0x0ac8 */ + { .altcode = "" }, /* 0x0ac9 (trademark) */ + { .altcode = "" }, /* 0x0aca (signaturemark) */ + { .altcode = "" }, /* 0x0acb (trademarkincircle) */ + { .altcode = "" }, /* 0x0acc (leftopentriangle) */ + { .altcode = "" }, /* 0x0acd (rightopentriangle) */ + { .altcode = "" }, /* 0x0ace (emopencircle) */ + { .altcode = "" }, /* 0x0acf (emopenrectangle) */ + { .altcode = "" }, /* 0x0ad0 (leftsinglequotemark) */ + { .altcode = "" }, /* 0x0ad1 (rightsinglequotemark) */ + { .altcode = "" }, /* 0x0ad2 (leftdoublequotemark) */ + { .altcode = "" }, /* 0x0ad3 (rightdoublequotemark) */ + { .altcode = "" }, /* 0x0ad4 (prescription) */ + { .altcode = "" }, /* 0x0ad5 */ + { .altcode = "" }, /* 0x0ad6 (minutes) */ + { .altcode = "" }, /* 0x0ad7 (seconds) */ + { .altcode = "" }, /* 0x0ad8 */ + { .altcode = "" }, /* 0x0ad9 (latincross) */ + { .altcode = "" }, /* 0x0ada (hexagram) */ + { .altcode = "" }, /* 0x0adb (filledrectbullet) */ + { .altcode = "" }, /* 0x0adc (filledlefttribullet) */ + { .altcode = "" }, /* 0x0add (filledrighttribullet) */ + { .altcode = "" }, /* 0x0ade (emfilledcircle) */ + { .altcode = "" }, /* 0x0adf (emfilledrect) */ + { .altcode = "" }, /* 0x0ae0 (enopencircbullet) */ + { .altcode = "" }, /* 0x0ae1 (enopensquarebullet) */ + { .altcode = "" }, /* 0x0ae2 (openrectbullet) */ + { .altcode = "" }, /* 0x0ae3 (opentribulletup) */ + { .altcode = "" }, /* 0x0ae4 (opentribulletdown) */ + { .altcode = "" }, /* 0x0ae5 (openstar) */ + { .altcode = "" }, /* 0x0ae6 (enfilledcircbullet) */ + { .altcode = "" }, /* 0x0ae7 (enfilledsqbullet) */ + { .altcode = "" }, /* 0x0ae8 (filledtribulletup) */ + { .altcode = "" }, /* 0x0ae9 (filledtribulletdown) */ + { .altcode = "" }, /* 0x0aea (leftpointer) */ + { .altcode = "" }, /* 0x0aeb (rightpointer) */ + { .altcode = "" }, /* 0x0aec (club) */ + { .altcode = "" }, /* 0x0aed (diamond) */ + { .altcode = "" }, /* 0x0aee (heart) */ + { .altcode = "" }, /* 0x0aef */ + { .altcode = "" }, /* 0x0af0 (maltesecross) */ + { .altcode = "" }, /* 0x0af1 (dagger) */ + { .altcode = "" }, /* 0x0af2 (doubledagger) */ + { .altcode = "" }, /* 0x0af3 (checkmark) */ + { .altcode = "" }, /* 0x0af4 (ballotcross) */ + { .altcode = "" }, /* 0x0af5 (musicalsharp) */ + { .altcode = "" }, /* 0x0af6 (musicalflat) */ + { .altcode = "" }, /* 0x0af7 (malesymbol) */ + { .altcode = "" }, /* 0x0af8 (femalesymbol) */ + { .altcode = "" }, /* 0x0af9 (telephone) */ + { .altcode = "" }, /* 0x0afa (telephonerecorder) */ + { .altcode = "" }, /* 0x0afb (phonographcopyright) */ + { .altcode = "" }, /* 0x0afc (caret) */ + { .altcode = "" }, /* 0x0afd (singlelowquotemark) */ + { .altcode = "" }, /* 0x0afe (doublelowquotemark) */ + { .altcode = "" }, /* 0x0aff (cursor) */ + }, + { /* 0x0b?? */ + { .altcode = "" }, /* 0x0b00 */ + { .altcode = "" }, /* 0x0b01 */ + { .altcode = "" }, /* 0x0b02 */ + { .altcode = "" }, /* 0x0b03 */ + { .altcode = "" }, /* 0x0b04 */ + { .altcode = "" }, /* 0x0b05 */ + { .altcode = "" }, /* 0x0b06 */ + { .altcode = "" }, /* 0x0b07 */ + { .altcode = "" }, /* 0x0b08 */ + { .altcode = "" }, /* 0x0b09 */ + { .altcode = "" }, /* 0x0b0a */ + { .altcode = "" }, /* 0x0b0b */ + { .altcode = "" }, /* 0x0b0c */ + { .altcode = "" }, /* 0x0b0d */ + { .altcode = "" }, /* 0x0b0e */ + { .altcode = "" }, /* 0x0b0f */ + { .altcode = "" }, /* 0x0b10 */ + { .altcode = "" }, /* 0x0b11 */ + { .altcode = "" }, /* 0x0b12 */ + { .altcode = "" }, /* 0x0b13 */ + { .altcode = "" }, /* 0x0b14 */ + { .altcode = "" }, /* 0x0b15 */ + { .altcode = "" }, /* 0x0b16 */ + { .altcode = "" }, /* 0x0b17 */ + { .altcode = "" }, /* 0x0b18 */ + { .altcode = "" }, /* 0x0b19 */ + { .altcode = "" }, /* 0x0b1a */ + { .altcode = "" }, /* 0x0b1b */ + { .altcode = "" }, /* 0x0b1c */ + { .altcode = "" }, /* 0x0b1d */ + { .altcode = "" }, /* 0x0b1e */ + { .altcode = "" }, /* 0x0b1f */ + { .altcode = "" }, /* 0x0b20 */ + { .altcode = "" }, /* 0x0b21 */ + { .altcode = "" }, /* 0x0b22 */ + { .altcode = "" }, /* 0x0b23 */ + { .altcode = "" }, /* 0x0b24 */ + { .altcode = "" }, /* 0x0b25 */ + { .altcode = "" }, /* 0x0b26 */ + { .altcode = "" }, /* 0x0b27 */ + { .altcode = "" }, /* 0x0b28 */ + { .altcode = "" }, /* 0x0b29 */ + { .altcode = "" }, /* 0x0b2a */ + { .altcode = "" }, /* 0x0b2b */ + { .altcode = "" }, /* 0x0b2c */ + { .altcode = "" }, /* 0x0b2d */ + { .altcode = "" }, /* 0x0b2e */ + { .altcode = "" }, /* 0x0b2f */ + { .altcode = "" }, /* 0x0b30 */ + { .altcode = "" }, /* 0x0b31 */ + { .altcode = "" }, /* 0x0b32 */ + { .altcode = "" }, /* 0x0b33 */ + { .altcode = "" }, /* 0x0b34 */ + { .altcode = "" }, /* 0x0b35 */ + { .altcode = "" }, /* 0x0b36 */ + { .altcode = "" }, /* 0x0b37 */ + { .altcode = "" }, /* 0x0b38 */ + { .altcode = "" }, /* 0x0b39 */ + { .altcode = "" }, /* 0x0b3a */ + { .altcode = "" }, /* 0x0b3b */ + { .altcode = "" }, /* 0x0b3c */ + { .altcode = "" }, /* 0x0b3d */ + { .altcode = "" }, /* 0x0b3e */ + { .altcode = "" }, /* 0x0b3f */ + { .altcode = "" }, /* 0x0b40 */ + { .altcode = "" }, /* 0x0b41 */ + { .altcode = "" }, /* 0x0b42 */ + { .altcode = "" }, /* 0x0b43 */ + { .altcode = "" }, /* 0x0b44 */ + { .altcode = "" }, /* 0x0b45 */ + { .altcode = "" }, /* 0x0b46 */ + { .altcode = "" }, /* 0x0b47 */ + { .altcode = "" }, /* 0x0b48 */ + { .altcode = "" }, /* 0x0b49 */ + { .altcode = "" }, /* 0x0b4a */ + { .altcode = "" }, /* 0x0b4b */ + { .altcode = "" }, /* 0x0b4c */ + { .altcode = "" }, /* 0x0b4d */ + { .altcode = "" }, /* 0x0b4e */ + { .altcode = "" }, /* 0x0b4f */ + { .altcode = "" }, /* 0x0b50 */ + { .altcode = "" }, /* 0x0b51 */ + { .altcode = "" }, /* 0x0b52 */ + { .altcode = "" }, /* 0x0b53 */ + { .altcode = "" }, /* 0x0b54 */ + { .altcode = "" }, /* 0x0b55 */ + { .altcode = "" }, /* 0x0b56 */ + { .altcode = "" }, /* 0x0b57 */ + { .altcode = "" }, /* 0x0b58 */ + { .altcode = "" }, /* 0x0b59 */ + { .altcode = "" }, /* 0x0b5a */ + { .altcode = "" }, /* 0x0b5b */ + { .altcode = "" }, /* 0x0b5c */ + { .altcode = "" }, /* 0x0b5d */ + { .altcode = "" }, /* 0x0b5e */ + { .altcode = "" }, /* 0x0b5f */ + { .altcode = "" }, /* 0x0b60 */ + { .altcode = "" }, /* 0x0b61 */ + { .altcode = "" }, /* 0x0b62 */ + { .altcode = "" }, /* 0x0b63 */ + { .altcode = "" }, /* 0x0b64 */ + { .altcode = "" }, /* 0x0b65 */ + { .altcode = "" }, /* 0x0b66 */ + { .altcode = "" }, /* 0x0b67 */ + { .altcode = "" }, /* 0x0b68 */ + { .altcode = "" }, /* 0x0b69 */ + { .altcode = "" }, /* 0x0b6a */ + { .altcode = "" }, /* 0x0b6b */ + { .altcode = "" }, /* 0x0b6c */ + { .altcode = "" }, /* 0x0b6d */ + { .altcode = "" }, /* 0x0b6e */ + { .altcode = "" }, /* 0x0b6f */ + { .altcode = "" }, /* 0x0b70 */ + { .altcode = "" }, /* 0x0b71 */ + { .altcode = "" }, /* 0x0b72 */ + { .altcode = "" }, /* 0x0b73 */ + { .altcode = "" }, /* 0x0b74 */ + { .altcode = "" }, /* 0x0b75 */ + { .altcode = "" }, /* 0x0b76 */ + { .altcode = "" }, /* 0x0b77 */ + { .altcode = "" }, /* 0x0b78 */ + { .altcode = "" }, /* 0x0b79 */ + { .altcode = "" }, /* 0x0b7a */ + { .altcode = "" }, /* 0x0b7b */ + { .altcode = "" }, /* 0x0b7c */ + { .altcode = "" }, /* 0x0b7d */ + { .altcode = "" }, /* 0x0b7e */ + { .altcode = "" }, /* 0x0b7f */ + { .altcode = "" }, /* 0x0b80 */ + { .altcode = "" }, /* 0x0b81 */ + { .altcode = "" }, /* 0x0b82 */ + { .altcode = "" }, /* 0x0b83 */ + { .altcode = "" }, /* 0x0b84 */ + { .altcode = "" }, /* 0x0b85 */ + { .altcode = "" }, /* 0x0b86 */ + { .altcode = "" }, /* 0x0b87 */ + { .altcode = "" }, /* 0x0b88 */ + { .altcode = "" }, /* 0x0b89 */ + { .altcode = "" }, /* 0x0b8a */ + { .altcode = "" }, /* 0x0b8b */ + { .altcode = "" }, /* 0x0b8c */ + { .altcode = "" }, /* 0x0b8d */ + { .altcode = "" }, /* 0x0b8e */ + { .altcode = "" }, /* 0x0b8f */ + { .altcode = "" }, /* 0x0b90 */ + { .altcode = "" }, /* 0x0b91 */ + { .altcode = "" }, /* 0x0b92 */ + { .altcode = "" }, /* 0x0b93 */ + { .altcode = "" }, /* 0x0b94 */ + { .altcode = "" }, /* 0x0b95 */ + { .altcode = "" }, /* 0x0b96 */ + { .altcode = "" }, /* 0x0b97 */ + { .altcode = "" }, /* 0x0b98 */ + { .altcode = "" }, /* 0x0b99 */ + { .altcode = "" }, /* 0x0b9a */ + { .altcode = "" }, /* 0x0b9b */ + { .altcode = "" }, /* 0x0b9c */ + { .altcode = "" }, /* 0x0b9d */ + { .altcode = "" }, /* 0x0b9e */ + { .altcode = "" }, /* 0x0b9f */ + { .altcode = "" }, /* 0x0ba0 */ + { .altcode = "" }, /* 0x0ba1 */ + { .altcode = "" }, /* 0x0ba2 */ + { .altcode = "" }, /* 0x0ba3 (leftcaret) */ + { .altcode = "" }, /* 0x0ba4 */ + { .altcode = "" }, /* 0x0ba5 */ + { .altcode = "" }, /* 0x0ba6 (rightcaret) */ + { .altcode = "" }, /* 0x0ba7 */ + { .altcode = "" }, /* 0x0ba8 (downcaret) */ + { .altcode = "" }, /* 0x0ba9 (upcaret) */ + { .altcode = "" }, /* 0x0baa */ + { .altcode = "" }, /* 0x0bab */ + { .altcode = "" }, /* 0x0bac */ + { .altcode = "" }, /* 0x0bad */ + { .altcode = "" }, /* 0x0bae */ + { .altcode = "" }, /* 0x0baf */ + { .altcode = "" }, /* 0x0bb0 */ + { .altcode = "" }, /* 0x0bb1 */ + { .altcode = "" }, /* 0x0bb2 */ + { .altcode = "" }, /* 0x0bb3 */ + { .altcode = "" }, /* 0x0bb4 */ + { .altcode = "" }, /* 0x0bb5 */ + { .altcode = "" }, /* 0x0bb6 */ + { .altcode = "" }, /* 0x0bb7 */ + { .altcode = "" }, /* 0x0bb8 */ + { .altcode = "" }, /* 0x0bb9 */ + { .altcode = "" }, /* 0x0bba */ + { .altcode = "" }, /* 0x0bbb */ + { .altcode = "" }, /* 0x0bbc */ + { .altcode = "" }, /* 0x0bbd */ + { .altcode = "" }, /* 0x0bbe */ + { .altcode = "" }, /* 0x0bbf */ + { .altcode = "" }, /* 0x0bc0 (overbar) */ + { .altcode = "" }, /* 0x0bc1 */ + { .altcode = "" }, /* 0x0bc2 (downtack) */ + { .altcode = "" }, /* 0x0bc3 (upshoe) */ + { .altcode = "" }, /* 0x0bc4 (downstile) */ + { .altcode = "" }, /* 0x0bc5 */ + { .altcode = "" }, /* 0x0bc6 (underbar) */ + { .altcode = "" }, /* 0x0bc7 */ + { .altcode = "" }, /* 0x0bc8 */ + { .altcode = "" }, /* 0x0bc9 */ + { .altcode = "" }, /* 0x0bca (jot) */ + { .altcode = "" }, /* 0x0bcb */ + { .altcode = "" }, /* 0x0bcc (quad) */ + { .altcode = "" }, /* 0x0bcd */ + { .altcode = "" }, /* 0x0bce (uptack) */ + { .altcode = "" }, /* 0x0bcf (circle) */ + { .altcode = "" }, /* 0x0bd0 */ + { .altcode = "" }, /* 0x0bd1 */ + { .altcode = "" }, /* 0x0bd2 */ + { .altcode = "" }, /* 0x0bd3 (upstile) */ + { .altcode = "" }, /* 0x0bd4 */ + { .altcode = "" }, /* 0x0bd5 */ + { .altcode = "" }, /* 0x0bd6 (downshoe) */ + { .altcode = "" }, /* 0x0bd7 */ + { .altcode = "" }, /* 0x0bd8 (rightshoe) */ + { .altcode = "" }, /* 0x0bd9 */ + { .altcode = "" }, /* 0x0bda (leftshoe) */ + { .altcode = "" }, /* 0x0bdb */ + { .altcode = "" }, /* 0x0bdc (lefttack) */ + { .altcode = "" }, /* 0x0bdd */ + { .altcode = "" }, /* 0x0bde */ + { .altcode = "" }, /* 0x0bdf */ + { .altcode = "" }, /* 0x0be0 */ + { .altcode = "" }, /* 0x0be1 */ + { .altcode = "" }, /* 0x0be2 */ + { .altcode = "" }, /* 0x0be3 */ + { .altcode = "" }, /* 0x0be4 */ + { .altcode = "" }, /* 0x0be5 */ + { .altcode = "" }, /* 0x0be6 */ + { .altcode = "" }, /* 0x0be7 */ + { .altcode = "" }, /* 0x0be8 */ + { .altcode = "" }, /* 0x0be9 */ + { .altcode = "" }, /* 0x0bea */ + { .altcode = "" }, /* 0x0beb */ + { .altcode = "" }, /* 0x0bec */ + { .altcode = "" }, /* 0x0bed */ + { .altcode = "" }, /* 0x0bee */ + { .altcode = "" }, /* 0x0bef */ + { .altcode = "" }, /* 0x0bf0 */ + { .altcode = "" }, /* 0x0bf1 */ + { .altcode = "" }, /* 0x0bf2 */ + { .altcode = "" }, /* 0x0bf3 */ + { .altcode = "" }, /* 0x0bf4 */ + { .altcode = "" }, /* 0x0bf5 */ + { .altcode = "" }, /* 0x0bf6 */ + { .altcode = "" }, /* 0x0bf7 */ + { .altcode = "" }, /* 0x0bf8 */ + { .altcode = "" }, /* 0x0bf9 */ + { .altcode = "" }, /* 0x0bfa */ + { .altcode = "" }, /* 0x0bfb */ + { .altcode = "" }, /* 0x0bfc (righttack) */ + { .altcode = "" }, /* 0x0bfd */ + { .altcode = "" }, /* 0x0bfe */ + { .altcode = "" }, /* 0x0bff */ + }, + { /* 0x0c?? */ + { .altcode = "" }, /* 0x0c00 */ + { .altcode = "" }, /* 0x0c01 */ + { .altcode = "" }, /* 0x0c02 */ + { .altcode = "" }, /* 0x0c03 */ + { .altcode = "" }, /* 0x0c04 */ + { .altcode = "" }, /* 0x0c05 */ + { .altcode = "" }, /* 0x0c06 */ + { .altcode = "" }, /* 0x0c07 */ + { .altcode = "" }, /* 0x0c08 */ + { .altcode = "" }, /* 0x0c09 */ + { .altcode = "" }, /* 0x0c0a */ + { .altcode = "" }, /* 0x0c0b */ + { .altcode = "" }, /* 0x0c0c */ + { .altcode = "" }, /* 0x0c0d */ + { .altcode = "" }, /* 0x0c0e */ + { .altcode = "" }, /* 0x0c0f */ + { .altcode = "" }, /* 0x0c10 */ + { .altcode = "" }, /* 0x0c11 */ + { .altcode = "" }, /* 0x0c12 */ + { .altcode = "" }, /* 0x0c13 */ + { .altcode = "" }, /* 0x0c14 */ + { .altcode = "" }, /* 0x0c15 */ + { .altcode = "" }, /* 0x0c16 */ + { .altcode = "" }, /* 0x0c17 */ + { .altcode = "" }, /* 0x0c18 */ + { .altcode = "" }, /* 0x0c19 */ + { .altcode = "" }, /* 0x0c1a */ + { .altcode = "" }, /* 0x0c1b */ + { .altcode = "" }, /* 0x0c1c */ + { .altcode = "" }, /* 0x0c1d */ + { .altcode = "" }, /* 0x0c1e */ + { .altcode = "" }, /* 0x0c1f */ + { .altcode = "" }, /* 0x0c20 */ + { .altcode = "" }, /* 0x0c21 */ + { .altcode = "" }, /* 0x0c22 */ + { .altcode = "" }, /* 0x0c23 */ + { .altcode = "" }, /* 0x0c24 */ + { .altcode = "" }, /* 0x0c25 */ + { .altcode = "" }, /* 0x0c26 */ + { .altcode = "" }, /* 0x0c27 */ + { .altcode = "" }, /* 0x0c28 */ + { .altcode = "" }, /* 0x0c29 */ + { .altcode = "" }, /* 0x0c2a */ + { .altcode = "" }, /* 0x0c2b */ + { .altcode = "" }, /* 0x0c2c */ + { .altcode = "" }, /* 0x0c2d */ + { .altcode = "" }, /* 0x0c2e */ + { .altcode = "" }, /* 0x0c2f */ + { .altcode = "" }, /* 0x0c30 */ + { .altcode = "" }, /* 0x0c31 */ + { .altcode = "" }, /* 0x0c32 */ + { .altcode = "" }, /* 0x0c33 */ + { .altcode = "" }, /* 0x0c34 */ + { .altcode = "" }, /* 0x0c35 */ + { .altcode = "" }, /* 0x0c36 */ + { .altcode = "" }, /* 0x0c37 */ + { .altcode = "" }, /* 0x0c38 */ + { .altcode = "" }, /* 0x0c39 */ + { .altcode = "" }, /* 0x0c3a */ + { .altcode = "" }, /* 0x0c3b */ + { .altcode = "" }, /* 0x0c3c */ + { .altcode = "" }, /* 0x0c3d */ + { .altcode = "" }, /* 0x0c3e */ + { .altcode = "" }, /* 0x0c3f */ + { .altcode = "" }, /* 0x0c40 */ + { .altcode = "" }, /* 0x0c41 */ + { .altcode = "" }, /* 0x0c42 */ + { .altcode = "" }, /* 0x0c43 */ + { .altcode = "" }, /* 0x0c44 */ + { .altcode = "" }, /* 0x0c45 */ + { .altcode = "" }, /* 0x0c46 */ + { .altcode = "" }, /* 0x0c47 */ + { .altcode = "" }, /* 0x0c48 */ + { .altcode = "" }, /* 0x0c49 */ + { .altcode = "" }, /* 0x0c4a */ + { .altcode = "" }, /* 0x0c4b */ + { .altcode = "" }, /* 0x0c4c */ + { .altcode = "" }, /* 0x0c4d */ + { .altcode = "" }, /* 0x0c4e */ + { .altcode = "" }, /* 0x0c4f */ + { .altcode = "" }, /* 0x0c50 */ + { .altcode = "" }, /* 0x0c51 */ + { .altcode = "" }, /* 0x0c52 */ + { .altcode = "" }, /* 0x0c53 */ + { .altcode = "" }, /* 0x0c54 */ + { .altcode = "" }, /* 0x0c55 */ + { .altcode = "" }, /* 0x0c56 */ + { .altcode = "" }, /* 0x0c57 */ + { .altcode = "" }, /* 0x0c58 */ + { .altcode = "" }, /* 0x0c59 */ + { .altcode = "" }, /* 0x0c5a */ + { .altcode = "" }, /* 0x0c5b */ + { .altcode = "" }, /* 0x0c5c */ + { .altcode = "" }, /* 0x0c5d */ + { .altcode = "" }, /* 0x0c5e */ + { .altcode = "" }, /* 0x0c5f */ + { .altcode = "" }, /* 0x0c60 */ + { .altcode = "" }, /* 0x0c61 */ + { .altcode = "" }, /* 0x0c62 */ + { .altcode = "" }, /* 0x0c63 */ + { .altcode = "" }, /* 0x0c64 */ + { .altcode = "" }, /* 0x0c65 */ + { .altcode = "" }, /* 0x0c66 */ + { .altcode = "" }, /* 0x0c67 */ + { .altcode = "" }, /* 0x0c68 */ + { .altcode = "" }, /* 0x0c69 */ + { .altcode = "" }, /* 0x0c6a */ + { .altcode = "" }, /* 0x0c6b */ + { .altcode = "" }, /* 0x0c6c */ + { .altcode = "" }, /* 0x0c6d */ + { .altcode = "" }, /* 0x0c6e */ + { .altcode = "" }, /* 0x0c6f */ + { .altcode = "" }, /* 0x0c70 */ + { .altcode = "" }, /* 0x0c71 */ + { .altcode = "" }, /* 0x0c72 */ + { .altcode = "" }, /* 0x0c73 */ + { .altcode = "" }, /* 0x0c74 */ + { .altcode = "" }, /* 0x0c75 */ + { .altcode = "" }, /* 0x0c76 */ + { .altcode = "" }, /* 0x0c77 */ + { .altcode = "" }, /* 0x0c78 */ + { .altcode = "" }, /* 0x0c79 */ + { .altcode = "" }, /* 0x0c7a */ + { .altcode = "" }, /* 0x0c7b */ + { .altcode = "" }, /* 0x0c7c */ + { .altcode = "" }, /* 0x0c7d */ + { .altcode = "" }, /* 0x0c7e */ + { .altcode = "" }, /* 0x0c7f */ + { .altcode = "" }, /* 0x0c80 */ + { .altcode = "" }, /* 0x0c81 */ + { .altcode = "" }, /* 0x0c82 */ + { .altcode = "" }, /* 0x0c83 */ + { .altcode = "" }, /* 0x0c84 */ + { .altcode = "" }, /* 0x0c85 */ + { .altcode = "" }, /* 0x0c86 */ + { .altcode = "" }, /* 0x0c87 */ + { .altcode = "" }, /* 0x0c88 */ + { .altcode = "" }, /* 0x0c89 */ + { .altcode = "" }, /* 0x0c8a */ + { .altcode = "" }, /* 0x0c8b */ + { .altcode = "" }, /* 0x0c8c */ + { .altcode = "" }, /* 0x0c8d */ + { .altcode = "" }, /* 0x0c8e */ + { .altcode = "" }, /* 0x0c8f */ + { .altcode = "" }, /* 0x0c90 */ + { .altcode = "" }, /* 0x0c91 */ + { .altcode = "" }, /* 0x0c92 */ + { .altcode = "" }, /* 0x0c93 */ + { .altcode = "" }, /* 0x0c94 */ + { .altcode = "" }, /* 0x0c95 */ + { .altcode = "" }, /* 0x0c96 */ + { .altcode = "" }, /* 0x0c97 */ + { .altcode = "" }, /* 0x0c98 */ + { .altcode = "" }, /* 0x0c99 */ + { .altcode = "" }, /* 0x0c9a */ + { .altcode = "" }, /* 0x0c9b */ + { .altcode = "" }, /* 0x0c9c */ + { .altcode = "" }, /* 0x0c9d */ + { .altcode = "" }, /* 0x0c9e */ + { .altcode = "" }, /* 0x0c9f */ + { .altcode = "" }, /* 0x0ca0 */ + { .altcode = "" }, /* 0x0ca1 */ + { .altcode = "" }, /* 0x0ca2 */ + { .altcode = "" }, /* 0x0ca3 */ + { .altcode = "" }, /* 0x0ca4 */ + { .altcode = "" }, /* 0x0ca5 */ + { .altcode = "" }, /* 0x0ca6 */ + { .altcode = "" }, /* 0x0ca7 */ + { .altcode = "" }, /* 0x0ca8 */ + { .altcode = "" }, /* 0x0ca9 */ + { .altcode = "" }, /* 0x0caa */ + { .altcode = "" }, /* 0x0cab */ + { .altcode = "" }, /* 0x0cac */ + { .altcode = "" }, /* 0x0cad */ + { .altcode = "" }, /* 0x0cae */ + { .altcode = "" }, /* 0x0caf */ + { .altcode = "" }, /* 0x0cb0 */ + { .altcode = "" }, /* 0x0cb1 */ + { .altcode = "" }, /* 0x0cb2 */ + { .altcode = "" }, /* 0x0cb3 */ + { .altcode = "" }, /* 0x0cb4 */ + { .altcode = "" }, /* 0x0cb5 */ + { .altcode = "" }, /* 0x0cb6 */ + { .altcode = "" }, /* 0x0cb7 */ + { .altcode = "" }, /* 0x0cb8 */ + { .altcode = "" }, /* 0x0cb9 */ + { .altcode = "" }, /* 0x0cba */ + { .altcode = "" }, /* 0x0cbb */ + { .altcode = "" }, /* 0x0cbc */ + { .altcode = "" }, /* 0x0cbd */ + { .altcode = "" }, /* 0x0cbe */ + { .altcode = "" }, /* 0x0cbf */ + { .altcode = "" }, /* 0x0cc0 */ + { .altcode = "" }, /* 0x0cc1 */ + { .altcode = "" }, /* 0x0cc2 */ + { .altcode = "" }, /* 0x0cc3 */ + { .altcode = "" }, /* 0x0cc4 */ + { .altcode = "" }, /* 0x0cc5 */ + { .altcode = "" }, /* 0x0cc6 */ + { .altcode = "" }, /* 0x0cc7 */ + { .altcode = "" }, /* 0x0cc8 */ + { .altcode = "" }, /* 0x0cc9 */ + { .altcode = "" }, /* 0x0cca */ + { .altcode = "" }, /* 0x0ccb */ + { .altcode = "" }, /* 0x0ccc */ + { .altcode = "" }, /* 0x0ccd */ + { .altcode = "" }, /* 0x0cce */ + { .altcode = "" }, /* 0x0ccf */ + { .altcode = "" }, /* 0x0cd0 */ + { .altcode = "" }, /* 0x0cd1 */ + { .altcode = "" }, /* 0x0cd2 */ + { .altcode = "" }, /* 0x0cd3 */ + { .altcode = "" }, /* 0x0cd4 */ + { .altcode = "" }, /* 0x0cd5 */ + { .altcode = "" }, /* 0x0cd6 */ + { .altcode = "" }, /* 0x0cd7 */ + { .altcode = "" }, /* 0x0cd8 */ + { .altcode = "" }, /* 0x0cd9 */ + { .altcode = "" }, /* 0x0cda */ + { .altcode = "" }, /* 0x0cdb */ + { .altcode = "" }, /* 0x0cdc */ + { .altcode = "" }, /* 0x0cdd */ + { .altcode = "" }, /* 0x0cde */ + { .altcode = "" }, /* 0x0cdf (hebrew_doublelowline) */ + { .altcode = "" }, /* 0x0ce0 (hebrew_aleph) */ + { .altcode = "" }, /* 0x0ce1 (hebrew_beth) */ + { .altcode = "" }, /* 0x0ce2 (hebrew_gimmel) */ + { .altcode = "" }, /* 0x0ce3 (hebrew_daleth) */ + { .altcode = "" }, /* 0x0ce4 (hebrew_he) */ + { .altcode = "" }, /* 0x0ce5 (hebrew_waw) */ + { .altcode = "" }, /* 0x0ce6 (hebrew_zayin) */ + { .altcode = "" }, /* 0x0ce7 (hebrew_het) */ + { .altcode = "" }, /* 0x0ce8 (hebrew_teth) */ + { .altcode = "" }, /* 0x0ce9 (hebrew_yod) */ + { .altcode = "" }, /* 0x0cea (hebrew_finalkaph) */ + { .altcode = "" }, /* 0x0ceb (hebrew_kaph) */ + { .altcode = "" }, /* 0x0cec (hebrew_lamed) */ + { .altcode = "" }, /* 0x0ced (hebrew_finalmem) */ + { .altcode = "" }, /* 0x0cee (hebrew_mem) */ + { .altcode = "" }, /* 0x0cef (hebrew_finalnun) */ + { .altcode = "" }, /* 0x0cf0 (hebrew_nun) */ + { .altcode = "" }, /* 0x0cf1 (hebrew_samekh) */ + { .altcode = "" }, /* 0x0cf2 (hebrew_ayin) */ + { .altcode = "" }, /* 0x0cf3 (hebrew_finalpe) */ + { .altcode = "" }, /* 0x0cf4 (hebrew_pe) */ + { .altcode = "" }, /* 0x0cf5 (hebrew_finalzadi) */ + { .altcode = "" }, /* 0x0cf6 (hebrew_zadi) */ + { .altcode = "" }, /* 0x0cf7 (hebrew_kuf) */ + { .altcode = "" }, /* 0x0cf8 (hebrew_resh) */ + { .altcode = "" }, /* 0x0cf9 (hebrew_shin) */ + { .altcode = "" }, /* 0x0cfa (hebrew_taf) */ + { .altcode = "" }, /* 0x0cfb */ + { .altcode = "" }, /* 0x0cfc */ + { .altcode = "" }, /* 0x0cfd */ + { .altcode = "" }, /* 0x0cfe */ + { .altcode = "" }, /* 0x0cff */ + }, + { /* 0x0d?? */ + { .altcode = "" }, /* 0x0d00 */ + { .altcode = "" }, /* 0x0d01 */ + { .altcode = "" }, /* 0x0d02 */ + { .altcode = "" }, /* 0x0d03 */ + { .altcode = "" }, /* 0x0d04 */ + { .altcode = "" }, /* 0x0d05 */ + { .altcode = "" }, /* 0x0d06 */ + { .altcode = "" }, /* 0x0d07 */ + { .altcode = "" }, /* 0x0d08 */ + { .altcode = "" }, /* 0x0d09 */ + { .altcode = "" }, /* 0x0d0a */ + { .altcode = "" }, /* 0x0d0b */ + { .altcode = "" }, /* 0x0d0c */ + { .altcode = "" }, /* 0x0d0d */ + { .altcode = "" }, /* 0x0d0e */ + { .altcode = "" }, /* 0x0d0f */ + { .altcode = "" }, /* 0x0d10 */ + { .altcode = "" }, /* 0x0d11 */ + { .altcode = "" }, /* 0x0d12 */ + { .altcode = "" }, /* 0x0d13 */ + { .altcode = "" }, /* 0x0d14 */ + { .altcode = "" }, /* 0x0d15 */ + { .altcode = "" }, /* 0x0d16 */ + { .altcode = "" }, /* 0x0d17 */ + { .altcode = "" }, /* 0x0d18 */ + { .altcode = "" }, /* 0x0d19 */ + { .altcode = "" }, /* 0x0d1a */ + { .altcode = "" }, /* 0x0d1b */ + { .altcode = "" }, /* 0x0d1c */ + { .altcode = "" }, /* 0x0d1d */ + { .altcode = "" }, /* 0x0d1e */ + { .altcode = "" }, /* 0x0d1f */ + { .altcode = "" }, /* 0x0d20 */ + { .altcode = "" }, /* 0x0d21 */ + { .altcode = "" }, /* 0x0d22 */ + { .altcode = "" }, /* 0x0d23 */ + { .altcode = "" }, /* 0x0d24 */ + { .altcode = "" }, /* 0x0d25 */ + { .altcode = "" }, /* 0x0d26 */ + { .altcode = "" }, /* 0x0d27 */ + { .altcode = "" }, /* 0x0d28 */ + { .altcode = "" }, /* 0x0d29 */ + { .altcode = "" }, /* 0x0d2a */ + { .altcode = "" }, /* 0x0d2b */ + { .altcode = "" }, /* 0x0d2c */ + { .altcode = "" }, /* 0x0d2d */ + { .altcode = "" }, /* 0x0d2e */ + { .altcode = "" }, /* 0x0d2f */ + { .altcode = "" }, /* 0x0d30 */ + { .altcode = "" }, /* 0x0d31 */ + { .altcode = "" }, /* 0x0d32 */ + { .altcode = "" }, /* 0x0d33 */ + { .altcode = "" }, /* 0x0d34 */ + { .altcode = "" }, /* 0x0d35 */ + { .altcode = "" }, /* 0x0d36 */ + { .altcode = "" }, /* 0x0d37 */ + { .altcode = "" }, /* 0x0d38 */ + { .altcode = "" }, /* 0x0d39 */ + { .altcode = "" }, /* 0x0d3a */ + { .altcode = "" }, /* 0x0d3b */ + { .altcode = "" }, /* 0x0d3c */ + { .altcode = "" }, /* 0x0d3d */ + { .altcode = "" }, /* 0x0d3e */ + { .altcode = "" }, /* 0x0d3f */ + { .altcode = "" }, /* 0x0d40 */ + { .altcode = "" }, /* 0x0d41 */ + { .altcode = "" }, /* 0x0d42 */ + { .altcode = "" }, /* 0x0d43 */ + { .altcode = "" }, /* 0x0d44 */ + { .altcode = "" }, /* 0x0d45 */ + { .altcode = "" }, /* 0x0d46 */ + { .altcode = "" }, /* 0x0d47 */ + { .altcode = "" }, /* 0x0d48 */ + { .altcode = "" }, /* 0x0d49 */ + { .altcode = "" }, /* 0x0d4a */ + { .altcode = "" }, /* 0x0d4b */ + { .altcode = "" }, /* 0x0d4c */ + { .altcode = "" }, /* 0x0d4d */ + { .altcode = "" }, /* 0x0d4e */ + { .altcode = "" }, /* 0x0d4f */ + { .altcode = "" }, /* 0x0d50 */ + { .altcode = "" }, /* 0x0d51 */ + { .altcode = "" }, /* 0x0d52 */ + { .altcode = "" }, /* 0x0d53 */ + { .altcode = "" }, /* 0x0d54 */ + { .altcode = "" }, /* 0x0d55 */ + { .altcode = "" }, /* 0x0d56 */ + { .altcode = "" }, /* 0x0d57 */ + { .altcode = "" }, /* 0x0d58 */ + { .altcode = "" }, /* 0x0d59 */ + { .altcode = "" }, /* 0x0d5a */ + { .altcode = "" }, /* 0x0d5b */ + { .altcode = "" }, /* 0x0d5c */ + { .altcode = "" }, /* 0x0d5d */ + { .altcode = "" }, /* 0x0d5e */ + { .altcode = "" }, /* 0x0d5f */ + { .altcode = "" }, /* 0x0d60 */ + { .altcode = "" }, /* 0x0d61 */ + { .altcode = "" }, /* 0x0d62 */ + { .altcode = "" }, /* 0x0d63 */ + { .altcode = "" }, /* 0x0d64 */ + { .altcode = "" }, /* 0x0d65 */ + { .altcode = "" }, /* 0x0d66 */ + { .altcode = "" }, /* 0x0d67 */ + { .altcode = "" }, /* 0x0d68 */ + { .altcode = "" }, /* 0x0d69 */ + { .altcode = "" }, /* 0x0d6a */ + { .altcode = "" }, /* 0x0d6b */ + { .altcode = "" }, /* 0x0d6c */ + { .altcode = "" }, /* 0x0d6d */ + { .altcode = "" }, /* 0x0d6e */ + { .altcode = "" }, /* 0x0d6f */ + { .altcode = "" }, /* 0x0d70 */ + { .altcode = "" }, /* 0x0d71 */ + { .altcode = "" }, /* 0x0d72 */ + { .altcode = "" }, /* 0x0d73 */ + { .altcode = "" }, /* 0x0d74 */ + { .altcode = "" }, /* 0x0d75 */ + { .altcode = "" }, /* 0x0d76 */ + { .altcode = "" }, /* 0x0d77 */ + { .altcode = "" }, /* 0x0d78 */ + { .altcode = "" }, /* 0x0d79 */ + { .altcode = "" }, /* 0x0d7a */ + { .altcode = "" }, /* 0x0d7b */ + { .altcode = "" }, /* 0x0d7c */ + { .altcode = "" }, /* 0x0d7d */ + { .altcode = "" }, /* 0x0d7e */ + { .altcode = "" }, /* 0x0d7f */ + { .altcode = "" }, /* 0x0d80 */ + { .altcode = "" }, /* 0x0d81 */ + { .altcode = "" }, /* 0x0d82 */ + { .altcode = "" }, /* 0x0d83 */ + { .altcode = "" }, /* 0x0d84 */ + { .altcode = "" }, /* 0x0d85 */ + { .altcode = "" }, /* 0x0d86 */ + { .altcode = "" }, /* 0x0d87 */ + { .altcode = "" }, /* 0x0d88 */ + { .altcode = "" }, /* 0x0d89 */ + { .altcode = "" }, /* 0x0d8a */ + { .altcode = "" }, /* 0x0d8b */ + { .altcode = "" }, /* 0x0d8c */ + { .altcode = "" }, /* 0x0d8d */ + { .altcode = "" }, /* 0x0d8e */ + { .altcode = "" }, /* 0x0d8f */ + { .altcode = "" }, /* 0x0d90 */ + { .altcode = "" }, /* 0x0d91 */ + { .altcode = "" }, /* 0x0d92 */ + { .altcode = "" }, /* 0x0d93 */ + { .altcode = "" }, /* 0x0d94 */ + { .altcode = "" }, /* 0x0d95 */ + { .altcode = "" }, /* 0x0d96 */ + { .altcode = "" }, /* 0x0d97 */ + { .altcode = "" }, /* 0x0d98 */ + { .altcode = "" }, /* 0x0d99 */ + { .altcode = "" }, /* 0x0d9a */ + { .altcode = "" }, /* 0x0d9b */ + { .altcode = "" }, /* 0x0d9c */ + { .altcode = "" }, /* 0x0d9d */ + { .altcode = "" }, /* 0x0d9e */ + { .altcode = "" }, /* 0x0d9f */ + { .altcode = "" }, /* 0x0da0 */ + { .altcode = "" }, /* 0x0da1 (Thai_kokai) */ + { .altcode = "" }, /* 0x0da2 (Thai_khokhai) */ + { .altcode = "" }, /* 0x0da3 (Thai_khokhuat) */ + { .altcode = "" }, /* 0x0da4 (Thai_khokhwai) */ + { .altcode = "" }, /* 0x0da5 (Thai_khokhon) */ + { .altcode = "" }, /* 0x0da6 (Thai_khorakhang) */ + { .altcode = "" }, /* 0x0da7 (Thai_ngongu) */ + { .altcode = "" }, /* 0x0da8 (Thai_chochan) */ + { .altcode = "" }, /* 0x0da9 (Thai_choching) */ + { .altcode = "" }, /* 0x0daa (Thai_chochang) */ + { .altcode = "" }, /* 0x0dab (Thai_soso) */ + { .altcode = "" }, /* 0x0dac (Thai_chochoe) */ + { .altcode = "" }, /* 0x0dad (Thai_yoying) */ + { .altcode = "" }, /* 0x0dae (Thai_dochada) */ + { .altcode = "" }, /* 0x0daf (Thai_topatak) */ + { .altcode = "" }, /* 0x0db0 (Thai_thothan) */ + { .altcode = "" }, /* 0x0db1 (Thai_thonangmontho) */ + { .altcode = "" }, /* 0x0db2 (Thai_thophuthao) */ + { .altcode = "" }, /* 0x0db3 (Thai_nonen) */ + { .altcode = "" }, /* 0x0db4 (Thai_dodek) */ + { .altcode = "" }, /* 0x0db5 (Thai_totao) */ + { .altcode = "" }, /* 0x0db6 (Thai_thothung) */ + { .altcode = "" }, /* 0x0db7 (Thai_thothahan) */ + { .altcode = "" }, /* 0x0db8 (Thai_thothong) */ + { .altcode = "" }, /* 0x0db9 (Thai_nonu) */ + { .altcode = "" }, /* 0x0dba (Thai_bobaimai) */ + { .altcode = "" }, /* 0x0dbb (Thai_popla) */ + { .altcode = "" }, /* 0x0dbc (Thai_phophung) */ + { .altcode = "" }, /* 0x0dbd (Thai_fofa) */ + { .altcode = "" }, /* 0x0dbe (Thai_phophan) */ + { .altcode = "" }, /* 0x0dbf (Thai_fofan) */ + { .altcode = "" }, /* 0x0dc0 (Thai_phosamphao) */ + { .altcode = "" }, /* 0x0dc1 (Thai_moma) */ + { .altcode = "" }, /* 0x0dc2 (Thai_yoyak) */ + { .altcode = "" }, /* 0x0dc3 (Thai_rorua) */ + { .altcode = "" }, /* 0x0dc4 (Thai_ru) */ + { .altcode = "" }, /* 0x0dc5 (Thai_loling) */ + { .altcode = "" }, /* 0x0dc6 (Thai_lu) */ + { .altcode = "" }, /* 0x0dc7 (Thai_wowaen) */ + { .altcode = "" }, /* 0x0dc8 (Thai_sosala) */ + { .altcode = "" }, /* 0x0dc9 (Thai_sorusi) */ + { .altcode = "" }, /* 0x0dca (Thai_sosua) */ + { .altcode = "" }, /* 0x0dcb (Thai_hohip) */ + { .altcode = "" }, /* 0x0dcc (Thai_lochula) */ + { .altcode = "" }, /* 0x0dcd (Thai_oang) */ + { .altcode = "" }, /* 0x0dce (Thai_honokhuk) */ + { .altcode = "" }, /* 0x0dcf (Thai_paiyannoi) */ + { .altcode = "" }, /* 0x0dd0 (Thai_saraa) */ + { .altcode = "" }, /* 0x0dd1 (Thai_maihanakat) */ + { .altcode = "" }, /* 0x0dd2 (Thai_saraaa) */ + { .altcode = "" }, /* 0x0dd3 (Thai_saraam) */ + { .altcode = "" }, /* 0x0dd4 (Thai_sarai) */ + { .altcode = "" }, /* 0x0dd5 (Thai_saraii) */ + { .altcode = "" }, /* 0x0dd6 (Thai_saraue) */ + { .altcode = "" }, /* 0x0dd7 (Thai_sarauee) */ + { .altcode = "" }, /* 0x0dd8 (Thai_sarau) */ + { .altcode = "" }, /* 0x0dd9 (Thai_sarauu) */ + { .altcode = "" }, /* 0x0dda (Thai_phinthu) */ + { .altcode = "" }, /* 0x0ddb */ + { .altcode = "" }, /* 0x0ddc */ + { .altcode = "" }, /* 0x0ddd */ + { .altcode = "" }, /* 0x0dde (Thai_maihanakat_maitho) */ + { .altcode = "" }, /* 0x0ddf (Thai_baht) */ + { .altcode = "" }, /* 0x0de0 (Thai_sarae) */ + { .altcode = "" }, /* 0x0de1 (Thai_saraae) */ + { .altcode = "" }, /* 0x0de2 (Thai_sarao) */ + { .altcode = "" }, /* 0x0de3 (Thai_saraaimaimuan) */ + { .altcode = "" }, /* 0x0de4 (Thai_saraaimaimalai) */ + { .altcode = "" }, /* 0x0de5 (Thai_lakkhangyao) */ + { .altcode = "" }, /* 0x0de6 (Thai_maiyamok) */ + { .altcode = "" }, /* 0x0de7 (Thai_maitaikhu) */ + { .altcode = "" }, /* 0x0de8 (Thai_maiek) */ + { .altcode = "" }, /* 0x0de9 (Thai_maitho) */ + { .altcode = "" }, /* 0x0dea (Thai_maitri) */ + { .altcode = "" }, /* 0x0deb (Thai_maichattawa) */ + { .altcode = "" }, /* 0x0dec (Thai_thanthakhat) */ + { .altcode = "" }, /* 0x0ded (Thai_nikhahit) */ + { .altcode = "" }, /* 0x0dee */ + { .altcode = "" }, /* 0x0def */ + { .altcode = "" }, /* 0x0df0 (Thai_leksun) */ + { .altcode = "" }, /* 0x0df1 (Thai_leknung) */ + { .altcode = "" }, /* 0x0df2 (Thai_leksong) */ + { .altcode = "" }, /* 0x0df3 (Thai_leksam) */ + { .altcode = "" }, /* 0x0df4 (Thai_leksi) */ + { .altcode = "" }, /* 0x0df5 (Thai_lekha) */ + { .altcode = "" }, /* 0x0df6 (Thai_lekhok) */ + { .altcode = "" }, /* 0x0df7 (Thai_lekchet) */ + { .altcode = "" }, /* 0x0df8 (Thai_lekpaet) */ + { .altcode = "" }, /* 0x0df9 (Thai_lekkao) */ + { .altcode = "" }, /* 0x0dfa */ + { .altcode = "" }, /* 0x0dfb */ + { .altcode = "" }, /* 0x0dfc */ + { .altcode = "" }, /* 0x0dfd */ + { .altcode = "" }, /* 0x0dfe */ + { .altcode = "" }, /* 0x0dff */ + }, + { /* 0x0e?? */ + { .altcode = "" }, /* 0x0e00 */ + { .altcode = "" }, /* 0x0e01 */ + { .altcode = "" }, /* 0x0e02 */ + { .altcode = "" }, /* 0x0e03 */ + { .altcode = "" }, /* 0x0e04 */ + { .altcode = "" }, /* 0x0e05 */ + { .altcode = "" }, /* 0x0e06 */ + { .altcode = "" }, /* 0x0e07 */ + { .altcode = "" }, /* 0x0e08 */ + { .altcode = "" }, /* 0x0e09 */ + { .altcode = "" }, /* 0x0e0a */ + { .altcode = "" }, /* 0x0e0b */ + { .altcode = "" }, /* 0x0e0c */ + { .altcode = "" }, /* 0x0e0d */ + { .altcode = "" }, /* 0x0e0e */ + { .altcode = "" }, /* 0x0e0f */ + { .altcode = "" }, /* 0x0e10 */ + { .altcode = "" }, /* 0x0e11 */ + { .altcode = "" }, /* 0x0e12 */ + { .altcode = "" }, /* 0x0e13 */ + { .altcode = "" }, /* 0x0e14 */ + { .altcode = "" }, /* 0x0e15 */ + { .altcode = "" }, /* 0x0e16 */ + { .altcode = "" }, /* 0x0e17 */ + { .altcode = "" }, /* 0x0e18 */ + { .altcode = "" }, /* 0x0e19 */ + { .altcode = "" }, /* 0x0e1a */ + { .altcode = "" }, /* 0x0e1b */ + { .altcode = "" }, /* 0x0e1c */ + { .altcode = "" }, /* 0x0e1d */ + { .altcode = "" }, /* 0x0e1e */ + { .altcode = "" }, /* 0x0e1f */ + { .altcode = "" }, /* 0x0e20 */ + { .altcode = "" }, /* 0x0e21 */ + { .altcode = "" }, /* 0x0e22 */ + { .altcode = "" }, /* 0x0e23 */ + { .altcode = "" }, /* 0x0e24 */ + { .altcode = "" }, /* 0x0e25 */ + { .altcode = "" }, /* 0x0e26 */ + { .altcode = "" }, /* 0x0e27 */ + { .altcode = "" }, /* 0x0e28 */ + { .altcode = "" }, /* 0x0e29 */ + { .altcode = "" }, /* 0x0e2a */ + { .altcode = "" }, /* 0x0e2b */ + { .altcode = "" }, /* 0x0e2c */ + { .altcode = "" }, /* 0x0e2d */ + { .altcode = "" }, /* 0x0e2e */ + { .altcode = "" }, /* 0x0e2f */ + { .altcode = "" }, /* 0x0e30 */ + { .altcode = "" }, /* 0x0e31 */ + { .altcode = "" }, /* 0x0e32 */ + { .altcode = "" }, /* 0x0e33 */ + { .altcode = "" }, /* 0x0e34 */ + { .altcode = "" }, /* 0x0e35 */ + { .altcode = "" }, /* 0x0e36 */ + { .altcode = "" }, /* 0x0e37 */ + { .altcode = "" }, /* 0x0e38 */ + { .altcode = "" }, /* 0x0e39 */ + { .altcode = "" }, /* 0x0e3a */ + { .altcode = "" }, /* 0x0e3b */ + { .altcode = "" }, /* 0x0e3c */ + { .altcode = "" }, /* 0x0e3d */ + { .altcode = "" }, /* 0x0e3e */ + { .altcode = "" }, /* 0x0e3f */ + { .altcode = "" }, /* 0x0e40 */ + { .altcode = "" }, /* 0x0e41 */ + { .altcode = "" }, /* 0x0e42 */ + { .altcode = "" }, /* 0x0e43 */ + { .altcode = "" }, /* 0x0e44 */ + { .altcode = "" }, /* 0x0e45 */ + { .altcode = "" }, /* 0x0e46 */ + { .altcode = "" }, /* 0x0e47 */ + { .altcode = "" }, /* 0x0e48 */ + { .altcode = "" }, /* 0x0e49 */ + { .altcode = "" }, /* 0x0e4a */ + { .altcode = "" }, /* 0x0e4b */ + { .altcode = "" }, /* 0x0e4c */ + { .altcode = "" }, /* 0x0e4d */ + { .altcode = "" }, /* 0x0e4e */ + { .altcode = "" }, /* 0x0e4f */ + { .altcode = "" }, /* 0x0e50 */ + { .altcode = "" }, /* 0x0e51 */ + { .altcode = "" }, /* 0x0e52 */ + { .altcode = "" }, /* 0x0e53 */ + { .altcode = "" }, /* 0x0e54 */ + { .altcode = "" }, /* 0x0e55 */ + { .altcode = "" }, /* 0x0e56 */ + { .altcode = "" }, /* 0x0e57 */ + { .altcode = "" }, /* 0x0e58 */ + { .altcode = "" }, /* 0x0e59 */ + { .altcode = "" }, /* 0x0e5a */ + { .altcode = "" }, /* 0x0e5b */ + { .altcode = "" }, /* 0x0e5c */ + { .altcode = "" }, /* 0x0e5d */ + { .altcode = "" }, /* 0x0e5e */ + { .altcode = "" }, /* 0x0e5f */ + { .altcode = "" }, /* 0x0e60 */ + { .altcode = "" }, /* 0x0e61 */ + { .altcode = "" }, /* 0x0e62 */ + { .altcode = "" }, /* 0x0e63 */ + { .altcode = "" }, /* 0x0e64 */ + { .altcode = "" }, /* 0x0e65 */ + { .altcode = "" }, /* 0x0e66 */ + { .altcode = "" }, /* 0x0e67 */ + { .altcode = "" }, /* 0x0e68 */ + { .altcode = "" }, /* 0x0e69 */ + { .altcode = "" }, /* 0x0e6a */ + { .altcode = "" }, /* 0x0e6b */ + { .altcode = "" }, /* 0x0e6c */ + { .altcode = "" }, /* 0x0e6d */ + { .altcode = "" }, /* 0x0e6e */ + { .altcode = "" }, /* 0x0e6f */ + { .altcode = "" }, /* 0x0e70 */ + { .altcode = "" }, /* 0x0e71 */ + { .altcode = "" }, /* 0x0e72 */ + { .altcode = "" }, /* 0x0e73 */ + { .altcode = "" }, /* 0x0e74 */ + { .altcode = "" }, /* 0x0e75 */ + { .altcode = "" }, /* 0x0e76 */ + { .altcode = "" }, /* 0x0e77 */ + { .altcode = "" }, /* 0x0e78 */ + { .altcode = "" }, /* 0x0e79 */ + { .altcode = "" }, /* 0x0e7a */ + { .altcode = "" }, /* 0x0e7b */ + { .altcode = "" }, /* 0x0e7c */ + { .altcode = "" }, /* 0x0e7d */ + { .altcode = "" }, /* 0x0e7e */ + { .altcode = "" }, /* 0x0e7f */ + { .altcode = "" }, /* 0x0e80 */ + { .altcode = "" }, /* 0x0e81 */ + { .altcode = "" }, /* 0x0e82 */ + { .altcode = "" }, /* 0x0e83 */ + { .altcode = "" }, /* 0x0e84 */ + { .altcode = "" }, /* 0x0e85 */ + { .altcode = "" }, /* 0x0e86 */ + { .altcode = "" }, /* 0x0e87 */ + { .altcode = "" }, /* 0x0e88 */ + { .altcode = "" }, /* 0x0e89 */ + { .altcode = "" }, /* 0x0e8a */ + { .altcode = "" }, /* 0x0e8b */ + { .altcode = "" }, /* 0x0e8c */ + { .altcode = "" }, /* 0x0e8d */ + { .altcode = "" }, /* 0x0e8e */ + { .altcode = "" }, /* 0x0e8f */ + { .altcode = "" }, /* 0x0e90 */ + { .altcode = "" }, /* 0x0e91 */ + { .altcode = "" }, /* 0x0e92 */ + { .altcode = "" }, /* 0x0e93 */ + { .altcode = "" }, /* 0x0e94 */ + { .altcode = "" }, /* 0x0e95 */ + { .altcode = "" }, /* 0x0e96 */ + { .altcode = "" }, /* 0x0e97 */ + { .altcode = "" }, /* 0x0e98 */ + { .altcode = "" }, /* 0x0e99 */ + { .altcode = "" }, /* 0x0e9a */ + { .altcode = "" }, /* 0x0e9b */ + { .altcode = "" }, /* 0x0e9c */ + { .altcode = "" }, /* 0x0e9d */ + { .altcode = "" }, /* 0x0e9e */ + { .altcode = "" }, /* 0x0e9f */ + { .altcode = "" }, /* 0x0ea0 */ + { .altcode = "" }, /* 0x0ea1 (Hangul_Kiyeog) */ + { .altcode = "" }, /* 0x0ea2 (Hangul_SsangKiyeog) */ + { .altcode = "" }, /* 0x0ea3 (Hangul_KiyeogSios) */ + { .altcode = "" }, /* 0x0ea4 (Hangul_Nieun) */ + { .altcode = "" }, /* 0x0ea5 (Hangul_NieunJieuj) */ + { .altcode = "" }, /* 0x0ea6 (Hangul_NieunHieuh) */ + { .altcode = "" }, /* 0x0ea7 (Hangul_Dikeud) */ + { .altcode = "" }, /* 0x0ea8 (Hangul_SsangDikeud) */ + { .altcode = "" }, /* 0x0ea9 (Hangul_Rieul) */ + { .altcode = "" }, /* 0x0eaa (Hangul_RieulKiyeog) */ + { .altcode = "" }, /* 0x0eab (Hangul_RieulMieum) */ + { .altcode = "" }, /* 0x0eac (Hangul_RieulPieub) */ + { .altcode = "" }, /* 0x0ead (Hangul_RieulSios) */ + { .altcode = "" }, /* 0x0eae (Hangul_RieulTieut) */ + { .altcode = "" }, /* 0x0eaf (Hangul_RieulPhieuf) */ + { .altcode = "" }, /* 0x0eb0 (Hangul_RieulHieuh) */ + { .altcode = "" }, /* 0x0eb1 (Hangul_Mieum) */ + { .altcode = "" }, /* 0x0eb2 (Hangul_Pieub) */ + { .altcode = "" }, /* 0x0eb3 (Hangul_SsangPieub) */ + { .altcode = "" }, /* 0x0eb4 (Hangul_PieubSios) */ + { .altcode = "" }, /* 0x0eb5 (Hangul_Sios) */ + { .altcode = "" }, /* 0x0eb6 (Hangul_SsangSios) */ + { .altcode = "" }, /* 0x0eb7 (Hangul_Ieung) */ + { .altcode = "" }, /* 0x0eb8 (Hangul_Jieuj) */ + { .altcode = "" }, /* 0x0eb9 (Hangul_SsangJieuj) */ + { .altcode = "" }, /* 0x0eba (Hangul_Cieuc) */ + { .altcode = "" }, /* 0x0ebb (Hangul_Khieuq) */ + { .altcode = "" }, /* 0x0ebc (Hangul_Tieut) */ + { .altcode = "" }, /* 0x0ebd (Hangul_Phieuf) */ + { .altcode = "" }, /* 0x0ebe (Hangul_Hieuh) */ + { .altcode = "" }, /* 0x0ebf (Hangul_A) */ + { .altcode = "" }, /* 0x0ec0 (Hangul_AE) */ + { .altcode = "" }, /* 0x0ec1 (Hangul_YA) */ + { .altcode = "" }, /* 0x0ec2 (Hangul_YAE) */ + { .altcode = "" }, /* 0x0ec3 (Hangul_EO) */ + { .altcode = "" }, /* 0x0ec4 (Hangul_E) */ + { .altcode = "" }, /* 0x0ec5 (Hangul_YEO) */ + { .altcode = "" }, /* 0x0ec6 (Hangul_YE) */ + { .altcode = "" }, /* 0x0ec7 (Hangul_O) */ + { .altcode = "" }, /* 0x0ec8 (Hangul_WA) */ + { .altcode = "" }, /* 0x0ec9 (Hangul_WAE) */ + { .altcode = "" }, /* 0x0eca (Hangul_OE) */ + { .altcode = "" }, /* 0x0ecb (Hangul_YO) */ + { .altcode = "" }, /* 0x0ecc (Hangul_U) */ + { .altcode = "" }, /* 0x0ecd (Hangul_WEO) */ + { .altcode = "" }, /* 0x0ece (Hangul_WE) */ + { .altcode = "" }, /* 0x0ecf (Hangul_WI) */ + { .altcode = "" }, /* 0x0ed0 (Hangul_YU) */ + { .altcode = "" }, /* 0x0ed1 (Hangul_EU) */ + { .altcode = "" }, /* 0x0ed2 (Hangul_YI) */ + { .altcode = "" }, /* 0x0ed3 (Hangul_I) */ + { .altcode = "" }, /* 0x0ed4 (Hangul_J_Kiyeog) */ + { .altcode = "" }, /* 0x0ed5 (Hangul_J_SsangKiyeog) */ + { .altcode = "" }, /* 0x0ed6 (Hangul_J_KiyeogSios) */ + { .altcode = "" }, /* 0x0ed7 (Hangul_J_Nieun) */ + { .altcode = "" }, /* 0x0ed8 (Hangul_J_NieunJieuj) */ + { .altcode = "" }, /* 0x0ed9 (Hangul_J_NieunHieuh) */ + { .altcode = "" }, /* 0x0eda (Hangul_J_Dikeud) */ + { .altcode = "" }, /* 0x0edb (Hangul_J_Rieul) */ + { .altcode = "" }, /* 0x0edc (Hangul_J_RieulKiyeog) */ + { .altcode = "" }, /* 0x0edd (Hangul_J_RieulMieum) */ + { .altcode = "" }, /* 0x0ede (Hangul_J_RieulPieub) */ + { .altcode = "" }, /* 0x0edf (Hangul_J_RieulSios) */ + { .altcode = "" }, /* 0x0ee0 (Hangul_J_RieulTieut) */ + { .altcode = "" }, /* 0x0ee1 (Hangul_J_RieulPhieuf) */ + { .altcode = "" }, /* 0x0ee2 (Hangul_J_RieulHieuh) */ + { .altcode = "" }, /* 0x0ee3 (Hangul_J_Mieum) */ + { .altcode = "" }, /* 0x0ee4 (Hangul_J_Pieub) */ + { .altcode = "" }, /* 0x0ee5 (Hangul_J_PieubSios) */ + { .altcode = "" }, /* 0x0ee6 (Hangul_J_Sios) */ + { .altcode = "" }, /* 0x0ee7 (Hangul_J_SsangSios) */ + { .altcode = "" }, /* 0x0ee8 (Hangul_J_Ieung) */ + { .altcode = "" }, /* 0x0ee9 (Hangul_J_Jieuj) */ + { .altcode = "" }, /* 0x0eea (Hangul_J_Cieuc) */ + { .altcode = "" }, /* 0x0eeb (Hangul_J_Khieuq) */ + { .altcode = "" }, /* 0x0eec (Hangul_J_Tieut) */ + { .altcode = "" }, /* 0x0eed (Hangul_J_Phieuf) */ + { .altcode = "" }, /* 0x0eee (Hangul_J_Hieuh) */ + { .altcode = "" }, /* 0x0eef (Hangul_RieulYeorinHieuh) */ + { .altcode = "" }, /* 0x0ef0 (Hangul_SunkyeongeumMieum) */ + { .altcode = "" }, /* 0x0ef1 (Hangul_SunkyeongeumPieub) */ + { .altcode = "" }, /* 0x0ef2 (Hangul_PanSios) */ + { .altcode = "" }, /* 0x0ef3 (Hangul_KkogjiDalrinIeung) */ + { .altcode = "" }, /* 0x0ef4 (Hangul_SunkyeongeumPhieuf) */ + { .altcode = "" }, /* 0x0ef5 (Hangul_YeorinHieuh) */ + { .altcode = "" }, /* 0x0ef6 (Hangul_AraeA) */ + { .altcode = "" }, /* 0x0ef7 (Hangul_AraeAE) */ + { .altcode = "" }, /* 0x0ef8 (Hangul_J_PanSios) */ + { .altcode = "" }, /* 0x0ef9 (Hangul_J_KkogjiDalrinIeung) */ + { .altcode = "" }, /* 0x0efa (Hangul_J_YeorinHieuh) */ + { .altcode = "" }, /* 0x0efb */ + { .altcode = "" }, /* 0x0efc */ + { .altcode = "" }, /* 0x0efd */ + { .altcode = "" }, /* 0x0efe */ + { .altcode = "" }, /* 0x0eff (Korean_Won) */ + }, + {{""}}, /* 0x0f?? */ + {{""}}, /* 0x10?? */ + {{""}}, /* 0x11?? */ + {{""}}, /* 0x12?? */ + { /* 0x13?? */ + { .altcode = "" }, /* 0x1300 */ + { .altcode = "" }, /* 0x1301 */ + { .altcode = "" }, /* 0x1302 */ + { .altcode = "" }, /* 0x1303 */ + { .altcode = "" }, /* 0x1304 */ + { .altcode = "" }, /* 0x1305 */ + { .altcode = "" }, /* 0x1306 */ + { .altcode = "" }, /* 0x1307 */ + { .altcode = "" }, /* 0x1308 */ + { .altcode = "" }, /* 0x1309 */ + { .altcode = "" }, /* 0x130a */ + { .altcode = "" }, /* 0x130b */ + { .altcode = "" }, /* 0x130c */ + { .altcode = "" }, /* 0x130d */ + { .altcode = "" }, /* 0x130e */ + { .altcode = "" }, /* 0x130f */ + { .altcode = "" }, /* 0x1310 */ + { .altcode = "" }, /* 0x1311 */ + { .altcode = "" }, /* 0x1312 */ + { .altcode = "" }, /* 0x1313 */ + { .altcode = "" }, /* 0x1314 */ + { .altcode = "" }, /* 0x1315 */ + { .altcode = "" }, /* 0x1316 */ + { .altcode = "" }, /* 0x1317 */ + { .altcode = "" }, /* 0x1318 */ + { .altcode = "" }, /* 0x1319 */ + { .altcode = "" }, /* 0x131a */ + { .altcode = "" }, /* 0x131b */ + { .altcode = "" }, /* 0x131c */ + { .altcode = "" }, /* 0x131d */ + { .altcode = "" }, /* 0x131e */ + { .altcode = "" }, /* 0x131f */ + { .altcode = "" }, /* 0x1320 */ + { .altcode = "" }, /* 0x1321 */ + { .altcode = "" }, /* 0x1322 */ + { .altcode = "" }, /* 0x1323 */ + { .altcode = "" }, /* 0x1324 */ + { .altcode = "" }, /* 0x1325 */ + { .altcode = "" }, /* 0x1326 */ + { .altcode = "" }, /* 0x1327 */ + { .altcode = "" }, /* 0x1328 */ + { .altcode = "" }, /* 0x1329 */ + { .altcode = "" }, /* 0x132a */ + { .altcode = "" }, /* 0x132b */ + { .altcode = "" }, /* 0x132c */ + { .altcode = "" }, /* 0x132d */ + { .altcode = "" }, /* 0x132e */ + { .altcode = "" }, /* 0x132f */ + { .altcode = "" }, /* 0x1330 */ + { .altcode = "" }, /* 0x1331 */ + { .altcode = "" }, /* 0x1332 */ + { .altcode = "" }, /* 0x1333 */ + { .altcode = "" }, /* 0x1334 */ + { .altcode = "" }, /* 0x1335 */ + { .altcode = "" }, /* 0x1336 */ + { .altcode = "" }, /* 0x1337 */ + { .altcode = "" }, /* 0x1338 */ + { .altcode = "" }, /* 0x1339 */ + { .altcode = "" }, /* 0x133a */ + { .altcode = "" }, /* 0x133b */ + { .altcode = "" }, /* 0x133c */ + { .altcode = "" }, /* 0x133d */ + { .altcode = "" }, /* 0x133e */ + { .altcode = "" }, /* 0x133f */ + { .altcode = "" }, /* 0x1340 */ + { .altcode = "" }, /* 0x1341 */ + { .altcode = "" }, /* 0x1342 */ + { .altcode = "" }, /* 0x1343 */ + { .altcode = "" }, /* 0x1344 */ + { .altcode = "" }, /* 0x1345 */ + { .altcode = "" }, /* 0x1346 */ + { .altcode = "" }, /* 0x1347 */ + { .altcode = "" }, /* 0x1348 */ + { .altcode = "" }, /* 0x1349 */ + { .altcode = "" }, /* 0x134a */ + { .altcode = "" }, /* 0x134b */ + { .altcode = "" }, /* 0x134c */ + { .altcode = "" }, /* 0x134d */ + { .altcode = "" }, /* 0x134e */ + { .altcode = "" }, /* 0x134f */ + { .altcode = "" }, /* 0x1350 */ + { .altcode = "" }, /* 0x1351 */ + { .altcode = "" }, /* 0x1352 */ + { .altcode = "" }, /* 0x1353 */ + { .altcode = "" }, /* 0x1354 */ + { .altcode = "" }, /* 0x1355 */ + { .altcode = "" }, /* 0x1356 */ + { .altcode = "" }, /* 0x1357 */ + { .altcode = "" }, /* 0x1358 */ + { .altcode = "" }, /* 0x1359 */ + { .altcode = "" }, /* 0x135a */ + { .altcode = "" }, /* 0x135b */ + { .altcode = "" }, /* 0x135c */ + { .altcode = "" }, /* 0x135d */ + { .altcode = "" }, /* 0x135e */ + { .altcode = "" }, /* 0x135f */ + { .altcode = "" }, /* 0x1360 */ + { .altcode = "" }, /* 0x1361 */ + { .altcode = "" }, /* 0x1362 */ + { .altcode = "" }, /* 0x1363 */ + { .altcode = "" }, /* 0x1364 */ + { .altcode = "" }, /* 0x1365 */ + { .altcode = "" }, /* 0x1366 */ + { .altcode = "" }, /* 0x1367 */ + { .altcode = "" }, /* 0x1368 */ + { .altcode = "" }, /* 0x1369 */ + { .altcode = "" }, /* 0x136a */ + { .altcode = "" }, /* 0x136b */ + { .altcode = "" }, /* 0x136c */ + { .altcode = "" }, /* 0x136d */ + { .altcode = "" }, /* 0x136e */ + { .altcode = "" }, /* 0x136f */ + { .altcode = "" }, /* 0x1370 */ + { .altcode = "" }, /* 0x1371 */ + { .altcode = "" }, /* 0x1372 */ + { .altcode = "" }, /* 0x1373 */ + { .altcode = "" }, /* 0x1374 */ + { .altcode = "" }, /* 0x1375 */ + { .altcode = "" }, /* 0x1376 */ + { .altcode = "" }, /* 0x1377 */ + { .altcode = "" }, /* 0x1378 */ + { .altcode = "" }, /* 0x1379 */ + { .altcode = "" }, /* 0x137a */ + { .altcode = "" }, /* 0x137b */ + { .altcode = "" }, /* 0x137c */ + { .altcode = "" }, /* 0x137d */ + { .altcode = "" }, /* 0x137e */ + { .altcode = "" }, /* 0x137f */ + { .altcode = "" }, /* 0x1380 */ + { .altcode = "" }, /* 0x1381 */ + { .altcode = "" }, /* 0x1382 */ + { .altcode = "" }, /* 0x1383 */ + { .altcode = "" }, /* 0x1384 */ + { .altcode = "" }, /* 0x1385 */ + { .altcode = "" }, /* 0x1386 */ + { .altcode = "" }, /* 0x1387 */ + { .altcode = "" }, /* 0x1388 */ + { .altcode = "" }, /* 0x1389 */ + { .altcode = "" }, /* 0x138a */ + { .altcode = "" }, /* 0x138b */ + { .altcode = "" }, /* 0x138c */ + { .altcode = "" }, /* 0x138d */ + { .altcode = "" }, /* 0x138e */ + { .altcode = "" }, /* 0x138f */ + { .altcode = "" }, /* 0x1390 */ + { .altcode = "" }, /* 0x1391 */ + { .altcode = "" }, /* 0x1392 */ + { .altcode = "" }, /* 0x1393 */ + { .altcode = "" }, /* 0x1394 */ + { .altcode = "" }, /* 0x1395 */ + { .altcode = "" }, /* 0x1396 */ + { .altcode = "" }, /* 0x1397 */ + { .altcode = "" }, /* 0x1398 */ + { .altcode = "" }, /* 0x1399 */ + { .altcode = "" }, /* 0x139a */ + { .altcode = "" }, /* 0x139b */ + { .altcode = "" }, /* 0x139c */ + { .altcode = "" }, /* 0x139d */ + { .altcode = "" }, /* 0x139e */ + { .altcode = "" }, /* 0x139f */ + { .altcode = "" }, /* 0x13a0 */ + { .altcode = "" }, /* 0x13a1 */ + { .altcode = "" }, /* 0x13a2 */ + { .altcode = "" }, /* 0x13a3 */ + { .altcode = "" }, /* 0x13a4 */ + { .altcode = "" }, /* 0x13a5 */ + { .altcode = "" }, /* 0x13a6 */ + { .altcode = "" }, /* 0x13a7 */ + { .altcode = "" }, /* 0x13a8 */ + { .altcode = "" }, /* 0x13a9 */ + { .altcode = "" }, /* 0x13aa */ + { .altcode = "" }, /* 0x13ab */ + { .altcode = "" }, /* 0x13ac */ + { .altcode = "" }, /* 0x13ad */ + { .altcode = "" }, /* 0x13ae */ + { .altcode = "" }, /* 0x13af */ + { .altcode = "" }, /* 0x13b0 */ + { .altcode = "" }, /* 0x13b1 */ + { .altcode = "" }, /* 0x13b2 */ + { .altcode = "" }, /* 0x13b3 */ + { .altcode = "" }, /* 0x13b4 */ + { .altcode = "" }, /* 0x13b5 */ + { .altcode = "" }, /* 0x13b6 */ + { .altcode = "" }, /* 0x13b7 */ + { .altcode = "" }, /* 0x13b8 */ + { .altcode = "" }, /* 0x13b9 */ + { .altcode = "" }, /* 0x13ba */ + { .altcode = "" }, /* 0x13bb */ + { .altcode = "" }, /* 0x13bc (OE) */ + { .altcode = "" }, /* 0x13bd (oe) */ + { .altcode = "" }, /* 0x13be (Ydiaeresis) */ + { .altcode = "" }, /* 0x13bf */ + { .altcode = "" }, /* 0x13c0 */ + { .altcode = "" }, /* 0x13c1 */ + { .altcode = "" }, /* 0x13c2 */ + { .altcode = "" }, /* 0x13c3 */ + { .altcode = "" }, /* 0x13c4 */ + { .altcode = "" }, /* 0x13c5 */ + { .altcode = "" }, /* 0x13c6 */ + { .altcode = "" }, /* 0x13c7 */ + { .altcode = "" }, /* 0x13c8 */ + { .altcode = "" }, /* 0x13c9 */ + { .altcode = "" }, /* 0x13ca */ + { .altcode = "" }, /* 0x13cb */ + { .altcode = "" }, /* 0x13cc */ + { .altcode = "" }, /* 0x13cd */ + { .altcode = "" }, /* 0x13ce */ + { .altcode = "" }, /* 0x13cf */ + { .altcode = "" }, /* 0x13d0 */ + { .altcode = "" }, /* 0x13d1 */ + { .altcode = "" }, /* 0x13d2 */ + { .altcode = "" }, /* 0x13d3 */ + { .altcode = "" }, /* 0x13d4 */ + { .altcode = "" }, /* 0x13d5 */ + { .altcode = "" }, /* 0x13d6 */ + { .altcode = "" }, /* 0x13d7 */ + { .altcode = "" }, /* 0x13d8 */ + { .altcode = "" }, /* 0x13d9 */ + { .altcode = "" }, /* 0x13da */ + { .altcode = "" }, /* 0x13db */ + { .altcode = "" }, /* 0x13dc */ + { .altcode = "" }, /* 0x13dd */ + { .altcode = "" }, /* 0x13de */ + { .altcode = "" }, /* 0x13df */ + { .altcode = "" }, /* 0x13e0 */ + { .altcode = "" }, /* 0x13e1 */ + { .altcode = "" }, /* 0x13e2 */ + { .altcode = "" }, /* 0x13e3 */ + { .altcode = "" }, /* 0x13e4 */ + { .altcode = "" }, /* 0x13e5 */ + { .altcode = "" }, /* 0x13e6 */ + { .altcode = "" }, /* 0x13e7 */ + { .altcode = "" }, /* 0x13e8 */ + { .altcode = "" }, /* 0x13e9 */ + { .altcode = "" }, /* 0x13ea */ + { .altcode = "" }, /* 0x13eb */ + { .altcode = "" }, /* 0x13ec */ + { .altcode = "" }, /* 0x13ed */ + { .altcode = "" }, /* 0x13ee */ + { .altcode = "" }, /* 0x13ef */ + { .altcode = "" }, /* 0x13f0 */ + { .altcode = "" }, /* 0x13f1 */ + { .altcode = "" }, /* 0x13f2 */ + { .altcode = "" }, /* 0x13f3 */ + { .altcode = "" }, /* 0x13f4 */ + { .altcode = "" }, /* 0x13f5 */ + { .altcode = "" }, /* 0x13f6 */ + { .altcode = "" }, /* 0x13f7 */ + { .altcode = "" }, /* 0x13f8 */ + { .altcode = "" }, /* 0x13f9 */ + { .altcode = "" }, /* 0x13fa */ + { .altcode = "" }, /* 0x13fb */ + { .altcode = "" }, /* 0x13fc */ + { .altcode = "" }, /* 0x13fd */ + { .altcode = "" }, /* 0x13fe */ + { .altcode = "" }, /* 0x13ff */ + }, + {{""}}, /* 0x14?? */ + {{""}}, /* 0x15?? */ + {{""}}, /* 0x16?? */ + {{""}}, /* 0x17?? */ + {{""}}, /* 0x18?? */ + {{""}}, /* 0x19?? */ + {{""}}, /* 0x1a?? */ + {{""}}, /* 0x1b?? */ + {{""}}, /* 0x1c?? */ + {{""}}, /* 0x1d?? */ + {{""}}, /* 0x1e?? */ + {{""}}, /* 0x1f?? */ + { /* 0x20?? */ + { .altcode = "" }, /* 0x2000 */ + { .altcode = "" }, /* 0x2001 */ + { .altcode = "" }, /* 0x2002 */ + { .altcode = "" }, /* 0x2003 */ + { .altcode = "" }, /* 0x2004 */ + { .altcode = "" }, /* 0x2005 */ + { .altcode = "" }, /* 0x2006 */ + { .altcode = "" }, /* 0x2007 */ + { .altcode = "" }, /* 0x2008 */ + { .altcode = "" }, /* 0x2009 */ + { .altcode = "" }, /* 0x200a */ + { .altcode = "" }, /* 0x200b */ + { .altcode = "" }, /* 0x200c */ + { .altcode = "" }, /* 0x200d */ + { .altcode = "" }, /* 0x200e */ + { .altcode = "" }, /* 0x200f */ + { .altcode = "" }, /* 0x2010 */ + { .altcode = "" }, /* 0x2011 */ + { .altcode = "" }, /* 0x2012 */ + { .altcode = "" }, /* 0x2013 */ + { .altcode = "" }, /* 0x2014 */ + { .altcode = "" }, /* 0x2015 */ + { .altcode = "" }, /* 0x2016 */ + { .altcode = "" }, /* 0x2017 */ + { .altcode = "" }, /* 0x2018 */ + { .altcode = "" }, /* 0x2019 */ + { .altcode = "" }, /* 0x201a */ + { .altcode = "" }, /* 0x201b */ + { .altcode = "" }, /* 0x201c */ + { .altcode = "" }, /* 0x201d */ + { .altcode = "" }, /* 0x201e */ + { .altcode = "" }, /* 0x201f */ + { .altcode = "" }, /* 0x2020 */ + { .altcode = "" }, /* 0x2021 */ + { .altcode = "" }, /* 0x2022 */ + { .altcode = "" }, /* 0x2023 */ + { .altcode = "" }, /* 0x2024 */ + { .altcode = "" }, /* 0x2025 */ + { .altcode = "" }, /* 0x2026 */ + { .altcode = "" }, /* 0x2027 */ + { .altcode = "" }, /* 0x2028 */ + { .altcode = "" }, /* 0x2029 */ + { .altcode = "" }, /* 0x202a */ + { .altcode = "" }, /* 0x202b */ + { .altcode = "" }, /* 0x202c */ + { .altcode = "" }, /* 0x202d */ + { .altcode = "" }, /* 0x202e */ + { .altcode = "" }, /* 0x202f */ + { .altcode = "" }, /* 0x2030 */ + { .altcode = "" }, /* 0x2031 */ + { .altcode = "" }, /* 0x2032 */ + { .altcode = "" }, /* 0x2033 */ + { .altcode = "" }, /* 0x2034 */ + { .altcode = "" }, /* 0x2035 */ + { .altcode = "" }, /* 0x2036 */ + { .altcode = "" }, /* 0x2037 */ + { .altcode = "" }, /* 0x2038 */ + { .altcode = "" }, /* 0x2039 */ + { .altcode = "" }, /* 0x203a */ + { .altcode = "" }, /* 0x203b */ + { .altcode = "" }, /* 0x203c */ + { .altcode = "" }, /* 0x203d */ + { .altcode = "" }, /* 0x203e */ + { .altcode = "" }, /* 0x203f */ + { .altcode = "" }, /* 0x2040 */ + { .altcode = "" }, /* 0x2041 */ + { .altcode = "" }, /* 0x2042 */ + { .altcode = "" }, /* 0x2043 */ + { .altcode = "" }, /* 0x2044 */ + { .altcode = "" }, /* 0x2045 */ + { .altcode = "" }, /* 0x2046 */ + { .altcode = "" }, /* 0x2047 */ + { .altcode = "" }, /* 0x2048 */ + { .altcode = "" }, /* 0x2049 */ + { .altcode = "" }, /* 0x204a */ + { .altcode = "" }, /* 0x204b */ + { .altcode = "" }, /* 0x204c */ + { .altcode = "" }, /* 0x204d */ + { .altcode = "" }, /* 0x204e */ + { .altcode = "" }, /* 0x204f */ + { .altcode = "" }, /* 0x2050 */ + { .altcode = "" }, /* 0x2051 */ + { .altcode = "" }, /* 0x2052 */ + { .altcode = "" }, /* 0x2053 */ + { .altcode = "" }, /* 0x2054 */ + { .altcode = "" }, /* 0x2055 */ + { .altcode = "" }, /* 0x2056 */ + { .altcode = "" }, /* 0x2057 */ + { .altcode = "" }, /* 0x2058 */ + { .altcode = "" }, /* 0x2059 */ + { .altcode = "" }, /* 0x205a */ + { .altcode = "" }, /* 0x205b */ + { .altcode = "" }, /* 0x205c */ + { .altcode = "" }, /* 0x205d */ + { .altcode = "" }, /* 0x205e */ + { .altcode = "" }, /* 0x205f */ + { .altcode = "" }, /* 0x2060 */ + { .altcode = "" }, /* 0x2061 */ + { .altcode = "" }, /* 0x2062 */ + { .altcode = "" }, /* 0x2063 */ + { .altcode = "" }, /* 0x2064 */ + { .altcode = "" }, /* 0x2065 */ + { .altcode = "" }, /* 0x2066 */ + { .altcode = "" }, /* 0x2067 */ + { .altcode = "" }, /* 0x2068 */ + { .altcode = "" }, /* 0x2069 */ + { .altcode = "" }, /* 0x206a */ + { .altcode = "" }, /* 0x206b */ + { .altcode = "" }, /* 0x206c */ + { .altcode = "" }, /* 0x206d */ + { .altcode = "" }, /* 0x206e */ + { .altcode = "" }, /* 0x206f */ + { .altcode = "" }, /* 0x2070 */ + { .altcode = "" }, /* 0x2071 */ + { .altcode = "" }, /* 0x2072 */ + { .altcode = "" }, /* 0x2073 */ + { .altcode = "" }, /* 0x2074 */ + { .altcode = "" }, /* 0x2075 */ + { .altcode = "" }, /* 0x2076 */ + { .altcode = "" }, /* 0x2077 */ + { .altcode = "" }, /* 0x2078 */ + { .altcode = "" }, /* 0x2079 */ + { .altcode = "" }, /* 0x207a */ + { .altcode = "" }, /* 0x207b */ + { .altcode = "" }, /* 0x207c */ + { .altcode = "" }, /* 0x207d */ + { .altcode = "" }, /* 0x207e */ + { .altcode = "" }, /* 0x207f */ + { .altcode = "" }, /* 0x2080 */ + { .altcode = "" }, /* 0x2081 */ + { .altcode = "" }, /* 0x2082 */ + { .altcode = "" }, /* 0x2083 */ + { .altcode = "" }, /* 0x2084 */ + { .altcode = "" }, /* 0x2085 */ + { .altcode = "" }, /* 0x2086 */ + { .altcode = "" }, /* 0x2087 */ + { .altcode = "" }, /* 0x2088 */ + { .altcode = "" }, /* 0x2089 */ + { .altcode = "" }, /* 0x208a */ + { .altcode = "" }, /* 0x208b */ + { .altcode = "" }, /* 0x208c */ + { .altcode = "" }, /* 0x208d */ + { .altcode = "" }, /* 0x208e */ + { .altcode = "" }, /* 0x208f */ + { .altcode = "" }, /* 0x2090 */ + { .altcode = "" }, /* 0x2091 */ + { .altcode = "" }, /* 0x2092 */ + { .altcode = "" }, /* 0x2093 */ + { .altcode = "" }, /* 0x2094 */ + { .altcode = "" }, /* 0x2095 */ + { .altcode = "" }, /* 0x2096 */ + { .altcode = "" }, /* 0x2097 */ + { .altcode = "" }, /* 0x2098 */ + { .altcode = "" }, /* 0x2099 */ + { .altcode = "" }, /* 0x209a */ + { .altcode = "" }, /* 0x209b */ + { .altcode = "" }, /* 0x209c */ + { .altcode = "" }, /* 0x209d */ + { .altcode = "" }, /* 0x209e */ + { .altcode = "" }, /* 0x209f */ + { .altcode = "" }, /* 0x20a0 */ + { .altcode = "" }, /* 0x20a1 */ + { .altcode = "" }, /* 0x20a2 */ + { .altcode = "" }, /* 0x20a3 */ + { .altcode = "" }, /* 0x20a4 */ + { .altcode = "" }, /* 0x20a5 */ + { .altcode = "" }, /* 0x20a6 */ + { .altcode = "" }, /* 0x20a7 */ + { .altcode = "" }, /* 0x20a8 */ + { .altcode = "" }, /* 0x20a9 */ + { .altcode = "" }, /* 0x20aa */ + { .altcode = "" }, /* 0x20ab */ + { .altcode = "" }, /* 0x20ac (EuroSign) */ + { .altcode = "" }, /* 0x20ad */ + { .altcode = "" }, /* 0x20ae */ + { .altcode = "" }, /* 0x20af */ + { .altcode = "" }, /* 0x20b0 */ + { .altcode = "" }, /* 0x20b1 */ + { .altcode = "" }, /* 0x20b2 */ + { .altcode = "" }, /* 0x20b3 */ + { .altcode = "" }, /* 0x20b4 */ + { .altcode = "" }, /* 0x20b5 */ + { .altcode = "" }, /* 0x20b6 */ + { .altcode = "" }, /* 0x20b7 */ + { .altcode = "" }, /* 0x20b8 */ + { .altcode = "" }, /* 0x20b9 */ + { .altcode = "" }, /* 0x20ba */ + { .altcode = "" }, /* 0x20bb */ + { .altcode = "" }, /* 0x20bc */ + { .altcode = "" }, /* 0x20bd */ + { .altcode = "" }, /* 0x20be */ + { .altcode = "" }, /* 0x20bf */ + { .altcode = "" }, /* 0x20c0 */ + { .altcode = "" }, /* 0x20c1 */ + { .altcode = "" }, /* 0x20c2 */ + { .altcode = "" }, /* 0x20c3 */ + { .altcode = "" }, /* 0x20c4 */ + { .altcode = "" }, /* 0x20c5 */ + { .altcode = "" }, /* 0x20c6 */ + { .altcode = "" }, /* 0x20c7 */ + { .altcode = "" }, /* 0x20c8 */ + { .altcode = "" }, /* 0x20c9 */ + { .altcode = "" }, /* 0x20ca */ + { .altcode = "" }, /* 0x20cb */ + { .altcode = "" }, /* 0x20cc */ + { .altcode = "" }, /* 0x20cd */ + { .altcode = "" }, /* 0x20ce */ + { .altcode = "" }, /* 0x20cf */ + { .altcode = "" }, /* 0x20d0 */ + { .altcode = "" }, /* 0x20d1 */ + { .altcode = "" }, /* 0x20d2 */ + { .altcode = "" }, /* 0x20d3 */ + { .altcode = "" }, /* 0x20d4 */ + { .altcode = "" }, /* 0x20d5 */ + { .altcode = "" }, /* 0x20d6 */ + { .altcode = "" }, /* 0x20d7 */ + { .altcode = "" }, /* 0x20d8 */ + { .altcode = "" }, /* 0x20d9 */ + { .altcode = "" }, /* 0x20da */ + { .altcode = "" }, /* 0x20db */ + { .altcode = "" }, /* 0x20dc */ + { .altcode = "" }, /* 0x20dd */ + { .altcode = "" }, /* 0x20de */ + { .altcode = "" }, /* 0x20df */ + { .altcode = "" }, /* 0x20e0 */ + { .altcode = "" }, /* 0x20e1 */ + { .altcode = "" }, /* 0x20e2 */ + { .altcode = "" }, /* 0x20e3 */ + { .altcode = "" }, /* 0x20e4 */ + { .altcode = "" }, /* 0x20e5 */ + { .altcode = "" }, /* 0x20e6 */ + { .altcode = "" }, /* 0x20e7 */ + { .altcode = "" }, /* 0x20e8 */ + { .altcode = "" }, /* 0x20e9 */ + { .altcode = "" }, /* 0x20ea */ + { .altcode = "" }, /* 0x20eb */ + { .altcode = "" }, /* 0x20ec */ + { .altcode = "" }, /* 0x20ed */ + { .altcode = "" }, /* 0x20ee */ + { .altcode = "" }, /* 0x20ef */ + { .altcode = "" }, /* 0x20f0 */ + { .altcode = "" }, /* 0x20f1 */ + { .altcode = "" }, /* 0x20f2 */ + { .altcode = "" }, /* 0x20f3 */ + { .altcode = "" }, /* 0x20f4 */ + { .altcode = "" }, /* 0x20f5 */ + { .altcode = "" }, /* 0x20f6 */ + { .altcode = "" }, /* 0x20f7 */ + { .altcode = "" }, /* 0x20f8 */ + { .altcode = "" }, /* 0x20f9 */ + { .altcode = "" }, /* 0x20fa */ + { .altcode = "" }, /* 0x20fb */ + { .altcode = "" }, /* 0x20fc */ + { .altcode = "" }, /* 0x20fd */ + { .altcode = "" }, /* 0x20fe */ + { .altcode = "" }, /* 0x20ff */ + }, + {{""}}, /* 0x21?? */ + {{""}}, /* 0x22?? */ + {{""}}, /* 0x23?? */ + {{""}}, /* 0x24?? */ + {{""}}, /* 0x25?? */ + {{""}}, /* 0x26?? */ + {{""}}, /* 0x27?? */ + {{""}}, /* 0x28?? */ + {{""}}, /* 0x29?? */ + {{""}}, /* 0x2a?? */ + {{""}}, /* 0x2b?? */ + {{""}}, /* 0x2c?? */ + {{""}}, /* 0x2d?? */ + {{""}}, /* 0x2e?? */ + {{""}}, /* 0x2f?? */ + {{""}}, /* 0x30?? */ + {{""}}, /* 0x31?? */ + {{""}}, /* 0x32?? */ + {{""}}, /* 0x33?? */ + {{""}}, /* 0x34?? */ + {{""}}, /* 0x35?? */ + {{""}}, /* 0x36?? */ + {{""}}, /* 0x37?? */ + {{""}}, /* 0x38?? */ + {{""}}, /* 0x39?? */ + {{""}}, /* 0x3a?? */ + {{""}}, /* 0x3b?? */ + {{""}}, /* 0x3c?? */ + {{""}}, /* 0x3d?? */ + {{""}}, /* 0x3e?? */ + {{""}}, /* 0x3f?? */ + {{""}}, /* 0x40?? */ + {{""}}, /* 0x41?? */ + {{""}}, /* 0x42?? */ + {{""}}, /* 0x43?? */ + {{""}}, /* 0x44?? */ + {{""}}, /* 0x45?? */ + {{""}}, /* 0x46?? */ + {{""}}, /* 0x47?? */ + {{""}}, /* 0x48?? */ + {{""}}, /* 0x49?? */ + {{""}}, /* 0x4a?? */ + {{""}}, /* 0x4b?? */ + {{""}}, /* 0x4c?? */ + {{""}}, /* 0x4d?? */ + {{""}}, /* 0x4e?? */ + {{""}}, /* 0x4f?? */ + {{""}}, /* 0x50?? */ + {{""}}, /* 0x51?? */ + {{""}}, /* 0x52?? */ + {{""}}, /* 0x53?? */ + {{""}}, /* 0x54?? */ + {{""}}, /* 0x55?? */ + {{""}}, /* 0x56?? */ + {{""}}, /* 0x57?? */ + {{""}}, /* 0x58?? */ + {{""}}, /* 0x59?? */ + {{""}}, /* 0x5a?? */ + {{""}}, /* 0x5b?? */ + {{""}}, /* 0x5c?? */ + {{""}}, /* 0x5d?? */ + {{""}}, /* 0x5e?? */ + {{""}}, /* 0x5f?? */ + {{""}}, /* 0x60?? */ + {{""}}, /* 0x61?? */ + {{""}}, /* 0x62?? */ + {{""}}, /* 0x63?? */ + {{""}}, /* 0x64?? */ + {{""}}, /* 0x65?? */ + {{""}}, /* 0x66?? */ + {{""}}, /* 0x67?? */ + {{""}}, /* 0x68?? */ + {{""}}, /* 0x69?? */ + {{""}}, /* 0x6a?? */ + {{""}}, /* 0x6b?? */ + {{""}}, /* 0x6c?? */ + {{""}}, /* 0x6d?? */ + {{""}}, /* 0x6e?? */ + {{""}}, /* 0x6f?? */ + {{""}}, /* 0x70?? */ + {{""}}, /* 0x71?? */ + {{""}}, /* 0x72?? */ + {{""}}, /* 0x73?? */ + {{""}}, /* 0x74?? */ + {{""}}, /* 0x75?? */ + {{""}}, /* 0x76?? */ + {{""}}, /* 0x77?? */ + {{""}}, /* 0x78?? */ + {{""}}, /* 0x79?? */ + {{""}}, /* 0x7a?? */ + {{""}}, /* 0x7b?? */ + {{""}}, /* 0x7c?? */ + {{""}}, /* 0x7d?? */ + {{""}}, /* 0x7e?? */ + {{""}}, /* 0x7f?? */ + {{""}}, /* 0x80?? */ + {{""}}, /* 0x81?? */ + {{""}}, /* 0x82?? */ + {{""}}, /* 0x83?? */ + {{""}}, /* 0x84?? */ + {{""}}, /* 0x85?? */ + {{""}}, /* 0x86?? */ + {{""}}, /* 0x87?? */ + {{""}}, /* 0x88?? */ + {{""}}, /* 0x89?? */ + {{""}}, /* 0x8a?? */ + {{""}}, /* 0x8b?? */ + {{""}}, /* 0x8c?? */ + {{""}}, /* 0x8d?? */ + {{""}}, /* 0x8e?? */ + {{""}}, /* 0x8f?? */ + {{""}}, /* 0x90?? */ + {{""}}, /* 0x91?? */ + {{""}}, /* 0x92?? */ + {{""}}, /* 0x93?? */ + {{""}}, /* 0x94?? */ + {{""}}, /* 0x95?? */ + {{""}}, /* 0x96?? */ + {{""}}, /* 0x97?? */ + {{""}}, /* 0x98?? */ + {{""}}, /* 0x99?? */ + {{""}}, /* 0x9a?? */ + {{""}}, /* 0x9b?? */ + {{""}}, /* 0x9c?? */ + {{""}}, /* 0x9d?? */ + {{""}}, /* 0x9e?? */ + {{""}}, /* 0x9f?? */ + {{""}}, /* 0xa0?? */ + {{""}}, /* 0xa1?? */ + {{""}}, /* 0xa2?? */ + {{""}}, /* 0xa3?? */ + {{""}}, /* 0xa4?? */ + {{""}}, /* 0xa5?? */ + {{""}}, /* 0xa6?? */ + {{""}}, /* 0xa7?? */ + {{""}}, /* 0xa8?? */ + {{""}}, /* 0xa9?? */ + {{""}}, /* 0xaa?? */ + {{""}}, /* 0xab?? */ + {{""}}, /* 0xac?? */ + {{""}}, /* 0xad?? */ + {{""}}, /* 0xae?? */ + {{""}}, /* 0xaf?? */ + {{""}}, /* 0xb0?? */ + {{""}}, /* 0xb1?? */ + {{""}}, /* 0xb2?? */ + {{""}}, /* 0xb3?? */ + {{""}}, /* 0xb4?? */ + {{""}}, /* 0xb5?? */ + {{""}}, /* 0xb6?? */ + {{""}}, /* 0xb7?? */ + {{""}}, /* 0xb8?? */ + {{""}}, /* 0xb9?? */ + {{""}}, /* 0xba?? */ + {{""}}, /* 0xbb?? */ + {{""}}, /* 0xbc?? */ + {{""}}, /* 0xbd?? */ + {{""}}, /* 0xbe?? */ + {{""}}, /* 0xbf?? */ + {{""}}, /* 0xc0?? */ + {{""}}, /* 0xc1?? */ + {{""}}, /* 0xc2?? */ + {{""}}, /* 0xc3?? */ + {{""}}, /* 0xc4?? */ + {{""}}, /* 0xc5?? */ + {{""}}, /* 0xc6?? */ + {{""}}, /* 0xc7?? */ + {{""}}, /* 0xc8?? */ + {{""}}, /* 0xc9?? */ + {{""}}, /* 0xca?? */ + {{""}}, /* 0xcb?? */ + {{""}}, /* 0xcc?? */ + {{""}}, /* 0xcd?? */ + {{""}}, /* 0xce?? */ + {{""}}, /* 0xcf?? */ + {{""}}, /* 0xd0?? */ + {{""}}, /* 0xd1?? */ + {{""}}, /* 0xd2?? */ + {{""}}, /* 0xd3?? */ + {{""}}, /* 0xd4?? */ + {{""}}, /* 0xd5?? */ + {{""}}, /* 0xd6?? */ + {{""}}, /* 0xd7?? */ + {{""}}, /* 0xd8?? */ + {{""}}, /* 0xd9?? */ + {{""}}, /* 0xda?? */ + {{""}}, /* 0xdb?? */ + {{""}}, /* 0xdc?? */ + {{""}}, /* 0xdd?? */ + {{""}}, /* 0xde?? */ + {{""}}, /* 0xdf?? */ + {{""}}, /* 0xe0?? */ + {{""}}, /* 0xe1?? */ + {{""}}, /* 0xe2?? */ + {{""}}, /* 0xe3?? */ + {{""}}, /* 0xe4?? */ + {{""}}, /* 0xe5?? */ + {{""}}, /* 0xe6?? */ + {{""}}, /* 0xe7?? */ + {{""}}, /* 0xe8?? */ + {{""}}, /* 0xe9?? */ + {{""}}, /* 0xea?? */ + {{""}}, /* 0xeb?? */ + {{""}}, /* 0xec?? */ + {{""}}, /* 0xed?? */ + {{""}}, /* 0xee?? */ + {{""}}, /* 0xef?? */ + {{""}}, /* 0xf0?? */ + {{""}}, /* 0xf1?? */ + {{""}}, /* 0xf2?? */ + {{""}}, /* 0xf3?? */ + {{""}}, /* 0xf4?? */ + {{""}}, /* 0xf5?? */ + {{""}}, /* 0xf6?? */ + {{""}}, /* 0xf7?? */ + {{""}}, /* 0xf8?? */ + {{""}}, /* 0xf9?? */ + {{""}}, /* 0xfa?? */ + {{""}}, /* 0xfb?? */ + {{""}}, /* 0xfc?? */ + { /* 0xfd?? */ + { .altcode = "" }, /* 0xfd00 */ + { .altcode = "" }, /* 0xfd01 (3270_Duplicate) */ + { .altcode = "" }, /* 0xfd02 (3270_FieldMark) */ + { .altcode = "" }, /* 0xfd03 (3270_Right2) */ + { .altcode = "" }, /* 0xfd04 (3270_Left2) */ + { .altcode = "" }, /* 0xfd05 (3270_BackTab) */ + { .altcode = "" }, /* 0xfd06 (3270_EraseEOF) */ + { .altcode = "" }, /* 0xfd07 (3270_EraseInput) */ + { .altcode = "" }, /* 0xfd08 (3270_Reset) */ + { .altcode = "" }, /* 0xfd09 (3270_Quit) */ + { .altcode = "" }, /* 0xfd0a (3270_PA1) */ + { .altcode = "" }, /* 0xfd0b (3270_PA2) */ + { .altcode = "" }, /* 0xfd0c (3270_PA3) */ + { .altcode = "" }, /* 0xfd0d (3270_Test) */ + { .altcode = "" }, /* 0xfd0e (3270_Attn) */ + { .altcode = "" }, /* 0xfd0f (3270_CursorBlink) */ + { .altcode = "" }, /* 0xfd10 (3270_AltCursor) */ + { .altcode = "" }, /* 0xfd11 (3270_KeyClick) */ + { .altcode = "" }, /* 0xfd12 (3270_Jump) */ + { .altcode = "" }, /* 0xfd13 (3270_Ident) */ + { .altcode = "" }, /* 0xfd14 (3270_Rule) */ + { .altcode = "" }, /* 0xfd15 (3270_Copy) */ + { .altcode = "" }, /* 0xfd16 (3270_Play) */ + { .altcode = "" }, /* 0xfd17 (3270_Setup) */ + { .altcode = "" }, /* 0xfd18 (3270_Record) */ + { .altcode = "" }, /* 0xfd19 (3270_ChangeScreen) */ + { .altcode = "" }, /* 0xfd1a (3270_DeleteWord) */ + { .altcode = "" }, /* 0xfd1b (3270_ExSelect) */ + { .altcode = "" }, /* 0xfd1c (3270_CursorSelect) */ + { .altcode = "" }, /* 0xfd1d (3270_PrintScreen) */ + { .altcode = "" }, /* 0xfd1e (3270_Enter) */ + { .altcode = "" }, /* 0xfd1f */ + { .altcode = "" }, /* 0xfd20 */ + { .altcode = "" }, /* 0xfd21 */ + { .altcode = "" }, /* 0xfd22 */ + { .altcode = "" }, /* 0xfd23 */ + { .altcode = "" }, /* 0xfd24 */ + { .altcode = "" }, /* 0xfd25 */ + { .altcode = "" }, /* 0xfd26 */ + { .altcode = "" }, /* 0xfd27 */ + { .altcode = "" }, /* 0xfd28 */ + { .altcode = "" }, /* 0xfd29 */ + { .altcode = "" }, /* 0xfd2a */ + { .altcode = "" }, /* 0xfd2b */ + { .altcode = "" }, /* 0xfd2c */ + { .altcode = "" }, /* 0xfd2d */ + { .altcode = "" }, /* 0xfd2e */ + { .altcode = "" }, /* 0xfd2f */ + { .altcode = "" }, /* 0xfd30 */ + { .altcode = "" }, /* 0xfd31 */ + { .altcode = "" }, /* 0xfd32 */ + { .altcode = "" }, /* 0xfd33 */ + { .altcode = "" }, /* 0xfd34 */ + { .altcode = "" }, /* 0xfd35 */ + { .altcode = "" }, /* 0xfd36 */ + { .altcode = "" }, /* 0xfd37 */ + { .altcode = "" }, /* 0xfd38 */ + { .altcode = "" }, /* 0xfd39 */ + { .altcode = "" }, /* 0xfd3a */ + { .altcode = "" }, /* 0xfd3b */ + { .altcode = "" }, /* 0xfd3c */ + { .altcode = "" }, /* 0xfd3d */ + { .altcode = "" }, /* 0xfd3e */ + { .altcode = "" }, /* 0xfd3f */ + { .altcode = "" }, /* 0xfd40 */ + { .altcode = "" }, /* 0xfd41 */ + { .altcode = "" }, /* 0xfd42 */ + { .altcode = "" }, /* 0xfd43 */ + { .altcode = "" }, /* 0xfd44 */ + { .altcode = "" }, /* 0xfd45 */ + { .altcode = "" }, /* 0xfd46 */ + { .altcode = "" }, /* 0xfd47 */ + { .altcode = "" }, /* 0xfd48 */ + { .altcode = "" }, /* 0xfd49 */ + { .altcode = "" }, /* 0xfd4a */ + { .altcode = "" }, /* 0xfd4b */ + { .altcode = "" }, /* 0xfd4c */ + { .altcode = "" }, /* 0xfd4d */ + { .altcode = "" }, /* 0xfd4e */ + { .altcode = "" }, /* 0xfd4f */ + { .altcode = "" }, /* 0xfd50 */ + { .altcode = "" }, /* 0xfd51 */ + { .altcode = "" }, /* 0xfd52 */ + { .altcode = "" }, /* 0xfd53 */ + { .altcode = "" }, /* 0xfd54 */ + { .altcode = "" }, /* 0xfd55 */ + { .altcode = "" }, /* 0xfd56 */ + { .altcode = "" }, /* 0xfd57 */ + { .altcode = "" }, /* 0xfd58 */ + { .altcode = "" }, /* 0xfd59 */ + { .altcode = "" }, /* 0xfd5a */ + { .altcode = "" }, /* 0xfd5b */ + { .altcode = "" }, /* 0xfd5c */ + { .altcode = "" }, /* 0xfd5d */ + { .altcode = "" }, /* 0xfd5e */ + { .altcode = "" }, /* 0xfd5f */ + { .altcode = "" }, /* 0xfd60 */ + { .altcode = "" }, /* 0xfd61 */ + { .altcode = "" }, /* 0xfd62 */ + { .altcode = "" }, /* 0xfd63 */ + { .altcode = "" }, /* 0xfd64 */ + { .altcode = "" }, /* 0xfd65 */ + { .altcode = "" }, /* 0xfd66 */ + { .altcode = "" }, /* 0xfd67 */ + { .altcode = "" }, /* 0xfd68 */ + { .altcode = "" }, /* 0xfd69 */ + { .altcode = "" }, /* 0xfd6a */ + { .altcode = "" }, /* 0xfd6b */ + { .altcode = "" }, /* 0xfd6c */ + { .altcode = "" }, /* 0xfd6d */ + { .altcode = "" }, /* 0xfd6e */ + { .altcode = "" }, /* 0xfd6f */ + { .altcode = "" }, /* 0xfd70 */ + { .altcode = "" }, /* 0xfd71 */ + { .altcode = "" }, /* 0xfd72 */ + { .altcode = "" }, /* 0xfd73 */ + { .altcode = "" }, /* 0xfd74 */ + { .altcode = "" }, /* 0xfd75 */ + { .altcode = "" }, /* 0xfd76 */ + { .altcode = "" }, /* 0xfd77 */ + { .altcode = "" }, /* 0xfd78 */ + { .altcode = "" }, /* 0xfd79 */ + { .altcode = "" }, /* 0xfd7a */ + { .altcode = "" }, /* 0xfd7b */ + { .altcode = "" }, /* 0xfd7c */ + { .altcode = "" }, /* 0xfd7d */ + { .altcode = "" }, /* 0xfd7e */ + { .altcode = "" }, /* 0xfd7f */ + { .altcode = "" }, /* 0xfd80 */ + { .altcode = "" }, /* 0xfd81 */ + { .altcode = "" }, /* 0xfd82 */ + { .altcode = "" }, /* 0xfd83 */ + { .altcode = "" }, /* 0xfd84 */ + { .altcode = "" }, /* 0xfd85 */ + { .altcode = "" }, /* 0xfd86 */ + { .altcode = "" }, /* 0xfd87 */ + { .altcode = "" }, /* 0xfd88 */ + { .altcode = "" }, /* 0xfd89 */ + { .altcode = "" }, /* 0xfd8a */ + { .altcode = "" }, /* 0xfd8b */ + { .altcode = "" }, /* 0xfd8c */ + { .altcode = "" }, /* 0xfd8d */ + { .altcode = "" }, /* 0xfd8e */ + { .altcode = "" }, /* 0xfd8f */ + { .altcode = "" }, /* 0xfd90 */ + { .altcode = "" }, /* 0xfd91 */ + { .altcode = "" }, /* 0xfd92 */ + { .altcode = "" }, /* 0xfd93 */ + { .altcode = "" }, /* 0xfd94 */ + { .altcode = "" }, /* 0xfd95 */ + { .altcode = "" }, /* 0xfd96 */ + { .altcode = "" }, /* 0xfd97 */ + { .altcode = "" }, /* 0xfd98 */ + { .altcode = "" }, /* 0xfd99 */ + { .altcode = "" }, /* 0xfd9a */ + { .altcode = "" }, /* 0xfd9b */ + { .altcode = "" }, /* 0xfd9c */ + { .altcode = "" }, /* 0xfd9d */ + { .altcode = "" }, /* 0xfd9e */ + { .altcode = "" }, /* 0xfd9f */ + { .altcode = "" }, /* 0xfda0 */ + { .altcode = "" }, /* 0xfda1 */ + { .altcode = "" }, /* 0xfda2 */ + { .altcode = "" }, /* 0xfda3 */ + { .altcode = "" }, /* 0xfda4 */ + { .altcode = "" }, /* 0xfda5 */ + { .altcode = "" }, /* 0xfda6 */ + { .altcode = "" }, /* 0xfda7 */ + { .altcode = "" }, /* 0xfda8 */ + { .altcode = "" }, /* 0xfda9 */ + { .altcode = "" }, /* 0xfdaa */ + { .altcode = "" }, /* 0xfdab */ + { .altcode = "" }, /* 0xfdac */ + { .altcode = "" }, /* 0xfdad */ + { .altcode = "" }, /* 0xfdae */ + { .altcode = "" }, /* 0xfdaf */ + { .altcode = "" }, /* 0xfdb0 */ + { .altcode = "" }, /* 0xfdb1 */ + { .altcode = "" }, /* 0xfdb2 */ + { .altcode = "" }, /* 0xfdb3 */ + { .altcode = "" }, /* 0xfdb4 */ + { .altcode = "" }, /* 0xfdb5 */ + { .altcode = "" }, /* 0xfdb6 */ + { .altcode = "" }, /* 0xfdb7 */ + { .altcode = "" }, /* 0xfdb8 */ + { .altcode = "" }, /* 0xfdb9 */ + { .altcode = "" }, /* 0xfdba */ + { .altcode = "" }, /* 0xfdbb */ + { .altcode = "" }, /* 0xfdbc */ + { .altcode = "" }, /* 0xfdbd */ + { .altcode = "" }, /* 0xfdbe */ + { .altcode = "" }, /* 0xfdbf */ + { .altcode = "" }, /* 0xfdc0 */ + { .altcode = "" }, /* 0xfdc1 */ + { .altcode = "" }, /* 0xfdc2 */ + { .altcode = "" }, /* 0xfdc3 */ + { .altcode = "" }, /* 0xfdc4 */ + { .altcode = "" }, /* 0xfdc5 */ + { .altcode = "" }, /* 0xfdc6 */ + { .altcode = "" }, /* 0xfdc7 */ + { .altcode = "" }, /* 0xfdc8 */ + { .altcode = "" }, /* 0xfdc9 */ + { .altcode = "" }, /* 0xfdca */ + { .altcode = "" }, /* 0xfdcb */ + { .altcode = "" }, /* 0xfdcc */ + { .altcode = "" }, /* 0xfdcd */ + { .altcode = "" }, /* 0xfdce */ + { .altcode = "" }, /* 0xfdcf */ + { .altcode = "" }, /* 0xfdd0 */ + { .altcode = "" }, /* 0xfdd1 */ + { .altcode = "" }, /* 0xfdd2 */ + { .altcode = "" }, /* 0xfdd3 */ + { .altcode = "" }, /* 0xfdd4 */ + { .altcode = "" }, /* 0xfdd5 */ + { .altcode = "" }, /* 0xfdd6 */ + { .altcode = "" }, /* 0xfdd7 */ + { .altcode = "" }, /* 0xfdd8 */ + { .altcode = "" }, /* 0xfdd9 */ + { .altcode = "" }, /* 0xfdda */ + { .altcode = "" }, /* 0xfddb */ + { .altcode = "" }, /* 0xfddc */ + { .altcode = "" }, /* 0xfddd */ + { .altcode = "" }, /* 0xfdde */ + { .altcode = "" }, /* 0xfddf */ + { .altcode = "" }, /* 0xfde0 */ + { .altcode = "" }, /* 0xfde1 */ + { .altcode = "" }, /* 0xfde2 */ + { .altcode = "" }, /* 0xfde3 */ + { .altcode = "" }, /* 0xfde4 */ + { .altcode = "" }, /* 0xfde5 */ + { .altcode = "" }, /* 0xfde6 */ + { .altcode = "" }, /* 0xfde7 */ + { .altcode = "" }, /* 0xfde8 */ + { .altcode = "" }, /* 0xfde9 */ + { .altcode = "" }, /* 0xfdea */ + { .altcode = "" }, /* 0xfdeb */ + { .altcode = "" }, /* 0xfdec */ + { .altcode = "" }, /* 0xfded */ + { .altcode = "" }, /* 0xfdee */ + { .altcode = "" }, /* 0xfdef */ + { .altcode = "" }, /* 0xfdf0 */ + { .altcode = "" }, /* 0xfdf1 */ + { .altcode = "" }, /* 0xfdf2 */ + { .altcode = "" }, /* 0xfdf3 */ + { .altcode = "" }, /* 0xfdf4 */ + { .altcode = "" }, /* 0xfdf5 */ + { .altcode = "" }, /* 0xfdf6 */ + { .altcode = "" }, /* 0xfdf7 */ + { .altcode = "" }, /* 0xfdf8 */ + { .altcode = "" }, /* 0xfdf9 */ + { .altcode = "" }, /* 0xfdfa */ + { .altcode = "" }, /* 0xfdfb */ + { .altcode = "" }, /* 0xfdfc */ + { .altcode = "" }, /* 0xfdfd */ + { .altcode = "" }, /* 0xfdfe */ + { .altcode = "" }, /* 0xfdff */ + }, + { /* 0xfe?? */ + { .altcode = "" }, /* 0xfe00 */ + { .altcode = "" }, /* 0xfe01 (ISO_Lock) */ + { .altcode = "" }, /* 0xfe02 (ISO_Level2_Latch) */ + { .altcode = "" }, /* 0xfe03 (ISO_Level3_Shift) */ + { .altcode = "" }, /* 0xfe04 (ISO_Level3_Latch) */ + { .altcode = "" }, /* 0xfe05 (ISO_Level3_Lock) */ + { .altcode = "" }, /* 0xfe06 (ISO_Group_Latch) */ + { .altcode = "" }, /* 0xfe07 (ISO_Group_Lock) */ + { .altcode = "" }, /* 0xfe08 (ISO_Next_Group) */ + { .altcode = "" }, /* 0xfe09 (ISO_Next_Group_Lock) */ + { .altcode = "" }, /* 0xfe0a (ISO_Prev_Group) */ + { .altcode = "" }, /* 0xfe0b (ISO_Prev_Group_Lock) */ + { .altcode = "" }, /* 0xfe0c (ISO_First_Group) */ + { .altcode = "" }, /* 0xfe0d (ISO_First_Group_Lock) */ + { .altcode = "" }, /* 0xfe0e (ISO_Last_Group) */ + { .altcode = "" }, /* 0xfe0f (ISO_Last_Group_Lock) */ + { .altcode = "" }, /* 0xfe10 */ + { .altcode = "" }, /* 0xfe11 (ISO_Level5_Shift) */ + { .altcode = "" }, /* 0xfe12 (ISO_Level5_Latch) */ + { .altcode = "" }, /* 0xfe13 (ISO_Level5_Lock) */ + { .altcode = "" }, /* 0xfe14 */ + { .altcode = "" }, /* 0xfe15 */ + { .altcode = "" }, /* 0xfe16 */ + { .altcode = "" }, /* 0xfe17 */ + { .altcode = "" }, /* 0xfe18 */ + { .altcode = "" }, /* 0xfe19 */ + { .altcode = "" }, /* 0xfe1a */ + { .altcode = "" }, /* 0xfe1b */ + { .altcode = "" }, /* 0xfe1c */ + { .altcode = "" }, /* 0xfe1d */ + { .altcode = "" }, /* 0xfe1e */ + { .altcode = "" }, /* 0xfe1f */ + { .altcode = "" }, /* 0xfe20 (ISO_Left_Tab) */ + { .altcode = "" }, /* 0xfe21 (ISO_Move_Line_Up) */ + { .altcode = "" }, /* 0xfe22 (ISO_Move_Line_Down) */ + { .altcode = "" }, /* 0xfe23 (ISO_Partial_Line_Up) */ + { .altcode = "" }, /* 0xfe24 (ISO_Partial_Line_Down) */ + { .altcode = "" }, /* 0xfe25 (ISO_Partial_Space_Left) */ + { .altcode = "" }, /* 0xfe26 (ISO_Partial_Space_Right) */ + { .altcode = "" }, /* 0xfe27 (ISO_Set_Margin_Left) */ + { .altcode = "" }, /* 0xfe28 (ISO_Set_Margin_Right) */ + { .altcode = "" }, /* 0xfe29 (ISO_Release_Margin_Left) */ + { .altcode = "" }, /* 0xfe2a (ISO_Release_Margin_Right) */ + { .altcode = "" }, /* 0xfe2b (ISO_Release_Both_Margins) */ + { .altcode = "" }, /* 0xfe2c (ISO_Fast_Cursor_Left) */ + { .altcode = "" }, /* 0xfe2d (ISO_Fast_Cursor_Right) */ + { .altcode = "" }, /* 0xfe2e (ISO_Fast_Cursor_Up) */ + { .altcode = "" }, /* 0xfe2f (ISO_Fast_Cursor_Down) */ + { .altcode = "" }, /* 0xfe30 (ISO_Continuous_Underline) */ + { .altcode = "" }, /* 0xfe31 (ISO_Discontinuous_Underline) */ + { .altcode = "" }, /* 0xfe32 (ISO_Emphasize) */ + { .altcode = "" }, /* 0xfe33 (ISO_Center_Object) */ + { .altcode = "" }, /* 0xfe34 (ISO_Enter) */ + { .altcode = "" }, /* 0xfe35 */ + { .altcode = "" }, /* 0xfe36 */ + { .altcode = "" }, /* 0xfe37 */ + { .altcode = "" }, /* 0xfe38 */ + { .altcode = "" }, /* 0xfe39 */ + { .altcode = "" }, /* 0xfe3a */ + { .altcode = "" }, /* 0xfe3b */ + { .altcode = "" }, /* 0xfe3c */ + { .altcode = "" }, /* 0xfe3d */ + { .altcode = "" }, /* 0xfe3e */ + { .altcode = "" }, /* 0xfe3f */ + { .altcode = "" }, /* 0xfe40 */ + { .altcode = "" }, /* 0xfe41 */ + { .altcode = "" }, /* 0xfe42 */ + { .altcode = "" }, /* 0xfe43 */ + { .altcode = "" }, /* 0xfe44 */ + { .altcode = "" }, /* 0xfe45 */ + { .altcode = "" }, /* 0xfe46 */ + { .altcode = "" }, /* 0xfe47 */ + { .altcode = "" }, /* 0xfe48 */ + { .altcode = "" }, /* 0xfe49 */ + { .altcode = "" }, /* 0xfe4a */ + { .altcode = "" }, /* 0xfe4b */ + { .altcode = "" }, /* 0xfe4c */ + { .altcode = "" }, /* 0xfe4d */ + { .altcode = "" }, /* 0xfe4e */ + { .altcode = "" }, /* 0xfe4f */ + { .altcode = "" }, /* 0xfe50 (dead_grave) */ + { .altcode = "" }, /* 0xfe51 (dead_acute) */ + { .altcode = "" }, /* 0xfe52 (dead_circumflex) */ + { .altcode = "" }, /* 0xfe53 (dead_perispomeni) */ + { .altcode = "" }, /* 0xfe54 (dead_macron) */ + { .altcode = "" }, /* 0xfe55 (dead_breve) */ + { .altcode = "" }, /* 0xfe56 (dead_abovedot) */ + { .altcode = "" }, /* 0xfe57 (dead_diaeresis) */ + { .altcode = "" }, /* 0xfe58 (dead_abovering) */ + { .altcode = "" }, /* 0xfe59 (dead_doubleacute) */ + { .altcode = "" }, /* 0xfe5a (dead_caron) */ + { .altcode = "" }, /* 0xfe5b (dead_cedilla) */ + { .altcode = "" }, /* 0xfe5c (dead_ogonek) */ + { .altcode = "" }, /* 0xfe5d (dead_iota) */ + { .altcode = "" }, /* 0xfe5e (dead_voiced_sound) */ + { .altcode = "" }, /* 0xfe5f (dead_semivoiced_sound) */ + { .altcode = "" }, /* 0xfe60 (dead_belowdot) */ + { .altcode = "" }, /* 0xfe61 (dead_hook) */ + { .altcode = "" }, /* 0xfe62 (dead_horn) */ + { .altcode = "" }, /* 0xfe63 (dead_stroke) */ + { .altcode = "" }, /* 0xfe64 (dead_psili) */ + { .altcode = "" }, /* 0xfe65 (dead_dasia) */ + { .altcode = "" }, /* 0xfe66 (dead_doublegrave) */ + { .altcode = "" }, /* 0xfe67 (dead_belowring) */ + { .altcode = "" }, /* 0xfe68 (dead_belowmacron) */ + { .altcode = "" }, /* 0xfe69 (dead_belowcircumflex) */ + { .altcode = "" }, /* 0xfe6a (dead_belowtilde) */ + { .altcode = "" }, /* 0xfe6b (dead_belowbreve) */ + { .altcode = "" }, /* 0xfe6c (dead_belowdiaeresis) */ + { .altcode = "" }, /* 0xfe6d (dead_invertedbreve) */ + { .altcode = "" }, /* 0xfe6e (dead_belowcomma) */ + { .altcode = "" }, /* 0xfe6f (dead_currency) */ + { .altcode = "" }, /* 0xfe70 (AccessX_Enable) */ + { .altcode = "" }, /* 0xfe71 (AccessX_Feedback_Enable) */ + { .altcode = "" }, /* 0xfe72 (RepeatKeys_Enable) */ + { .altcode = "" }, /* 0xfe73 (SlowKeys_Enable) */ + { .altcode = "" }, /* 0xfe74 (BounceKeys_Enable) */ + { .altcode = "" }, /* 0xfe75 (StickyKeys_Enable) */ + { .altcode = "" }, /* 0xfe76 (MouseKeys_Enable) */ + { .altcode = "" }, /* 0xfe77 (MouseKeys_Accel_Enable) */ + { .altcode = "" }, /* 0xfe78 (Overlay1_Enable) */ + { .altcode = "" }, /* 0xfe79 (Overlay2_Enable) */ + { .altcode = "" }, /* 0xfe7a (AudibleBell_Enable) */ + { .altcode = "" }, /* 0xfe7b */ + { .altcode = "" }, /* 0xfe7c */ + { .altcode = "" }, /* 0xfe7d */ + { .altcode = "" }, /* 0xfe7e */ + { .altcode = "" }, /* 0xfe7f */ + { .altcode = "" }, /* 0xfe80 (dead_a) */ + { .altcode = "" }, /* 0xfe81 (dead_A) */ + { .altcode = "" }, /* 0xfe82 (dead_e) */ + { .altcode = "" }, /* 0xfe83 (dead_E) */ + { .altcode = "" }, /* 0xfe84 (dead_i) */ + { .altcode = "" }, /* 0xfe85 (dead_I) */ + { .altcode = "" }, /* 0xfe86 (dead_o) */ + { .altcode = "" }, /* 0xfe87 (dead_O) */ + { .altcode = "" }, /* 0xfe88 (dead_u) */ + { .altcode = "" }, /* 0xfe89 (dead_U) */ + { .altcode = "" }, /* 0xfe8a (dead_small_schwa) */ + { .altcode = "" }, /* 0xfe8b (dead_capital_schwa) */ + { .altcode = "" }, /* 0xfe8c */ + { .altcode = "" }, /* 0xfe8d */ + { .altcode = "" }, /* 0xfe8e */ + { .altcode = "" }, /* 0xfe8f */ + { .altcode = "" }, /* 0xfe90 */ + { .altcode = "" }, /* 0xfe91 */ + { .altcode = "" }, /* 0xfe92 */ + { .altcode = "" }, /* 0xfe93 */ + { .altcode = "" }, /* 0xfe94 */ + { .altcode = "" }, /* 0xfe95 */ + { .altcode = "" }, /* 0xfe96 */ + { .altcode = "" }, /* 0xfe97 */ + { .altcode = "" }, /* 0xfe98 */ + { .altcode = "" }, /* 0xfe99 */ + { .altcode = "" }, /* 0xfe9a */ + { .altcode = "" }, /* 0xfe9b */ + { .altcode = "" }, /* 0xfe9c */ + { .altcode = "" }, /* 0xfe9d */ + { .altcode = "" }, /* 0xfe9e */ + { .altcode = "" }, /* 0xfe9f */ + { .altcode = "" }, /* 0xfea0 */ + { .altcode = "" }, /* 0xfea1 */ + { .altcode = "" }, /* 0xfea2 */ + { .altcode = "" }, /* 0xfea3 */ + { .altcode = "" }, /* 0xfea4 */ + { .altcode = "" }, /* 0xfea5 */ + { .altcode = "" }, /* 0xfea6 */ + { .altcode = "" }, /* 0xfea7 */ + { .altcode = "" }, /* 0xfea8 */ + { .altcode = "" }, /* 0xfea9 */ + { .altcode = "" }, /* 0xfeaa */ + { .altcode = "" }, /* 0xfeab */ + { .altcode = "" }, /* 0xfeac */ + { .altcode = "" }, /* 0xfead */ + { .altcode = "" }, /* 0xfeae */ + { .altcode = "" }, /* 0xfeaf */ + { .altcode = "" }, /* 0xfeb0 */ + { .altcode = "" }, /* 0xfeb1 */ + { .altcode = "" }, /* 0xfeb2 */ + { .altcode = "" }, /* 0xfeb3 */ + { .altcode = "" }, /* 0xfeb4 */ + { .altcode = "" }, /* 0xfeb5 */ + { .altcode = "" }, /* 0xfeb6 */ + { .altcode = "" }, /* 0xfeb7 */ + { .altcode = "" }, /* 0xfeb8 */ + { .altcode = "" }, /* 0xfeb9 */ + { .altcode = "" }, /* 0xfeba */ + { .altcode = "" }, /* 0xfebb */ + { .altcode = "" }, /* 0xfebc */ + { .altcode = "" }, /* 0xfebd */ + { .altcode = "" }, /* 0xfebe */ + { .altcode = "" }, /* 0xfebf */ + { .altcode = "" }, /* 0xfec0 */ + { .altcode = "" }, /* 0xfec1 */ + { .altcode = "" }, /* 0xfec2 */ + { .altcode = "" }, /* 0xfec3 */ + { .altcode = "" }, /* 0xfec4 */ + { .altcode = "" }, /* 0xfec5 */ + { .altcode = "" }, /* 0xfec6 */ + { .altcode = "" }, /* 0xfec7 */ + { .altcode = "" }, /* 0xfec8 */ + { .altcode = "" }, /* 0xfec9 */ + { .altcode = "" }, /* 0xfeca */ + { .altcode = "" }, /* 0xfecb */ + { .altcode = "" }, /* 0xfecc */ + { .altcode = "" }, /* 0xfecd */ + { .altcode = "" }, /* 0xfece */ + { .altcode = "" }, /* 0xfecf */ + { .altcode = "" }, /* 0xfed0 (First_Virtual_Screen) */ + { .altcode = "" }, /* 0xfed1 (Prev_Virtual_Screen) */ + { .altcode = "" }, /* 0xfed2 (Next_Virtual_Screen) */ + { .altcode = "" }, /* 0xfed3 */ + { .altcode = "" }, /* 0xfed4 (Last_Virtual_Screen) */ + { .altcode = "" }, /* 0xfed5 (Terminate_Server) */ + { .altcode = "" }, /* 0xfed6 */ + { .altcode = "" }, /* 0xfed7 */ + { .altcode = "" }, /* 0xfed8 */ + { .altcode = "" }, /* 0xfed9 */ + { .altcode = "" }, /* 0xfeda */ + { .altcode = "" }, /* 0xfedb */ + { .altcode = "" }, /* 0xfedc */ + { .altcode = "" }, /* 0xfedd */ + { .altcode = "" }, /* 0xfede */ + { .altcode = "" }, /* 0xfedf */ + { .altcode = "" }, /* 0xfee0 (Pointer_Left) */ + { .altcode = "" }, /* 0xfee1 (Pointer_Right) */ + { .altcode = "" }, /* 0xfee2 (Pointer_Up) */ + { .altcode = "" }, /* 0xfee3 (Pointer_Down) */ + { .altcode = "" }, /* 0xfee4 (Pointer_UpLeft) */ + { .altcode = "" }, /* 0xfee5 (Pointer_UpRight) */ + { .altcode = "" }, /* 0xfee6 (Pointer_DownLeft) */ + { .altcode = "" }, /* 0xfee7 (Pointer_DownRight) */ + { .altcode = "" }, /* 0xfee8 (Pointer_Button_Dflt) */ + { .altcode = "" }, /* 0xfee9 (Pointer_Button1) */ + { .altcode = "" }, /* 0xfeea (Pointer_Button2) */ + { .altcode = "" }, /* 0xfeeb (Pointer_Button3) */ + { .altcode = "" }, /* 0xfeec (Pointer_Button4) */ + { .altcode = "" }, /* 0xfeed (Pointer_Button5) */ + { .altcode = "" }, /* 0xfeee (Pointer_DblClick_Dflt) */ + { .altcode = "" }, /* 0xfeef (Pointer_DblClick1) */ + { .altcode = "" }, /* 0xfef0 (Pointer_DblClick2) */ + { .altcode = "" }, /* 0xfef1 (Pointer_DblClick3) */ + { .altcode = "" }, /* 0xfef2 (Pointer_DblClick4) */ + { .altcode = "" }, /* 0xfef3 (Pointer_DblClick5) */ + { .altcode = "" }, /* 0xfef4 (Pointer_Drag_Dflt) */ + { .altcode = "" }, /* 0xfef5 (Pointer_Drag1) */ + { .altcode = "" }, /* 0xfef6 (Pointer_Drag2) */ + { .altcode = "" }, /* 0xfef7 (Pointer_Drag3) */ + { .altcode = "" }, /* 0xfef8 (Pointer_Drag4) */ + { .altcode = "" }, /* 0xfef9 (Pointer_EnableKeys) */ + { .altcode = "" }, /* 0xfefa (Pointer_Accelerate) */ + { .altcode = "" }, /* 0xfefb (Pointer_DfltBtnNext) */ + { .altcode = "" }, /* 0xfefc (Pointer_DfltBtnPrev) */ + { .altcode = "" }, /* 0xfefd (Pointer_Drag5) */ + { .altcode = "" }, /* 0xfefe */ + { .altcode = "" }, /* 0xfeff */ + }, + { /* 0xff?? */ + { .altcode = "" }, /* 0xff00 */ + { .altcode = "" }, /* 0xff01 */ + { .altcode = "" }, /* 0xff02 */ + { .altcode = "" }, /* 0xff03 */ + { .altcode = "" }, /* 0xff04 */ + { .altcode = "" }, /* 0xff05 */ + { .altcode = "" }, /* 0xff06 */ + { .altcode = "" }, /* 0xff07 */ + { .altcode = "" }, /* 0xff08 (BackSpace) */ + { .altcode = "" }, /* 0xff09 (Tab) */ + { .altcode = "" }, /* 0xff0a (Linefeed) */ + { .altcode = "" }, /* 0xff0b (Clear) */ + { .altcode = "" }, /* 0xff0c */ + { .altcode = "" }, /* 0xff0d (Return) */ + { .altcode = "" }, /* 0xff0e */ + { .altcode = "" }, /* 0xff0f */ + { .altcode = "" }, /* 0xff10 */ + { .altcode = "" }, /* 0xff11 */ + { .altcode = "" }, /* 0xff12 */ + { .altcode = "" }, /* 0xff13 (Pause) */ + { .altcode = "" }, /* 0xff14 (Scroll_Lock) */ + { .altcode = "" }, /* 0xff15 (Sys_Req) */ + { .altcode = "" }, /* 0xff16 */ + { .altcode = "" }, /* 0xff17 */ + { .altcode = "" }, /* 0xff18 */ + { .altcode = "" }, /* 0xff19 */ + { .altcode = "" }, /* 0xff1a */ + { .altcode = "" }, /* 0xff1b (Escape) */ + { .altcode = "" }, /* 0xff1c */ + { .altcode = "" }, /* 0xff1d */ + { .altcode = "" }, /* 0xff1e */ + { .altcode = "" }, /* 0xff1f */ + { .altcode = "" }, /* 0xff20 (Multi_key) */ + { .altcode = "" }, /* 0xff21 (Kanji) */ + { .altcode = "" }, /* 0xff22 (Muhenkan) */ + { .altcode = "" }, /* 0xff23 (Henkan) */ + { .altcode = "" }, /* 0xff24 (Romaji) */ + { .altcode = "" }, /* 0xff25 (Hiragana) */ + { .altcode = "" }, /* 0xff26 (Katakana) */ + { .altcode = "" }, /* 0xff27 (Hiragana_Katakana) */ + { .altcode = "" }, /* 0xff28 (Zenkaku) */ + { .altcode = "" }, /* 0xff29 (Hankaku) */ + { .altcode = "" }, /* 0xff2a (Zenkaku_Hankaku) */ + { .altcode = "" }, /* 0xff2b (Touroku) */ + { .altcode = "" }, /* 0xff2c (Massyo) */ + { .altcode = "" }, /* 0xff2d (Kana_Lock) */ + { .altcode = "" }, /* 0xff2e (Kana_Shift) */ + { .altcode = "" }, /* 0xff2f (Eisu_Shift) */ + { .altcode = "" }, /* 0xff30 (Eisu_toggle) */ + { .altcode = "" }, /* 0xff31 (Hangul) */ + { .altcode = "" }, /* 0xff32 (Hangul_Start) */ + { .altcode = "" }, /* 0xff33 (Hangul_End) */ + { .altcode = "" }, /* 0xff34 (Hangul_Hanja) */ + { .altcode = "" }, /* 0xff35 (Hangul_Jamo) */ + { .altcode = "" }, /* 0xff36 (Hangul_Romaja) */ + { .altcode = "" }, /* 0xff37 (Hangul_Codeinput) */ + { .altcode = "" }, /* 0xff38 (Hangul_Jeonja) */ + { .altcode = "" }, /* 0xff39 (Hangul_Banja) */ + { .altcode = "" }, /* 0xff3a (Hangul_PreHanja) */ + { .altcode = "" }, /* 0xff3b (Hangul_PostHanja) */ + { .altcode = "" }, /* 0xff3c (Hangul_SingleCandidate) */ + { .altcode = "" }, /* 0xff3d (Hangul_MultipleCandidate) */ + { .altcode = "" }, /* 0xff3e (Hangul_PreviousCandidate) */ + { .altcode = "" }, /* 0xff3f (Hangul_Special) */ + { .altcode = "" }, /* 0xff40 */ + { .altcode = "" }, /* 0xff41 */ + { .altcode = "" }, /* 0xff42 */ + { .altcode = "" }, /* 0xff43 */ + { .altcode = "" }, /* 0xff44 */ + { .altcode = "" }, /* 0xff45 */ + { .altcode = "" }, /* 0xff46 */ + { .altcode = "" }, /* 0xff47 */ + { .altcode = "" }, /* 0xff48 */ + { .altcode = "" }, /* 0xff49 */ + { .altcode = "" }, /* 0xff4a */ + { .altcode = "" }, /* 0xff4b */ + { .altcode = "" }, /* 0xff4c */ + { .altcode = "" }, /* 0xff4d */ + { .altcode = "" }, /* 0xff4e */ + { .altcode = "" }, /* 0xff4f */ + { .altcode = "" }, /* 0xff50 (Home) */ + { .altcode = "" }, /* 0xff51 (Left) */ + { .altcode = "" }, /* 0xff52 (Up) */ + { .altcode = "" }, /* 0xff53 (Right) */ + { .altcode = "" }, /* 0xff54 (Down) */ + { .altcode = "" }, /* 0xff55 (Page_Up) */ + { .altcode = "" }, /* 0xff56 (Page_Down) */ + { .altcode = "" }, /* 0xff57 (End) */ + { .altcode = "" }, /* 0xff58 (Begin) */ + { .altcode = "" }, /* 0xff59 */ + { .altcode = "" }, /* 0xff5a */ + { .altcode = "" }, /* 0xff5b */ + { .altcode = "" }, /* 0xff5c */ + { .altcode = "" }, /* 0xff5d */ + { .altcode = "" }, /* 0xff5e */ + { .altcode = "" }, /* 0xff5f */ + { .altcode = "" }, /* 0xff60 (Select) */ + { .altcode = "" }, /* 0xff61 (Print) */ + { .altcode = "" }, /* 0xff62 (Execute) */ + { .altcode = "" }, /* 0xff63 (Insert) */ + { .altcode = "" }, /* 0xff64 */ + { .altcode = "" }, /* 0xff65 (Undo) */ + { .altcode = "" }, /* 0xff66 (Redo) */ + { .altcode = "" }, /* 0xff67 (Menu) */ + { .altcode = "" }, /* 0xff68 (Find) */ + { .altcode = "" }, /* 0xff69 (Cancel) */ + { .altcode = "" }, /* 0xff6a (Help) */ + { .altcode = "" }, /* 0xff6b (Break) */ + { .altcode = "" }, /* 0xff6c */ + { .altcode = "" }, /* 0xff6d */ + { .altcode = "" }, /* 0xff6e */ + { .altcode = "" }, /* 0xff6f */ + { .altcode = "" }, /* 0xff70 */ + { .altcode = "" }, /* 0xff71 */ + { .altcode = "" }, /* 0xff72 */ + { .altcode = "" }, /* 0xff73 */ + { .altcode = "" }, /* 0xff74 */ + { .altcode = "" }, /* 0xff75 */ + { .altcode = "" }, /* 0xff76 */ + { .altcode = "" }, /* 0xff77 */ + { .altcode = "" }, /* 0xff78 */ + { .altcode = "" }, /* 0xff79 */ + { .altcode = "" }, /* 0xff7a */ + { .altcode = "" }, /* 0xff7b */ + { .altcode = "" }, /* 0xff7c */ + { .altcode = "" }, /* 0xff7d */ + { .altcode = "" }, /* 0xff7e (Hangul_switch) */ + { .altcode = "" }, /* 0xff7f (Num_Lock) */ + { .altcode = "" }, /* 0xff80 (KP_Space) */ + { .altcode = "" }, /* 0xff81 */ + { .altcode = "" }, /* 0xff82 */ + { .altcode = "" }, /* 0xff83 */ + { .altcode = "" }, /* 0xff84 */ + { .altcode = "" }, /* 0xff85 */ + { .altcode = "" }, /* 0xff86 */ + { .altcode = "" }, /* 0xff87 */ + { .altcode = "" }, /* 0xff88 */ + { .altcode = "" }, /* 0xff89 (KP_Tab) */ + { .altcode = "" }, /* 0xff8a */ + { .altcode = "" }, /* 0xff8b */ + { .altcode = "" }, /* 0xff8c */ + { .altcode = "" }, /* 0xff8d (KP_Enter) */ + { .altcode = "" }, /* 0xff8e */ + { .altcode = "" }, /* 0xff8f */ + { .altcode = "" }, /* 0xff90 */ + { .altcode = "" }, /* 0xff91 (KP_F1) */ + { .altcode = "" }, /* 0xff92 (KP_F2) */ + { .altcode = "" }, /* 0xff93 (KP_F3) */ + { .altcode = "" }, /* 0xff94 (KP_F4) */ + { .altcode = "" }, /* 0xff95 (KP_Home) */ + { .altcode = "" }, /* 0xff96 (KP_Left) */ + { .altcode = "" }, /* 0xff97 (KP_Up) */ + { .altcode = "" }, /* 0xff98 (KP_Right) */ + { .altcode = "" }, /* 0xff99 (KP_Down) */ + { .altcode = "" }, /* 0xff9a (KP_Page_Up) */ + { .altcode = "" }, /* 0xff9b (KP_Page_Down) */ + { .altcode = "" }, /* 0xff9c (KP_End) */ + { .altcode = "" }, /* 0xff9d (KP_Begin) */ + { .altcode = "" }, /* 0xff9e (KP_Insert) */ + { .altcode = "" }, /* 0xff9f (KP_Delete) */ + { .altcode = "" }, /* 0xffa0 */ + { .altcode = "" }, /* 0xffa1 */ + { .altcode = "" }, /* 0xffa2 */ + { .altcode = "" }, /* 0xffa3 */ + { .altcode = "" }, /* 0xffa4 */ + { .altcode = "" }, /* 0xffa5 */ + { .altcode = "" }, /* 0xffa6 */ + { .altcode = "" }, /* 0xffa7 */ + { .altcode = "" }, /* 0xffa8 */ + { .altcode = "" }, /* 0xffa9 */ + { .altcode = "" }, /* 0xffaa (KP_Multiply) */ + { .altcode = "" }, /* 0xffab (KP_Add) */ + { .altcode = "" }, /* 0xffac (KP_Separator) */ + { .altcode = "" }, /* 0xffad (KP_Subtract) */ + { .altcode = "" }, /* 0xffae (KP_Decimal) */ + { .altcode = "" }, /* 0xffaf (KP_Divide) */ + { .altcode = "" }, /* 0xffb0 (KP_0) */ + { .altcode = "" }, /* 0xffb1 (KP_1) */ + { .altcode = "" }, /* 0xffb2 (KP_2) */ + { .altcode = "" }, /* 0xffb3 (KP_3) */ + { .altcode = "" }, /* 0xffb4 (KP_4) */ + { .altcode = "" }, /* 0xffb5 (KP_5) */ + { .altcode = "" }, /* 0xffb6 (KP_6) */ + { .altcode = "" }, /* 0xffb7 (KP_7) */ + { .altcode = "" }, /* 0xffb8 (KP_8) */ + { .altcode = "" }, /* 0xffb9 (KP_9) */ + { .altcode = "" }, /* 0xffba */ + { .altcode = "" }, /* 0xffbb */ + { .altcode = "" }, /* 0xffbc */ + { .altcode = "" }, /* 0xffbd (KP_Equal) */ + { .altcode = "" }, /* 0xffbe (F1) */ + { .altcode = "" }, /* 0xffbf (F2) */ + { .altcode = "" }, /* 0xffc0 (F3) */ + { .altcode = "" }, /* 0xffc1 (F4) */ + { .altcode = "" }, /* 0xffc2 (F5) */ + { .altcode = "" }, /* 0xffc3 (F6) */ + { .altcode = "" }, /* 0xffc4 (F7) */ + { .altcode = "" }, /* 0xffc5 (F8) */ + { .altcode = "" }, /* 0xffc6 (F9) */ + { .altcode = "" }, /* 0xffc7 (F10) */ + { .altcode = "" }, /* 0xffc8 (L1) */ + { .altcode = "" }, /* 0xffc9 (L2) */ + { .altcode = "" }, /* 0xffca (L3) */ + { .altcode = "" }, /* 0xffcb (L4) */ + { .altcode = "" }, /* 0xffcc (L5) */ + { .altcode = "" }, /* 0xffcd (L6) */ + { .altcode = "" }, /* 0xffce (L7) */ + { .altcode = "" }, /* 0xffcf (L8) */ + { .altcode = "" }, /* 0xffd0 (L9) */ + { .altcode = "" }, /* 0xffd1 (L10) */ + { .altcode = "" }, /* 0xffd2 (R1) */ + { .altcode = "" }, /* 0xffd3 (R2) */ + { .altcode = "" }, /* 0xffd4 (R3) */ + { .altcode = "" }, /* 0xffd5 (R4) */ + { .altcode = "" }, /* 0xffd6 (R5) */ + { .altcode = "" }, /* 0xffd7 (R6) */ + { .altcode = "" }, /* 0xffd8 (R7) */ + { .altcode = "" }, /* 0xffd9 (R8) */ + { .altcode = "" }, /* 0xffda (R9) */ + { .altcode = "" }, /* 0xffdb (R10) */ + { .altcode = "" }, /* 0xffdc (R11) */ + { .altcode = "" }, /* 0xffdd (R12) */ + { .altcode = "" }, /* 0xffde (R13) */ + { .altcode = "" }, /* 0xffdf (R14) */ + { .altcode = "" }, /* 0xffe0 (R15) */ + { .altcode = "" }, /* 0xffe1 (Shift_L) */ + { .altcode = "" }, /* 0xffe2 (Shift_R) */ + { .altcode = "" }, /* 0xffe3 (Control_L) */ + { .altcode = "" }, /* 0xffe4 (Control_R) */ + { .altcode = "" }, /* 0xffe5 (Caps_Lock) */ + { .altcode = "" }, /* 0xffe6 (Shift_Lock) */ + { .altcode = "" }, /* 0xffe7 (Meta_L) */ + { .altcode = "" }, /* 0xffe8 (Meta_R) */ + { .altcode = "" }, /* 0xffe9 (Alt_L) */ + { .altcode = "" }, /* 0xffea (Alt_R) */ + { .altcode = "" }, /* 0xffeb (Super_L) */ + { .altcode = "" }, /* 0xffec (Super_R) */ + { .altcode = "" }, /* 0xffed (Hyper_L) */ + { .altcode = "" }, /* 0xffee (Hyper_R) */ + { .altcode = "" }, /* 0xffef */ + { .altcode = "" }, /* 0xfff0 */ + { .altcode = "" }, /* 0xfff1 (braille_dot_1) */ + { .altcode = "" }, /* 0xfff2 (braille_dot_2) */ + { .altcode = "" }, /* 0xfff3 (braille_dot_3) */ + { .altcode = "" }, /* 0xfff4 (braille_dot_4) */ + { .altcode = "" }, /* 0xfff5 (braille_dot_5) */ + { .altcode = "" }, /* 0xfff6 (braille_dot_6) */ + { .altcode = "" }, /* 0xfff7 (braille_dot_7) */ + { .altcode = "" }, /* 0xfff8 (braille_dot_8) */ + { .altcode = "" }, /* 0xfff9 (braille_dot_9) */ + { .altcode = "" }, /* 0xfffa (braille_dot_10) */ + { .altcode = "" }, /* 0xfffb */ + { .altcode = "" }, /* 0xfffc */ + { .altcode = "" }, /* 0xfffd */ + { .altcode = "" }, /* 0xfffe */ + { .altcode = "" }, /* 0xffff (Delete) */ + }, +}; + From dcafe2cd46d4f3a01790f6d18fd1693724b65a7b Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Tue, 20 Mar 2012 16:03:49 -0700 Subject: [PATCH 103/253] Use const char* rather than static array. --- protocols/rdp/include/rdp_keymap.h | 2 +- protocols/rdp/src/rdp_keymap_alt.c | 10712 +++++++++++++-------------- 2 files changed, 5357 insertions(+), 5357 deletions(-) diff --git a/protocols/rdp/include/rdp_keymap.h b/protocols/rdp/include/rdp_keymap.h index 99dfb8a6..c7a7b89c 100644 --- a/protocols/rdp/include/rdp_keymap.h +++ b/protocols/rdp/include/rdp_keymap.h @@ -79,7 +79,7 @@ typedef struct guac_rdp_altcode_map { /** * The 4-digit Alt-code which types this keysym. */ - char altcode[4]; + const char* altcode; } guac_rdp_altcode_map; diff --git a/protocols/rdp/src/rdp_keymap_alt.c b/protocols/rdp/src/rdp_keymap_alt.c index 9b971f39..2ffa7e76 100644 --- a/protocols/rdp/src/rdp_keymap_alt.c +++ b/protocols/rdp/src/rdp_keymap_alt.c @@ -42,5400 +42,5400 @@ const guac_rdp_keysym_altcode_map guac_rdp_keysym_altcode = { { /* 0x00?? */ - { .altcode = "" }, /* 0x0000 */ - { .altcode = "" }, /* 0x0001 */ - { .altcode = "" }, /* 0x0002 */ - { .altcode = "" }, /* 0x0003 */ - { .altcode = "" }, /* 0x0004 */ - { .altcode = "" }, /* 0x0005 */ - { .altcode = "" }, /* 0x0006 */ - { .altcode = "" }, /* 0x0007 */ - { .altcode = "" }, /* 0x0008 */ - { .altcode = "" }, /* 0x0009 */ - { .altcode = "" }, /* 0x000a */ - { .altcode = "" }, /* 0x000b */ - { .altcode = "" }, /* 0x000c */ - { .altcode = "" }, /* 0x000d */ - { .altcode = "" }, /* 0x000e */ - { .altcode = "" }, /* 0x000f */ - { .altcode = "" }, /* 0x0010 */ - { .altcode = "" }, /* 0x0011 */ - { .altcode = "" }, /* 0x0012 */ - { .altcode = "" }, /* 0x0013 */ - { .altcode = "" }, /* 0x0014 */ - { .altcode = "" }, /* 0x0015 */ - { .altcode = "" }, /* 0x0016 */ - { .altcode = "" }, /* 0x0017 */ - { .altcode = "" }, /* 0x0018 */ - { .altcode = "" }, /* 0x0019 */ - { .altcode = "" }, /* 0x001a */ - { .altcode = "" }, /* 0x001b */ - { .altcode = "" }, /* 0x001c */ - { .altcode = "" }, /* 0x001d */ - { .altcode = "" }, /* 0x001e */ - { .altcode = "" }, /* 0x001f */ - { .altcode = "" }, /* 0x0020 (space) */ - { .altcode = "" }, /* 0x0021 (exclam) */ - { .altcode = "" }, /* 0x0022 (quotedbl) */ - { .altcode = "" }, /* 0x0023 (numbersign) */ - { .altcode = "" }, /* 0x0024 (dollar) */ - { .altcode = "" }, /* 0x0025 (percent) */ - { .altcode = "" }, /* 0x0026 (ampersand) */ - { .altcode = "" }, /* 0x0027 (quoteright) */ - { .altcode = "" }, /* 0x0028 (parenleft) */ - { .altcode = "" }, /* 0x0029 (parenright) */ - { .altcode = "" }, /* 0x002a (asterisk) */ - { .altcode = "" }, /* 0x002b (plus) */ - { .altcode = "" }, /* 0x002c (comma) */ - { .altcode = "" }, /* 0x002d (minus) */ - { .altcode = "" }, /* 0x002e (period) */ - { .altcode = "" }, /* 0x002f (slash) */ - { .altcode = "" }, /* 0x0030 (0) */ - { .altcode = "" }, /* 0x0031 (1) */ - { .altcode = "" }, /* 0x0032 (2) */ - { .altcode = "" }, /* 0x0033 (3) */ - { .altcode = "" }, /* 0x0034 (4) */ - { .altcode = "" }, /* 0x0035 (5) */ - { .altcode = "" }, /* 0x0036 (6) */ - { .altcode = "" }, /* 0x0037 (7) */ - { .altcode = "" }, /* 0x0038 (8) */ - { .altcode = "" }, /* 0x0039 (9) */ - { .altcode = "" }, /* 0x003a (colon) */ - { .altcode = "" }, /* 0x003b (semicolon) */ - { .altcode = "" }, /* 0x003c (less) */ - { .altcode = "" }, /* 0x003d (equal) */ - { .altcode = "" }, /* 0x003e (greater) */ - { .altcode = "" }, /* 0x003f (question) */ - { .altcode = "" }, /* 0x0040 (at) */ - { .altcode = "" }, /* 0x0041 (A) */ - { .altcode = "" }, /* 0x0042 (B) */ - { .altcode = "" }, /* 0x0043 (C) */ - { .altcode = "" }, /* 0x0044 (D) */ - { .altcode = "" }, /* 0x0045 (E) */ - { .altcode = "" }, /* 0x0046 (F) */ - { .altcode = "" }, /* 0x0047 (G) */ - { .altcode = "" }, /* 0x0048 (H) */ - { .altcode = "" }, /* 0x0049 (I) */ - { .altcode = "" }, /* 0x004a (J) */ - { .altcode = "" }, /* 0x004b (K) */ - { .altcode = "" }, /* 0x004c (L) */ - { .altcode = "" }, /* 0x004d (M) */ - { .altcode = "" }, /* 0x004e (N) */ - { .altcode = "" }, /* 0x004f (O) */ - { .altcode = "" }, /* 0x0050 (P) */ - { .altcode = "" }, /* 0x0051 (Q) */ - { .altcode = "" }, /* 0x0052 (R) */ - { .altcode = "" }, /* 0x0053 (S) */ - { .altcode = "" }, /* 0x0054 (T) */ - { .altcode = "" }, /* 0x0055 (U) */ - { .altcode = "" }, /* 0x0056 (V) */ - { .altcode = "" }, /* 0x0057 (W) */ - { .altcode = "" }, /* 0x0058 (X) */ - { .altcode = "" }, /* 0x0059 (Y) */ - { .altcode = "" }, /* 0x005a (Z) */ - { .altcode = "" }, /* 0x005b (bracketleft) */ - { .altcode = "" }, /* 0x005c (backslash) */ - { .altcode = "" }, /* 0x005d (bracketright) */ - { .altcode = "" }, /* 0x005e (asciicircum) */ - { .altcode = "" }, /* 0x005f (underscore) */ - { .altcode = "" }, /* 0x0060 (quoteleft) */ - { .altcode = "" }, /* 0x0061 (a) */ - { .altcode = "" }, /* 0x0062 (b) */ - { .altcode = "" }, /* 0x0063 (c) */ - { .altcode = "" }, /* 0x0064 (d) */ - { .altcode = "" }, /* 0x0065 (e) */ - { .altcode = "" }, /* 0x0066 (f) */ - { .altcode = "" }, /* 0x0067 (g) */ - { .altcode = "" }, /* 0x0068 (h) */ - { .altcode = "" }, /* 0x0069 (i) */ - { .altcode = "" }, /* 0x006a (j) */ - { .altcode = "" }, /* 0x006b (k) */ - { .altcode = "" }, /* 0x006c (l) */ - { .altcode = "" }, /* 0x006d (m) */ - { .altcode = "" }, /* 0x006e (n) */ - { .altcode = "" }, /* 0x006f (o) */ - { .altcode = "" }, /* 0x0070 (p) */ - { .altcode = "" }, /* 0x0071 (q) */ - { .altcode = "" }, /* 0x0072 (r) */ - { .altcode = "" }, /* 0x0073 (s) */ - { .altcode = "" }, /* 0x0074 (t) */ - { .altcode = "" }, /* 0x0075 (u) */ - { .altcode = "" }, /* 0x0076 (v) */ - { .altcode = "" }, /* 0x0077 (w) */ - { .altcode = "" }, /* 0x0078 (x) */ - { .altcode = "" }, /* 0x0079 (y) */ - { .altcode = "" }, /* 0x007a (z) */ - { .altcode = "" }, /* 0x007b (braceleft) */ - { .altcode = "" }, /* 0x007c (bar) */ - { .altcode = "" }, /* 0x007d (braceright) */ - { .altcode = "" }, /* 0x007e (asciitilde) */ - { .altcode = "" }, /* 0x007f */ - { .altcode = "" }, /* 0x0080 */ - { .altcode = "" }, /* 0x0081 */ - { .altcode = "" }, /* 0x0082 */ - { .altcode = "" }, /* 0x0083 */ - { .altcode = "" }, /* 0x0084 */ - { .altcode = "" }, /* 0x0085 */ - { .altcode = "" }, /* 0x0086 */ - { .altcode = "" }, /* 0x0087 */ - { .altcode = "" }, /* 0x0088 */ - { .altcode = "" }, /* 0x0089 */ - { .altcode = "" }, /* 0x008a */ - { .altcode = "" }, /* 0x008b */ - { .altcode = "" }, /* 0x008c */ - { .altcode = "" }, /* 0x008d */ - { .altcode = "" }, /* 0x008e */ - { .altcode = "" }, /* 0x008f */ - { .altcode = "" }, /* 0x0090 */ - { .altcode = "" }, /* 0x0091 */ - { .altcode = "" }, /* 0x0092 */ - { .altcode = "" }, /* 0x0093 */ - { .altcode = "" }, /* 0x0094 */ - { .altcode = "" }, /* 0x0095 */ - { .altcode = "" }, /* 0x0096 */ - { .altcode = "" }, /* 0x0097 */ - { .altcode = "" }, /* 0x0098 */ - { .altcode = "" }, /* 0x0099 */ - { .altcode = "" }, /* 0x009a */ - { .altcode = "" }, /* 0x009b */ - { .altcode = "" }, /* 0x009c */ - { .altcode = "" }, /* 0x009d */ - { .altcode = "" }, /* 0x009e */ - { .altcode = "" }, /* 0x009f */ - { .altcode = "" }, /* 0x00a0 (nobreakspace) */ - { .altcode = "" }, /* 0x00a1 (exclamdown) */ - { .altcode = "" }, /* 0x00a2 (cent) */ - { .altcode = "" }, /* 0x00a3 (sterling) */ - { .altcode = "" }, /* 0x00a4 (currency) */ - { .altcode = "" }, /* 0x00a5 (yen) */ - { .altcode = "" }, /* 0x00a6 (brokenbar) */ - { .altcode = "" }, /* 0x00a7 (section) */ - { .altcode = "" }, /* 0x00a8 (diaeresis) */ - { .altcode = "" }, /* 0x00a9 (copyright) */ - { .altcode = "" }, /* 0x00aa (ordfeminine) */ - { .altcode = "" }, /* 0x00ab (guillemotleft) */ - { .altcode = "" }, /* 0x00ac (notsign) */ - { .altcode = "" }, /* 0x00ad (hyphen) */ - { .altcode = "" }, /* 0x00ae (registered) */ - { .altcode = "" }, /* 0x00af (macron) */ - { .altcode = "" }, /* 0x00b0 (degree) */ - { .altcode = "" }, /* 0x00b1 (plusminus) */ - { .altcode = "" }, /* 0x00b2 (twosuperior) */ - { .altcode = "" }, /* 0x00b3 (threesuperior) */ - { .altcode = "" }, /* 0x00b4 (acute) */ - { .altcode = "" }, /* 0x00b5 (mu) */ - { .altcode = "" }, /* 0x00b6 (paragraph) */ - { .altcode = "" }, /* 0x00b7 (periodcentered) */ - { .altcode = "" }, /* 0x00b8 (cedilla) */ - { .altcode = "" }, /* 0x00b9 (onesuperior) */ - { .altcode = "" }, /* 0x00ba (masculine) */ - { .altcode = "" }, /* 0x00bb (guillemotright) */ - { .altcode = "" }, /* 0x00bc (onequarter) */ - { .altcode = "" }, /* 0x00bd (onehalf) */ - { .altcode = "" }, /* 0x00be (threequarters) */ - { .altcode = "" }, /* 0x00bf (questiondown) */ - { .altcode = "" }, /* 0x00c0 (Agrave) */ - { .altcode = "" }, /* 0x00c1 (Aacute) */ - { .altcode = "" }, /* 0x00c2 (Acircumflex) */ - { .altcode = "" }, /* 0x00c3 (Atilde) */ - { .altcode = "" }, /* 0x00c4 (Adiaeresis) */ - { .altcode = "" }, /* 0x00c5 (Aring) */ - { .altcode = "" }, /* 0x00c6 (AE) */ - { .altcode = "" }, /* 0x00c7 (Ccedilla) */ - { .altcode = "" }, /* 0x00c8 (Egrave) */ - { .altcode = "" }, /* 0x00c9 (Eacute) */ - { .altcode = "" }, /* 0x00ca (Ecircumflex) */ - { .altcode = "" }, /* 0x00cb (Ediaeresis) */ - { .altcode = "" }, /* 0x00cc (Igrave) */ - { .altcode = "" }, /* 0x00cd (Iacute) */ - { .altcode = "" }, /* 0x00ce (Icircumflex) */ - { .altcode = "" }, /* 0x00cf (Idiaeresis) */ - { .altcode = "" }, /* 0x00d0 (Eth) */ - { .altcode = "" }, /* 0x00d1 (Ntilde) */ - { .altcode = "" }, /* 0x00d2 (Ograve) */ - { .altcode = "" }, /* 0x00d3 (Oacute) */ - { .altcode = "" }, /* 0x00d4 (Ocircumflex) */ - { .altcode = "" }, /* 0x00d5 (Otilde) */ - { .altcode = "" }, /* 0x00d6 (Odiaeresis) */ - { .altcode = "" }, /* 0x00d7 (multiply) */ - { .altcode = "" }, /* 0x00d8 (Ooblique) */ - { .altcode = "" }, /* 0x00d9 (Ugrave) */ - { .altcode = "" }, /* 0x00da (Uacute) */ - { .altcode = "" }, /* 0x00db (Ucircumflex) */ - { .altcode = "" }, /* 0x00dc (Udiaeresis) */ - { .altcode = "" }, /* 0x00dd (Yacute) */ - { .altcode = "" }, /* 0x00de (Thorn) */ - { .altcode = "" }, /* 0x00df (ssharp) */ - { .altcode = "" }, /* 0x00e0 (agrave) */ - { .altcode = "" }, /* 0x00e1 (aacute) */ - { .altcode = "" }, /* 0x00e2 (acircumflex) */ - { .altcode = "" }, /* 0x00e3 (atilde) */ - { .altcode = "" }, /* 0x00e4 (adiaeresis) */ - { .altcode = "" }, /* 0x00e5 (aring) */ - { .altcode = "" }, /* 0x00e6 (ae) */ - { .altcode = "" }, /* 0x00e7 (ccedilla) */ - { .altcode = "" }, /* 0x00e8 (egrave) */ - { .altcode = "" }, /* 0x00e9 (eacute) */ - { .altcode = "" }, /* 0x00ea (ecircumflex) */ - { .altcode = "" }, /* 0x00eb (ediaeresis) */ - { .altcode = "" }, /* 0x00ec (igrave) */ - { .altcode = "" }, /* 0x00ed (iacute) */ - { .altcode = "" }, /* 0x00ee (icircumflex) */ - { .altcode = "" }, /* 0x00ef (idiaeresis) */ - { .altcode = "" }, /* 0x00f0 (eth) */ - { .altcode = "" }, /* 0x00f1 (ntilde) */ - { .altcode = "" }, /* 0x00f2 (ograve) */ - { .altcode = "" }, /* 0x00f3 (oacute) */ - { .altcode = "" }, /* 0x00f4 (ocircumflex) */ - { .altcode = "" }, /* 0x00f5 (otilde) */ - { .altcode = "" }, /* 0x00f6 (odiaeresis) */ - { .altcode = "" }, /* 0x00f7 (division) */ - { .altcode = "" }, /* 0x00f8 (ooblique) */ - { .altcode = "" }, /* 0x00f9 (ugrave) */ - { .altcode = "" }, /* 0x00fa (uacute) */ - { .altcode = "" }, /* 0x00fb (ucircumflex) */ - { .altcode = "" }, /* 0x00fc (udiaeresis) */ - { .altcode = "" }, /* 0x00fd (yacute) */ - { .altcode = "" }, /* 0x00fe (thorn) */ - { .altcode = "" }, /* 0x00ff (ydiaeresis) */ + { .altcode = NULL }, /* 0x0000 */ + { .altcode = NULL }, /* 0x0001 */ + { .altcode = NULL }, /* 0x0002 */ + { .altcode = NULL }, /* 0x0003 */ + { .altcode = NULL }, /* 0x0004 */ + { .altcode = NULL }, /* 0x0005 */ + { .altcode = NULL }, /* 0x0006 */ + { .altcode = NULL }, /* 0x0007 */ + { .altcode = NULL }, /* 0x0008 */ + { .altcode = NULL }, /* 0x0009 */ + { .altcode = NULL }, /* 0x000a */ + { .altcode = NULL }, /* 0x000b */ + { .altcode = NULL }, /* 0x000c */ + { .altcode = NULL }, /* 0x000d */ + { .altcode = NULL }, /* 0x000e */ + { .altcode = NULL }, /* 0x000f */ + { .altcode = NULL }, /* 0x0010 */ + { .altcode = NULL }, /* 0x0011 */ + { .altcode = NULL }, /* 0x0012 */ + { .altcode = NULL }, /* 0x0013 */ + { .altcode = NULL }, /* 0x0014 */ + { .altcode = NULL }, /* 0x0015 */ + { .altcode = NULL }, /* 0x0016 */ + { .altcode = NULL }, /* 0x0017 */ + { .altcode = NULL }, /* 0x0018 */ + { .altcode = NULL }, /* 0x0019 */ + { .altcode = NULL }, /* 0x001a */ + { .altcode = NULL }, /* 0x001b */ + { .altcode = NULL }, /* 0x001c */ + { .altcode = NULL }, /* 0x001d */ + { .altcode = NULL }, /* 0x001e */ + { .altcode = NULL }, /* 0x001f */ + { .altcode = NULL }, /* 0x0020 (space) */ + { .altcode = NULL }, /* 0x0021 (exclam) */ + { .altcode = NULL }, /* 0x0022 (quotedbl) */ + { .altcode = NULL }, /* 0x0023 (numbersign) */ + { .altcode = NULL }, /* 0x0024 (dollar) */ + { .altcode = NULL }, /* 0x0025 (percent) */ + { .altcode = NULL }, /* 0x0026 (ampersand) */ + { .altcode = NULL }, /* 0x0027 (quoteright) */ + { .altcode = NULL }, /* 0x0028 (parenleft) */ + { .altcode = NULL }, /* 0x0029 (parenright) */ + { .altcode = NULL }, /* 0x002a (asterisk) */ + { .altcode = NULL }, /* 0x002b (plus) */ + { .altcode = NULL }, /* 0x002c (comma) */ + { .altcode = NULL }, /* 0x002d (minus) */ + { .altcode = NULL }, /* 0x002e (period) */ + { .altcode = NULL }, /* 0x002f (slash) */ + { .altcode = NULL }, /* 0x0030 (0) */ + { .altcode = NULL }, /* 0x0031 (1) */ + { .altcode = NULL }, /* 0x0032 (2) */ + { .altcode = NULL }, /* 0x0033 (3) */ + { .altcode = NULL }, /* 0x0034 (4) */ + { .altcode = NULL }, /* 0x0035 (5) */ + { .altcode = NULL }, /* 0x0036 (6) */ + { .altcode = NULL }, /* 0x0037 (7) */ + { .altcode = NULL }, /* 0x0038 (8) */ + { .altcode = NULL }, /* 0x0039 (9) */ + { .altcode = NULL }, /* 0x003a (colon) */ + { .altcode = NULL }, /* 0x003b (semicolon) */ + { .altcode = NULL }, /* 0x003c (less) */ + { .altcode = NULL }, /* 0x003d (equal) */ + { .altcode = NULL }, /* 0x003e (greater) */ + { .altcode = NULL }, /* 0x003f (question) */ + { .altcode = NULL }, /* 0x0040 (at) */ + { .altcode = NULL }, /* 0x0041 (A) */ + { .altcode = NULL }, /* 0x0042 (B) */ + { .altcode = NULL }, /* 0x0043 (C) */ + { .altcode = NULL }, /* 0x0044 (D) */ + { .altcode = NULL }, /* 0x0045 (E) */ + { .altcode = NULL }, /* 0x0046 (F) */ + { .altcode = NULL }, /* 0x0047 (G) */ + { .altcode = NULL }, /* 0x0048 (H) */ + { .altcode = NULL }, /* 0x0049 (I) */ + { .altcode = NULL }, /* 0x004a (J) */ + { .altcode = NULL }, /* 0x004b (K) */ + { .altcode = NULL }, /* 0x004c (L) */ + { .altcode = NULL }, /* 0x004d (M) */ + { .altcode = NULL }, /* 0x004e (N) */ + { .altcode = NULL }, /* 0x004f (O) */ + { .altcode = NULL }, /* 0x0050 (P) */ + { .altcode = NULL }, /* 0x0051 (Q) */ + { .altcode = NULL }, /* 0x0052 (R) */ + { .altcode = NULL }, /* 0x0053 (S) */ + { .altcode = NULL }, /* 0x0054 (T) */ + { .altcode = NULL }, /* 0x0055 (U) */ + { .altcode = NULL }, /* 0x0056 (V) */ + { .altcode = NULL }, /* 0x0057 (W) */ + { .altcode = NULL }, /* 0x0058 (X) */ + { .altcode = NULL }, /* 0x0059 (Y) */ + { .altcode = NULL }, /* 0x005a (Z) */ + { .altcode = NULL }, /* 0x005b (bracketleft) */ + { .altcode = NULL }, /* 0x005c (backslash) */ + { .altcode = NULL }, /* 0x005d (bracketright) */ + { .altcode = NULL }, /* 0x005e (asciicircum) */ + { .altcode = NULL }, /* 0x005f (underscore) */ + { .altcode = NULL }, /* 0x0060 (quoteleft) */ + { .altcode = NULL }, /* 0x0061 (a) */ + { .altcode = NULL }, /* 0x0062 (b) */ + { .altcode = NULL }, /* 0x0063 (c) */ + { .altcode = NULL }, /* 0x0064 (d) */ + { .altcode = NULL }, /* 0x0065 (e) */ + { .altcode = NULL }, /* 0x0066 (f) */ + { .altcode = NULL }, /* 0x0067 (g) */ + { .altcode = NULL }, /* 0x0068 (h) */ + { .altcode = NULL }, /* 0x0069 (i) */ + { .altcode = NULL }, /* 0x006a (j) */ + { .altcode = NULL }, /* 0x006b (k) */ + { .altcode = NULL }, /* 0x006c (l) */ + { .altcode = NULL }, /* 0x006d (m) */ + { .altcode = NULL }, /* 0x006e (n) */ + { .altcode = NULL }, /* 0x006f (o) */ + { .altcode = NULL }, /* 0x0070 (p) */ + { .altcode = NULL }, /* 0x0071 (q) */ + { .altcode = NULL }, /* 0x0072 (r) */ + { .altcode = NULL }, /* 0x0073 (s) */ + { .altcode = NULL }, /* 0x0074 (t) */ + { .altcode = NULL }, /* 0x0075 (u) */ + { .altcode = NULL }, /* 0x0076 (v) */ + { .altcode = NULL }, /* 0x0077 (w) */ + { .altcode = NULL }, /* 0x0078 (x) */ + { .altcode = NULL }, /* 0x0079 (y) */ + { .altcode = NULL }, /* 0x007a (z) */ + { .altcode = NULL }, /* 0x007b (braceleft) */ + { .altcode = NULL }, /* 0x007c (bar) */ + { .altcode = NULL }, /* 0x007d (braceright) */ + { .altcode = NULL }, /* 0x007e (asciitilde) */ + { .altcode = NULL }, /* 0x007f */ + { .altcode = NULL }, /* 0x0080 */ + { .altcode = NULL }, /* 0x0081 */ + { .altcode = NULL }, /* 0x0082 */ + { .altcode = NULL }, /* 0x0083 */ + { .altcode = NULL }, /* 0x0084 */ + { .altcode = NULL }, /* 0x0085 */ + { .altcode = NULL }, /* 0x0086 */ + { .altcode = NULL }, /* 0x0087 */ + { .altcode = NULL }, /* 0x0088 */ + { .altcode = NULL }, /* 0x0089 */ + { .altcode = NULL }, /* 0x008a */ + { .altcode = NULL }, /* 0x008b */ + { .altcode = NULL }, /* 0x008c */ + { .altcode = NULL }, /* 0x008d */ + { .altcode = NULL }, /* 0x008e */ + { .altcode = NULL }, /* 0x008f */ + { .altcode = NULL }, /* 0x0090 */ + { .altcode = NULL }, /* 0x0091 */ + { .altcode = NULL }, /* 0x0092 */ + { .altcode = NULL }, /* 0x0093 */ + { .altcode = NULL }, /* 0x0094 */ + { .altcode = NULL }, /* 0x0095 */ + { .altcode = NULL }, /* 0x0096 */ + { .altcode = NULL }, /* 0x0097 */ + { .altcode = NULL }, /* 0x0098 */ + { .altcode = NULL }, /* 0x0099 */ + { .altcode = NULL }, /* 0x009a */ + { .altcode = NULL }, /* 0x009b */ + { .altcode = NULL }, /* 0x009c */ + { .altcode = NULL }, /* 0x009d */ + { .altcode = NULL }, /* 0x009e */ + { .altcode = NULL }, /* 0x009f */ + { .altcode = NULL }, /* 0x00a0 (nobreakspace) */ + { .altcode = NULL }, /* 0x00a1 (exclamdown) */ + { .altcode = NULL }, /* 0x00a2 (cent) */ + { .altcode = NULL }, /* 0x00a3 (sterling) */ + { .altcode = NULL }, /* 0x00a4 (currency) */ + { .altcode = NULL }, /* 0x00a5 (yen) */ + { .altcode = NULL }, /* 0x00a6 (brokenbar) */ + { .altcode = NULL }, /* 0x00a7 (section) */ + { .altcode = NULL }, /* 0x00a8 (diaeresis) */ + { .altcode = NULL }, /* 0x00a9 (copyright) */ + { .altcode = NULL }, /* 0x00aa (ordfeminine) */ + { .altcode = NULL }, /* 0x00ab (guillemotleft) */ + { .altcode = NULL }, /* 0x00ac (notsign) */ + { .altcode = NULL }, /* 0x00ad (hyphen) */ + { .altcode = NULL }, /* 0x00ae (registered) */ + { .altcode = NULL }, /* 0x00af (macron) */ + { .altcode = NULL }, /* 0x00b0 (degree) */ + { .altcode = NULL }, /* 0x00b1 (plusminus) */ + { .altcode = NULL }, /* 0x00b2 (twosuperior) */ + { .altcode = NULL }, /* 0x00b3 (threesuperior) */ + { .altcode = NULL }, /* 0x00b4 (acute) */ + { .altcode = NULL }, /* 0x00b5 (mu) */ + { .altcode = NULL }, /* 0x00b6 (paragraph) */ + { .altcode = NULL }, /* 0x00b7 (periodcentered) */ + { .altcode = NULL }, /* 0x00b8 (cedilla) */ + { .altcode = NULL }, /* 0x00b9 (onesuperior) */ + { .altcode = NULL }, /* 0x00ba (masculine) */ + { .altcode = NULL }, /* 0x00bb (guillemotright) */ + { .altcode = NULL }, /* 0x00bc (onequarter) */ + { .altcode = NULL }, /* 0x00bd (onehalf) */ + { .altcode = NULL }, /* 0x00be (threequarters) */ + { .altcode = NULL }, /* 0x00bf (questiondown) */ + { .altcode = NULL }, /* 0x00c0 (Agrave) */ + { .altcode = NULL }, /* 0x00c1 (Aacute) */ + { .altcode = NULL }, /* 0x00c2 (Acircumflex) */ + { .altcode = NULL }, /* 0x00c3 (Atilde) */ + { .altcode = NULL }, /* 0x00c4 (Adiaeresis) */ + { .altcode = NULL }, /* 0x00c5 (Aring) */ + { .altcode = NULL }, /* 0x00c6 (AE) */ + { .altcode = NULL }, /* 0x00c7 (Ccedilla) */ + { .altcode = NULL }, /* 0x00c8 (Egrave) */ + { .altcode = NULL }, /* 0x00c9 (Eacute) */ + { .altcode = NULL }, /* 0x00ca (Ecircumflex) */ + { .altcode = NULL }, /* 0x00cb (Ediaeresis) */ + { .altcode = NULL }, /* 0x00cc (Igrave) */ + { .altcode = NULL }, /* 0x00cd (Iacute) */ + { .altcode = NULL }, /* 0x00ce (Icircumflex) */ + { .altcode = NULL }, /* 0x00cf (Idiaeresis) */ + { .altcode = NULL }, /* 0x00d0 (Eth) */ + { .altcode = NULL }, /* 0x00d1 (Ntilde) */ + { .altcode = NULL }, /* 0x00d2 (Ograve) */ + { .altcode = NULL }, /* 0x00d3 (Oacute) */ + { .altcode = NULL }, /* 0x00d4 (Ocircumflex) */ + { .altcode = NULL }, /* 0x00d5 (Otilde) */ + { .altcode = NULL }, /* 0x00d6 (Odiaeresis) */ + { .altcode = NULL }, /* 0x00d7 (multiply) */ + { .altcode = NULL }, /* 0x00d8 (Ooblique) */ + { .altcode = NULL }, /* 0x00d9 (Ugrave) */ + { .altcode = NULL }, /* 0x00da (Uacute) */ + { .altcode = NULL }, /* 0x00db (Ucircumflex) */ + { .altcode = NULL }, /* 0x00dc (Udiaeresis) */ + { .altcode = NULL }, /* 0x00dd (Yacute) */ + { .altcode = NULL }, /* 0x00de (Thorn) */ + { .altcode = NULL }, /* 0x00df (ssharp) */ + { .altcode = NULL }, /* 0x00e0 (agrave) */ + { .altcode = NULL }, /* 0x00e1 (aacute) */ + { .altcode = NULL }, /* 0x00e2 (acircumflex) */ + { .altcode = NULL }, /* 0x00e3 (atilde) */ + { .altcode = NULL }, /* 0x00e4 (adiaeresis) */ + { .altcode = NULL }, /* 0x00e5 (aring) */ + { .altcode = NULL }, /* 0x00e6 (ae) */ + { .altcode = NULL }, /* 0x00e7 (ccedilla) */ + { .altcode = NULL }, /* 0x00e8 (egrave) */ + { .altcode = NULL }, /* 0x00e9 (eacute) */ + { .altcode = NULL }, /* 0x00ea (ecircumflex) */ + { .altcode = NULL }, /* 0x00eb (ediaeresis) */ + { .altcode = NULL }, /* 0x00ec (igrave) */ + { .altcode = NULL }, /* 0x00ed (iacute) */ + { .altcode = NULL }, /* 0x00ee (icircumflex) */ + { .altcode = NULL }, /* 0x00ef (idiaeresis) */ + { .altcode = NULL }, /* 0x00f0 (eth) */ + { .altcode = NULL }, /* 0x00f1 (ntilde) */ + { .altcode = NULL }, /* 0x00f2 (ograve) */ + { .altcode = NULL }, /* 0x00f3 (oacute) */ + { .altcode = NULL }, /* 0x00f4 (ocircumflex) */ + { .altcode = NULL }, /* 0x00f5 (otilde) */ + { .altcode = NULL }, /* 0x00f6 (odiaeresis) */ + { .altcode = NULL }, /* 0x00f7 (division) */ + { .altcode = NULL }, /* 0x00f8 (ooblique) */ + { .altcode = NULL }, /* 0x00f9 (ugrave) */ + { .altcode = NULL }, /* 0x00fa (uacute) */ + { .altcode = NULL }, /* 0x00fb (ucircumflex) */ + { .altcode = NULL }, /* 0x00fc (udiaeresis) */ + { .altcode = NULL }, /* 0x00fd (yacute) */ + { .altcode = NULL }, /* 0x00fe (thorn) */ + { .altcode = NULL }, /* 0x00ff (ydiaeresis) */ }, { /* 0x01?? */ - { .altcode = "" }, /* 0x0100 */ - { .altcode = "" }, /* 0x0101 */ - { .altcode = "" }, /* 0x0102 */ - { .altcode = "" }, /* 0x0103 */ - { .altcode = "" }, /* 0x0104 */ - { .altcode = "" }, /* 0x0105 */ - { .altcode = "" }, /* 0x0106 */ - { .altcode = "" }, /* 0x0107 */ - { .altcode = "" }, /* 0x0108 */ - { .altcode = "" }, /* 0x0109 */ - { .altcode = "" }, /* 0x010a */ - { .altcode = "" }, /* 0x010b */ - { .altcode = "" }, /* 0x010c */ - { .altcode = "" }, /* 0x010d */ - { .altcode = "" }, /* 0x010e */ - { .altcode = "" }, /* 0x010f */ - { .altcode = "" }, /* 0x0110 */ - { .altcode = "" }, /* 0x0111 */ - { .altcode = "" }, /* 0x0112 */ - { .altcode = "" }, /* 0x0113 */ - { .altcode = "" }, /* 0x0114 */ - { .altcode = "" }, /* 0x0115 */ - { .altcode = "" }, /* 0x0116 */ - { .altcode = "" }, /* 0x0117 */ - { .altcode = "" }, /* 0x0118 */ - { .altcode = "" }, /* 0x0119 */ - { .altcode = "" }, /* 0x011a */ - { .altcode = "" }, /* 0x011b */ - { .altcode = "" }, /* 0x011c */ - { .altcode = "" }, /* 0x011d */ - { .altcode = "" }, /* 0x011e */ - { .altcode = "" }, /* 0x011f */ - { .altcode = "" }, /* 0x0120 */ - { .altcode = "" }, /* 0x0121 */ - { .altcode = "" }, /* 0x0122 */ - { .altcode = "" }, /* 0x0123 */ - { .altcode = "" }, /* 0x0124 */ - { .altcode = "" }, /* 0x0125 */ - { .altcode = "" }, /* 0x0126 */ - { .altcode = "" }, /* 0x0127 */ - { .altcode = "" }, /* 0x0128 */ - { .altcode = "" }, /* 0x0129 */ - { .altcode = "" }, /* 0x012a */ - { .altcode = "" }, /* 0x012b */ - { .altcode = "" }, /* 0x012c */ - { .altcode = "" }, /* 0x012d */ - { .altcode = "" }, /* 0x012e */ - { .altcode = "" }, /* 0x012f */ - { .altcode = "" }, /* 0x0130 */ - { .altcode = "" }, /* 0x0131 */ - { .altcode = "" }, /* 0x0132 */ - { .altcode = "" }, /* 0x0133 */ - { .altcode = "" }, /* 0x0134 */ - { .altcode = "" }, /* 0x0135 */ - { .altcode = "" }, /* 0x0136 */ - { .altcode = "" }, /* 0x0137 */ - { .altcode = "" }, /* 0x0138 */ - { .altcode = "" }, /* 0x0139 */ - { .altcode = "" }, /* 0x013a */ - { .altcode = "" }, /* 0x013b */ - { .altcode = "" }, /* 0x013c */ - { .altcode = "" }, /* 0x013d */ - { .altcode = "" }, /* 0x013e */ - { .altcode = "" }, /* 0x013f */ - { .altcode = "" }, /* 0x0140 */ - { .altcode = "" }, /* 0x0141 */ - { .altcode = "" }, /* 0x0142 */ - { .altcode = "" }, /* 0x0143 */ - { .altcode = "" }, /* 0x0144 */ - { .altcode = "" }, /* 0x0145 */ - { .altcode = "" }, /* 0x0146 */ - { .altcode = "" }, /* 0x0147 */ - { .altcode = "" }, /* 0x0148 */ - { .altcode = "" }, /* 0x0149 */ - { .altcode = "" }, /* 0x014a */ - { .altcode = "" }, /* 0x014b */ - { .altcode = "" }, /* 0x014c */ - { .altcode = "" }, /* 0x014d */ - { .altcode = "" }, /* 0x014e */ - { .altcode = "" }, /* 0x014f */ - { .altcode = "" }, /* 0x0150 */ - { .altcode = "" }, /* 0x0151 */ - { .altcode = "" }, /* 0x0152 */ - { .altcode = "" }, /* 0x0153 */ - { .altcode = "" }, /* 0x0154 */ - { .altcode = "" }, /* 0x0155 */ - { .altcode = "" }, /* 0x0156 */ - { .altcode = "" }, /* 0x0157 */ - { .altcode = "" }, /* 0x0158 */ - { .altcode = "" }, /* 0x0159 */ - { .altcode = "" }, /* 0x015a */ - { .altcode = "" }, /* 0x015b */ - { .altcode = "" }, /* 0x015c */ - { .altcode = "" }, /* 0x015d */ - { .altcode = "" }, /* 0x015e */ - { .altcode = "" }, /* 0x015f */ - { .altcode = "" }, /* 0x0160 */ - { .altcode = "" }, /* 0x0161 */ - { .altcode = "" }, /* 0x0162 */ - { .altcode = "" }, /* 0x0163 */ - { .altcode = "" }, /* 0x0164 */ - { .altcode = "" }, /* 0x0165 */ - { .altcode = "" }, /* 0x0166 */ - { .altcode = "" }, /* 0x0167 */ - { .altcode = "" }, /* 0x0168 */ - { .altcode = "" }, /* 0x0169 */ - { .altcode = "" }, /* 0x016a */ - { .altcode = "" }, /* 0x016b */ - { .altcode = "" }, /* 0x016c */ - { .altcode = "" }, /* 0x016d */ - { .altcode = "" }, /* 0x016e */ - { .altcode = "" }, /* 0x016f */ - { .altcode = "" }, /* 0x0170 */ - { .altcode = "" }, /* 0x0171 */ - { .altcode = "" }, /* 0x0172 */ - { .altcode = "" }, /* 0x0173 */ - { .altcode = "" }, /* 0x0174 */ - { .altcode = "" }, /* 0x0175 */ - { .altcode = "" }, /* 0x0176 */ - { .altcode = "" }, /* 0x0177 */ - { .altcode = "" }, /* 0x0178 */ - { .altcode = "" }, /* 0x0179 */ - { .altcode = "" }, /* 0x017a */ - { .altcode = "" }, /* 0x017b */ - { .altcode = "" }, /* 0x017c */ - { .altcode = "" }, /* 0x017d */ - { .altcode = "" }, /* 0x017e */ - { .altcode = "" }, /* 0x017f */ - { .altcode = "" }, /* 0x0180 */ - { .altcode = "" }, /* 0x0181 */ - { .altcode = "" }, /* 0x0182 */ - { .altcode = "" }, /* 0x0183 */ - { .altcode = "" }, /* 0x0184 */ - { .altcode = "" }, /* 0x0185 */ - { .altcode = "" }, /* 0x0186 */ - { .altcode = "" }, /* 0x0187 */ - { .altcode = "" }, /* 0x0188 */ - { .altcode = "" }, /* 0x0189 */ - { .altcode = "" }, /* 0x018a */ - { .altcode = "" }, /* 0x018b */ - { .altcode = "" }, /* 0x018c */ - { .altcode = "" }, /* 0x018d */ - { .altcode = "" }, /* 0x018e */ - { .altcode = "" }, /* 0x018f */ - { .altcode = "" }, /* 0x0190 */ - { .altcode = "" }, /* 0x0191 */ - { .altcode = "" }, /* 0x0192 */ - { .altcode = "" }, /* 0x0193 */ - { .altcode = "" }, /* 0x0194 */ - { .altcode = "" }, /* 0x0195 */ - { .altcode = "" }, /* 0x0196 */ - { .altcode = "" }, /* 0x0197 */ - { .altcode = "" }, /* 0x0198 */ - { .altcode = "" }, /* 0x0199 */ - { .altcode = "" }, /* 0x019a */ - { .altcode = "" }, /* 0x019b */ - { .altcode = "" }, /* 0x019c */ - { .altcode = "" }, /* 0x019d */ - { .altcode = "" }, /* 0x019e */ - { .altcode = "" }, /* 0x019f */ - { .altcode = "" }, /* 0x01a0 */ - { .altcode = "" }, /* 0x01a1 (Aogonek) */ - { .altcode = "" }, /* 0x01a2 (breve) */ - { .altcode = "" }, /* 0x01a3 (Lstroke) */ - { .altcode = "" }, /* 0x01a4 */ - { .altcode = "" }, /* 0x01a5 (Lcaron) */ - { .altcode = "" }, /* 0x01a6 (Sacute) */ - { .altcode = "" }, /* 0x01a7 */ - { .altcode = "" }, /* 0x01a8 */ - { .altcode = "" }, /* 0x01a9 (Scaron) */ - { .altcode = "" }, /* 0x01aa (Scedilla) */ - { .altcode = "" }, /* 0x01ab (Tcaron) */ - { .altcode = "" }, /* 0x01ac (Zacute) */ - { .altcode = "" }, /* 0x01ad */ - { .altcode = "" }, /* 0x01ae (Zcaron) */ - { .altcode = "" }, /* 0x01af (Zabovedot) */ - { .altcode = "" }, /* 0x01b0 */ - { .altcode = "" }, /* 0x01b1 (aogonek) */ - { .altcode = "" }, /* 0x01b2 (ogonek) */ - { .altcode = "" }, /* 0x01b3 (lstroke) */ - { .altcode = "" }, /* 0x01b4 */ - { .altcode = "" }, /* 0x01b5 (lcaron) */ - { .altcode = "" }, /* 0x01b6 (sacute) */ - { .altcode = "" }, /* 0x01b7 (caron) */ - { .altcode = "" }, /* 0x01b8 */ - { .altcode = "" }, /* 0x01b9 (scaron) */ - { .altcode = "" }, /* 0x01ba (scedilla) */ - { .altcode = "" }, /* 0x01bb (tcaron) */ - { .altcode = "" }, /* 0x01bc (zacute) */ - { .altcode = "" }, /* 0x01bd (doubleacute) */ - { .altcode = "" }, /* 0x01be (zcaron) */ - { .altcode = "" }, /* 0x01bf (zabovedot) */ - { .altcode = "" }, /* 0x01c0 (Racute) */ - { .altcode = "" }, /* 0x01c1 */ - { .altcode = "" }, /* 0x01c2 */ - { .altcode = "" }, /* 0x01c3 (Abreve) */ - { .altcode = "" }, /* 0x01c4 */ - { .altcode = "" }, /* 0x01c5 (Lacute) */ - { .altcode = "" }, /* 0x01c6 (Cacute) */ - { .altcode = "" }, /* 0x01c7 */ - { .altcode = "" }, /* 0x01c8 (Ccaron) */ - { .altcode = "" }, /* 0x01c9 */ - { .altcode = "" }, /* 0x01ca (Eogonek) */ - { .altcode = "" }, /* 0x01cb */ - { .altcode = "" }, /* 0x01cc (Ecaron) */ - { .altcode = "" }, /* 0x01cd */ - { .altcode = "" }, /* 0x01ce */ - { .altcode = "" }, /* 0x01cf (Dcaron) */ - { .altcode = "" }, /* 0x01d0 (Dstroke) */ - { .altcode = "" }, /* 0x01d1 (Nacute) */ - { .altcode = "" }, /* 0x01d2 (Ncaron) */ - { .altcode = "" }, /* 0x01d3 */ - { .altcode = "" }, /* 0x01d4 */ - { .altcode = "" }, /* 0x01d5 (Odoubleacute) */ - { .altcode = "" }, /* 0x01d6 */ - { .altcode = "" }, /* 0x01d7 */ - { .altcode = "" }, /* 0x01d8 (Rcaron) */ - { .altcode = "" }, /* 0x01d9 (Uring) */ - { .altcode = "" }, /* 0x01da */ - { .altcode = "" }, /* 0x01db (Udoubleacute) */ - { .altcode = "" }, /* 0x01dc */ - { .altcode = "" }, /* 0x01dd */ - { .altcode = "" }, /* 0x01de (Tcedilla) */ - { .altcode = "" }, /* 0x01df */ - { .altcode = "" }, /* 0x01e0 (racute) */ - { .altcode = "" }, /* 0x01e1 */ - { .altcode = "" }, /* 0x01e2 */ - { .altcode = "" }, /* 0x01e3 (abreve) */ - { .altcode = "" }, /* 0x01e4 */ - { .altcode = "" }, /* 0x01e5 (lacute) */ - { .altcode = "" }, /* 0x01e6 (cacute) */ - { .altcode = "" }, /* 0x01e7 */ - { .altcode = "" }, /* 0x01e8 (ccaron) */ - { .altcode = "" }, /* 0x01e9 */ - { .altcode = "" }, /* 0x01ea (eogonek) */ - { .altcode = "" }, /* 0x01eb */ - { .altcode = "" }, /* 0x01ec (ecaron) */ - { .altcode = "" }, /* 0x01ed */ - { .altcode = "" }, /* 0x01ee */ - { .altcode = "" }, /* 0x01ef (dcaron) */ - { .altcode = "" }, /* 0x01f0 (dstroke) */ - { .altcode = "" }, /* 0x01f1 (nacute) */ - { .altcode = "" }, /* 0x01f2 (ncaron) */ - { .altcode = "" }, /* 0x01f3 */ - { .altcode = "" }, /* 0x01f4 */ - { .altcode = "" }, /* 0x01f5 (odoubleacute) */ - { .altcode = "" }, /* 0x01f6 */ - { .altcode = "" }, /* 0x01f7 */ - { .altcode = "" }, /* 0x01f8 (rcaron) */ - { .altcode = "" }, /* 0x01f9 (uring) */ - { .altcode = "" }, /* 0x01fa */ - { .altcode = "" }, /* 0x01fb (udoubleacute) */ - { .altcode = "" }, /* 0x01fc */ - { .altcode = "" }, /* 0x01fd */ - { .altcode = "" }, /* 0x01fe (tcedilla) */ - { .altcode = "" }, /* 0x01ff (abovedot) */ + { .altcode = NULL }, /* 0x0100 */ + { .altcode = NULL }, /* 0x0101 */ + { .altcode = NULL }, /* 0x0102 */ + { .altcode = NULL }, /* 0x0103 */ + { .altcode = NULL }, /* 0x0104 */ + { .altcode = NULL }, /* 0x0105 */ + { .altcode = NULL }, /* 0x0106 */ + { .altcode = NULL }, /* 0x0107 */ + { .altcode = NULL }, /* 0x0108 */ + { .altcode = NULL }, /* 0x0109 */ + { .altcode = NULL }, /* 0x010a */ + { .altcode = NULL }, /* 0x010b */ + { .altcode = NULL }, /* 0x010c */ + { .altcode = NULL }, /* 0x010d */ + { .altcode = NULL }, /* 0x010e */ + { .altcode = NULL }, /* 0x010f */ + { .altcode = NULL }, /* 0x0110 */ + { .altcode = NULL }, /* 0x0111 */ + { .altcode = NULL }, /* 0x0112 */ + { .altcode = NULL }, /* 0x0113 */ + { .altcode = NULL }, /* 0x0114 */ + { .altcode = NULL }, /* 0x0115 */ + { .altcode = NULL }, /* 0x0116 */ + { .altcode = NULL }, /* 0x0117 */ + { .altcode = NULL }, /* 0x0118 */ + { .altcode = NULL }, /* 0x0119 */ + { .altcode = NULL }, /* 0x011a */ + { .altcode = NULL }, /* 0x011b */ + { .altcode = NULL }, /* 0x011c */ + { .altcode = NULL }, /* 0x011d */ + { .altcode = NULL }, /* 0x011e */ + { .altcode = NULL }, /* 0x011f */ + { .altcode = NULL }, /* 0x0120 */ + { .altcode = NULL }, /* 0x0121 */ + { .altcode = NULL }, /* 0x0122 */ + { .altcode = NULL }, /* 0x0123 */ + { .altcode = NULL }, /* 0x0124 */ + { .altcode = NULL }, /* 0x0125 */ + { .altcode = NULL }, /* 0x0126 */ + { .altcode = NULL }, /* 0x0127 */ + { .altcode = NULL }, /* 0x0128 */ + { .altcode = NULL }, /* 0x0129 */ + { .altcode = NULL }, /* 0x012a */ + { .altcode = NULL }, /* 0x012b */ + { .altcode = NULL }, /* 0x012c */ + { .altcode = NULL }, /* 0x012d */ + { .altcode = NULL }, /* 0x012e */ + { .altcode = NULL }, /* 0x012f */ + { .altcode = NULL }, /* 0x0130 */ + { .altcode = NULL }, /* 0x0131 */ + { .altcode = NULL }, /* 0x0132 */ + { .altcode = NULL }, /* 0x0133 */ + { .altcode = NULL }, /* 0x0134 */ + { .altcode = NULL }, /* 0x0135 */ + { .altcode = NULL }, /* 0x0136 */ + { .altcode = NULL }, /* 0x0137 */ + { .altcode = NULL }, /* 0x0138 */ + { .altcode = NULL }, /* 0x0139 */ + { .altcode = NULL }, /* 0x013a */ + { .altcode = NULL }, /* 0x013b */ + { .altcode = NULL }, /* 0x013c */ + { .altcode = NULL }, /* 0x013d */ + { .altcode = NULL }, /* 0x013e */ + { .altcode = NULL }, /* 0x013f */ + { .altcode = NULL }, /* 0x0140 */ + { .altcode = NULL }, /* 0x0141 */ + { .altcode = NULL }, /* 0x0142 */ + { .altcode = NULL }, /* 0x0143 */ + { .altcode = NULL }, /* 0x0144 */ + { .altcode = NULL }, /* 0x0145 */ + { .altcode = NULL }, /* 0x0146 */ + { .altcode = NULL }, /* 0x0147 */ + { .altcode = NULL }, /* 0x0148 */ + { .altcode = NULL }, /* 0x0149 */ + { .altcode = NULL }, /* 0x014a */ + { .altcode = NULL }, /* 0x014b */ + { .altcode = NULL }, /* 0x014c */ + { .altcode = NULL }, /* 0x014d */ + { .altcode = NULL }, /* 0x014e */ + { .altcode = NULL }, /* 0x014f */ + { .altcode = NULL }, /* 0x0150 */ + { .altcode = NULL }, /* 0x0151 */ + { .altcode = NULL }, /* 0x0152 */ + { .altcode = NULL }, /* 0x0153 */ + { .altcode = NULL }, /* 0x0154 */ + { .altcode = NULL }, /* 0x0155 */ + { .altcode = NULL }, /* 0x0156 */ + { .altcode = NULL }, /* 0x0157 */ + { .altcode = NULL }, /* 0x0158 */ + { .altcode = NULL }, /* 0x0159 */ + { .altcode = NULL }, /* 0x015a */ + { .altcode = NULL }, /* 0x015b */ + { .altcode = NULL }, /* 0x015c */ + { .altcode = NULL }, /* 0x015d */ + { .altcode = NULL }, /* 0x015e */ + { .altcode = NULL }, /* 0x015f */ + { .altcode = NULL }, /* 0x0160 */ + { .altcode = NULL }, /* 0x0161 */ + { .altcode = NULL }, /* 0x0162 */ + { .altcode = NULL }, /* 0x0163 */ + { .altcode = NULL }, /* 0x0164 */ + { .altcode = NULL }, /* 0x0165 */ + { .altcode = NULL }, /* 0x0166 */ + { .altcode = NULL }, /* 0x0167 */ + { .altcode = NULL }, /* 0x0168 */ + { .altcode = NULL }, /* 0x0169 */ + { .altcode = NULL }, /* 0x016a */ + { .altcode = NULL }, /* 0x016b */ + { .altcode = NULL }, /* 0x016c */ + { .altcode = NULL }, /* 0x016d */ + { .altcode = NULL }, /* 0x016e */ + { .altcode = NULL }, /* 0x016f */ + { .altcode = NULL }, /* 0x0170 */ + { .altcode = NULL }, /* 0x0171 */ + { .altcode = NULL }, /* 0x0172 */ + { .altcode = NULL }, /* 0x0173 */ + { .altcode = NULL }, /* 0x0174 */ + { .altcode = NULL }, /* 0x0175 */ + { .altcode = NULL }, /* 0x0176 */ + { .altcode = NULL }, /* 0x0177 */ + { .altcode = NULL }, /* 0x0178 */ + { .altcode = NULL }, /* 0x0179 */ + { .altcode = NULL }, /* 0x017a */ + { .altcode = NULL }, /* 0x017b */ + { .altcode = NULL }, /* 0x017c */ + { .altcode = NULL }, /* 0x017d */ + { .altcode = NULL }, /* 0x017e */ + { .altcode = NULL }, /* 0x017f */ + { .altcode = NULL }, /* 0x0180 */ + { .altcode = NULL }, /* 0x0181 */ + { .altcode = NULL }, /* 0x0182 */ + { .altcode = NULL }, /* 0x0183 */ + { .altcode = NULL }, /* 0x0184 */ + { .altcode = NULL }, /* 0x0185 */ + { .altcode = NULL }, /* 0x0186 */ + { .altcode = NULL }, /* 0x0187 */ + { .altcode = NULL }, /* 0x0188 */ + { .altcode = NULL }, /* 0x0189 */ + { .altcode = NULL }, /* 0x018a */ + { .altcode = NULL }, /* 0x018b */ + { .altcode = NULL }, /* 0x018c */ + { .altcode = NULL }, /* 0x018d */ + { .altcode = NULL }, /* 0x018e */ + { .altcode = NULL }, /* 0x018f */ + { .altcode = NULL }, /* 0x0190 */ + { .altcode = NULL }, /* 0x0191 */ + { .altcode = NULL }, /* 0x0192 */ + { .altcode = NULL }, /* 0x0193 */ + { .altcode = NULL }, /* 0x0194 */ + { .altcode = NULL }, /* 0x0195 */ + { .altcode = NULL }, /* 0x0196 */ + { .altcode = NULL }, /* 0x0197 */ + { .altcode = NULL }, /* 0x0198 */ + { .altcode = NULL }, /* 0x0199 */ + { .altcode = NULL }, /* 0x019a */ + { .altcode = NULL }, /* 0x019b */ + { .altcode = NULL }, /* 0x019c */ + { .altcode = NULL }, /* 0x019d */ + { .altcode = NULL }, /* 0x019e */ + { .altcode = NULL }, /* 0x019f */ + { .altcode = NULL }, /* 0x01a0 */ + { .altcode = NULL }, /* 0x01a1 (Aogonek) */ + { .altcode = NULL }, /* 0x01a2 (breve) */ + { .altcode = NULL }, /* 0x01a3 (Lstroke) */ + { .altcode = NULL }, /* 0x01a4 */ + { .altcode = NULL }, /* 0x01a5 (Lcaron) */ + { .altcode = NULL }, /* 0x01a6 (Sacute) */ + { .altcode = NULL }, /* 0x01a7 */ + { .altcode = NULL }, /* 0x01a8 */ + { .altcode = NULL }, /* 0x01a9 (Scaron) */ + { .altcode = NULL }, /* 0x01aa (Scedilla) */ + { .altcode = NULL }, /* 0x01ab (Tcaron) */ + { .altcode = NULL }, /* 0x01ac (Zacute) */ + { .altcode = NULL }, /* 0x01ad */ + { .altcode = NULL }, /* 0x01ae (Zcaron) */ + { .altcode = NULL }, /* 0x01af (Zabovedot) */ + { .altcode = NULL }, /* 0x01b0 */ + { .altcode = NULL }, /* 0x01b1 (aogonek) */ + { .altcode = NULL }, /* 0x01b2 (ogonek) */ + { .altcode = NULL }, /* 0x01b3 (lstroke) */ + { .altcode = NULL }, /* 0x01b4 */ + { .altcode = NULL }, /* 0x01b5 (lcaron) */ + { .altcode = NULL }, /* 0x01b6 (sacute) */ + { .altcode = NULL }, /* 0x01b7 (caron) */ + { .altcode = NULL }, /* 0x01b8 */ + { .altcode = NULL }, /* 0x01b9 (scaron) */ + { .altcode = NULL }, /* 0x01ba (scedilla) */ + { .altcode = NULL }, /* 0x01bb (tcaron) */ + { .altcode = NULL }, /* 0x01bc (zacute) */ + { .altcode = NULL }, /* 0x01bd (doubleacute) */ + { .altcode = NULL }, /* 0x01be (zcaron) */ + { .altcode = NULL }, /* 0x01bf (zabovedot) */ + { .altcode = NULL }, /* 0x01c0 (Racute) */ + { .altcode = NULL }, /* 0x01c1 */ + { .altcode = NULL }, /* 0x01c2 */ + { .altcode = NULL }, /* 0x01c3 (Abreve) */ + { .altcode = NULL }, /* 0x01c4 */ + { .altcode = NULL }, /* 0x01c5 (Lacute) */ + { .altcode = NULL }, /* 0x01c6 (Cacute) */ + { .altcode = NULL }, /* 0x01c7 */ + { .altcode = NULL }, /* 0x01c8 (Ccaron) */ + { .altcode = NULL }, /* 0x01c9 */ + { .altcode = NULL }, /* 0x01ca (Eogonek) */ + { .altcode = NULL }, /* 0x01cb */ + { .altcode = NULL }, /* 0x01cc (Ecaron) */ + { .altcode = NULL }, /* 0x01cd */ + { .altcode = NULL }, /* 0x01ce */ + { .altcode = NULL }, /* 0x01cf (Dcaron) */ + { .altcode = NULL }, /* 0x01d0 (Dstroke) */ + { .altcode = NULL }, /* 0x01d1 (Nacute) */ + { .altcode = NULL }, /* 0x01d2 (Ncaron) */ + { .altcode = NULL }, /* 0x01d3 */ + { .altcode = NULL }, /* 0x01d4 */ + { .altcode = NULL }, /* 0x01d5 (Odoubleacute) */ + { .altcode = NULL }, /* 0x01d6 */ + { .altcode = NULL }, /* 0x01d7 */ + { .altcode = NULL }, /* 0x01d8 (Rcaron) */ + { .altcode = NULL }, /* 0x01d9 (Uring) */ + { .altcode = NULL }, /* 0x01da */ + { .altcode = NULL }, /* 0x01db (Udoubleacute) */ + { .altcode = NULL }, /* 0x01dc */ + { .altcode = NULL }, /* 0x01dd */ + { .altcode = NULL }, /* 0x01de (Tcedilla) */ + { .altcode = NULL }, /* 0x01df */ + { .altcode = NULL }, /* 0x01e0 (racute) */ + { .altcode = NULL }, /* 0x01e1 */ + { .altcode = NULL }, /* 0x01e2 */ + { .altcode = NULL }, /* 0x01e3 (abreve) */ + { .altcode = NULL }, /* 0x01e4 */ + { .altcode = NULL }, /* 0x01e5 (lacute) */ + { .altcode = NULL }, /* 0x01e6 (cacute) */ + { .altcode = NULL }, /* 0x01e7 */ + { .altcode = NULL }, /* 0x01e8 (ccaron) */ + { .altcode = NULL }, /* 0x01e9 */ + { .altcode = NULL }, /* 0x01ea (eogonek) */ + { .altcode = NULL }, /* 0x01eb */ + { .altcode = NULL }, /* 0x01ec (ecaron) */ + { .altcode = NULL }, /* 0x01ed */ + { .altcode = NULL }, /* 0x01ee */ + { .altcode = NULL }, /* 0x01ef (dcaron) */ + { .altcode = NULL }, /* 0x01f0 (dstroke) */ + { .altcode = NULL }, /* 0x01f1 (nacute) */ + { .altcode = NULL }, /* 0x01f2 (ncaron) */ + { .altcode = NULL }, /* 0x01f3 */ + { .altcode = NULL }, /* 0x01f4 */ + { .altcode = NULL }, /* 0x01f5 (odoubleacute) */ + { .altcode = NULL }, /* 0x01f6 */ + { .altcode = NULL }, /* 0x01f7 */ + { .altcode = NULL }, /* 0x01f8 (rcaron) */ + { .altcode = NULL }, /* 0x01f9 (uring) */ + { .altcode = NULL }, /* 0x01fa */ + { .altcode = NULL }, /* 0x01fb (udoubleacute) */ + { .altcode = NULL }, /* 0x01fc */ + { .altcode = NULL }, /* 0x01fd */ + { .altcode = NULL }, /* 0x01fe (tcedilla) */ + { .altcode = NULL }, /* 0x01ff (abovedot) */ }, { /* 0x02?? */ - { .altcode = "" }, /* 0x0200 */ - { .altcode = "" }, /* 0x0201 */ - { .altcode = "" }, /* 0x0202 */ - { .altcode = "" }, /* 0x0203 */ - { .altcode = "" }, /* 0x0204 */ - { .altcode = "" }, /* 0x0205 */ - { .altcode = "" }, /* 0x0206 */ - { .altcode = "" }, /* 0x0207 */ - { .altcode = "" }, /* 0x0208 */ - { .altcode = "" }, /* 0x0209 */ - { .altcode = "" }, /* 0x020a */ - { .altcode = "" }, /* 0x020b */ - { .altcode = "" }, /* 0x020c */ - { .altcode = "" }, /* 0x020d */ - { .altcode = "" }, /* 0x020e */ - { .altcode = "" }, /* 0x020f */ - { .altcode = "" }, /* 0x0210 */ - { .altcode = "" }, /* 0x0211 */ - { .altcode = "" }, /* 0x0212 */ - { .altcode = "" }, /* 0x0213 */ - { .altcode = "" }, /* 0x0214 */ - { .altcode = "" }, /* 0x0215 */ - { .altcode = "" }, /* 0x0216 */ - { .altcode = "" }, /* 0x0217 */ - { .altcode = "" }, /* 0x0218 */ - { .altcode = "" }, /* 0x0219 */ - { .altcode = "" }, /* 0x021a */ - { .altcode = "" }, /* 0x021b */ - { .altcode = "" }, /* 0x021c */ - { .altcode = "" }, /* 0x021d */ - { .altcode = "" }, /* 0x021e */ - { .altcode = "" }, /* 0x021f */ - { .altcode = "" }, /* 0x0220 */ - { .altcode = "" }, /* 0x0221 */ - { .altcode = "" }, /* 0x0222 */ - { .altcode = "" }, /* 0x0223 */ - { .altcode = "" }, /* 0x0224 */ - { .altcode = "" }, /* 0x0225 */ - { .altcode = "" }, /* 0x0226 */ - { .altcode = "" }, /* 0x0227 */ - { .altcode = "" }, /* 0x0228 */ - { .altcode = "" }, /* 0x0229 */ - { .altcode = "" }, /* 0x022a */ - { .altcode = "" }, /* 0x022b */ - { .altcode = "" }, /* 0x022c */ - { .altcode = "" }, /* 0x022d */ - { .altcode = "" }, /* 0x022e */ - { .altcode = "" }, /* 0x022f */ - { .altcode = "" }, /* 0x0230 */ - { .altcode = "" }, /* 0x0231 */ - { .altcode = "" }, /* 0x0232 */ - { .altcode = "" }, /* 0x0233 */ - { .altcode = "" }, /* 0x0234 */ - { .altcode = "" }, /* 0x0235 */ - { .altcode = "" }, /* 0x0236 */ - { .altcode = "" }, /* 0x0237 */ - { .altcode = "" }, /* 0x0238 */ - { .altcode = "" }, /* 0x0239 */ - { .altcode = "" }, /* 0x023a */ - { .altcode = "" }, /* 0x023b */ - { .altcode = "" }, /* 0x023c */ - { .altcode = "" }, /* 0x023d */ - { .altcode = "" }, /* 0x023e */ - { .altcode = "" }, /* 0x023f */ - { .altcode = "" }, /* 0x0240 */ - { .altcode = "" }, /* 0x0241 */ - { .altcode = "" }, /* 0x0242 */ - { .altcode = "" }, /* 0x0243 */ - { .altcode = "" }, /* 0x0244 */ - { .altcode = "" }, /* 0x0245 */ - { .altcode = "" }, /* 0x0246 */ - { .altcode = "" }, /* 0x0247 */ - { .altcode = "" }, /* 0x0248 */ - { .altcode = "" }, /* 0x0249 */ - { .altcode = "" }, /* 0x024a */ - { .altcode = "" }, /* 0x024b */ - { .altcode = "" }, /* 0x024c */ - { .altcode = "" }, /* 0x024d */ - { .altcode = "" }, /* 0x024e */ - { .altcode = "" }, /* 0x024f */ - { .altcode = "" }, /* 0x0250 */ - { .altcode = "" }, /* 0x0251 */ - { .altcode = "" }, /* 0x0252 */ - { .altcode = "" }, /* 0x0253 */ - { .altcode = "" }, /* 0x0254 */ - { .altcode = "" }, /* 0x0255 */ - { .altcode = "" }, /* 0x0256 */ - { .altcode = "" }, /* 0x0257 */ - { .altcode = "" }, /* 0x0258 */ - { .altcode = "" }, /* 0x0259 */ - { .altcode = "" }, /* 0x025a */ - { .altcode = "" }, /* 0x025b */ - { .altcode = "" }, /* 0x025c */ - { .altcode = "" }, /* 0x025d */ - { .altcode = "" }, /* 0x025e */ - { .altcode = "" }, /* 0x025f */ - { .altcode = "" }, /* 0x0260 */ - { .altcode = "" }, /* 0x0261 */ - { .altcode = "" }, /* 0x0262 */ - { .altcode = "" }, /* 0x0263 */ - { .altcode = "" }, /* 0x0264 */ - { .altcode = "" }, /* 0x0265 */ - { .altcode = "" }, /* 0x0266 */ - { .altcode = "" }, /* 0x0267 */ - { .altcode = "" }, /* 0x0268 */ - { .altcode = "" }, /* 0x0269 */ - { .altcode = "" }, /* 0x026a */ - { .altcode = "" }, /* 0x026b */ - { .altcode = "" }, /* 0x026c */ - { .altcode = "" }, /* 0x026d */ - { .altcode = "" }, /* 0x026e */ - { .altcode = "" }, /* 0x026f */ - { .altcode = "" }, /* 0x0270 */ - { .altcode = "" }, /* 0x0271 */ - { .altcode = "" }, /* 0x0272 */ - { .altcode = "" }, /* 0x0273 */ - { .altcode = "" }, /* 0x0274 */ - { .altcode = "" }, /* 0x0275 */ - { .altcode = "" }, /* 0x0276 */ - { .altcode = "" }, /* 0x0277 */ - { .altcode = "" }, /* 0x0278 */ - { .altcode = "" }, /* 0x0279 */ - { .altcode = "" }, /* 0x027a */ - { .altcode = "" }, /* 0x027b */ - { .altcode = "" }, /* 0x027c */ - { .altcode = "" }, /* 0x027d */ - { .altcode = "" }, /* 0x027e */ - { .altcode = "" }, /* 0x027f */ - { .altcode = "" }, /* 0x0280 */ - { .altcode = "" }, /* 0x0281 */ - { .altcode = "" }, /* 0x0282 */ - { .altcode = "" }, /* 0x0283 */ - { .altcode = "" }, /* 0x0284 */ - { .altcode = "" }, /* 0x0285 */ - { .altcode = "" }, /* 0x0286 */ - { .altcode = "" }, /* 0x0287 */ - { .altcode = "" }, /* 0x0288 */ - { .altcode = "" }, /* 0x0289 */ - { .altcode = "" }, /* 0x028a */ - { .altcode = "" }, /* 0x028b */ - { .altcode = "" }, /* 0x028c */ - { .altcode = "" }, /* 0x028d */ - { .altcode = "" }, /* 0x028e */ - { .altcode = "" }, /* 0x028f */ - { .altcode = "" }, /* 0x0290 */ - { .altcode = "" }, /* 0x0291 */ - { .altcode = "" }, /* 0x0292 */ - { .altcode = "" }, /* 0x0293 */ - { .altcode = "" }, /* 0x0294 */ - { .altcode = "" }, /* 0x0295 */ - { .altcode = "" }, /* 0x0296 */ - { .altcode = "" }, /* 0x0297 */ - { .altcode = "" }, /* 0x0298 */ - { .altcode = "" }, /* 0x0299 */ - { .altcode = "" }, /* 0x029a */ - { .altcode = "" }, /* 0x029b */ - { .altcode = "" }, /* 0x029c */ - { .altcode = "" }, /* 0x029d */ - { .altcode = "" }, /* 0x029e */ - { .altcode = "" }, /* 0x029f */ - { .altcode = "" }, /* 0x02a0 */ - { .altcode = "" }, /* 0x02a1 (Hstroke) */ - { .altcode = "" }, /* 0x02a2 */ - { .altcode = "" }, /* 0x02a3 */ - { .altcode = "" }, /* 0x02a4 */ - { .altcode = "" }, /* 0x02a5 */ - { .altcode = "" }, /* 0x02a6 (Hcircumflex) */ - { .altcode = "" }, /* 0x02a7 */ - { .altcode = "" }, /* 0x02a8 */ - { .altcode = "" }, /* 0x02a9 (Iabovedot) */ - { .altcode = "" }, /* 0x02aa */ - { .altcode = "" }, /* 0x02ab (Gbreve) */ - { .altcode = "" }, /* 0x02ac (Jcircumflex) */ - { .altcode = "" }, /* 0x02ad */ - { .altcode = "" }, /* 0x02ae */ - { .altcode = "" }, /* 0x02af */ - { .altcode = "" }, /* 0x02b0 */ - { .altcode = "" }, /* 0x02b1 (hstroke) */ - { .altcode = "" }, /* 0x02b2 */ - { .altcode = "" }, /* 0x02b3 */ - { .altcode = "" }, /* 0x02b4 */ - { .altcode = "" }, /* 0x02b5 */ - { .altcode = "" }, /* 0x02b6 (hcircumflex) */ - { .altcode = "" }, /* 0x02b7 */ - { .altcode = "" }, /* 0x02b8 */ - { .altcode = "" }, /* 0x02b9 (idotless) */ - { .altcode = "" }, /* 0x02ba */ - { .altcode = "" }, /* 0x02bb (gbreve) */ - { .altcode = "" }, /* 0x02bc (jcircumflex) */ - { .altcode = "" }, /* 0x02bd */ - { .altcode = "" }, /* 0x02be */ - { .altcode = "" }, /* 0x02bf */ - { .altcode = "" }, /* 0x02c0 */ - { .altcode = "" }, /* 0x02c1 */ - { .altcode = "" }, /* 0x02c2 */ - { .altcode = "" }, /* 0x02c3 */ - { .altcode = "" }, /* 0x02c4 */ - { .altcode = "" }, /* 0x02c5 (Cabovedot) */ - { .altcode = "" }, /* 0x02c6 (Ccircumflex) */ - { .altcode = "" }, /* 0x02c7 */ - { .altcode = "" }, /* 0x02c8 */ - { .altcode = "" }, /* 0x02c9 */ - { .altcode = "" }, /* 0x02ca */ - { .altcode = "" }, /* 0x02cb */ - { .altcode = "" }, /* 0x02cc */ - { .altcode = "" }, /* 0x02cd */ - { .altcode = "" }, /* 0x02ce */ - { .altcode = "" }, /* 0x02cf */ - { .altcode = "" }, /* 0x02d0 */ - { .altcode = "" }, /* 0x02d1 */ - { .altcode = "" }, /* 0x02d2 */ - { .altcode = "" }, /* 0x02d3 */ - { .altcode = "" }, /* 0x02d4 */ - { .altcode = "" }, /* 0x02d5 (Gabovedot) */ - { .altcode = "" }, /* 0x02d6 */ - { .altcode = "" }, /* 0x02d7 */ - { .altcode = "" }, /* 0x02d8 (Gcircumflex) */ - { .altcode = "" }, /* 0x02d9 */ - { .altcode = "" }, /* 0x02da */ - { .altcode = "" }, /* 0x02db */ - { .altcode = "" }, /* 0x02dc */ - { .altcode = "" }, /* 0x02dd (Ubreve) */ - { .altcode = "" }, /* 0x02de (Scircumflex) */ - { .altcode = "" }, /* 0x02df */ - { .altcode = "" }, /* 0x02e0 */ - { .altcode = "" }, /* 0x02e1 */ - { .altcode = "" }, /* 0x02e2 */ - { .altcode = "" }, /* 0x02e3 */ - { .altcode = "" }, /* 0x02e4 */ - { .altcode = "" }, /* 0x02e5 (cabovedot) */ - { .altcode = "" }, /* 0x02e6 (ccircumflex) */ - { .altcode = "" }, /* 0x02e7 */ - { .altcode = "" }, /* 0x02e8 */ - { .altcode = "" }, /* 0x02e9 */ - { .altcode = "" }, /* 0x02ea */ - { .altcode = "" }, /* 0x02eb */ - { .altcode = "" }, /* 0x02ec */ - { .altcode = "" }, /* 0x02ed */ - { .altcode = "" }, /* 0x02ee */ - { .altcode = "" }, /* 0x02ef */ - { .altcode = "" }, /* 0x02f0 */ - { .altcode = "" }, /* 0x02f1 */ - { .altcode = "" }, /* 0x02f2 */ - { .altcode = "" }, /* 0x02f3 */ - { .altcode = "" }, /* 0x02f4 */ - { .altcode = "" }, /* 0x02f5 (gabovedot) */ - { .altcode = "" }, /* 0x02f6 */ - { .altcode = "" }, /* 0x02f7 */ - { .altcode = "" }, /* 0x02f8 (gcircumflex) */ - { .altcode = "" }, /* 0x02f9 */ - { .altcode = "" }, /* 0x02fa */ - { .altcode = "" }, /* 0x02fb */ - { .altcode = "" }, /* 0x02fc */ - { .altcode = "" }, /* 0x02fd (ubreve) */ - { .altcode = "" }, /* 0x02fe (scircumflex) */ - { .altcode = "" }, /* 0x02ff */ + { .altcode = NULL }, /* 0x0200 */ + { .altcode = NULL }, /* 0x0201 */ + { .altcode = NULL }, /* 0x0202 */ + { .altcode = NULL }, /* 0x0203 */ + { .altcode = NULL }, /* 0x0204 */ + { .altcode = NULL }, /* 0x0205 */ + { .altcode = NULL }, /* 0x0206 */ + { .altcode = NULL }, /* 0x0207 */ + { .altcode = NULL }, /* 0x0208 */ + { .altcode = NULL }, /* 0x0209 */ + { .altcode = NULL }, /* 0x020a */ + { .altcode = NULL }, /* 0x020b */ + { .altcode = NULL }, /* 0x020c */ + { .altcode = NULL }, /* 0x020d */ + { .altcode = NULL }, /* 0x020e */ + { .altcode = NULL }, /* 0x020f */ + { .altcode = NULL }, /* 0x0210 */ + { .altcode = NULL }, /* 0x0211 */ + { .altcode = NULL }, /* 0x0212 */ + { .altcode = NULL }, /* 0x0213 */ + { .altcode = NULL }, /* 0x0214 */ + { .altcode = NULL }, /* 0x0215 */ + { .altcode = NULL }, /* 0x0216 */ + { .altcode = NULL }, /* 0x0217 */ + { .altcode = NULL }, /* 0x0218 */ + { .altcode = NULL }, /* 0x0219 */ + { .altcode = NULL }, /* 0x021a */ + { .altcode = NULL }, /* 0x021b */ + { .altcode = NULL }, /* 0x021c */ + { .altcode = NULL }, /* 0x021d */ + { .altcode = NULL }, /* 0x021e */ + { .altcode = NULL }, /* 0x021f */ + { .altcode = NULL }, /* 0x0220 */ + { .altcode = NULL }, /* 0x0221 */ + { .altcode = NULL }, /* 0x0222 */ + { .altcode = NULL }, /* 0x0223 */ + { .altcode = NULL }, /* 0x0224 */ + { .altcode = NULL }, /* 0x0225 */ + { .altcode = NULL }, /* 0x0226 */ + { .altcode = NULL }, /* 0x0227 */ + { .altcode = NULL }, /* 0x0228 */ + { .altcode = NULL }, /* 0x0229 */ + { .altcode = NULL }, /* 0x022a */ + { .altcode = NULL }, /* 0x022b */ + { .altcode = NULL }, /* 0x022c */ + { .altcode = NULL }, /* 0x022d */ + { .altcode = NULL }, /* 0x022e */ + { .altcode = NULL }, /* 0x022f */ + { .altcode = NULL }, /* 0x0230 */ + { .altcode = NULL }, /* 0x0231 */ + { .altcode = NULL }, /* 0x0232 */ + { .altcode = NULL }, /* 0x0233 */ + { .altcode = NULL }, /* 0x0234 */ + { .altcode = NULL }, /* 0x0235 */ + { .altcode = NULL }, /* 0x0236 */ + { .altcode = NULL }, /* 0x0237 */ + { .altcode = NULL }, /* 0x0238 */ + { .altcode = NULL }, /* 0x0239 */ + { .altcode = NULL }, /* 0x023a */ + { .altcode = NULL }, /* 0x023b */ + { .altcode = NULL }, /* 0x023c */ + { .altcode = NULL }, /* 0x023d */ + { .altcode = NULL }, /* 0x023e */ + { .altcode = NULL }, /* 0x023f */ + { .altcode = NULL }, /* 0x0240 */ + { .altcode = NULL }, /* 0x0241 */ + { .altcode = NULL }, /* 0x0242 */ + { .altcode = NULL }, /* 0x0243 */ + { .altcode = NULL }, /* 0x0244 */ + { .altcode = NULL }, /* 0x0245 */ + { .altcode = NULL }, /* 0x0246 */ + { .altcode = NULL }, /* 0x0247 */ + { .altcode = NULL }, /* 0x0248 */ + { .altcode = NULL }, /* 0x0249 */ + { .altcode = NULL }, /* 0x024a */ + { .altcode = NULL }, /* 0x024b */ + { .altcode = NULL }, /* 0x024c */ + { .altcode = NULL }, /* 0x024d */ + { .altcode = NULL }, /* 0x024e */ + { .altcode = NULL }, /* 0x024f */ + { .altcode = NULL }, /* 0x0250 */ + { .altcode = NULL }, /* 0x0251 */ + { .altcode = NULL }, /* 0x0252 */ + { .altcode = NULL }, /* 0x0253 */ + { .altcode = NULL }, /* 0x0254 */ + { .altcode = NULL }, /* 0x0255 */ + { .altcode = NULL }, /* 0x0256 */ + { .altcode = NULL }, /* 0x0257 */ + { .altcode = NULL }, /* 0x0258 */ + { .altcode = NULL }, /* 0x0259 */ + { .altcode = NULL }, /* 0x025a */ + { .altcode = NULL }, /* 0x025b */ + { .altcode = NULL }, /* 0x025c */ + { .altcode = NULL }, /* 0x025d */ + { .altcode = NULL }, /* 0x025e */ + { .altcode = NULL }, /* 0x025f */ + { .altcode = NULL }, /* 0x0260 */ + { .altcode = NULL }, /* 0x0261 */ + { .altcode = NULL }, /* 0x0262 */ + { .altcode = NULL }, /* 0x0263 */ + { .altcode = NULL }, /* 0x0264 */ + { .altcode = NULL }, /* 0x0265 */ + { .altcode = NULL }, /* 0x0266 */ + { .altcode = NULL }, /* 0x0267 */ + { .altcode = NULL }, /* 0x0268 */ + { .altcode = NULL }, /* 0x0269 */ + { .altcode = NULL }, /* 0x026a */ + { .altcode = NULL }, /* 0x026b */ + { .altcode = NULL }, /* 0x026c */ + { .altcode = NULL }, /* 0x026d */ + { .altcode = NULL }, /* 0x026e */ + { .altcode = NULL }, /* 0x026f */ + { .altcode = NULL }, /* 0x0270 */ + { .altcode = NULL }, /* 0x0271 */ + { .altcode = NULL }, /* 0x0272 */ + { .altcode = NULL }, /* 0x0273 */ + { .altcode = NULL }, /* 0x0274 */ + { .altcode = NULL }, /* 0x0275 */ + { .altcode = NULL }, /* 0x0276 */ + { .altcode = NULL }, /* 0x0277 */ + { .altcode = NULL }, /* 0x0278 */ + { .altcode = NULL }, /* 0x0279 */ + { .altcode = NULL }, /* 0x027a */ + { .altcode = NULL }, /* 0x027b */ + { .altcode = NULL }, /* 0x027c */ + { .altcode = NULL }, /* 0x027d */ + { .altcode = NULL }, /* 0x027e */ + { .altcode = NULL }, /* 0x027f */ + { .altcode = NULL }, /* 0x0280 */ + { .altcode = NULL }, /* 0x0281 */ + { .altcode = NULL }, /* 0x0282 */ + { .altcode = NULL }, /* 0x0283 */ + { .altcode = NULL }, /* 0x0284 */ + { .altcode = NULL }, /* 0x0285 */ + { .altcode = NULL }, /* 0x0286 */ + { .altcode = NULL }, /* 0x0287 */ + { .altcode = NULL }, /* 0x0288 */ + { .altcode = NULL }, /* 0x0289 */ + { .altcode = NULL }, /* 0x028a */ + { .altcode = NULL }, /* 0x028b */ + { .altcode = NULL }, /* 0x028c */ + { .altcode = NULL }, /* 0x028d */ + { .altcode = NULL }, /* 0x028e */ + { .altcode = NULL }, /* 0x028f */ + { .altcode = NULL }, /* 0x0290 */ + { .altcode = NULL }, /* 0x0291 */ + { .altcode = NULL }, /* 0x0292 */ + { .altcode = NULL }, /* 0x0293 */ + { .altcode = NULL }, /* 0x0294 */ + { .altcode = NULL }, /* 0x0295 */ + { .altcode = NULL }, /* 0x0296 */ + { .altcode = NULL }, /* 0x0297 */ + { .altcode = NULL }, /* 0x0298 */ + { .altcode = NULL }, /* 0x0299 */ + { .altcode = NULL }, /* 0x029a */ + { .altcode = NULL }, /* 0x029b */ + { .altcode = NULL }, /* 0x029c */ + { .altcode = NULL }, /* 0x029d */ + { .altcode = NULL }, /* 0x029e */ + { .altcode = NULL }, /* 0x029f */ + { .altcode = NULL }, /* 0x02a0 */ + { .altcode = NULL }, /* 0x02a1 (Hstroke) */ + { .altcode = NULL }, /* 0x02a2 */ + { .altcode = NULL }, /* 0x02a3 */ + { .altcode = NULL }, /* 0x02a4 */ + { .altcode = NULL }, /* 0x02a5 */ + { .altcode = NULL }, /* 0x02a6 (Hcircumflex) */ + { .altcode = NULL }, /* 0x02a7 */ + { .altcode = NULL }, /* 0x02a8 */ + { .altcode = NULL }, /* 0x02a9 (Iabovedot) */ + { .altcode = NULL }, /* 0x02aa */ + { .altcode = NULL }, /* 0x02ab (Gbreve) */ + { .altcode = NULL }, /* 0x02ac (Jcircumflex) */ + { .altcode = NULL }, /* 0x02ad */ + { .altcode = NULL }, /* 0x02ae */ + { .altcode = NULL }, /* 0x02af */ + { .altcode = NULL }, /* 0x02b0 */ + { .altcode = NULL }, /* 0x02b1 (hstroke) */ + { .altcode = NULL }, /* 0x02b2 */ + { .altcode = NULL }, /* 0x02b3 */ + { .altcode = NULL }, /* 0x02b4 */ + { .altcode = NULL }, /* 0x02b5 */ + { .altcode = NULL }, /* 0x02b6 (hcircumflex) */ + { .altcode = NULL }, /* 0x02b7 */ + { .altcode = NULL }, /* 0x02b8 */ + { .altcode = NULL }, /* 0x02b9 (idotless) */ + { .altcode = NULL }, /* 0x02ba */ + { .altcode = NULL }, /* 0x02bb (gbreve) */ + { .altcode = NULL }, /* 0x02bc (jcircumflex) */ + { .altcode = NULL }, /* 0x02bd */ + { .altcode = NULL }, /* 0x02be */ + { .altcode = NULL }, /* 0x02bf */ + { .altcode = NULL }, /* 0x02c0 */ + { .altcode = NULL }, /* 0x02c1 */ + { .altcode = NULL }, /* 0x02c2 */ + { .altcode = NULL }, /* 0x02c3 */ + { .altcode = NULL }, /* 0x02c4 */ + { .altcode = NULL }, /* 0x02c5 (Cabovedot) */ + { .altcode = NULL }, /* 0x02c6 (Ccircumflex) */ + { .altcode = NULL }, /* 0x02c7 */ + { .altcode = NULL }, /* 0x02c8 */ + { .altcode = NULL }, /* 0x02c9 */ + { .altcode = NULL }, /* 0x02ca */ + { .altcode = NULL }, /* 0x02cb */ + { .altcode = NULL }, /* 0x02cc */ + { .altcode = NULL }, /* 0x02cd */ + { .altcode = NULL }, /* 0x02ce */ + { .altcode = NULL }, /* 0x02cf */ + { .altcode = NULL }, /* 0x02d0 */ + { .altcode = NULL }, /* 0x02d1 */ + { .altcode = NULL }, /* 0x02d2 */ + { .altcode = NULL }, /* 0x02d3 */ + { .altcode = NULL }, /* 0x02d4 */ + { .altcode = NULL }, /* 0x02d5 (Gabovedot) */ + { .altcode = NULL }, /* 0x02d6 */ + { .altcode = NULL }, /* 0x02d7 */ + { .altcode = NULL }, /* 0x02d8 (Gcircumflex) */ + { .altcode = NULL }, /* 0x02d9 */ + { .altcode = NULL }, /* 0x02da */ + { .altcode = NULL }, /* 0x02db */ + { .altcode = NULL }, /* 0x02dc */ + { .altcode = NULL }, /* 0x02dd (Ubreve) */ + { .altcode = NULL }, /* 0x02de (Scircumflex) */ + { .altcode = NULL }, /* 0x02df */ + { .altcode = NULL }, /* 0x02e0 */ + { .altcode = NULL }, /* 0x02e1 */ + { .altcode = NULL }, /* 0x02e2 */ + { .altcode = NULL }, /* 0x02e3 */ + { .altcode = NULL }, /* 0x02e4 */ + { .altcode = NULL }, /* 0x02e5 (cabovedot) */ + { .altcode = NULL }, /* 0x02e6 (ccircumflex) */ + { .altcode = NULL }, /* 0x02e7 */ + { .altcode = NULL }, /* 0x02e8 */ + { .altcode = NULL }, /* 0x02e9 */ + { .altcode = NULL }, /* 0x02ea */ + { .altcode = NULL }, /* 0x02eb */ + { .altcode = NULL }, /* 0x02ec */ + { .altcode = NULL }, /* 0x02ed */ + { .altcode = NULL }, /* 0x02ee */ + { .altcode = NULL }, /* 0x02ef */ + { .altcode = NULL }, /* 0x02f0 */ + { .altcode = NULL }, /* 0x02f1 */ + { .altcode = NULL }, /* 0x02f2 */ + { .altcode = NULL }, /* 0x02f3 */ + { .altcode = NULL }, /* 0x02f4 */ + { .altcode = NULL }, /* 0x02f5 (gabovedot) */ + { .altcode = NULL }, /* 0x02f6 */ + { .altcode = NULL }, /* 0x02f7 */ + { .altcode = NULL }, /* 0x02f8 (gcircumflex) */ + { .altcode = NULL }, /* 0x02f9 */ + { .altcode = NULL }, /* 0x02fa */ + { .altcode = NULL }, /* 0x02fb */ + { .altcode = NULL }, /* 0x02fc */ + { .altcode = NULL }, /* 0x02fd (ubreve) */ + { .altcode = NULL }, /* 0x02fe (scircumflex) */ + { .altcode = NULL }, /* 0x02ff */ }, { /* 0x03?? */ - { .altcode = "" }, /* 0x0300 */ - { .altcode = "" }, /* 0x0301 */ - { .altcode = "" }, /* 0x0302 */ - { .altcode = "" }, /* 0x0303 */ - { .altcode = "" }, /* 0x0304 */ - { .altcode = "" }, /* 0x0305 */ - { .altcode = "" }, /* 0x0306 */ - { .altcode = "" }, /* 0x0307 */ - { .altcode = "" }, /* 0x0308 */ - { .altcode = "" }, /* 0x0309 */ - { .altcode = "" }, /* 0x030a */ - { .altcode = "" }, /* 0x030b */ - { .altcode = "" }, /* 0x030c */ - { .altcode = "" }, /* 0x030d */ - { .altcode = "" }, /* 0x030e */ - { .altcode = "" }, /* 0x030f */ - { .altcode = "" }, /* 0x0310 */ - { .altcode = "" }, /* 0x0311 */ - { .altcode = "" }, /* 0x0312 */ - { .altcode = "" }, /* 0x0313 */ - { .altcode = "" }, /* 0x0314 */ - { .altcode = "" }, /* 0x0315 */ - { .altcode = "" }, /* 0x0316 */ - { .altcode = "" }, /* 0x0317 */ - { .altcode = "" }, /* 0x0318 */ - { .altcode = "" }, /* 0x0319 */ - { .altcode = "" }, /* 0x031a */ - { .altcode = "" }, /* 0x031b */ - { .altcode = "" }, /* 0x031c */ - { .altcode = "" }, /* 0x031d */ - { .altcode = "" }, /* 0x031e */ - { .altcode = "" }, /* 0x031f */ - { .altcode = "" }, /* 0x0320 */ - { .altcode = "" }, /* 0x0321 */ - { .altcode = "" }, /* 0x0322 */ - { .altcode = "" }, /* 0x0323 */ - { .altcode = "" }, /* 0x0324 */ - { .altcode = "" }, /* 0x0325 */ - { .altcode = "" }, /* 0x0326 */ - { .altcode = "" }, /* 0x0327 */ - { .altcode = "" }, /* 0x0328 */ - { .altcode = "" }, /* 0x0329 */ - { .altcode = "" }, /* 0x032a */ - { .altcode = "" }, /* 0x032b */ - { .altcode = "" }, /* 0x032c */ - { .altcode = "" }, /* 0x032d */ - { .altcode = "" }, /* 0x032e */ - { .altcode = "" }, /* 0x032f */ - { .altcode = "" }, /* 0x0330 */ - { .altcode = "" }, /* 0x0331 */ - { .altcode = "" }, /* 0x0332 */ - { .altcode = "" }, /* 0x0333 */ - { .altcode = "" }, /* 0x0334 */ - { .altcode = "" }, /* 0x0335 */ - { .altcode = "" }, /* 0x0336 */ - { .altcode = "" }, /* 0x0337 */ - { .altcode = "" }, /* 0x0338 */ - { .altcode = "" }, /* 0x0339 */ - { .altcode = "" }, /* 0x033a */ - { .altcode = "" }, /* 0x033b */ - { .altcode = "" }, /* 0x033c */ - { .altcode = "" }, /* 0x033d */ - { .altcode = "" }, /* 0x033e */ - { .altcode = "" }, /* 0x033f */ - { .altcode = "" }, /* 0x0340 */ - { .altcode = "" }, /* 0x0341 */ - { .altcode = "" }, /* 0x0342 */ - { .altcode = "" }, /* 0x0343 */ - { .altcode = "" }, /* 0x0344 */ - { .altcode = "" }, /* 0x0345 */ - { .altcode = "" }, /* 0x0346 */ - { .altcode = "" }, /* 0x0347 */ - { .altcode = "" }, /* 0x0348 */ - { .altcode = "" }, /* 0x0349 */ - { .altcode = "" }, /* 0x034a */ - { .altcode = "" }, /* 0x034b */ - { .altcode = "" }, /* 0x034c */ - { .altcode = "" }, /* 0x034d */ - { .altcode = "" }, /* 0x034e */ - { .altcode = "" }, /* 0x034f */ - { .altcode = "" }, /* 0x0350 */ - { .altcode = "" }, /* 0x0351 */ - { .altcode = "" }, /* 0x0352 */ - { .altcode = "" }, /* 0x0353 */ - { .altcode = "" }, /* 0x0354 */ - { .altcode = "" }, /* 0x0355 */ - { .altcode = "" }, /* 0x0356 */ - { .altcode = "" }, /* 0x0357 */ - { .altcode = "" }, /* 0x0358 */ - { .altcode = "" }, /* 0x0359 */ - { .altcode = "" }, /* 0x035a */ - { .altcode = "" }, /* 0x035b */ - { .altcode = "" }, /* 0x035c */ - { .altcode = "" }, /* 0x035d */ - { .altcode = "" }, /* 0x035e */ - { .altcode = "" }, /* 0x035f */ - { .altcode = "" }, /* 0x0360 */ - { .altcode = "" }, /* 0x0361 */ - { .altcode = "" }, /* 0x0362 */ - { .altcode = "" }, /* 0x0363 */ - { .altcode = "" }, /* 0x0364 */ - { .altcode = "" }, /* 0x0365 */ - { .altcode = "" }, /* 0x0366 */ - { .altcode = "" }, /* 0x0367 */ - { .altcode = "" }, /* 0x0368 */ - { .altcode = "" }, /* 0x0369 */ - { .altcode = "" }, /* 0x036a */ - { .altcode = "" }, /* 0x036b */ - { .altcode = "" }, /* 0x036c */ - { .altcode = "" }, /* 0x036d */ - { .altcode = "" }, /* 0x036e */ - { .altcode = "" }, /* 0x036f */ - { .altcode = "" }, /* 0x0370 */ - { .altcode = "" }, /* 0x0371 */ - { .altcode = "" }, /* 0x0372 */ - { .altcode = "" }, /* 0x0373 */ - { .altcode = "" }, /* 0x0374 */ - { .altcode = "" }, /* 0x0375 */ - { .altcode = "" }, /* 0x0376 */ - { .altcode = "" }, /* 0x0377 */ - { .altcode = "" }, /* 0x0378 */ - { .altcode = "" }, /* 0x0379 */ - { .altcode = "" }, /* 0x037a */ - { .altcode = "" }, /* 0x037b */ - { .altcode = "" }, /* 0x037c */ - { .altcode = "" }, /* 0x037d */ - { .altcode = "" }, /* 0x037e */ - { .altcode = "" }, /* 0x037f */ - { .altcode = "" }, /* 0x0380 */ - { .altcode = "" }, /* 0x0381 */ - { .altcode = "" }, /* 0x0382 */ - { .altcode = "" }, /* 0x0383 */ - { .altcode = "" }, /* 0x0384 */ - { .altcode = "" }, /* 0x0385 */ - { .altcode = "" }, /* 0x0386 */ - { .altcode = "" }, /* 0x0387 */ - { .altcode = "" }, /* 0x0388 */ - { .altcode = "" }, /* 0x0389 */ - { .altcode = "" }, /* 0x038a */ - { .altcode = "" }, /* 0x038b */ - { .altcode = "" }, /* 0x038c */ - { .altcode = "" }, /* 0x038d */ - { .altcode = "" }, /* 0x038e */ - { .altcode = "" }, /* 0x038f */ - { .altcode = "" }, /* 0x0390 */ - { .altcode = "" }, /* 0x0391 */ - { .altcode = "" }, /* 0x0392 */ - { .altcode = "" }, /* 0x0393 */ - { .altcode = "" }, /* 0x0394 */ - { .altcode = "" }, /* 0x0395 */ - { .altcode = "" }, /* 0x0396 */ - { .altcode = "" }, /* 0x0397 */ - { .altcode = "" }, /* 0x0398 */ - { .altcode = "" }, /* 0x0399 */ - { .altcode = "" }, /* 0x039a */ - { .altcode = "" }, /* 0x039b */ - { .altcode = "" }, /* 0x039c */ - { .altcode = "" }, /* 0x039d */ - { .altcode = "" }, /* 0x039e */ - { .altcode = "" }, /* 0x039f */ - { .altcode = "" }, /* 0x03a0 */ - { .altcode = "" }, /* 0x03a1 */ - { .altcode = "" }, /* 0x03a2 (kappa) */ - { .altcode = "" }, /* 0x03a3 (Rcedilla) */ - { .altcode = "" }, /* 0x03a4 */ - { .altcode = "" }, /* 0x03a5 (Itilde) */ - { .altcode = "" }, /* 0x03a6 (Lcedilla) */ - { .altcode = "" }, /* 0x03a7 */ - { .altcode = "" }, /* 0x03a8 */ - { .altcode = "" }, /* 0x03a9 */ - { .altcode = "" }, /* 0x03aa (Emacron) */ - { .altcode = "" }, /* 0x03ab (Gcedilla) */ - { .altcode = "" }, /* 0x03ac (Tslash) */ - { .altcode = "" }, /* 0x03ad */ - { .altcode = "" }, /* 0x03ae */ - { .altcode = "" }, /* 0x03af */ - { .altcode = "" }, /* 0x03b0 */ - { .altcode = "" }, /* 0x03b1 */ - { .altcode = "" }, /* 0x03b2 */ - { .altcode = "" }, /* 0x03b3 (rcedilla) */ - { .altcode = "" }, /* 0x03b4 */ - { .altcode = "" }, /* 0x03b5 (itilde) */ - { .altcode = "" }, /* 0x03b6 (lcedilla) */ - { .altcode = "" }, /* 0x03b7 */ - { .altcode = "" }, /* 0x03b8 */ - { .altcode = "" }, /* 0x03b9 */ - { .altcode = "" }, /* 0x03ba (emacron) */ - { .altcode = "" }, /* 0x03bb (gcedilla) */ - { .altcode = "" }, /* 0x03bc (tslash) */ - { .altcode = "" }, /* 0x03bd (ENG) */ - { .altcode = "" }, /* 0x03be */ - { .altcode = "" }, /* 0x03bf (eng) */ - { .altcode = "" }, /* 0x03c0 (Amacron) */ - { .altcode = "" }, /* 0x03c1 */ - { .altcode = "" }, /* 0x03c2 */ - { .altcode = "" }, /* 0x03c3 */ - { .altcode = "" }, /* 0x03c4 */ - { .altcode = "" }, /* 0x03c5 */ - { .altcode = "" }, /* 0x03c6 */ - { .altcode = "" }, /* 0x03c7 (Iogonek) */ - { .altcode = "" }, /* 0x03c8 */ - { .altcode = "" }, /* 0x03c9 */ - { .altcode = "" }, /* 0x03ca */ - { .altcode = "" }, /* 0x03cb */ - { .altcode = "" }, /* 0x03cc (Eabovedot) */ - { .altcode = "" }, /* 0x03cd */ - { .altcode = "" }, /* 0x03ce */ - { .altcode = "" }, /* 0x03cf (Imacron) */ - { .altcode = "" }, /* 0x03d0 */ - { .altcode = "" }, /* 0x03d1 (Ncedilla) */ - { .altcode = "" }, /* 0x03d2 (Omacron) */ - { .altcode = "" }, /* 0x03d3 (Kcedilla) */ - { .altcode = "" }, /* 0x03d4 */ - { .altcode = "" }, /* 0x03d5 */ - { .altcode = "" }, /* 0x03d6 */ - { .altcode = "" }, /* 0x03d7 */ - { .altcode = "" }, /* 0x03d8 */ - { .altcode = "" }, /* 0x03d9 (Uogonek) */ - { .altcode = "" }, /* 0x03da */ - { .altcode = "" }, /* 0x03db */ - { .altcode = "" }, /* 0x03dc */ - { .altcode = "" }, /* 0x03dd (Utilde) */ - { .altcode = "" }, /* 0x03de (Umacron) */ - { .altcode = "" }, /* 0x03df */ - { .altcode = "" }, /* 0x03e0 (amacron) */ - { .altcode = "" }, /* 0x03e1 */ - { .altcode = "" }, /* 0x03e2 */ - { .altcode = "" }, /* 0x03e3 */ - { .altcode = "" }, /* 0x03e4 */ - { .altcode = "" }, /* 0x03e5 */ - { .altcode = "" }, /* 0x03e6 */ - { .altcode = "" }, /* 0x03e7 (iogonek) */ - { .altcode = "" }, /* 0x03e8 */ - { .altcode = "" }, /* 0x03e9 */ - { .altcode = "" }, /* 0x03ea */ - { .altcode = "" }, /* 0x03eb */ - { .altcode = "" }, /* 0x03ec (eabovedot) */ - { .altcode = "" }, /* 0x03ed */ - { .altcode = "" }, /* 0x03ee */ - { .altcode = "" }, /* 0x03ef (imacron) */ - { .altcode = "" }, /* 0x03f0 */ - { .altcode = "" }, /* 0x03f1 (ncedilla) */ - { .altcode = "" }, /* 0x03f2 (omacron) */ - { .altcode = "" }, /* 0x03f3 (kcedilla) */ - { .altcode = "" }, /* 0x03f4 */ - { .altcode = "" }, /* 0x03f5 */ - { .altcode = "" }, /* 0x03f6 */ - { .altcode = "" }, /* 0x03f7 */ - { .altcode = "" }, /* 0x03f8 */ - { .altcode = "" }, /* 0x03f9 (uogonek) */ - { .altcode = "" }, /* 0x03fa */ - { .altcode = "" }, /* 0x03fb */ - { .altcode = "" }, /* 0x03fc */ - { .altcode = "" }, /* 0x03fd (utilde) */ - { .altcode = "" }, /* 0x03fe (umacron) */ - { .altcode = "" }, /* 0x03ff */ + { .altcode = NULL }, /* 0x0300 */ + { .altcode = NULL }, /* 0x0301 */ + { .altcode = NULL }, /* 0x0302 */ + { .altcode = NULL }, /* 0x0303 */ + { .altcode = NULL }, /* 0x0304 */ + { .altcode = NULL }, /* 0x0305 */ + { .altcode = NULL }, /* 0x0306 */ + { .altcode = NULL }, /* 0x0307 */ + { .altcode = NULL }, /* 0x0308 */ + { .altcode = NULL }, /* 0x0309 */ + { .altcode = NULL }, /* 0x030a */ + { .altcode = NULL }, /* 0x030b */ + { .altcode = NULL }, /* 0x030c */ + { .altcode = NULL }, /* 0x030d */ + { .altcode = NULL }, /* 0x030e */ + { .altcode = NULL }, /* 0x030f */ + { .altcode = NULL }, /* 0x0310 */ + { .altcode = NULL }, /* 0x0311 */ + { .altcode = NULL }, /* 0x0312 */ + { .altcode = NULL }, /* 0x0313 */ + { .altcode = NULL }, /* 0x0314 */ + { .altcode = NULL }, /* 0x0315 */ + { .altcode = NULL }, /* 0x0316 */ + { .altcode = NULL }, /* 0x0317 */ + { .altcode = NULL }, /* 0x0318 */ + { .altcode = NULL }, /* 0x0319 */ + { .altcode = NULL }, /* 0x031a */ + { .altcode = NULL }, /* 0x031b */ + { .altcode = NULL }, /* 0x031c */ + { .altcode = NULL }, /* 0x031d */ + { .altcode = NULL }, /* 0x031e */ + { .altcode = NULL }, /* 0x031f */ + { .altcode = NULL }, /* 0x0320 */ + { .altcode = NULL }, /* 0x0321 */ + { .altcode = NULL }, /* 0x0322 */ + { .altcode = NULL }, /* 0x0323 */ + { .altcode = NULL }, /* 0x0324 */ + { .altcode = NULL }, /* 0x0325 */ + { .altcode = NULL }, /* 0x0326 */ + { .altcode = NULL }, /* 0x0327 */ + { .altcode = NULL }, /* 0x0328 */ + { .altcode = NULL }, /* 0x0329 */ + { .altcode = NULL }, /* 0x032a */ + { .altcode = NULL }, /* 0x032b */ + { .altcode = NULL }, /* 0x032c */ + { .altcode = NULL }, /* 0x032d */ + { .altcode = NULL }, /* 0x032e */ + { .altcode = NULL }, /* 0x032f */ + { .altcode = NULL }, /* 0x0330 */ + { .altcode = NULL }, /* 0x0331 */ + { .altcode = NULL }, /* 0x0332 */ + { .altcode = NULL }, /* 0x0333 */ + { .altcode = NULL }, /* 0x0334 */ + { .altcode = NULL }, /* 0x0335 */ + { .altcode = NULL }, /* 0x0336 */ + { .altcode = NULL }, /* 0x0337 */ + { .altcode = NULL }, /* 0x0338 */ + { .altcode = NULL }, /* 0x0339 */ + { .altcode = NULL }, /* 0x033a */ + { .altcode = NULL }, /* 0x033b */ + { .altcode = NULL }, /* 0x033c */ + { .altcode = NULL }, /* 0x033d */ + { .altcode = NULL }, /* 0x033e */ + { .altcode = NULL }, /* 0x033f */ + { .altcode = NULL }, /* 0x0340 */ + { .altcode = NULL }, /* 0x0341 */ + { .altcode = NULL }, /* 0x0342 */ + { .altcode = NULL }, /* 0x0343 */ + { .altcode = NULL }, /* 0x0344 */ + { .altcode = NULL }, /* 0x0345 */ + { .altcode = NULL }, /* 0x0346 */ + { .altcode = NULL }, /* 0x0347 */ + { .altcode = NULL }, /* 0x0348 */ + { .altcode = NULL }, /* 0x0349 */ + { .altcode = NULL }, /* 0x034a */ + { .altcode = NULL }, /* 0x034b */ + { .altcode = NULL }, /* 0x034c */ + { .altcode = NULL }, /* 0x034d */ + { .altcode = NULL }, /* 0x034e */ + { .altcode = NULL }, /* 0x034f */ + { .altcode = NULL }, /* 0x0350 */ + { .altcode = NULL }, /* 0x0351 */ + { .altcode = NULL }, /* 0x0352 */ + { .altcode = NULL }, /* 0x0353 */ + { .altcode = NULL }, /* 0x0354 */ + { .altcode = NULL }, /* 0x0355 */ + { .altcode = NULL }, /* 0x0356 */ + { .altcode = NULL }, /* 0x0357 */ + { .altcode = NULL }, /* 0x0358 */ + { .altcode = NULL }, /* 0x0359 */ + { .altcode = NULL }, /* 0x035a */ + { .altcode = NULL }, /* 0x035b */ + { .altcode = NULL }, /* 0x035c */ + { .altcode = NULL }, /* 0x035d */ + { .altcode = NULL }, /* 0x035e */ + { .altcode = NULL }, /* 0x035f */ + { .altcode = NULL }, /* 0x0360 */ + { .altcode = NULL }, /* 0x0361 */ + { .altcode = NULL }, /* 0x0362 */ + { .altcode = NULL }, /* 0x0363 */ + { .altcode = NULL }, /* 0x0364 */ + { .altcode = NULL }, /* 0x0365 */ + { .altcode = NULL }, /* 0x0366 */ + { .altcode = NULL }, /* 0x0367 */ + { .altcode = NULL }, /* 0x0368 */ + { .altcode = NULL }, /* 0x0369 */ + { .altcode = NULL }, /* 0x036a */ + { .altcode = NULL }, /* 0x036b */ + { .altcode = NULL }, /* 0x036c */ + { .altcode = NULL }, /* 0x036d */ + { .altcode = NULL }, /* 0x036e */ + { .altcode = NULL }, /* 0x036f */ + { .altcode = NULL }, /* 0x0370 */ + { .altcode = NULL }, /* 0x0371 */ + { .altcode = NULL }, /* 0x0372 */ + { .altcode = NULL }, /* 0x0373 */ + { .altcode = NULL }, /* 0x0374 */ + { .altcode = NULL }, /* 0x0375 */ + { .altcode = NULL }, /* 0x0376 */ + { .altcode = NULL }, /* 0x0377 */ + { .altcode = NULL }, /* 0x0378 */ + { .altcode = NULL }, /* 0x0379 */ + { .altcode = NULL }, /* 0x037a */ + { .altcode = NULL }, /* 0x037b */ + { .altcode = NULL }, /* 0x037c */ + { .altcode = NULL }, /* 0x037d */ + { .altcode = NULL }, /* 0x037e */ + { .altcode = NULL }, /* 0x037f */ + { .altcode = NULL }, /* 0x0380 */ + { .altcode = NULL }, /* 0x0381 */ + { .altcode = NULL }, /* 0x0382 */ + { .altcode = NULL }, /* 0x0383 */ + { .altcode = NULL }, /* 0x0384 */ + { .altcode = NULL }, /* 0x0385 */ + { .altcode = NULL }, /* 0x0386 */ + { .altcode = NULL }, /* 0x0387 */ + { .altcode = NULL }, /* 0x0388 */ + { .altcode = NULL }, /* 0x0389 */ + { .altcode = NULL }, /* 0x038a */ + { .altcode = NULL }, /* 0x038b */ + { .altcode = NULL }, /* 0x038c */ + { .altcode = NULL }, /* 0x038d */ + { .altcode = NULL }, /* 0x038e */ + { .altcode = NULL }, /* 0x038f */ + { .altcode = NULL }, /* 0x0390 */ + { .altcode = NULL }, /* 0x0391 */ + { .altcode = NULL }, /* 0x0392 */ + { .altcode = NULL }, /* 0x0393 */ + { .altcode = NULL }, /* 0x0394 */ + { .altcode = NULL }, /* 0x0395 */ + { .altcode = NULL }, /* 0x0396 */ + { .altcode = NULL }, /* 0x0397 */ + { .altcode = NULL }, /* 0x0398 */ + { .altcode = NULL }, /* 0x0399 */ + { .altcode = NULL }, /* 0x039a */ + { .altcode = NULL }, /* 0x039b */ + { .altcode = NULL }, /* 0x039c */ + { .altcode = NULL }, /* 0x039d */ + { .altcode = NULL }, /* 0x039e */ + { .altcode = NULL }, /* 0x039f */ + { .altcode = NULL }, /* 0x03a0 */ + { .altcode = NULL }, /* 0x03a1 */ + { .altcode = NULL }, /* 0x03a2 (kappa) */ + { .altcode = NULL }, /* 0x03a3 (Rcedilla) */ + { .altcode = NULL }, /* 0x03a4 */ + { .altcode = NULL }, /* 0x03a5 (Itilde) */ + { .altcode = NULL }, /* 0x03a6 (Lcedilla) */ + { .altcode = NULL }, /* 0x03a7 */ + { .altcode = NULL }, /* 0x03a8 */ + { .altcode = NULL }, /* 0x03a9 */ + { .altcode = NULL }, /* 0x03aa (Emacron) */ + { .altcode = NULL }, /* 0x03ab (Gcedilla) */ + { .altcode = NULL }, /* 0x03ac (Tslash) */ + { .altcode = NULL }, /* 0x03ad */ + { .altcode = NULL }, /* 0x03ae */ + { .altcode = NULL }, /* 0x03af */ + { .altcode = NULL }, /* 0x03b0 */ + { .altcode = NULL }, /* 0x03b1 */ + { .altcode = NULL }, /* 0x03b2 */ + { .altcode = NULL }, /* 0x03b3 (rcedilla) */ + { .altcode = NULL }, /* 0x03b4 */ + { .altcode = NULL }, /* 0x03b5 (itilde) */ + { .altcode = NULL }, /* 0x03b6 (lcedilla) */ + { .altcode = NULL }, /* 0x03b7 */ + { .altcode = NULL }, /* 0x03b8 */ + { .altcode = NULL }, /* 0x03b9 */ + { .altcode = NULL }, /* 0x03ba (emacron) */ + { .altcode = NULL }, /* 0x03bb (gcedilla) */ + { .altcode = NULL }, /* 0x03bc (tslash) */ + { .altcode = NULL }, /* 0x03bd (ENG) */ + { .altcode = NULL }, /* 0x03be */ + { .altcode = NULL }, /* 0x03bf (eng) */ + { .altcode = NULL }, /* 0x03c0 (Amacron) */ + { .altcode = NULL }, /* 0x03c1 */ + { .altcode = NULL }, /* 0x03c2 */ + { .altcode = NULL }, /* 0x03c3 */ + { .altcode = NULL }, /* 0x03c4 */ + { .altcode = NULL }, /* 0x03c5 */ + { .altcode = NULL }, /* 0x03c6 */ + { .altcode = NULL }, /* 0x03c7 (Iogonek) */ + { .altcode = NULL }, /* 0x03c8 */ + { .altcode = NULL }, /* 0x03c9 */ + { .altcode = NULL }, /* 0x03ca */ + { .altcode = NULL }, /* 0x03cb */ + { .altcode = NULL }, /* 0x03cc (Eabovedot) */ + { .altcode = NULL }, /* 0x03cd */ + { .altcode = NULL }, /* 0x03ce */ + { .altcode = NULL }, /* 0x03cf (Imacron) */ + { .altcode = NULL }, /* 0x03d0 */ + { .altcode = NULL }, /* 0x03d1 (Ncedilla) */ + { .altcode = NULL }, /* 0x03d2 (Omacron) */ + { .altcode = NULL }, /* 0x03d3 (Kcedilla) */ + { .altcode = NULL }, /* 0x03d4 */ + { .altcode = NULL }, /* 0x03d5 */ + { .altcode = NULL }, /* 0x03d6 */ + { .altcode = NULL }, /* 0x03d7 */ + { .altcode = NULL }, /* 0x03d8 */ + { .altcode = NULL }, /* 0x03d9 (Uogonek) */ + { .altcode = NULL }, /* 0x03da */ + { .altcode = NULL }, /* 0x03db */ + { .altcode = NULL }, /* 0x03dc */ + { .altcode = NULL }, /* 0x03dd (Utilde) */ + { .altcode = NULL }, /* 0x03de (Umacron) */ + { .altcode = NULL }, /* 0x03df */ + { .altcode = NULL }, /* 0x03e0 (amacron) */ + { .altcode = NULL }, /* 0x03e1 */ + { .altcode = NULL }, /* 0x03e2 */ + { .altcode = NULL }, /* 0x03e3 */ + { .altcode = NULL }, /* 0x03e4 */ + { .altcode = NULL }, /* 0x03e5 */ + { .altcode = NULL }, /* 0x03e6 */ + { .altcode = NULL }, /* 0x03e7 (iogonek) */ + { .altcode = NULL }, /* 0x03e8 */ + { .altcode = NULL }, /* 0x03e9 */ + { .altcode = NULL }, /* 0x03ea */ + { .altcode = NULL }, /* 0x03eb */ + { .altcode = NULL }, /* 0x03ec (eabovedot) */ + { .altcode = NULL }, /* 0x03ed */ + { .altcode = NULL }, /* 0x03ee */ + { .altcode = NULL }, /* 0x03ef (imacron) */ + { .altcode = NULL }, /* 0x03f0 */ + { .altcode = NULL }, /* 0x03f1 (ncedilla) */ + { .altcode = NULL }, /* 0x03f2 (omacron) */ + { .altcode = NULL }, /* 0x03f3 (kcedilla) */ + { .altcode = NULL }, /* 0x03f4 */ + { .altcode = NULL }, /* 0x03f5 */ + { .altcode = NULL }, /* 0x03f6 */ + { .altcode = NULL }, /* 0x03f7 */ + { .altcode = NULL }, /* 0x03f8 */ + { .altcode = NULL }, /* 0x03f9 (uogonek) */ + { .altcode = NULL }, /* 0x03fa */ + { .altcode = NULL }, /* 0x03fb */ + { .altcode = NULL }, /* 0x03fc */ + { .altcode = NULL }, /* 0x03fd (utilde) */ + { .altcode = NULL }, /* 0x03fe (umacron) */ + { .altcode = NULL }, /* 0x03ff */ }, { /* 0x04?? */ - { .altcode = "" }, /* 0x0400 */ - { .altcode = "" }, /* 0x0401 */ - { .altcode = "" }, /* 0x0402 */ - { .altcode = "" }, /* 0x0403 */ - { .altcode = "" }, /* 0x0404 */ - { .altcode = "" }, /* 0x0405 */ - { .altcode = "" }, /* 0x0406 */ - { .altcode = "" }, /* 0x0407 */ - { .altcode = "" }, /* 0x0408 */ - { .altcode = "" }, /* 0x0409 */ - { .altcode = "" }, /* 0x040a */ - { .altcode = "" }, /* 0x040b */ - { .altcode = "" }, /* 0x040c */ - { .altcode = "" }, /* 0x040d */ - { .altcode = "" }, /* 0x040e */ - { .altcode = "" }, /* 0x040f */ - { .altcode = "" }, /* 0x0410 */ - { .altcode = "" }, /* 0x0411 */ - { .altcode = "" }, /* 0x0412 */ - { .altcode = "" }, /* 0x0413 */ - { .altcode = "" }, /* 0x0414 */ - { .altcode = "" }, /* 0x0415 */ - { .altcode = "" }, /* 0x0416 */ - { .altcode = "" }, /* 0x0417 */ - { .altcode = "" }, /* 0x0418 */ - { .altcode = "" }, /* 0x0419 */ - { .altcode = "" }, /* 0x041a */ - { .altcode = "" }, /* 0x041b */ - { .altcode = "" }, /* 0x041c */ - { .altcode = "" }, /* 0x041d */ - { .altcode = "" }, /* 0x041e */ - { .altcode = "" }, /* 0x041f */ - { .altcode = "" }, /* 0x0420 */ - { .altcode = "" }, /* 0x0421 */ - { .altcode = "" }, /* 0x0422 */ - { .altcode = "" }, /* 0x0423 */ - { .altcode = "" }, /* 0x0424 */ - { .altcode = "" }, /* 0x0425 */ - { .altcode = "" }, /* 0x0426 */ - { .altcode = "" }, /* 0x0427 */ - { .altcode = "" }, /* 0x0428 */ - { .altcode = "" }, /* 0x0429 */ - { .altcode = "" }, /* 0x042a */ - { .altcode = "" }, /* 0x042b */ - { .altcode = "" }, /* 0x042c */ - { .altcode = "" }, /* 0x042d */ - { .altcode = "" }, /* 0x042e */ - { .altcode = "" }, /* 0x042f */ - { .altcode = "" }, /* 0x0430 */ - { .altcode = "" }, /* 0x0431 */ - { .altcode = "" }, /* 0x0432 */ - { .altcode = "" }, /* 0x0433 */ - { .altcode = "" }, /* 0x0434 */ - { .altcode = "" }, /* 0x0435 */ - { .altcode = "" }, /* 0x0436 */ - { .altcode = "" }, /* 0x0437 */ - { .altcode = "" }, /* 0x0438 */ - { .altcode = "" }, /* 0x0439 */ - { .altcode = "" }, /* 0x043a */ - { .altcode = "" }, /* 0x043b */ - { .altcode = "" }, /* 0x043c */ - { .altcode = "" }, /* 0x043d */ - { .altcode = "" }, /* 0x043e */ - { .altcode = "" }, /* 0x043f */ - { .altcode = "" }, /* 0x0440 */ - { .altcode = "" }, /* 0x0441 */ - { .altcode = "" }, /* 0x0442 */ - { .altcode = "" }, /* 0x0443 */ - { .altcode = "" }, /* 0x0444 */ - { .altcode = "" }, /* 0x0445 */ - { .altcode = "" }, /* 0x0446 */ - { .altcode = "" }, /* 0x0447 */ - { .altcode = "" }, /* 0x0448 */ - { .altcode = "" }, /* 0x0449 */ - { .altcode = "" }, /* 0x044a */ - { .altcode = "" }, /* 0x044b */ - { .altcode = "" }, /* 0x044c */ - { .altcode = "" }, /* 0x044d */ - { .altcode = "" }, /* 0x044e */ - { .altcode = "" }, /* 0x044f */ - { .altcode = "" }, /* 0x0450 */ - { .altcode = "" }, /* 0x0451 */ - { .altcode = "" }, /* 0x0452 */ - { .altcode = "" }, /* 0x0453 */ - { .altcode = "" }, /* 0x0454 */ - { .altcode = "" }, /* 0x0455 */ - { .altcode = "" }, /* 0x0456 */ - { .altcode = "" }, /* 0x0457 */ - { .altcode = "" }, /* 0x0458 */ - { .altcode = "" }, /* 0x0459 */ - { .altcode = "" }, /* 0x045a */ - { .altcode = "" }, /* 0x045b */ - { .altcode = "" }, /* 0x045c */ - { .altcode = "" }, /* 0x045d */ - { .altcode = "" }, /* 0x045e */ - { .altcode = "" }, /* 0x045f */ - { .altcode = "" }, /* 0x0460 */ - { .altcode = "" }, /* 0x0461 */ - { .altcode = "" }, /* 0x0462 */ - { .altcode = "" }, /* 0x0463 */ - { .altcode = "" }, /* 0x0464 */ - { .altcode = "" }, /* 0x0465 */ - { .altcode = "" }, /* 0x0466 */ - { .altcode = "" }, /* 0x0467 */ - { .altcode = "" }, /* 0x0468 */ - { .altcode = "" }, /* 0x0469 */ - { .altcode = "" }, /* 0x046a */ - { .altcode = "" }, /* 0x046b */ - { .altcode = "" }, /* 0x046c */ - { .altcode = "" }, /* 0x046d */ - { .altcode = "" }, /* 0x046e */ - { .altcode = "" }, /* 0x046f */ - { .altcode = "" }, /* 0x0470 */ - { .altcode = "" }, /* 0x0471 */ - { .altcode = "" }, /* 0x0472 */ - { .altcode = "" }, /* 0x0473 */ - { .altcode = "" }, /* 0x0474 */ - { .altcode = "" }, /* 0x0475 */ - { .altcode = "" }, /* 0x0476 */ - { .altcode = "" }, /* 0x0477 */ - { .altcode = "" }, /* 0x0478 */ - { .altcode = "" }, /* 0x0479 */ - { .altcode = "" }, /* 0x047a */ - { .altcode = "" }, /* 0x047b */ - { .altcode = "" }, /* 0x047c */ - { .altcode = "" }, /* 0x047d */ - { .altcode = "" }, /* 0x047e (overline) */ - { .altcode = "" }, /* 0x047f */ - { .altcode = "" }, /* 0x0480 */ - { .altcode = "" }, /* 0x0481 */ - { .altcode = "" }, /* 0x0482 */ - { .altcode = "" }, /* 0x0483 */ - { .altcode = "" }, /* 0x0484 */ - { .altcode = "" }, /* 0x0485 */ - { .altcode = "" }, /* 0x0486 */ - { .altcode = "" }, /* 0x0487 */ - { .altcode = "" }, /* 0x0488 */ - { .altcode = "" }, /* 0x0489 */ - { .altcode = "" }, /* 0x048a */ - { .altcode = "" }, /* 0x048b */ - { .altcode = "" }, /* 0x048c */ - { .altcode = "" }, /* 0x048d */ - { .altcode = "" }, /* 0x048e */ - { .altcode = "" }, /* 0x048f */ - { .altcode = "" }, /* 0x0490 */ - { .altcode = "" }, /* 0x0491 */ - { .altcode = "" }, /* 0x0492 */ - { .altcode = "" }, /* 0x0493 */ - { .altcode = "" }, /* 0x0494 */ - { .altcode = "" }, /* 0x0495 */ - { .altcode = "" }, /* 0x0496 */ - { .altcode = "" }, /* 0x0497 */ - { .altcode = "" }, /* 0x0498 */ - { .altcode = "" }, /* 0x0499 */ - { .altcode = "" }, /* 0x049a */ - { .altcode = "" }, /* 0x049b */ - { .altcode = "" }, /* 0x049c */ - { .altcode = "" }, /* 0x049d */ - { .altcode = "" }, /* 0x049e */ - { .altcode = "" }, /* 0x049f */ - { .altcode = "" }, /* 0x04a0 */ - { .altcode = "" }, /* 0x04a1 (kana_fullstop) */ - { .altcode = "" }, /* 0x04a2 (kana_openingbracket) */ - { .altcode = "" }, /* 0x04a3 (kana_closingbracket) */ - { .altcode = "" }, /* 0x04a4 (kana_comma) */ - { .altcode = "" }, /* 0x04a5 (kana_middledot) */ - { .altcode = "" }, /* 0x04a6 (kana_WO) */ - { .altcode = "" }, /* 0x04a7 (kana_a) */ - { .altcode = "" }, /* 0x04a8 (kana_i) */ - { .altcode = "" }, /* 0x04a9 (kana_u) */ - { .altcode = "" }, /* 0x04aa (kana_e) */ - { .altcode = "" }, /* 0x04ab (kana_o) */ - { .altcode = "" }, /* 0x04ac (kana_ya) */ - { .altcode = "" }, /* 0x04ad (kana_yu) */ - { .altcode = "" }, /* 0x04ae (kana_yo) */ - { .altcode = "" }, /* 0x04af (kana_tu) */ - { .altcode = "" }, /* 0x04b0 (prolongedsound) */ - { .altcode = "" }, /* 0x04b1 (kana_A) */ - { .altcode = "" }, /* 0x04b2 (kana_I) */ - { .altcode = "" }, /* 0x04b3 (kana_U) */ - { .altcode = "" }, /* 0x04b4 (kana_E) */ - { .altcode = "" }, /* 0x04b5 (kana_O) */ - { .altcode = "" }, /* 0x04b6 (kana_KA) */ - { .altcode = "" }, /* 0x04b7 (kana_KI) */ - { .altcode = "" }, /* 0x04b8 (kana_KU) */ - { .altcode = "" }, /* 0x04b9 (kana_KE) */ - { .altcode = "" }, /* 0x04ba (kana_KO) */ - { .altcode = "" }, /* 0x04bb (kana_SA) */ - { .altcode = "" }, /* 0x04bc (kana_SHI) */ - { .altcode = "" }, /* 0x04bd (kana_SU) */ - { .altcode = "" }, /* 0x04be (kana_SE) */ - { .altcode = "" }, /* 0x04bf (kana_SO) */ - { .altcode = "" }, /* 0x04c0 (kana_TA) */ - { .altcode = "" }, /* 0x04c1 (kana_TI) */ - { .altcode = "" }, /* 0x04c2 (kana_TU) */ - { .altcode = "" }, /* 0x04c3 (kana_TE) */ - { .altcode = "" }, /* 0x04c4 (kana_TO) */ - { .altcode = "" }, /* 0x04c5 (kana_NA) */ - { .altcode = "" }, /* 0x04c6 (kana_NI) */ - { .altcode = "" }, /* 0x04c7 (kana_NU) */ - { .altcode = "" }, /* 0x04c8 (kana_NE) */ - { .altcode = "" }, /* 0x04c9 (kana_NO) */ - { .altcode = "" }, /* 0x04ca (kana_HA) */ - { .altcode = "" }, /* 0x04cb (kana_HI) */ - { .altcode = "" }, /* 0x04cc (kana_HU) */ - { .altcode = "" }, /* 0x04cd (kana_HE) */ - { .altcode = "" }, /* 0x04ce (kana_HO) */ - { .altcode = "" }, /* 0x04cf (kana_MA) */ - { .altcode = "" }, /* 0x04d0 (kana_MI) */ - { .altcode = "" }, /* 0x04d1 (kana_MU) */ - { .altcode = "" }, /* 0x04d2 (kana_ME) */ - { .altcode = "" }, /* 0x04d3 (kana_MO) */ - { .altcode = "" }, /* 0x04d4 (kana_YA) */ - { .altcode = "" }, /* 0x04d5 (kana_YU) */ - { .altcode = "" }, /* 0x04d6 (kana_YO) */ - { .altcode = "" }, /* 0x04d7 (kana_RA) */ - { .altcode = "" }, /* 0x04d8 (kana_RI) */ - { .altcode = "" }, /* 0x04d9 (kana_RU) */ - { .altcode = "" }, /* 0x04da (kana_RE) */ - { .altcode = "" }, /* 0x04db (kana_RO) */ - { .altcode = "" }, /* 0x04dc (kana_WA) */ - { .altcode = "" }, /* 0x04dd (kana_N) */ - { .altcode = "" }, /* 0x04de (voicedsound) */ - { .altcode = "" }, /* 0x04df (semivoicedsound) */ - { .altcode = "" }, /* 0x04e0 */ - { .altcode = "" }, /* 0x04e1 */ - { .altcode = "" }, /* 0x04e2 */ - { .altcode = "" }, /* 0x04e3 */ - { .altcode = "" }, /* 0x04e4 */ - { .altcode = "" }, /* 0x04e5 */ - { .altcode = "" }, /* 0x04e6 */ - { .altcode = "" }, /* 0x04e7 */ - { .altcode = "" }, /* 0x04e8 */ - { .altcode = "" }, /* 0x04e9 */ - { .altcode = "" }, /* 0x04ea */ - { .altcode = "" }, /* 0x04eb */ - { .altcode = "" }, /* 0x04ec */ - { .altcode = "" }, /* 0x04ed */ - { .altcode = "" }, /* 0x04ee */ - { .altcode = "" }, /* 0x04ef */ - { .altcode = "" }, /* 0x04f0 */ - { .altcode = "" }, /* 0x04f1 */ - { .altcode = "" }, /* 0x04f2 */ - { .altcode = "" }, /* 0x04f3 */ - { .altcode = "" }, /* 0x04f4 */ - { .altcode = "" }, /* 0x04f5 */ - { .altcode = "" }, /* 0x04f6 */ - { .altcode = "" }, /* 0x04f7 */ - { .altcode = "" }, /* 0x04f8 */ - { .altcode = "" }, /* 0x04f9 */ - { .altcode = "" }, /* 0x04fa */ - { .altcode = "" }, /* 0x04fb */ - { .altcode = "" }, /* 0x04fc */ - { .altcode = "" }, /* 0x04fd */ - { .altcode = "" }, /* 0x04fe */ - { .altcode = "" }, /* 0x04ff */ + { .altcode = NULL }, /* 0x0400 */ + { .altcode = NULL }, /* 0x0401 */ + { .altcode = NULL }, /* 0x0402 */ + { .altcode = NULL }, /* 0x0403 */ + { .altcode = NULL }, /* 0x0404 */ + { .altcode = NULL }, /* 0x0405 */ + { .altcode = NULL }, /* 0x0406 */ + { .altcode = NULL }, /* 0x0407 */ + { .altcode = NULL }, /* 0x0408 */ + { .altcode = NULL }, /* 0x0409 */ + { .altcode = NULL }, /* 0x040a */ + { .altcode = NULL }, /* 0x040b */ + { .altcode = NULL }, /* 0x040c */ + { .altcode = NULL }, /* 0x040d */ + { .altcode = NULL }, /* 0x040e */ + { .altcode = NULL }, /* 0x040f */ + { .altcode = NULL }, /* 0x0410 */ + { .altcode = NULL }, /* 0x0411 */ + { .altcode = NULL }, /* 0x0412 */ + { .altcode = NULL }, /* 0x0413 */ + { .altcode = NULL }, /* 0x0414 */ + { .altcode = NULL }, /* 0x0415 */ + { .altcode = NULL }, /* 0x0416 */ + { .altcode = NULL }, /* 0x0417 */ + { .altcode = NULL }, /* 0x0418 */ + { .altcode = NULL }, /* 0x0419 */ + { .altcode = NULL }, /* 0x041a */ + { .altcode = NULL }, /* 0x041b */ + { .altcode = NULL }, /* 0x041c */ + { .altcode = NULL }, /* 0x041d */ + { .altcode = NULL }, /* 0x041e */ + { .altcode = NULL }, /* 0x041f */ + { .altcode = NULL }, /* 0x0420 */ + { .altcode = NULL }, /* 0x0421 */ + { .altcode = NULL }, /* 0x0422 */ + { .altcode = NULL }, /* 0x0423 */ + { .altcode = NULL }, /* 0x0424 */ + { .altcode = NULL }, /* 0x0425 */ + { .altcode = NULL }, /* 0x0426 */ + { .altcode = NULL }, /* 0x0427 */ + { .altcode = NULL }, /* 0x0428 */ + { .altcode = NULL }, /* 0x0429 */ + { .altcode = NULL }, /* 0x042a */ + { .altcode = NULL }, /* 0x042b */ + { .altcode = NULL }, /* 0x042c */ + { .altcode = NULL }, /* 0x042d */ + { .altcode = NULL }, /* 0x042e */ + { .altcode = NULL }, /* 0x042f */ + { .altcode = NULL }, /* 0x0430 */ + { .altcode = NULL }, /* 0x0431 */ + { .altcode = NULL }, /* 0x0432 */ + { .altcode = NULL }, /* 0x0433 */ + { .altcode = NULL }, /* 0x0434 */ + { .altcode = NULL }, /* 0x0435 */ + { .altcode = NULL }, /* 0x0436 */ + { .altcode = NULL }, /* 0x0437 */ + { .altcode = NULL }, /* 0x0438 */ + { .altcode = NULL }, /* 0x0439 */ + { .altcode = NULL }, /* 0x043a */ + { .altcode = NULL }, /* 0x043b */ + { .altcode = NULL }, /* 0x043c */ + { .altcode = NULL }, /* 0x043d */ + { .altcode = NULL }, /* 0x043e */ + { .altcode = NULL }, /* 0x043f */ + { .altcode = NULL }, /* 0x0440 */ + { .altcode = NULL }, /* 0x0441 */ + { .altcode = NULL }, /* 0x0442 */ + { .altcode = NULL }, /* 0x0443 */ + { .altcode = NULL }, /* 0x0444 */ + { .altcode = NULL }, /* 0x0445 */ + { .altcode = NULL }, /* 0x0446 */ + { .altcode = NULL }, /* 0x0447 */ + { .altcode = NULL }, /* 0x0448 */ + { .altcode = NULL }, /* 0x0449 */ + { .altcode = NULL }, /* 0x044a */ + { .altcode = NULL }, /* 0x044b */ + { .altcode = NULL }, /* 0x044c */ + { .altcode = NULL }, /* 0x044d */ + { .altcode = NULL }, /* 0x044e */ + { .altcode = NULL }, /* 0x044f */ + { .altcode = NULL }, /* 0x0450 */ + { .altcode = NULL }, /* 0x0451 */ + { .altcode = NULL }, /* 0x0452 */ + { .altcode = NULL }, /* 0x0453 */ + { .altcode = NULL }, /* 0x0454 */ + { .altcode = NULL }, /* 0x0455 */ + { .altcode = NULL }, /* 0x0456 */ + { .altcode = NULL }, /* 0x0457 */ + { .altcode = NULL }, /* 0x0458 */ + { .altcode = NULL }, /* 0x0459 */ + { .altcode = NULL }, /* 0x045a */ + { .altcode = NULL }, /* 0x045b */ + { .altcode = NULL }, /* 0x045c */ + { .altcode = NULL }, /* 0x045d */ + { .altcode = NULL }, /* 0x045e */ + { .altcode = NULL }, /* 0x045f */ + { .altcode = NULL }, /* 0x0460 */ + { .altcode = NULL }, /* 0x0461 */ + { .altcode = NULL }, /* 0x0462 */ + { .altcode = NULL }, /* 0x0463 */ + { .altcode = NULL }, /* 0x0464 */ + { .altcode = NULL }, /* 0x0465 */ + { .altcode = NULL }, /* 0x0466 */ + { .altcode = NULL }, /* 0x0467 */ + { .altcode = NULL }, /* 0x0468 */ + { .altcode = NULL }, /* 0x0469 */ + { .altcode = NULL }, /* 0x046a */ + { .altcode = NULL }, /* 0x046b */ + { .altcode = NULL }, /* 0x046c */ + { .altcode = NULL }, /* 0x046d */ + { .altcode = NULL }, /* 0x046e */ + { .altcode = NULL }, /* 0x046f */ + { .altcode = NULL }, /* 0x0470 */ + { .altcode = NULL }, /* 0x0471 */ + { .altcode = NULL }, /* 0x0472 */ + { .altcode = NULL }, /* 0x0473 */ + { .altcode = NULL }, /* 0x0474 */ + { .altcode = NULL }, /* 0x0475 */ + { .altcode = NULL }, /* 0x0476 */ + { .altcode = NULL }, /* 0x0477 */ + { .altcode = NULL }, /* 0x0478 */ + { .altcode = NULL }, /* 0x0479 */ + { .altcode = NULL }, /* 0x047a */ + { .altcode = NULL }, /* 0x047b */ + { .altcode = NULL }, /* 0x047c */ + { .altcode = NULL }, /* 0x047d */ + { .altcode = NULL }, /* 0x047e (overline) */ + { .altcode = NULL }, /* 0x047f */ + { .altcode = NULL }, /* 0x0480 */ + { .altcode = NULL }, /* 0x0481 */ + { .altcode = NULL }, /* 0x0482 */ + { .altcode = NULL }, /* 0x0483 */ + { .altcode = NULL }, /* 0x0484 */ + { .altcode = NULL }, /* 0x0485 */ + { .altcode = NULL }, /* 0x0486 */ + { .altcode = NULL }, /* 0x0487 */ + { .altcode = NULL }, /* 0x0488 */ + { .altcode = NULL }, /* 0x0489 */ + { .altcode = NULL }, /* 0x048a */ + { .altcode = NULL }, /* 0x048b */ + { .altcode = NULL }, /* 0x048c */ + { .altcode = NULL }, /* 0x048d */ + { .altcode = NULL }, /* 0x048e */ + { .altcode = NULL }, /* 0x048f */ + { .altcode = NULL }, /* 0x0490 */ + { .altcode = NULL }, /* 0x0491 */ + { .altcode = NULL }, /* 0x0492 */ + { .altcode = NULL }, /* 0x0493 */ + { .altcode = NULL }, /* 0x0494 */ + { .altcode = NULL }, /* 0x0495 */ + { .altcode = NULL }, /* 0x0496 */ + { .altcode = NULL }, /* 0x0497 */ + { .altcode = NULL }, /* 0x0498 */ + { .altcode = NULL }, /* 0x0499 */ + { .altcode = NULL }, /* 0x049a */ + { .altcode = NULL }, /* 0x049b */ + { .altcode = NULL }, /* 0x049c */ + { .altcode = NULL }, /* 0x049d */ + { .altcode = NULL }, /* 0x049e */ + { .altcode = NULL }, /* 0x049f */ + { .altcode = NULL }, /* 0x04a0 */ + { .altcode = NULL }, /* 0x04a1 (kana_fullstop) */ + { .altcode = NULL }, /* 0x04a2 (kana_openingbracket) */ + { .altcode = NULL }, /* 0x04a3 (kana_closingbracket) */ + { .altcode = NULL }, /* 0x04a4 (kana_comma) */ + { .altcode = NULL }, /* 0x04a5 (kana_middledot) */ + { .altcode = NULL }, /* 0x04a6 (kana_WO) */ + { .altcode = NULL }, /* 0x04a7 (kana_a) */ + { .altcode = NULL }, /* 0x04a8 (kana_i) */ + { .altcode = NULL }, /* 0x04a9 (kana_u) */ + { .altcode = NULL }, /* 0x04aa (kana_e) */ + { .altcode = NULL }, /* 0x04ab (kana_o) */ + { .altcode = NULL }, /* 0x04ac (kana_ya) */ + { .altcode = NULL }, /* 0x04ad (kana_yu) */ + { .altcode = NULL }, /* 0x04ae (kana_yo) */ + { .altcode = NULL }, /* 0x04af (kana_tu) */ + { .altcode = NULL }, /* 0x04b0 (prolongedsound) */ + { .altcode = NULL }, /* 0x04b1 (kana_A) */ + { .altcode = NULL }, /* 0x04b2 (kana_I) */ + { .altcode = NULL }, /* 0x04b3 (kana_U) */ + { .altcode = NULL }, /* 0x04b4 (kana_E) */ + { .altcode = NULL }, /* 0x04b5 (kana_O) */ + { .altcode = NULL }, /* 0x04b6 (kana_KA) */ + { .altcode = NULL }, /* 0x04b7 (kana_KI) */ + { .altcode = NULL }, /* 0x04b8 (kana_KU) */ + { .altcode = NULL }, /* 0x04b9 (kana_KE) */ + { .altcode = NULL }, /* 0x04ba (kana_KO) */ + { .altcode = NULL }, /* 0x04bb (kana_SA) */ + { .altcode = NULL }, /* 0x04bc (kana_SHI) */ + { .altcode = NULL }, /* 0x04bd (kana_SU) */ + { .altcode = NULL }, /* 0x04be (kana_SE) */ + { .altcode = NULL }, /* 0x04bf (kana_SO) */ + { .altcode = NULL }, /* 0x04c0 (kana_TA) */ + { .altcode = NULL }, /* 0x04c1 (kana_TI) */ + { .altcode = NULL }, /* 0x04c2 (kana_TU) */ + { .altcode = NULL }, /* 0x04c3 (kana_TE) */ + { .altcode = NULL }, /* 0x04c4 (kana_TO) */ + { .altcode = NULL }, /* 0x04c5 (kana_NA) */ + { .altcode = NULL }, /* 0x04c6 (kana_NI) */ + { .altcode = NULL }, /* 0x04c7 (kana_NU) */ + { .altcode = NULL }, /* 0x04c8 (kana_NE) */ + { .altcode = NULL }, /* 0x04c9 (kana_NO) */ + { .altcode = NULL }, /* 0x04ca (kana_HA) */ + { .altcode = NULL }, /* 0x04cb (kana_HI) */ + { .altcode = NULL }, /* 0x04cc (kana_HU) */ + { .altcode = NULL }, /* 0x04cd (kana_HE) */ + { .altcode = NULL }, /* 0x04ce (kana_HO) */ + { .altcode = NULL }, /* 0x04cf (kana_MA) */ + { .altcode = NULL }, /* 0x04d0 (kana_MI) */ + { .altcode = NULL }, /* 0x04d1 (kana_MU) */ + { .altcode = NULL }, /* 0x04d2 (kana_ME) */ + { .altcode = NULL }, /* 0x04d3 (kana_MO) */ + { .altcode = NULL }, /* 0x04d4 (kana_YA) */ + { .altcode = NULL }, /* 0x04d5 (kana_YU) */ + { .altcode = NULL }, /* 0x04d6 (kana_YO) */ + { .altcode = NULL }, /* 0x04d7 (kana_RA) */ + { .altcode = NULL }, /* 0x04d8 (kana_RI) */ + { .altcode = NULL }, /* 0x04d9 (kana_RU) */ + { .altcode = NULL }, /* 0x04da (kana_RE) */ + { .altcode = NULL }, /* 0x04db (kana_RO) */ + { .altcode = NULL }, /* 0x04dc (kana_WA) */ + { .altcode = NULL }, /* 0x04dd (kana_N) */ + { .altcode = NULL }, /* 0x04de (voicedsound) */ + { .altcode = NULL }, /* 0x04df (semivoicedsound) */ + { .altcode = NULL }, /* 0x04e0 */ + { .altcode = NULL }, /* 0x04e1 */ + { .altcode = NULL }, /* 0x04e2 */ + { .altcode = NULL }, /* 0x04e3 */ + { .altcode = NULL }, /* 0x04e4 */ + { .altcode = NULL }, /* 0x04e5 */ + { .altcode = NULL }, /* 0x04e6 */ + { .altcode = NULL }, /* 0x04e7 */ + { .altcode = NULL }, /* 0x04e8 */ + { .altcode = NULL }, /* 0x04e9 */ + { .altcode = NULL }, /* 0x04ea */ + { .altcode = NULL }, /* 0x04eb */ + { .altcode = NULL }, /* 0x04ec */ + { .altcode = NULL }, /* 0x04ed */ + { .altcode = NULL }, /* 0x04ee */ + { .altcode = NULL }, /* 0x04ef */ + { .altcode = NULL }, /* 0x04f0 */ + { .altcode = NULL }, /* 0x04f1 */ + { .altcode = NULL }, /* 0x04f2 */ + { .altcode = NULL }, /* 0x04f3 */ + { .altcode = NULL }, /* 0x04f4 */ + { .altcode = NULL }, /* 0x04f5 */ + { .altcode = NULL }, /* 0x04f6 */ + { .altcode = NULL }, /* 0x04f7 */ + { .altcode = NULL }, /* 0x04f8 */ + { .altcode = NULL }, /* 0x04f9 */ + { .altcode = NULL }, /* 0x04fa */ + { .altcode = NULL }, /* 0x04fb */ + { .altcode = NULL }, /* 0x04fc */ + { .altcode = NULL }, /* 0x04fd */ + { .altcode = NULL }, /* 0x04fe */ + { .altcode = NULL }, /* 0x04ff */ }, { /* 0x05?? */ - { .altcode = "" }, /* 0x0500 */ - { .altcode = "" }, /* 0x0501 */ - { .altcode = "" }, /* 0x0502 */ - { .altcode = "" }, /* 0x0503 */ - { .altcode = "" }, /* 0x0504 */ - { .altcode = "" }, /* 0x0505 */ - { .altcode = "" }, /* 0x0506 */ - { .altcode = "" }, /* 0x0507 */ - { .altcode = "" }, /* 0x0508 */ - { .altcode = "" }, /* 0x0509 */ - { .altcode = "" }, /* 0x050a */ - { .altcode = "" }, /* 0x050b */ - { .altcode = "" }, /* 0x050c */ - { .altcode = "" }, /* 0x050d */ - { .altcode = "" }, /* 0x050e */ - { .altcode = "" }, /* 0x050f */ - { .altcode = "" }, /* 0x0510 */ - { .altcode = "" }, /* 0x0511 */ - { .altcode = "" }, /* 0x0512 */ - { .altcode = "" }, /* 0x0513 */ - { .altcode = "" }, /* 0x0514 */ - { .altcode = "" }, /* 0x0515 */ - { .altcode = "" }, /* 0x0516 */ - { .altcode = "" }, /* 0x0517 */ - { .altcode = "" }, /* 0x0518 */ - { .altcode = "" }, /* 0x0519 */ - { .altcode = "" }, /* 0x051a */ - { .altcode = "" }, /* 0x051b */ - { .altcode = "" }, /* 0x051c */ - { .altcode = "" }, /* 0x051d */ - { .altcode = "" }, /* 0x051e */ - { .altcode = "" }, /* 0x051f */ - { .altcode = "" }, /* 0x0520 */ - { .altcode = "" }, /* 0x0521 */ - { .altcode = "" }, /* 0x0522 */ - { .altcode = "" }, /* 0x0523 */ - { .altcode = "" }, /* 0x0524 */ - { .altcode = "" }, /* 0x0525 */ - { .altcode = "" }, /* 0x0526 */ - { .altcode = "" }, /* 0x0527 */ - { .altcode = "" }, /* 0x0528 */ - { .altcode = "" }, /* 0x0529 */ - { .altcode = "" }, /* 0x052a */ - { .altcode = "" }, /* 0x052b */ - { .altcode = "" }, /* 0x052c */ - { .altcode = "" }, /* 0x052d */ - { .altcode = "" }, /* 0x052e */ - { .altcode = "" }, /* 0x052f */ - { .altcode = "" }, /* 0x0530 */ - { .altcode = "" }, /* 0x0531 */ - { .altcode = "" }, /* 0x0532 */ - { .altcode = "" }, /* 0x0533 */ - { .altcode = "" }, /* 0x0534 */ - { .altcode = "" }, /* 0x0535 */ - { .altcode = "" }, /* 0x0536 */ - { .altcode = "" }, /* 0x0537 */ - { .altcode = "" }, /* 0x0538 */ - { .altcode = "" }, /* 0x0539 */ - { .altcode = "" }, /* 0x053a */ - { .altcode = "" }, /* 0x053b */ - { .altcode = "" }, /* 0x053c */ - { .altcode = "" }, /* 0x053d */ - { .altcode = "" }, /* 0x053e */ - { .altcode = "" }, /* 0x053f */ - { .altcode = "" }, /* 0x0540 */ - { .altcode = "" }, /* 0x0541 */ - { .altcode = "" }, /* 0x0542 */ - { .altcode = "" }, /* 0x0543 */ - { .altcode = "" }, /* 0x0544 */ - { .altcode = "" }, /* 0x0545 */ - { .altcode = "" }, /* 0x0546 */ - { .altcode = "" }, /* 0x0547 */ - { .altcode = "" }, /* 0x0548 */ - { .altcode = "" }, /* 0x0549 */ - { .altcode = "" }, /* 0x054a */ - { .altcode = "" }, /* 0x054b */ - { .altcode = "" }, /* 0x054c */ - { .altcode = "" }, /* 0x054d */ - { .altcode = "" }, /* 0x054e */ - { .altcode = "" }, /* 0x054f */ - { .altcode = "" }, /* 0x0550 */ - { .altcode = "" }, /* 0x0551 */ - { .altcode = "" }, /* 0x0552 */ - { .altcode = "" }, /* 0x0553 */ - { .altcode = "" }, /* 0x0554 */ - { .altcode = "" }, /* 0x0555 */ - { .altcode = "" }, /* 0x0556 */ - { .altcode = "" }, /* 0x0557 */ - { .altcode = "" }, /* 0x0558 */ - { .altcode = "" }, /* 0x0559 */ - { .altcode = "" }, /* 0x055a */ - { .altcode = "" }, /* 0x055b */ - { .altcode = "" }, /* 0x055c */ - { .altcode = "" }, /* 0x055d */ - { .altcode = "" }, /* 0x055e */ - { .altcode = "" }, /* 0x055f */ - { .altcode = "" }, /* 0x0560 */ - { .altcode = "" }, /* 0x0561 */ - { .altcode = "" }, /* 0x0562 */ - { .altcode = "" }, /* 0x0563 */ - { .altcode = "" }, /* 0x0564 */ - { .altcode = "" }, /* 0x0565 */ - { .altcode = "" }, /* 0x0566 */ - { .altcode = "" }, /* 0x0567 */ - { .altcode = "" }, /* 0x0568 */ - { .altcode = "" }, /* 0x0569 */ - { .altcode = "" }, /* 0x056a */ - { .altcode = "" }, /* 0x056b */ - { .altcode = "" }, /* 0x056c */ - { .altcode = "" }, /* 0x056d */ - { .altcode = "" }, /* 0x056e */ - { .altcode = "" }, /* 0x056f */ - { .altcode = "" }, /* 0x0570 */ - { .altcode = "" }, /* 0x0571 */ - { .altcode = "" }, /* 0x0572 */ - { .altcode = "" }, /* 0x0573 */ - { .altcode = "" }, /* 0x0574 */ - { .altcode = "" }, /* 0x0575 */ - { .altcode = "" }, /* 0x0576 */ - { .altcode = "" }, /* 0x0577 */ - { .altcode = "" }, /* 0x0578 */ - { .altcode = "" }, /* 0x0579 */ - { .altcode = "" }, /* 0x057a */ - { .altcode = "" }, /* 0x057b */ - { .altcode = "" }, /* 0x057c */ - { .altcode = "" }, /* 0x057d */ - { .altcode = "" }, /* 0x057e */ - { .altcode = "" }, /* 0x057f */ - { .altcode = "" }, /* 0x0580 */ - { .altcode = "" }, /* 0x0581 */ - { .altcode = "" }, /* 0x0582 */ - { .altcode = "" }, /* 0x0583 */ - { .altcode = "" }, /* 0x0584 */ - { .altcode = "" }, /* 0x0585 */ - { .altcode = "" }, /* 0x0586 */ - { .altcode = "" }, /* 0x0587 */ - { .altcode = "" }, /* 0x0588 */ - { .altcode = "" }, /* 0x0589 */ - { .altcode = "" }, /* 0x058a */ - { .altcode = "" }, /* 0x058b */ - { .altcode = "" }, /* 0x058c */ - { .altcode = "" }, /* 0x058d */ - { .altcode = "" }, /* 0x058e */ - { .altcode = "" }, /* 0x058f */ - { .altcode = "" }, /* 0x0590 */ - { .altcode = "" }, /* 0x0591 */ - { .altcode = "" }, /* 0x0592 */ - { .altcode = "" }, /* 0x0593 */ - { .altcode = "" }, /* 0x0594 */ - { .altcode = "" }, /* 0x0595 */ - { .altcode = "" }, /* 0x0596 */ - { .altcode = "" }, /* 0x0597 */ - { .altcode = "" }, /* 0x0598 */ - { .altcode = "" }, /* 0x0599 */ - { .altcode = "" }, /* 0x059a */ - { .altcode = "" }, /* 0x059b */ - { .altcode = "" }, /* 0x059c */ - { .altcode = "" }, /* 0x059d */ - { .altcode = "" }, /* 0x059e */ - { .altcode = "" }, /* 0x059f */ - { .altcode = "" }, /* 0x05a0 */ - { .altcode = "" }, /* 0x05a1 */ - { .altcode = "" }, /* 0x05a2 */ - { .altcode = "" }, /* 0x05a3 */ - { .altcode = "" }, /* 0x05a4 */ - { .altcode = "" }, /* 0x05a5 */ - { .altcode = "" }, /* 0x05a6 */ - { .altcode = "" }, /* 0x05a7 */ - { .altcode = "" }, /* 0x05a8 */ - { .altcode = "" }, /* 0x05a9 */ - { .altcode = "" }, /* 0x05aa */ - { .altcode = "" }, /* 0x05ab */ - { .altcode = "" }, /* 0x05ac (Arabic_comma) */ - { .altcode = "" }, /* 0x05ad */ - { .altcode = "" }, /* 0x05ae */ - { .altcode = "" }, /* 0x05af */ - { .altcode = "" }, /* 0x05b0 */ - { .altcode = "" }, /* 0x05b1 */ - { .altcode = "" }, /* 0x05b2 */ - { .altcode = "" }, /* 0x05b3 */ - { .altcode = "" }, /* 0x05b4 */ - { .altcode = "" }, /* 0x05b5 */ - { .altcode = "" }, /* 0x05b6 */ - { .altcode = "" }, /* 0x05b7 */ - { .altcode = "" }, /* 0x05b8 */ - { .altcode = "" }, /* 0x05b9 */ - { .altcode = "" }, /* 0x05ba */ - { .altcode = "" }, /* 0x05bb (Arabic_semicolon) */ - { .altcode = "" }, /* 0x05bc */ - { .altcode = "" }, /* 0x05bd */ - { .altcode = "" }, /* 0x05be */ - { .altcode = "" }, /* 0x05bf (Arabic_question_mark) */ - { .altcode = "" }, /* 0x05c0 */ - { .altcode = "" }, /* 0x05c1 (Arabic_hamza) */ - { .altcode = "" }, /* 0x05c2 (Arabic_maddaonalef) */ - { .altcode = "" }, /* 0x05c3 (Arabic_hamzaonalef) */ - { .altcode = "" }, /* 0x05c4 (Arabic_hamzaonwaw) */ - { .altcode = "" }, /* 0x05c5 (Arabic_hamzaunderalef) */ - { .altcode = "" }, /* 0x05c6 (Arabic_hamzaonyeh) */ - { .altcode = "" }, /* 0x05c7 (Arabic_alef) */ - { .altcode = "" }, /* 0x05c8 (Arabic_beh) */ - { .altcode = "" }, /* 0x05c9 (Arabic_tehmarbuta) */ - { .altcode = "" }, /* 0x05ca (Arabic_teh) */ - { .altcode = "" }, /* 0x05cb (Arabic_theh) */ - { .altcode = "" }, /* 0x05cc (Arabic_jeem) */ - { .altcode = "" }, /* 0x05cd (Arabic_hah) */ - { .altcode = "" }, /* 0x05ce (Arabic_khah) */ - { .altcode = "" }, /* 0x05cf (Arabic_dal) */ - { .altcode = "" }, /* 0x05d0 (Arabic_thal) */ - { .altcode = "" }, /* 0x05d1 (Arabic_ra) */ - { .altcode = "" }, /* 0x05d2 (Arabic_zain) */ - { .altcode = "" }, /* 0x05d3 (Arabic_seen) */ - { .altcode = "" }, /* 0x05d4 (Arabic_sheen) */ - { .altcode = "" }, /* 0x05d5 (Arabic_sad) */ - { .altcode = "" }, /* 0x05d6 (Arabic_dad) */ - { .altcode = "" }, /* 0x05d7 (Arabic_tah) */ - { .altcode = "" }, /* 0x05d8 (Arabic_zah) */ - { .altcode = "" }, /* 0x05d9 (Arabic_ain) */ - { .altcode = "" }, /* 0x05da (Arabic_ghain) */ - { .altcode = "" }, /* 0x05db */ - { .altcode = "" }, /* 0x05dc */ - { .altcode = "" }, /* 0x05dd */ - { .altcode = "" }, /* 0x05de */ - { .altcode = "" }, /* 0x05df */ - { .altcode = "" }, /* 0x05e0 (Arabic_tatweel) */ - { .altcode = "" }, /* 0x05e1 (Arabic_feh) */ - { .altcode = "" }, /* 0x05e2 (Arabic_qaf) */ - { .altcode = "" }, /* 0x05e3 (Arabic_kaf) */ - { .altcode = "" }, /* 0x05e4 (Arabic_lam) */ - { .altcode = "" }, /* 0x05e5 (Arabic_meem) */ - { .altcode = "" }, /* 0x05e6 (Arabic_noon) */ - { .altcode = "" }, /* 0x05e7 (Arabic_heh) */ - { .altcode = "" }, /* 0x05e8 (Arabic_waw) */ - { .altcode = "" }, /* 0x05e9 (Arabic_alefmaksura) */ - { .altcode = "" }, /* 0x05ea (Arabic_yeh) */ - { .altcode = "" }, /* 0x05eb (Arabic_fathatan) */ - { .altcode = "" }, /* 0x05ec (Arabic_dammatan) */ - { .altcode = "" }, /* 0x05ed (Arabic_kasratan) */ - { .altcode = "" }, /* 0x05ee (Arabic_fatha) */ - { .altcode = "" }, /* 0x05ef (Arabic_damma) */ - { .altcode = "" }, /* 0x05f0 (Arabic_kasra) */ - { .altcode = "" }, /* 0x05f1 (Arabic_shadda) */ - { .altcode = "" }, /* 0x05f2 (Arabic_sukun) */ - { .altcode = "" }, /* 0x05f3 */ - { .altcode = "" }, /* 0x05f4 */ - { .altcode = "" }, /* 0x05f5 */ - { .altcode = "" }, /* 0x05f6 */ - { .altcode = "" }, /* 0x05f7 */ - { .altcode = "" }, /* 0x05f8 */ - { .altcode = "" }, /* 0x05f9 */ - { .altcode = "" }, /* 0x05fa */ - { .altcode = "" }, /* 0x05fb */ - { .altcode = "" }, /* 0x05fc */ - { .altcode = "" }, /* 0x05fd */ - { .altcode = "" }, /* 0x05fe */ - { .altcode = "" }, /* 0x05ff */ + { .altcode = NULL }, /* 0x0500 */ + { .altcode = NULL }, /* 0x0501 */ + { .altcode = NULL }, /* 0x0502 */ + { .altcode = NULL }, /* 0x0503 */ + { .altcode = NULL }, /* 0x0504 */ + { .altcode = NULL }, /* 0x0505 */ + { .altcode = NULL }, /* 0x0506 */ + { .altcode = NULL }, /* 0x0507 */ + { .altcode = NULL }, /* 0x0508 */ + { .altcode = NULL }, /* 0x0509 */ + { .altcode = NULL }, /* 0x050a */ + { .altcode = NULL }, /* 0x050b */ + { .altcode = NULL }, /* 0x050c */ + { .altcode = NULL }, /* 0x050d */ + { .altcode = NULL }, /* 0x050e */ + { .altcode = NULL }, /* 0x050f */ + { .altcode = NULL }, /* 0x0510 */ + { .altcode = NULL }, /* 0x0511 */ + { .altcode = NULL }, /* 0x0512 */ + { .altcode = NULL }, /* 0x0513 */ + { .altcode = NULL }, /* 0x0514 */ + { .altcode = NULL }, /* 0x0515 */ + { .altcode = NULL }, /* 0x0516 */ + { .altcode = NULL }, /* 0x0517 */ + { .altcode = NULL }, /* 0x0518 */ + { .altcode = NULL }, /* 0x0519 */ + { .altcode = NULL }, /* 0x051a */ + { .altcode = NULL }, /* 0x051b */ + { .altcode = NULL }, /* 0x051c */ + { .altcode = NULL }, /* 0x051d */ + { .altcode = NULL }, /* 0x051e */ + { .altcode = NULL }, /* 0x051f */ + { .altcode = NULL }, /* 0x0520 */ + { .altcode = NULL }, /* 0x0521 */ + { .altcode = NULL }, /* 0x0522 */ + { .altcode = NULL }, /* 0x0523 */ + { .altcode = NULL }, /* 0x0524 */ + { .altcode = NULL }, /* 0x0525 */ + { .altcode = NULL }, /* 0x0526 */ + { .altcode = NULL }, /* 0x0527 */ + { .altcode = NULL }, /* 0x0528 */ + { .altcode = NULL }, /* 0x0529 */ + { .altcode = NULL }, /* 0x052a */ + { .altcode = NULL }, /* 0x052b */ + { .altcode = NULL }, /* 0x052c */ + { .altcode = NULL }, /* 0x052d */ + { .altcode = NULL }, /* 0x052e */ + { .altcode = NULL }, /* 0x052f */ + { .altcode = NULL }, /* 0x0530 */ + { .altcode = NULL }, /* 0x0531 */ + { .altcode = NULL }, /* 0x0532 */ + { .altcode = NULL }, /* 0x0533 */ + { .altcode = NULL }, /* 0x0534 */ + { .altcode = NULL }, /* 0x0535 */ + { .altcode = NULL }, /* 0x0536 */ + { .altcode = NULL }, /* 0x0537 */ + { .altcode = NULL }, /* 0x0538 */ + { .altcode = NULL }, /* 0x0539 */ + { .altcode = NULL }, /* 0x053a */ + { .altcode = NULL }, /* 0x053b */ + { .altcode = NULL }, /* 0x053c */ + { .altcode = NULL }, /* 0x053d */ + { .altcode = NULL }, /* 0x053e */ + { .altcode = NULL }, /* 0x053f */ + { .altcode = NULL }, /* 0x0540 */ + { .altcode = NULL }, /* 0x0541 */ + { .altcode = NULL }, /* 0x0542 */ + { .altcode = NULL }, /* 0x0543 */ + { .altcode = NULL }, /* 0x0544 */ + { .altcode = NULL }, /* 0x0545 */ + { .altcode = NULL }, /* 0x0546 */ + { .altcode = NULL }, /* 0x0547 */ + { .altcode = NULL }, /* 0x0548 */ + { .altcode = NULL }, /* 0x0549 */ + { .altcode = NULL }, /* 0x054a */ + { .altcode = NULL }, /* 0x054b */ + { .altcode = NULL }, /* 0x054c */ + { .altcode = NULL }, /* 0x054d */ + { .altcode = NULL }, /* 0x054e */ + { .altcode = NULL }, /* 0x054f */ + { .altcode = NULL }, /* 0x0550 */ + { .altcode = NULL }, /* 0x0551 */ + { .altcode = NULL }, /* 0x0552 */ + { .altcode = NULL }, /* 0x0553 */ + { .altcode = NULL }, /* 0x0554 */ + { .altcode = NULL }, /* 0x0555 */ + { .altcode = NULL }, /* 0x0556 */ + { .altcode = NULL }, /* 0x0557 */ + { .altcode = NULL }, /* 0x0558 */ + { .altcode = NULL }, /* 0x0559 */ + { .altcode = NULL }, /* 0x055a */ + { .altcode = NULL }, /* 0x055b */ + { .altcode = NULL }, /* 0x055c */ + { .altcode = NULL }, /* 0x055d */ + { .altcode = NULL }, /* 0x055e */ + { .altcode = NULL }, /* 0x055f */ + { .altcode = NULL }, /* 0x0560 */ + { .altcode = NULL }, /* 0x0561 */ + { .altcode = NULL }, /* 0x0562 */ + { .altcode = NULL }, /* 0x0563 */ + { .altcode = NULL }, /* 0x0564 */ + { .altcode = NULL }, /* 0x0565 */ + { .altcode = NULL }, /* 0x0566 */ + { .altcode = NULL }, /* 0x0567 */ + { .altcode = NULL }, /* 0x0568 */ + { .altcode = NULL }, /* 0x0569 */ + { .altcode = NULL }, /* 0x056a */ + { .altcode = NULL }, /* 0x056b */ + { .altcode = NULL }, /* 0x056c */ + { .altcode = NULL }, /* 0x056d */ + { .altcode = NULL }, /* 0x056e */ + { .altcode = NULL }, /* 0x056f */ + { .altcode = NULL }, /* 0x0570 */ + { .altcode = NULL }, /* 0x0571 */ + { .altcode = NULL }, /* 0x0572 */ + { .altcode = NULL }, /* 0x0573 */ + { .altcode = NULL }, /* 0x0574 */ + { .altcode = NULL }, /* 0x0575 */ + { .altcode = NULL }, /* 0x0576 */ + { .altcode = NULL }, /* 0x0577 */ + { .altcode = NULL }, /* 0x0578 */ + { .altcode = NULL }, /* 0x0579 */ + { .altcode = NULL }, /* 0x057a */ + { .altcode = NULL }, /* 0x057b */ + { .altcode = NULL }, /* 0x057c */ + { .altcode = NULL }, /* 0x057d */ + { .altcode = NULL }, /* 0x057e */ + { .altcode = NULL }, /* 0x057f */ + { .altcode = NULL }, /* 0x0580 */ + { .altcode = NULL }, /* 0x0581 */ + { .altcode = NULL }, /* 0x0582 */ + { .altcode = NULL }, /* 0x0583 */ + { .altcode = NULL }, /* 0x0584 */ + { .altcode = NULL }, /* 0x0585 */ + { .altcode = NULL }, /* 0x0586 */ + { .altcode = NULL }, /* 0x0587 */ + { .altcode = NULL }, /* 0x0588 */ + { .altcode = NULL }, /* 0x0589 */ + { .altcode = NULL }, /* 0x058a */ + { .altcode = NULL }, /* 0x058b */ + { .altcode = NULL }, /* 0x058c */ + { .altcode = NULL }, /* 0x058d */ + { .altcode = NULL }, /* 0x058e */ + { .altcode = NULL }, /* 0x058f */ + { .altcode = NULL }, /* 0x0590 */ + { .altcode = NULL }, /* 0x0591 */ + { .altcode = NULL }, /* 0x0592 */ + { .altcode = NULL }, /* 0x0593 */ + { .altcode = NULL }, /* 0x0594 */ + { .altcode = NULL }, /* 0x0595 */ + { .altcode = NULL }, /* 0x0596 */ + { .altcode = NULL }, /* 0x0597 */ + { .altcode = NULL }, /* 0x0598 */ + { .altcode = NULL }, /* 0x0599 */ + { .altcode = NULL }, /* 0x059a */ + { .altcode = NULL }, /* 0x059b */ + { .altcode = NULL }, /* 0x059c */ + { .altcode = NULL }, /* 0x059d */ + { .altcode = NULL }, /* 0x059e */ + { .altcode = NULL }, /* 0x059f */ + { .altcode = NULL }, /* 0x05a0 */ + { .altcode = NULL }, /* 0x05a1 */ + { .altcode = NULL }, /* 0x05a2 */ + { .altcode = NULL }, /* 0x05a3 */ + { .altcode = NULL }, /* 0x05a4 */ + { .altcode = NULL }, /* 0x05a5 */ + { .altcode = NULL }, /* 0x05a6 */ + { .altcode = NULL }, /* 0x05a7 */ + { .altcode = NULL }, /* 0x05a8 */ + { .altcode = NULL }, /* 0x05a9 */ + { .altcode = NULL }, /* 0x05aa */ + { .altcode = NULL }, /* 0x05ab */ + { .altcode = NULL }, /* 0x05ac (Arabic_comma) */ + { .altcode = NULL }, /* 0x05ad */ + { .altcode = NULL }, /* 0x05ae */ + { .altcode = NULL }, /* 0x05af */ + { .altcode = NULL }, /* 0x05b0 */ + { .altcode = NULL }, /* 0x05b1 */ + { .altcode = NULL }, /* 0x05b2 */ + { .altcode = NULL }, /* 0x05b3 */ + { .altcode = NULL }, /* 0x05b4 */ + { .altcode = NULL }, /* 0x05b5 */ + { .altcode = NULL }, /* 0x05b6 */ + { .altcode = NULL }, /* 0x05b7 */ + { .altcode = NULL }, /* 0x05b8 */ + { .altcode = NULL }, /* 0x05b9 */ + { .altcode = NULL }, /* 0x05ba */ + { .altcode = NULL }, /* 0x05bb (Arabic_semicolon) */ + { .altcode = NULL }, /* 0x05bc */ + { .altcode = NULL }, /* 0x05bd */ + { .altcode = NULL }, /* 0x05be */ + { .altcode = NULL }, /* 0x05bf (Arabic_question_mark) */ + { .altcode = NULL }, /* 0x05c0 */ + { .altcode = NULL }, /* 0x05c1 (Arabic_hamza) */ + { .altcode = NULL }, /* 0x05c2 (Arabic_maddaonalef) */ + { .altcode = NULL }, /* 0x05c3 (Arabic_hamzaonalef) */ + { .altcode = NULL }, /* 0x05c4 (Arabic_hamzaonwaw) */ + { .altcode = NULL }, /* 0x05c5 (Arabic_hamzaunderalef) */ + { .altcode = NULL }, /* 0x05c6 (Arabic_hamzaonyeh) */ + { .altcode = NULL }, /* 0x05c7 (Arabic_alef) */ + { .altcode = NULL }, /* 0x05c8 (Arabic_beh) */ + { .altcode = NULL }, /* 0x05c9 (Arabic_tehmarbuta) */ + { .altcode = NULL }, /* 0x05ca (Arabic_teh) */ + { .altcode = NULL }, /* 0x05cb (Arabic_theh) */ + { .altcode = NULL }, /* 0x05cc (Arabic_jeem) */ + { .altcode = NULL }, /* 0x05cd (Arabic_hah) */ + { .altcode = NULL }, /* 0x05ce (Arabic_khah) */ + { .altcode = NULL }, /* 0x05cf (Arabic_dal) */ + { .altcode = NULL }, /* 0x05d0 (Arabic_thal) */ + { .altcode = NULL }, /* 0x05d1 (Arabic_ra) */ + { .altcode = NULL }, /* 0x05d2 (Arabic_zain) */ + { .altcode = NULL }, /* 0x05d3 (Arabic_seen) */ + { .altcode = NULL }, /* 0x05d4 (Arabic_sheen) */ + { .altcode = NULL }, /* 0x05d5 (Arabic_sad) */ + { .altcode = NULL }, /* 0x05d6 (Arabic_dad) */ + { .altcode = NULL }, /* 0x05d7 (Arabic_tah) */ + { .altcode = NULL }, /* 0x05d8 (Arabic_zah) */ + { .altcode = NULL }, /* 0x05d9 (Arabic_ain) */ + { .altcode = NULL }, /* 0x05da (Arabic_ghain) */ + { .altcode = NULL }, /* 0x05db */ + { .altcode = NULL }, /* 0x05dc */ + { .altcode = NULL }, /* 0x05dd */ + { .altcode = NULL }, /* 0x05de */ + { .altcode = NULL }, /* 0x05df */ + { .altcode = NULL }, /* 0x05e0 (Arabic_tatweel) */ + { .altcode = NULL }, /* 0x05e1 (Arabic_feh) */ + { .altcode = NULL }, /* 0x05e2 (Arabic_qaf) */ + { .altcode = NULL }, /* 0x05e3 (Arabic_kaf) */ + { .altcode = NULL }, /* 0x05e4 (Arabic_lam) */ + { .altcode = NULL }, /* 0x05e5 (Arabic_meem) */ + { .altcode = NULL }, /* 0x05e6 (Arabic_noon) */ + { .altcode = NULL }, /* 0x05e7 (Arabic_heh) */ + { .altcode = NULL }, /* 0x05e8 (Arabic_waw) */ + { .altcode = NULL }, /* 0x05e9 (Arabic_alefmaksura) */ + { .altcode = NULL }, /* 0x05ea (Arabic_yeh) */ + { .altcode = NULL }, /* 0x05eb (Arabic_fathatan) */ + { .altcode = NULL }, /* 0x05ec (Arabic_dammatan) */ + { .altcode = NULL }, /* 0x05ed (Arabic_kasratan) */ + { .altcode = NULL }, /* 0x05ee (Arabic_fatha) */ + { .altcode = NULL }, /* 0x05ef (Arabic_damma) */ + { .altcode = NULL }, /* 0x05f0 (Arabic_kasra) */ + { .altcode = NULL }, /* 0x05f1 (Arabic_shadda) */ + { .altcode = NULL }, /* 0x05f2 (Arabic_sukun) */ + { .altcode = NULL }, /* 0x05f3 */ + { .altcode = NULL }, /* 0x05f4 */ + { .altcode = NULL }, /* 0x05f5 */ + { .altcode = NULL }, /* 0x05f6 */ + { .altcode = NULL }, /* 0x05f7 */ + { .altcode = NULL }, /* 0x05f8 */ + { .altcode = NULL }, /* 0x05f9 */ + { .altcode = NULL }, /* 0x05fa */ + { .altcode = NULL }, /* 0x05fb */ + { .altcode = NULL }, /* 0x05fc */ + { .altcode = NULL }, /* 0x05fd */ + { .altcode = NULL }, /* 0x05fe */ + { .altcode = NULL }, /* 0x05ff */ }, { /* 0x06?? */ - { .altcode = "" }, /* 0x0600 */ - { .altcode = "" }, /* 0x0601 */ - { .altcode = "" }, /* 0x0602 */ - { .altcode = "" }, /* 0x0603 */ - { .altcode = "" }, /* 0x0604 */ - { .altcode = "" }, /* 0x0605 */ - { .altcode = "" }, /* 0x0606 */ - { .altcode = "" }, /* 0x0607 */ - { .altcode = "" }, /* 0x0608 */ - { .altcode = "" }, /* 0x0609 */ - { .altcode = "" }, /* 0x060a */ - { .altcode = "" }, /* 0x060b */ - { .altcode = "" }, /* 0x060c */ - { .altcode = "" }, /* 0x060d */ - { .altcode = "" }, /* 0x060e */ - { .altcode = "" }, /* 0x060f */ - { .altcode = "" }, /* 0x0610 */ - { .altcode = "" }, /* 0x0611 */ - { .altcode = "" }, /* 0x0612 */ - { .altcode = "" }, /* 0x0613 */ - { .altcode = "" }, /* 0x0614 */ - { .altcode = "" }, /* 0x0615 */ - { .altcode = "" }, /* 0x0616 */ - { .altcode = "" }, /* 0x0617 */ - { .altcode = "" }, /* 0x0618 */ - { .altcode = "" }, /* 0x0619 */ - { .altcode = "" }, /* 0x061a */ - { .altcode = "" }, /* 0x061b */ - { .altcode = "" }, /* 0x061c */ - { .altcode = "" }, /* 0x061d */ - { .altcode = "" }, /* 0x061e */ - { .altcode = "" }, /* 0x061f */ - { .altcode = "" }, /* 0x0620 */ - { .altcode = "" }, /* 0x0621 */ - { .altcode = "" }, /* 0x0622 */ - { .altcode = "" }, /* 0x0623 */ - { .altcode = "" }, /* 0x0624 */ - { .altcode = "" }, /* 0x0625 */ - { .altcode = "" }, /* 0x0626 */ - { .altcode = "" }, /* 0x0627 */ - { .altcode = "" }, /* 0x0628 */ - { .altcode = "" }, /* 0x0629 */ - { .altcode = "" }, /* 0x062a */ - { .altcode = "" }, /* 0x062b */ - { .altcode = "" }, /* 0x062c */ - { .altcode = "" }, /* 0x062d */ - { .altcode = "" }, /* 0x062e */ - { .altcode = "" }, /* 0x062f */ - { .altcode = "" }, /* 0x0630 */ - { .altcode = "" }, /* 0x0631 */ - { .altcode = "" }, /* 0x0632 */ - { .altcode = "" }, /* 0x0633 */ - { .altcode = "" }, /* 0x0634 */ - { .altcode = "" }, /* 0x0635 */ - { .altcode = "" }, /* 0x0636 */ - { .altcode = "" }, /* 0x0637 */ - { .altcode = "" }, /* 0x0638 */ - { .altcode = "" }, /* 0x0639 */ - { .altcode = "" }, /* 0x063a */ - { .altcode = "" }, /* 0x063b */ - { .altcode = "" }, /* 0x063c */ - { .altcode = "" }, /* 0x063d */ - { .altcode = "" }, /* 0x063e */ - { .altcode = "" }, /* 0x063f */ - { .altcode = "" }, /* 0x0640 */ - { .altcode = "" }, /* 0x0641 */ - { .altcode = "" }, /* 0x0642 */ - { .altcode = "" }, /* 0x0643 */ - { .altcode = "" }, /* 0x0644 */ - { .altcode = "" }, /* 0x0645 */ - { .altcode = "" }, /* 0x0646 */ - { .altcode = "" }, /* 0x0647 */ - { .altcode = "" }, /* 0x0648 */ - { .altcode = "" }, /* 0x0649 */ - { .altcode = "" }, /* 0x064a */ - { .altcode = "" }, /* 0x064b */ - { .altcode = "" }, /* 0x064c */ - { .altcode = "" }, /* 0x064d */ - { .altcode = "" }, /* 0x064e */ - { .altcode = "" }, /* 0x064f */ - { .altcode = "" }, /* 0x0650 */ - { .altcode = "" }, /* 0x0651 */ - { .altcode = "" }, /* 0x0652 */ - { .altcode = "" }, /* 0x0653 */ - { .altcode = "" }, /* 0x0654 */ - { .altcode = "" }, /* 0x0655 */ - { .altcode = "" }, /* 0x0656 */ - { .altcode = "" }, /* 0x0657 */ - { .altcode = "" }, /* 0x0658 */ - { .altcode = "" }, /* 0x0659 */ - { .altcode = "" }, /* 0x065a */ - { .altcode = "" }, /* 0x065b */ - { .altcode = "" }, /* 0x065c */ - { .altcode = "" }, /* 0x065d */ - { .altcode = "" }, /* 0x065e */ - { .altcode = "" }, /* 0x065f */ - { .altcode = "" }, /* 0x0660 */ - { .altcode = "" }, /* 0x0661 */ - { .altcode = "" }, /* 0x0662 */ - { .altcode = "" }, /* 0x0663 */ - { .altcode = "" }, /* 0x0664 */ - { .altcode = "" }, /* 0x0665 */ - { .altcode = "" }, /* 0x0666 */ - { .altcode = "" }, /* 0x0667 */ - { .altcode = "" }, /* 0x0668 */ - { .altcode = "" }, /* 0x0669 */ - { .altcode = "" }, /* 0x066a */ - { .altcode = "" }, /* 0x066b */ - { .altcode = "" }, /* 0x066c */ - { .altcode = "" }, /* 0x066d */ - { .altcode = "" }, /* 0x066e */ - { .altcode = "" }, /* 0x066f */ - { .altcode = "" }, /* 0x0670 */ - { .altcode = "" }, /* 0x0671 */ - { .altcode = "" }, /* 0x0672 */ - { .altcode = "" }, /* 0x0673 */ - { .altcode = "" }, /* 0x0674 */ - { .altcode = "" }, /* 0x0675 */ - { .altcode = "" }, /* 0x0676 */ - { .altcode = "" }, /* 0x0677 */ - { .altcode = "" }, /* 0x0678 */ - { .altcode = "" }, /* 0x0679 */ - { .altcode = "" }, /* 0x067a */ - { .altcode = "" }, /* 0x067b */ - { .altcode = "" }, /* 0x067c */ - { .altcode = "" }, /* 0x067d */ - { .altcode = "" }, /* 0x067e */ - { .altcode = "" }, /* 0x067f */ - { .altcode = "" }, /* 0x0680 */ - { .altcode = "" }, /* 0x0681 */ - { .altcode = "" }, /* 0x0682 */ - { .altcode = "" }, /* 0x0683 */ - { .altcode = "" }, /* 0x0684 */ - { .altcode = "" }, /* 0x0685 */ - { .altcode = "" }, /* 0x0686 */ - { .altcode = "" }, /* 0x0687 */ - { .altcode = "" }, /* 0x0688 */ - { .altcode = "" }, /* 0x0689 */ - { .altcode = "" }, /* 0x068a */ - { .altcode = "" }, /* 0x068b */ - { .altcode = "" }, /* 0x068c */ - { .altcode = "" }, /* 0x068d */ - { .altcode = "" }, /* 0x068e */ - { .altcode = "" }, /* 0x068f */ - { .altcode = "" }, /* 0x0690 */ - { .altcode = "" }, /* 0x0691 */ - { .altcode = "" }, /* 0x0692 */ - { .altcode = "" }, /* 0x0693 */ - { .altcode = "" }, /* 0x0694 */ - { .altcode = "" }, /* 0x0695 */ - { .altcode = "" }, /* 0x0696 */ - { .altcode = "" }, /* 0x0697 */ - { .altcode = "" }, /* 0x0698 */ - { .altcode = "" }, /* 0x0699 */ - { .altcode = "" }, /* 0x069a */ - { .altcode = "" }, /* 0x069b */ - { .altcode = "" }, /* 0x069c */ - { .altcode = "" }, /* 0x069d */ - { .altcode = "" }, /* 0x069e */ - { .altcode = "" }, /* 0x069f */ - { .altcode = "" }, /* 0x06a0 */ - { .altcode = "" }, /* 0x06a1 (Serbian_dje) */ - { .altcode = "" }, /* 0x06a2 (Macedonia_gje) */ - { .altcode = "" }, /* 0x06a3 (Cyrillic_io) */ - { .altcode = "" }, /* 0x06a4 (Ukranian_je) */ - { .altcode = "" }, /* 0x06a5 (Macedonia_dse) */ - { .altcode = "" }, /* 0x06a6 (Ukranian_i) */ - { .altcode = "" }, /* 0x06a7 (Ukranian_yi) */ - { .altcode = "" }, /* 0x06a8 (Serbian_je) */ - { .altcode = "" }, /* 0x06a9 (Serbian_lje) */ - { .altcode = "" }, /* 0x06aa (Serbian_nje) */ - { .altcode = "" }, /* 0x06ab (Serbian_tshe) */ - { .altcode = "" }, /* 0x06ac (Macedonia_kje) */ - { .altcode = "" }, /* 0x06ad (Ukrainian_ghe_with_upturn) */ - { .altcode = "" }, /* 0x06ae (Byelorussian_shortu) */ - { .altcode = "" }, /* 0x06af (Serbian_dze) */ - { .altcode = "" }, /* 0x06b0 (numerosign) */ - { .altcode = "" }, /* 0x06b1 (Serbian_DJE) */ - { .altcode = "" }, /* 0x06b2 (Macedonia_GJE) */ - { .altcode = "" }, /* 0x06b3 (Cyrillic_IO) */ - { .altcode = "" }, /* 0x06b4 (Ukranian_JE) */ - { .altcode = "" }, /* 0x06b5 (Macedonia_DSE) */ - { .altcode = "" }, /* 0x06b6 (Ukranian_I) */ - { .altcode = "" }, /* 0x06b7 (Ukranian_YI) */ - { .altcode = "" }, /* 0x06b8 (Serbian_JE) */ - { .altcode = "" }, /* 0x06b9 (Serbian_LJE) */ - { .altcode = "" }, /* 0x06ba (Serbian_NJE) */ - { .altcode = "" }, /* 0x06bb (Serbian_TSHE) */ - { .altcode = "" }, /* 0x06bc (Macedonia_KJE) */ - { .altcode = "" }, /* 0x06bd (Ukrainian_GHE_WITH_UPTURN) */ - { .altcode = "" }, /* 0x06be (Byelorussian_SHORTU) */ - { .altcode = "" }, /* 0x06bf (Serbian_DZE) */ - { .altcode = "" }, /* 0x06c0 (Cyrillic_yu) */ - { .altcode = "" }, /* 0x06c1 (Cyrillic_a) */ - { .altcode = "" }, /* 0x06c2 (Cyrillic_be) */ - { .altcode = "" }, /* 0x06c3 (Cyrillic_tse) */ - { .altcode = "" }, /* 0x06c4 (Cyrillic_de) */ - { .altcode = "" }, /* 0x06c5 (Cyrillic_ie) */ - { .altcode = "" }, /* 0x06c6 (Cyrillic_ef) */ - { .altcode = "" }, /* 0x06c7 (Cyrillic_ghe) */ - { .altcode = "" }, /* 0x06c8 (Cyrillic_ha) */ - { .altcode = "" }, /* 0x06c9 (Cyrillic_i) */ - { .altcode = "" }, /* 0x06ca (Cyrillic_shorti) */ - { .altcode = "" }, /* 0x06cb (Cyrillic_ka) */ - { .altcode = "" }, /* 0x06cc (Cyrillic_el) */ - { .altcode = "" }, /* 0x06cd (Cyrillic_em) */ - { .altcode = "" }, /* 0x06ce (Cyrillic_en) */ - { .altcode = "" }, /* 0x06cf (Cyrillic_o) */ - { .altcode = "" }, /* 0x06d0 (Cyrillic_pe) */ - { .altcode = "" }, /* 0x06d1 (Cyrillic_ya) */ - { .altcode = "" }, /* 0x06d2 (Cyrillic_er) */ - { .altcode = "" }, /* 0x06d3 (Cyrillic_es) */ - { .altcode = "" }, /* 0x06d4 (Cyrillic_te) */ - { .altcode = "" }, /* 0x06d5 (Cyrillic_u) */ - { .altcode = "" }, /* 0x06d6 (Cyrillic_zhe) */ - { .altcode = "" }, /* 0x06d7 (Cyrillic_ve) */ - { .altcode = "" }, /* 0x06d8 (Cyrillic_softsign) */ - { .altcode = "" }, /* 0x06d9 (Cyrillic_yeru) */ - { .altcode = "" }, /* 0x06da (Cyrillic_ze) */ - { .altcode = "" }, /* 0x06db (Cyrillic_sha) */ - { .altcode = "" }, /* 0x06dc (Cyrillic_e) */ - { .altcode = "" }, /* 0x06dd (Cyrillic_shcha) */ - { .altcode = "" }, /* 0x06de (Cyrillic_che) */ - { .altcode = "" }, /* 0x06df (Cyrillic_hardsign) */ - { .altcode = "" }, /* 0x06e0 (Cyrillic_YU) */ - { .altcode = "" }, /* 0x06e1 (Cyrillic_A) */ - { .altcode = "" }, /* 0x06e2 (Cyrillic_BE) */ - { .altcode = "" }, /* 0x06e3 (Cyrillic_TSE) */ - { .altcode = "" }, /* 0x06e4 (Cyrillic_DE) */ - { .altcode = "" }, /* 0x06e5 (Cyrillic_IE) */ - { .altcode = "" }, /* 0x06e6 (Cyrillic_EF) */ - { .altcode = "" }, /* 0x06e7 (Cyrillic_GHE) */ - { .altcode = "" }, /* 0x06e8 (Cyrillic_HA) */ - { .altcode = "" }, /* 0x06e9 (Cyrillic_I) */ - { .altcode = "" }, /* 0x06ea (Cyrillic_SHORTI) */ - { .altcode = "" }, /* 0x06eb (Cyrillic_KA) */ - { .altcode = "" }, /* 0x06ec (Cyrillic_EL) */ - { .altcode = "" }, /* 0x06ed (Cyrillic_EM) */ - { .altcode = "" }, /* 0x06ee (Cyrillic_EN) */ - { .altcode = "" }, /* 0x06ef (Cyrillic_O) */ - { .altcode = "" }, /* 0x06f0 (Cyrillic_PE) */ - { .altcode = "" }, /* 0x06f1 (Cyrillic_YA) */ - { .altcode = "" }, /* 0x06f2 (Cyrillic_ER) */ - { .altcode = "" }, /* 0x06f3 (Cyrillic_ES) */ - { .altcode = "" }, /* 0x06f4 (Cyrillic_TE) */ - { .altcode = "" }, /* 0x06f5 (Cyrillic_U) */ - { .altcode = "" }, /* 0x06f6 (Cyrillic_ZHE) */ - { .altcode = "" }, /* 0x06f7 (Cyrillic_VE) */ - { .altcode = "" }, /* 0x06f8 (Cyrillic_SOFTSIGN) */ - { .altcode = "" }, /* 0x06f9 (Cyrillic_YERU) */ - { .altcode = "" }, /* 0x06fa (Cyrillic_ZE) */ - { .altcode = "" }, /* 0x06fb (Cyrillic_SHA) */ - { .altcode = "" }, /* 0x06fc (Cyrillic_E) */ - { .altcode = "" }, /* 0x06fd (Cyrillic_SHCHA) */ - { .altcode = "" }, /* 0x06fe (Cyrillic_CHE) */ - { .altcode = "" }, /* 0x06ff (Cyrillic_HARDSIGN) */ + { .altcode = NULL }, /* 0x0600 */ + { .altcode = NULL }, /* 0x0601 */ + { .altcode = NULL }, /* 0x0602 */ + { .altcode = NULL }, /* 0x0603 */ + { .altcode = NULL }, /* 0x0604 */ + { .altcode = NULL }, /* 0x0605 */ + { .altcode = NULL }, /* 0x0606 */ + { .altcode = NULL }, /* 0x0607 */ + { .altcode = NULL }, /* 0x0608 */ + { .altcode = NULL }, /* 0x0609 */ + { .altcode = NULL }, /* 0x060a */ + { .altcode = NULL }, /* 0x060b */ + { .altcode = NULL }, /* 0x060c */ + { .altcode = NULL }, /* 0x060d */ + { .altcode = NULL }, /* 0x060e */ + { .altcode = NULL }, /* 0x060f */ + { .altcode = NULL }, /* 0x0610 */ + { .altcode = NULL }, /* 0x0611 */ + { .altcode = NULL }, /* 0x0612 */ + { .altcode = NULL }, /* 0x0613 */ + { .altcode = NULL }, /* 0x0614 */ + { .altcode = NULL }, /* 0x0615 */ + { .altcode = NULL }, /* 0x0616 */ + { .altcode = NULL }, /* 0x0617 */ + { .altcode = NULL }, /* 0x0618 */ + { .altcode = NULL }, /* 0x0619 */ + { .altcode = NULL }, /* 0x061a */ + { .altcode = NULL }, /* 0x061b */ + { .altcode = NULL }, /* 0x061c */ + { .altcode = NULL }, /* 0x061d */ + { .altcode = NULL }, /* 0x061e */ + { .altcode = NULL }, /* 0x061f */ + { .altcode = NULL }, /* 0x0620 */ + { .altcode = NULL }, /* 0x0621 */ + { .altcode = NULL }, /* 0x0622 */ + { .altcode = NULL }, /* 0x0623 */ + { .altcode = NULL }, /* 0x0624 */ + { .altcode = NULL }, /* 0x0625 */ + { .altcode = NULL }, /* 0x0626 */ + { .altcode = NULL }, /* 0x0627 */ + { .altcode = NULL }, /* 0x0628 */ + { .altcode = NULL }, /* 0x0629 */ + { .altcode = NULL }, /* 0x062a */ + { .altcode = NULL }, /* 0x062b */ + { .altcode = NULL }, /* 0x062c */ + { .altcode = NULL }, /* 0x062d */ + { .altcode = NULL }, /* 0x062e */ + { .altcode = NULL }, /* 0x062f */ + { .altcode = NULL }, /* 0x0630 */ + { .altcode = NULL }, /* 0x0631 */ + { .altcode = NULL }, /* 0x0632 */ + { .altcode = NULL }, /* 0x0633 */ + { .altcode = NULL }, /* 0x0634 */ + { .altcode = NULL }, /* 0x0635 */ + { .altcode = NULL }, /* 0x0636 */ + { .altcode = NULL }, /* 0x0637 */ + { .altcode = NULL }, /* 0x0638 */ + { .altcode = NULL }, /* 0x0639 */ + { .altcode = NULL }, /* 0x063a */ + { .altcode = NULL }, /* 0x063b */ + { .altcode = NULL }, /* 0x063c */ + { .altcode = NULL }, /* 0x063d */ + { .altcode = NULL }, /* 0x063e */ + { .altcode = NULL }, /* 0x063f */ + { .altcode = NULL }, /* 0x0640 */ + { .altcode = NULL }, /* 0x0641 */ + { .altcode = NULL }, /* 0x0642 */ + { .altcode = NULL }, /* 0x0643 */ + { .altcode = NULL }, /* 0x0644 */ + { .altcode = NULL }, /* 0x0645 */ + { .altcode = NULL }, /* 0x0646 */ + { .altcode = NULL }, /* 0x0647 */ + { .altcode = NULL }, /* 0x0648 */ + { .altcode = NULL }, /* 0x0649 */ + { .altcode = NULL }, /* 0x064a */ + { .altcode = NULL }, /* 0x064b */ + { .altcode = NULL }, /* 0x064c */ + { .altcode = NULL }, /* 0x064d */ + { .altcode = NULL }, /* 0x064e */ + { .altcode = NULL }, /* 0x064f */ + { .altcode = NULL }, /* 0x0650 */ + { .altcode = NULL }, /* 0x0651 */ + { .altcode = NULL }, /* 0x0652 */ + { .altcode = NULL }, /* 0x0653 */ + { .altcode = NULL }, /* 0x0654 */ + { .altcode = NULL }, /* 0x0655 */ + { .altcode = NULL }, /* 0x0656 */ + { .altcode = NULL }, /* 0x0657 */ + { .altcode = NULL }, /* 0x0658 */ + { .altcode = NULL }, /* 0x0659 */ + { .altcode = NULL }, /* 0x065a */ + { .altcode = NULL }, /* 0x065b */ + { .altcode = NULL }, /* 0x065c */ + { .altcode = NULL }, /* 0x065d */ + { .altcode = NULL }, /* 0x065e */ + { .altcode = NULL }, /* 0x065f */ + { .altcode = NULL }, /* 0x0660 */ + { .altcode = NULL }, /* 0x0661 */ + { .altcode = NULL }, /* 0x0662 */ + { .altcode = NULL }, /* 0x0663 */ + { .altcode = NULL }, /* 0x0664 */ + { .altcode = NULL }, /* 0x0665 */ + { .altcode = NULL }, /* 0x0666 */ + { .altcode = NULL }, /* 0x0667 */ + { .altcode = NULL }, /* 0x0668 */ + { .altcode = NULL }, /* 0x0669 */ + { .altcode = NULL }, /* 0x066a */ + { .altcode = NULL }, /* 0x066b */ + { .altcode = NULL }, /* 0x066c */ + { .altcode = NULL }, /* 0x066d */ + { .altcode = NULL }, /* 0x066e */ + { .altcode = NULL }, /* 0x066f */ + { .altcode = NULL }, /* 0x0670 */ + { .altcode = NULL }, /* 0x0671 */ + { .altcode = NULL }, /* 0x0672 */ + { .altcode = NULL }, /* 0x0673 */ + { .altcode = NULL }, /* 0x0674 */ + { .altcode = NULL }, /* 0x0675 */ + { .altcode = NULL }, /* 0x0676 */ + { .altcode = NULL }, /* 0x0677 */ + { .altcode = NULL }, /* 0x0678 */ + { .altcode = NULL }, /* 0x0679 */ + { .altcode = NULL }, /* 0x067a */ + { .altcode = NULL }, /* 0x067b */ + { .altcode = NULL }, /* 0x067c */ + { .altcode = NULL }, /* 0x067d */ + { .altcode = NULL }, /* 0x067e */ + { .altcode = NULL }, /* 0x067f */ + { .altcode = NULL }, /* 0x0680 */ + { .altcode = NULL }, /* 0x0681 */ + { .altcode = NULL }, /* 0x0682 */ + { .altcode = NULL }, /* 0x0683 */ + { .altcode = NULL }, /* 0x0684 */ + { .altcode = NULL }, /* 0x0685 */ + { .altcode = NULL }, /* 0x0686 */ + { .altcode = NULL }, /* 0x0687 */ + { .altcode = NULL }, /* 0x0688 */ + { .altcode = NULL }, /* 0x0689 */ + { .altcode = NULL }, /* 0x068a */ + { .altcode = NULL }, /* 0x068b */ + { .altcode = NULL }, /* 0x068c */ + { .altcode = NULL }, /* 0x068d */ + { .altcode = NULL }, /* 0x068e */ + { .altcode = NULL }, /* 0x068f */ + { .altcode = NULL }, /* 0x0690 */ + { .altcode = NULL }, /* 0x0691 */ + { .altcode = NULL }, /* 0x0692 */ + { .altcode = NULL }, /* 0x0693 */ + { .altcode = NULL }, /* 0x0694 */ + { .altcode = NULL }, /* 0x0695 */ + { .altcode = NULL }, /* 0x0696 */ + { .altcode = NULL }, /* 0x0697 */ + { .altcode = NULL }, /* 0x0698 */ + { .altcode = NULL }, /* 0x0699 */ + { .altcode = NULL }, /* 0x069a */ + { .altcode = NULL }, /* 0x069b */ + { .altcode = NULL }, /* 0x069c */ + { .altcode = NULL }, /* 0x069d */ + { .altcode = NULL }, /* 0x069e */ + { .altcode = NULL }, /* 0x069f */ + { .altcode = NULL }, /* 0x06a0 */ + { .altcode = NULL }, /* 0x06a1 (Serbian_dje) */ + { .altcode = NULL }, /* 0x06a2 (Macedonia_gje) */ + { .altcode = NULL }, /* 0x06a3 (Cyrillic_io) */ + { .altcode = NULL }, /* 0x06a4 (Ukranian_je) */ + { .altcode = NULL }, /* 0x06a5 (Macedonia_dse) */ + { .altcode = NULL }, /* 0x06a6 (Ukranian_i) */ + { .altcode = NULL }, /* 0x06a7 (Ukranian_yi) */ + { .altcode = NULL }, /* 0x06a8 (Serbian_je) */ + { .altcode = NULL }, /* 0x06a9 (Serbian_lje) */ + { .altcode = NULL }, /* 0x06aa (Serbian_nje) */ + { .altcode = NULL }, /* 0x06ab (Serbian_tshe) */ + { .altcode = NULL }, /* 0x06ac (Macedonia_kje) */ + { .altcode = NULL }, /* 0x06ad (Ukrainian_ghe_with_upturn) */ + { .altcode = NULL }, /* 0x06ae (Byelorussian_shortu) */ + { .altcode = NULL }, /* 0x06af (Serbian_dze) */ + { .altcode = NULL }, /* 0x06b0 (numerosign) */ + { .altcode = NULL }, /* 0x06b1 (Serbian_DJE) */ + { .altcode = NULL }, /* 0x06b2 (Macedonia_GJE) */ + { .altcode = NULL }, /* 0x06b3 (Cyrillic_IO) */ + { .altcode = NULL }, /* 0x06b4 (Ukranian_JE) */ + { .altcode = NULL }, /* 0x06b5 (Macedonia_DSE) */ + { .altcode = NULL }, /* 0x06b6 (Ukranian_I) */ + { .altcode = NULL }, /* 0x06b7 (Ukranian_YI) */ + { .altcode = NULL }, /* 0x06b8 (Serbian_JE) */ + { .altcode = NULL }, /* 0x06b9 (Serbian_LJE) */ + { .altcode = NULL }, /* 0x06ba (Serbian_NJE) */ + { .altcode = NULL }, /* 0x06bb (Serbian_TSHE) */ + { .altcode = NULL }, /* 0x06bc (Macedonia_KJE) */ + { .altcode = NULL }, /* 0x06bd (Ukrainian_GHE_WITH_UPTURN) */ + { .altcode = NULL }, /* 0x06be (Byelorussian_SHORTU) */ + { .altcode = NULL }, /* 0x06bf (Serbian_DZE) */ + { .altcode = NULL }, /* 0x06c0 (Cyrillic_yu) */ + { .altcode = NULL }, /* 0x06c1 (Cyrillic_a) */ + { .altcode = NULL }, /* 0x06c2 (Cyrillic_be) */ + { .altcode = NULL }, /* 0x06c3 (Cyrillic_tse) */ + { .altcode = NULL }, /* 0x06c4 (Cyrillic_de) */ + { .altcode = NULL }, /* 0x06c5 (Cyrillic_ie) */ + { .altcode = NULL }, /* 0x06c6 (Cyrillic_ef) */ + { .altcode = NULL }, /* 0x06c7 (Cyrillic_ghe) */ + { .altcode = NULL }, /* 0x06c8 (Cyrillic_ha) */ + { .altcode = NULL }, /* 0x06c9 (Cyrillic_i) */ + { .altcode = NULL }, /* 0x06ca (Cyrillic_shorti) */ + { .altcode = NULL }, /* 0x06cb (Cyrillic_ka) */ + { .altcode = NULL }, /* 0x06cc (Cyrillic_el) */ + { .altcode = NULL }, /* 0x06cd (Cyrillic_em) */ + { .altcode = NULL }, /* 0x06ce (Cyrillic_en) */ + { .altcode = NULL }, /* 0x06cf (Cyrillic_o) */ + { .altcode = NULL }, /* 0x06d0 (Cyrillic_pe) */ + { .altcode = NULL }, /* 0x06d1 (Cyrillic_ya) */ + { .altcode = NULL }, /* 0x06d2 (Cyrillic_er) */ + { .altcode = NULL }, /* 0x06d3 (Cyrillic_es) */ + { .altcode = NULL }, /* 0x06d4 (Cyrillic_te) */ + { .altcode = NULL }, /* 0x06d5 (Cyrillic_u) */ + { .altcode = NULL }, /* 0x06d6 (Cyrillic_zhe) */ + { .altcode = NULL }, /* 0x06d7 (Cyrillic_ve) */ + { .altcode = NULL }, /* 0x06d8 (Cyrillic_softsign) */ + { .altcode = NULL }, /* 0x06d9 (Cyrillic_yeru) */ + { .altcode = NULL }, /* 0x06da (Cyrillic_ze) */ + { .altcode = NULL }, /* 0x06db (Cyrillic_sha) */ + { .altcode = NULL }, /* 0x06dc (Cyrillic_e) */ + { .altcode = NULL }, /* 0x06dd (Cyrillic_shcha) */ + { .altcode = NULL }, /* 0x06de (Cyrillic_che) */ + { .altcode = NULL }, /* 0x06df (Cyrillic_hardsign) */ + { .altcode = NULL }, /* 0x06e0 (Cyrillic_YU) */ + { .altcode = NULL }, /* 0x06e1 (Cyrillic_A) */ + { .altcode = NULL }, /* 0x06e2 (Cyrillic_BE) */ + { .altcode = NULL }, /* 0x06e3 (Cyrillic_TSE) */ + { .altcode = NULL }, /* 0x06e4 (Cyrillic_DE) */ + { .altcode = NULL }, /* 0x06e5 (Cyrillic_IE) */ + { .altcode = NULL }, /* 0x06e6 (Cyrillic_EF) */ + { .altcode = NULL }, /* 0x06e7 (Cyrillic_GHE) */ + { .altcode = NULL }, /* 0x06e8 (Cyrillic_HA) */ + { .altcode = NULL }, /* 0x06e9 (Cyrillic_I) */ + { .altcode = NULL }, /* 0x06ea (Cyrillic_SHORTI) */ + { .altcode = NULL }, /* 0x06eb (Cyrillic_KA) */ + { .altcode = NULL }, /* 0x06ec (Cyrillic_EL) */ + { .altcode = NULL }, /* 0x06ed (Cyrillic_EM) */ + { .altcode = NULL }, /* 0x06ee (Cyrillic_EN) */ + { .altcode = NULL }, /* 0x06ef (Cyrillic_O) */ + { .altcode = NULL }, /* 0x06f0 (Cyrillic_PE) */ + { .altcode = NULL }, /* 0x06f1 (Cyrillic_YA) */ + { .altcode = NULL }, /* 0x06f2 (Cyrillic_ER) */ + { .altcode = NULL }, /* 0x06f3 (Cyrillic_ES) */ + { .altcode = NULL }, /* 0x06f4 (Cyrillic_TE) */ + { .altcode = NULL }, /* 0x06f5 (Cyrillic_U) */ + { .altcode = NULL }, /* 0x06f6 (Cyrillic_ZHE) */ + { .altcode = NULL }, /* 0x06f7 (Cyrillic_VE) */ + { .altcode = NULL }, /* 0x06f8 (Cyrillic_SOFTSIGN) */ + { .altcode = NULL }, /* 0x06f9 (Cyrillic_YERU) */ + { .altcode = NULL }, /* 0x06fa (Cyrillic_ZE) */ + { .altcode = NULL }, /* 0x06fb (Cyrillic_SHA) */ + { .altcode = NULL }, /* 0x06fc (Cyrillic_E) */ + { .altcode = NULL }, /* 0x06fd (Cyrillic_SHCHA) */ + { .altcode = NULL }, /* 0x06fe (Cyrillic_CHE) */ + { .altcode = NULL }, /* 0x06ff (Cyrillic_HARDSIGN) */ }, { /* 0x07?? */ - { .altcode = "" }, /* 0x0700 */ - { .altcode = "" }, /* 0x0701 */ - { .altcode = "" }, /* 0x0702 */ - { .altcode = "" }, /* 0x0703 */ - { .altcode = "" }, /* 0x0704 */ - { .altcode = "" }, /* 0x0705 */ - { .altcode = "" }, /* 0x0706 */ - { .altcode = "" }, /* 0x0707 */ - { .altcode = "" }, /* 0x0708 */ - { .altcode = "" }, /* 0x0709 */ - { .altcode = "" }, /* 0x070a */ - { .altcode = "" }, /* 0x070b */ - { .altcode = "" }, /* 0x070c */ - { .altcode = "" }, /* 0x070d */ - { .altcode = "" }, /* 0x070e */ - { .altcode = "" }, /* 0x070f */ - { .altcode = "" }, /* 0x0710 */ - { .altcode = "" }, /* 0x0711 */ - { .altcode = "" }, /* 0x0712 */ - { .altcode = "" }, /* 0x0713 */ - { .altcode = "" }, /* 0x0714 */ - { .altcode = "" }, /* 0x0715 */ - { .altcode = "" }, /* 0x0716 */ - { .altcode = "" }, /* 0x0717 */ - { .altcode = "" }, /* 0x0718 */ - { .altcode = "" }, /* 0x0719 */ - { .altcode = "" }, /* 0x071a */ - { .altcode = "" }, /* 0x071b */ - { .altcode = "" }, /* 0x071c */ - { .altcode = "" }, /* 0x071d */ - { .altcode = "" }, /* 0x071e */ - { .altcode = "" }, /* 0x071f */ - { .altcode = "" }, /* 0x0720 */ - { .altcode = "" }, /* 0x0721 */ - { .altcode = "" }, /* 0x0722 */ - { .altcode = "" }, /* 0x0723 */ - { .altcode = "" }, /* 0x0724 */ - { .altcode = "" }, /* 0x0725 */ - { .altcode = "" }, /* 0x0726 */ - { .altcode = "" }, /* 0x0727 */ - { .altcode = "" }, /* 0x0728 */ - { .altcode = "" }, /* 0x0729 */ - { .altcode = "" }, /* 0x072a */ - { .altcode = "" }, /* 0x072b */ - { .altcode = "" }, /* 0x072c */ - { .altcode = "" }, /* 0x072d */ - { .altcode = "" }, /* 0x072e */ - { .altcode = "" }, /* 0x072f */ - { .altcode = "" }, /* 0x0730 */ - { .altcode = "" }, /* 0x0731 */ - { .altcode = "" }, /* 0x0732 */ - { .altcode = "" }, /* 0x0733 */ - { .altcode = "" }, /* 0x0734 */ - { .altcode = "" }, /* 0x0735 */ - { .altcode = "" }, /* 0x0736 */ - { .altcode = "" }, /* 0x0737 */ - { .altcode = "" }, /* 0x0738 */ - { .altcode = "" }, /* 0x0739 */ - { .altcode = "" }, /* 0x073a */ - { .altcode = "" }, /* 0x073b */ - { .altcode = "" }, /* 0x073c */ - { .altcode = "" }, /* 0x073d */ - { .altcode = "" }, /* 0x073e */ - { .altcode = "" }, /* 0x073f */ - { .altcode = "" }, /* 0x0740 */ - { .altcode = "" }, /* 0x0741 */ - { .altcode = "" }, /* 0x0742 */ - { .altcode = "" }, /* 0x0743 */ - { .altcode = "" }, /* 0x0744 */ - { .altcode = "" }, /* 0x0745 */ - { .altcode = "" }, /* 0x0746 */ - { .altcode = "" }, /* 0x0747 */ - { .altcode = "" }, /* 0x0748 */ - { .altcode = "" }, /* 0x0749 */ - { .altcode = "" }, /* 0x074a */ - { .altcode = "" }, /* 0x074b */ - { .altcode = "" }, /* 0x074c */ - { .altcode = "" }, /* 0x074d */ - { .altcode = "" }, /* 0x074e */ - { .altcode = "" }, /* 0x074f */ - { .altcode = "" }, /* 0x0750 */ - { .altcode = "" }, /* 0x0751 */ - { .altcode = "" }, /* 0x0752 */ - { .altcode = "" }, /* 0x0753 */ - { .altcode = "" }, /* 0x0754 */ - { .altcode = "" }, /* 0x0755 */ - { .altcode = "" }, /* 0x0756 */ - { .altcode = "" }, /* 0x0757 */ - { .altcode = "" }, /* 0x0758 */ - { .altcode = "" }, /* 0x0759 */ - { .altcode = "" }, /* 0x075a */ - { .altcode = "" }, /* 0x075b */ - { .altcode = "" }, /* 0x075c */ - { .altcode = "" }, /* 0x075d */ - { .altcode = "" }, /* 0x075e */ - { .altcode = "" }, /* 0x075f */ - { .altcode = "" }, /* 0x0760 */ - { .altcode = "" }, /* 0x0761 */ - { .altcode = "" }, /* 0x0762 */ - { .altcode = "" }, /* 0x0763 */ - { .altcode = "" }, /* 0x0764 */ - { .altcode = "" }, /* 0x0765 */ - { .altcode = "" }, /* 0x0766 */ - { .altcode = "" }, /* 0x0767 */ - { .altcode = "" }, /* 0x0768 */ - { .altcode = "" }, /* 0x0769 */ - { .altcode = "" }, /* 0x076a */ - { .altcode = "" }, /* 0x076b */ - { .altcode = "" }, /* 0x076c */ - { .altcode = "" }, /* 0x076d */ - { .altcode = "" }, /* 0x076e */ - { .altcode = "" }, /* 0x076f */ - { .altcode = "" }, /* 0x0770 */ - { .altcode = "" }, /* 0x0771 */ - { .altcode = "" }, /* 0x0772 */ - { .altcode = "" }, /* 0x0773 */ - { .altcode = "" }, /* 0x0774 */ - { .altcode = "" }, /* 0x0775 */ - { .altcode = "" }, /* 0x0776 */ - { .altcode = "" }, /* 0x0777 */ - { .altcode = "" }, /* 0x0778 */ - { .altcode = "" }, /* 0x0779 */ - { .altcode = "" }, /* 0x077a */ - { .altcode = "" }, /* 0x077b */ - { .altcode = "" }, /* 0x077c */ - { .altcode = "" }, /* 0x077d */ - { .altcode = "" }, /* 0x077e */ - { .altcode = "" }, /* 0x077f */ - { .altcode = "" }, /* 0x0780 */ - { .altcode = "" }, /* 0x0781 */ - { .altcode = "" }, /* 0x0782 */ - { .altcode = "" }, /* 0x0783 */ - { .altcode = "" }, /* 0x0784 */ - { .altcode = "" }, /* 0x0785 */ - { .altcode = "" }, /* 0x0786 */ - { .altcode = "" }, /* 0x0787 */ - { .altcode = "" }, /* 0x0788 */ - { .altcode = "" }, /* 0x0789 */ - { .altcode = "" }, /* 0x078a */ - { .altcode = "" }, /* 0x078b */ - { .altcode = "" }, /* 0x078c */ - { .altcode = "" }, /* 0x078d */ - { .altcode = "" }, /* 0x078e */ - { .altcode = "" }, /* 0x078f */ - { .altcode = "" }, /* 0x0790 */ - { .altcode = "" }, /* 0x0791 */ - { .altcode = "" }, /* 0x0792 */ - { .altcode = "" }, /* 0x0793 */ - { .altcode = "" }, /* 0x0794 */ - { .altcode = "" }, /* 0x0795 */ - { .altcode = "" }, /* 0x0796 */ - { .altcode = "" }, /* 0x0797 */ - { .altcode = "" }, /* 0x0798 */ - { .altcode = "" }, /* 0x0799 */ - { .altcode = "" }, /* 0x079a */ - { .altcode = "" }, /* 0x079b */ - { .altcode = "" }, /* 0x079c */ - { .altcode = "" }, /* 0x079d */ - { .altcode = "" }, /* 0x079e */ - { .altcode = "" }, /* 0x079f */ - { .altcode = "" }, /* 0x07a0 */ - { .altcode = "" }, /* 0x07a1 (Greek_ALPHAaccent) */ - { .altcode = "" }, /* 0x07a2 (Greek_EPSILONaccent) */ - { .altcode = "" }, /* 0x07a3 (Greek_ETAaccent) */ - { .altcode = "" }, /* 0x07a4 (Greek_IOTAaccent) */ - { .altcode = "" }, /* 0x07a5 (Greek_IOTAdiaeresis) */ - { .altcode = "" }, /* 0x07a6 */ - { .altcode = "" }, /* 0x07a7 (Greek_OMICRONaccent) */ - { .altcode = "" }, /* 0x07a8 (Greek_UPSILONaccent) */ - { .altcode = "" }, /* 0x07a9 (Greek_UPSILONdieresis) */ - { .altcode = "" }, /* 0x07aa */ - { .altcode = "" }, /* 0x07ab (Greek_OMEGAaccent) */ - { .altcode = "" }, /* 0x07ac */ - { .altcode = "" }, /* 0x07ad */ - { .altcode = "" }, /* 0x07ae (Greek_accentdieresis) */ - { .altcode = "" }, /* 0x07af (Greek_horizbar) */ - { .altcode = "" }, /* 0x07b0 */ - { .altcode = "" }, /* 0x07b1 (Greek_alphaaccent) */ - { .altcode = "" }, /* 0x07b2 (Greek_epsilonaccent) */ - { .altcode = "" }, /* 0x07b3 (Greek_etaaccent) */ - { .altcode = "" }, /* 0x07b4 (Greek_iotaaccent) */ - { .altcode = "" }, /* 0x07b5 (Greek_iotadieresis) */ - { .altcode = "" }, /* 0x07b6 (Greek_iotaaccentdieresis) */ - { .altcode = "" }, /* 0x07b7 (Greek_omicronaccent) */ - { .altcode = "" }, /* 0x07b8 (Greek_upsilonaccent) */ - { .altcode = "" }, /* 0x07b9 (Greek_upsilondieresis) */ - { .altcode = "" }, /* 0x07ba (Greek_upsilonaccentdieresis) */ - { .altcode = "" }, /* 0x07bb (Greek_omegaaccent) */ - { .altcode = "" }, /* 0x07bc */ - { .altcode = "" }, /* 0x07bd */ - { .altcode = "" }, /* 0x07be */ - { .altcode = "" }, /* 0x07bf */ - { .altcode = "" }, /* 0x07c0 */ - { .altcode = "" }, /* 0x07c1 (Greek_ALPHA) */ - { .altcode = "" }, /* 0x07c2 (Greek_BETA) */ - { .altcode = "" }, /* 0x07c3 (Greek_GAMMA) */ - { .altcode = "" }, /* 0x07c4 (Greek_DELTA) */ - { .altcode = "" }, /* 0x07c5 (Greek_EPSILON) */ - { .altcode = "" }, /* 0x07c6 (Greek_ZETA) */ - { .altcode = "" }, /* 0x07c7 (Greek_ETA) */ - { .altcode = "" }, /* 0x07c8 (Greek_THETA) */ - { .altcode = "" }, /* 0x07c9 (Greek_IOTA) */ - { .altcode = "" }, /* 0x07ca (Greek_KAPPA) */ - { .altcode = "" }, /* 0x07cb (Greek_LAMBDA) */ - { .altcode = "" }, /* 0x07cc (Greek_MU) */ - { .altcode = "" }, /* 0x07cd (Greek_NU) */ - { .altcode = "" }, /* 0x07ce (Greek_XI) */ - { .altcode = "" }, /* 0x07cf (Greek_OMICRON) */ - { .altcode = "" }, /* 0x07d0 (Greek_PI) */ - { .altcode = "" }, /* 0x07d1 (Greek_RHO) */ - { .altcode = "" }, /* 0x07d2 (Greek_SIGMA) */ - { .altcode = "" }, /* 0x07d3 */ - { .altcode = "" }, /* 0x07d4 (Greek_TAU) */ - { .altcode = "" }, /* 0x07d5 (Greek_UPSILON) */ - { .altcode = "" }, /* 0x07d6 (Greek_PHI) */ - { .altcode = "" }, /* 0x07d7 (Greek_CHI) */ - { .altcode = "" }, /* 0x07d8 (Greek_PSI) */ - { .altcode = "" }, /* 0x07d9 (Greek_OMEGA) */ - { .altcode = "" }, /* 0x07da */ - { .altcode = "" }, /* 0x07db */ - { .altcode = "" }, /* 0x07dc */ - { .altcode = "" }, /* 0x07dd */ - { .altcode = "" }, /* 0x07de */ - { .altcode = "" }, /* 0x07df */ - { .altcode = "" }, /* 0x07e0 */ - { .altcode = "" }, /* 0x07e1 (Greek_alpha) */ - { .altcode = "" }, /* 0x07e2 (Greek_beta) */ - { .altcode = "" }, /* 0x07e3 (Greek_gamma) */ - { .altcode = "" }, /* 0x07e4 (Greek_delta) */ - { .altcode = "" }, /* 0x07e5 (Greek_epsilon) */ - { .altcode = "" }, /* 0x07e6 (Greek_zeta) */ - { .altcode = "" }, /* 0x07e7 (Greek_eta) */ - { .altcode = "" }, /* 0x07e8 (Greek_theta) */ - { .altcode = "" }, /* 0x07e9 (Greek_iota) */ - { .altcode = "" }, /* 0x07ea (Greek_kappa) */ - { .altcode = "" }, /* 0x07eb (Greek_lambda) */ - { .altcode = "" }, /* 0x07ec (Greek_mu) */ - { .altcode = "" }, /* 0x07ed (Greek_nu) */ - { .altcode = "" }, /* 0x07ee (Greek_xi) */ - { .altcode = "" }, /* 0x07ef (Greek_omicron) */ - { .altcode = "" }, /* 0x07f0 (Greek_pi) */ - { .altcode = "" }, /* 0x07f1 (Greek_rho) */ - { .altcode = "" }, /* 0x07f2 (Greek_sigma) */ - { .altcode = "" }, /* 0x07f3 (Greek_finalsmallsigma) */ - { .altcode = "" }, /* 0x07f4 (Greek_tau) */ - { .altcode = "" }, /* 0x07f5 (Greek_upsilon) */ - { .altcode = "" }, /* 0x07f6 (Greek_phi) */ - { .altcode = "" }, /* 0x07f7 (Greek_chi) */ - { .altcode = "" }, /* 0x07f8 (Greek_psi) */ - { .altcode = "" }, /* 0x07f9 (Greek_omega) */ - { .altcode = "" }, /* 0x07fa */ - { .altcode = "" }, /* 0x07fb */ - { .altcode = "" }, /* 0x07fc */ - { .altcode = "" }, /* 0x07fd */ - { .altcode = "" }, /* 0x07fe */ - { .altcode = "" }, /* 0x07ff */ + { .altcode = NULL }, /* 0x0700 */ + { .altcode = NULL }, /* 0x0701 */ + { .altcode = NULL }, /* 0x0702 */ + { .altcode = NULL }, /* 0x0703 */ + { .altcode = NULL }, /* 0x0704 */ + { .altcode = NULL }, /* 0x0705 */ + { .altcode = NULL }, /* 0x0706 */ + { .altcode = NULL }, /* 0x0707 */ + { .altcode = NULL }, /* 0x0708 */ + { .altcode = NULL }, /* 0x0709 */ + { .altcode = NULL }, /* 0x070a */ + { .altcode = NULL }, /* 0x070b */ + { .altcode = NULL }, /* 0x070c */ + { .altcode = NULL }, /* 0x070d */ + { .altcode = NULL }, /* 0x070e */ + { .altcode = NULL }, /* 0x070f */ + { .altcode = NULL }, /* 0x0710 */ + { .altcode = NULL }, /* 0x0711 */ + { .altcode = NULL }, /* 0x0712 */ + { .altcode = NULL }, /* 0x0713 */ + { .altcode = NULL }, /* 0x0714 */ + { .altcode = NULL }, /* 0x0715 */ + { .altcode = NULL }, /* 0x0716 */ + { .altcode = NULL }, /* 0x0717 */ + { .altcode = NULL }, /* 0x0718 */ + { .altcode = NULL }, /* 0x0719 */ + { .altcode = NULL }, /* 0x071a */ + { .altcode = NULL }, /* 0x071b */ + { .altcode = NULL }, /* 0x071c */ + { .altcode = NULL }, /* 0x071d */ + { .altcode = NULL }, /* 0x071e */ + { .altcode = NULL }, /* 0x071f */ + { .altcode = NULL }, /* 0x0720 */ + { .altcode = NULL }, /* 0x0721 */ + { .altcode = NULL }, /* 0x0722 */ + { .altcode = NULL }, /* 0x0723 */ + { .altcode = NULL }, /* 0x0724 */ + { .altcode = NULL }, /* 0x0725 */ + { .altcode = NULL }, /* 0x0726 */ + { .altcode = NULL }, /* 0x0727 */ + { .altcode = NULL }, /* 0x0728 */ + { .altcode = NULL }, /* 0x0729 */ + { .altcode = NULL }, /* 0x072a */ + { .altcode = NULL }, /* 0x072b */ + { .altcode = NULL }, /* 0x072c */ + { .altcode = NULL }, /* 0x072d */ + { .altcode = NULL }, /* 0x072e */ + { .altcode = NULL }, /* 0x072f */ + { .altcode = NULL }, /* 0x0730 */ + { .altcode = NULL }, /* 0x0731 */ + { .altcode = NULL }, /* 0x0732 */ + { .altcode = NULL }, /* 0x0733 */ + { .altcode = NULL }, /* 0x0734 */ + { .altcode = NULL }, /* 0x0735 */ + { .altcode = NULL }, /* 0x0736 */ + { .altcode = NULL }, /* 0x0737 */ + { .altcode = NULL }, /* 0x0738 */ + { .altcode = NULL }, /* 0x0739 */ + { .altcode = NULL }, /* 0x073a */ + { .altcode = NULL }, /* 0x073b */ + { .altcode = NULL }, /* 0x073c */ + { .altcode = NULL }, /* 0x073d */ + { .altcode = NULL }, /* 0x073e */ + { .altcode = NULL }, /* 0x073f */ + { .altcode = NULL }, /* 0x0740 */ + { .altcode = NULL }, /* 0x0741 */ + { .altcode = NULL }, /* 0x0742 */ + { .altcode = NULL }, /* 0x0743 */ + { .altcode = NULL }, /* 0x0744 */ + { .altcode = NULL }, /* 0x0745 */ + { .altcode = NULL }, /* 0x0746 */ + { .altcode = NULL }, /* 0x0747 */ + { .altcode = NULL }, /* 0x0748 */ + { .altcode = NULL }, /* 0x0749 */ + { .altcode = NULL }, /* 0x074a */ + { .altcode = NULL }, /* 0x074b */ + { .altcode = NULL }, /* 0x074c */ + { .altcode = NULL }, /* 0x074d */ + { .altcode = NULL }, /* 0x074e */ + { .altcode = NULL }, /* 0x074f */ + { .altcode = NULL }, /* 0x0750 */ + { .altcode = NULL }, /* 0x0751 */ + { .altcode = NULL }, /* 0x0752 */ + { .altcode = NULL }, /* 0x0753 */ + { .altcode = NULL }, /* 0x0754 */ + { .altcode = NULL }, /* 0x0755 */ + { .altcode = NULL }, /* 0x0756 */ + { .altcode = NULL }, /* 0x0757 */ + { .altcode = NULL }, /* 0x0758 */ + { .altcode = NULL }, /* 0x0759 */ + { .altcode = NULL }, /* 0x075a */ + { .altcode = NULL }, /* 0x075b */ + { .altcode = NULL }, /* 0x075c */ + { .altcode = NULL }, /* 0x075d */ + { .altcode = NULL }, /* 0x075e */ + { .altcode = NULL }, /* 0x075f */ + { .altcode = NULL }, /* 0x0760 */ + { .altcode = NULL }, /* 0x0761 */ + { .altcode = NULL }, /* 0x0762 */ + { .altcode = NULL }, /* 0x0763 */ + { .altcode = NULL }, /* 0x0764 */ + { .altcode = NULL }, /* 0x0765 */ + { .altcode = NULL }, /* 0x0766 */ + { .altcode = NULL }, /* 0x0767 */ + { .altcode = NULL }, /* 0x0768 */ + { .altcode = NULL }, /* 0x0769 */ + { .altcode = NULL }, /* 0x076a */ + { .altcode = NULL }, /* 0x076b */ + { .altcode = NULL }, /* 0x076c */ + { .altcode = NULL }, /* 0x076d */ + { .altcode = NULL }, /* 0x076e */ + { .altcode = NULL }, /* 0x076f */ + { .altcode = NULL }, /* 0x0770 */ + { .altcode = NULL }, /* 0x0771 */ + { .altcode = NULL }, /* 0x0772 */ + { .altcode = NULL }, /* 0x0773 */ + { .altcode = NULL }, /* 0x0774 */ + { .altcode = NULL }, /* 0x0775 */ + { .altcode = NULL }, /* 0x0776 */ + { .altcode = NULL }, /* 0x0777 */ + { .altcode = NULL }, /* 0x0778 */ + { .altcode = NULL }, /* 0x0779 */ + { .altcode = NULL }, /* 0x077a */ + { .altcode = NULL }, /* 0x077b */ + { .altcode = NULL }, /* 0x077c */ + { .altcode = NULL }, /* 0x077d */ + { .altcode = NULL }, /* 0x077e */ + { .altcode = NULL }, /* 0x077f */ + { .altcode = NULL }, /* 0x0780 */ + { .altcode = NULL }, /* 0x0781 */ + { .altcode = NULL }, /* 0x0782 */ + { .altcode = NULL }, /* 0x0783 */ + { .altcode = NULL }, /* 0x0784 */ + { .altcode = NULL }, /* 0x0785 */ + { .altcode = NULL }, /* 0x0786 */ + { .altcode = NULL }, /* 0x0787 */ + { .altcode = NULL }, /* 0x0788 */ + { .altcode = NULL }, /* 0x0789 */ + { .altcode = NULL }, /* 0x078a */ + { .altcode = NULL }, /* 0x078b */ + { .altcode = NULL }, /* 0x078c */ + { .altcode = NULL }, /* 0x078d */ + { .altcode = NULL }, /* 0x078e */ + { .altcode = NULL }, /* 0x078f */ + { .altcode = NULL }, /* 0x0790 */ + { .altcode = NULL }, /* 0x0791 */ + { .altcode = NULL }, /* 0x0792 */ + { .altcode = NULL }, /* 0x0793 */ + { .altcode = NULL }, /* 0x0794 */ + { .altcode = NULL }, /* 0x0795 */ + { .altcode = NULL }, /* 0x0796 */ + { .altcode = NULL }, /* 0x0797 */ + { .altcode = NULL }, /* 0x0798 */ + { .altcode = NULL }, /* 0x0799 */ + { .altcode = NULL }, /* 0x079a */ + { .altcode = NULL }, /* 0x079b */ + { .altcode = NULL }, /* 0x079c */ + { .altcode = NULL }, /* 0x079d */ + { .altcode = NULL }, /* 0x079e */ + { .altcode = NULL }, /* 0x079f */ + { .altcode = NULL }, /* 0x07a0 */ + { .altcode = NULL }, /* 0x07a1 (Greek_ALPHAaccent) */ + { .altcode = NULL }, /* 0x07a2 (Greek_EPSILONaccent) */ + { .altcode = NULL }, /* 0x07a3 (Greek_ETAaccent) */ + { .altcode = NULL }, /* 0x07a4 (Greek_IOTAaccent) */ + { .altcode = NULL }, /* 0x07a5 (Greek_IOTAdiaeresis) */ + { .altcode = NULL }, /* 0x07a6 */ + { .altcode = NULL }, /* 0x07a7 (Greek_OMICRONaccent) */ + { .altcode = NULL }, /* 0x07a8 (Greek_UPSILONaccent) */ + { .altcode = NULL }, /* 0x07a9 (Greek_UPSILONdieresis) */ + { .altcode = NULL }, /* 0x07aa */ + { .altcode = NULL }, /* 0x07ab (Greek_OMEGAaccent) */ + { .altcode = NULL }, /* 0x07ac */ + { .altcode = NULL }, /* 0x07ad */ + { .altcode = NULL }, /* 0x07ae (Greek_accentdieresis) */ + { .altcode = NULL }, /* 0x07af (Greek_horizbar) */ + { .altcode = NULL }, /* 0x07b0 */ + { .altcode = NULL }, /* 0x07b1 (Greek_alphaaccent) */ + { .altcode = NULL }, /* 0x07b2 (Greek_epsilonaccent) */ + { .altcode = NULL }, /* 0x07b3 (Greek_etaaccent) */ + { .altcode = NULL }, /* 0x07b4 (Greek_iotaaccent) */ + { .altcode = NULL }, /* 0x07b5 (Greek_iotadieresis) */ + { .altcode = NULL }, /* 0x07b6 (Greek_iotaaccentdieresis) */ + { .altcode = NULL }, /* 0x07b7 (Greek_omicronaccent) */ + { .altcode = NULL }, /* 0x07b8 (Greek_upsilonaccent) */ + { .altcode = NULL }, /* 0x07b9 (Greek_upsilondieresis) */ + { .altcode = NULL }, /* 0x07ba (Greek_upsilonaccentdieresis) */ + { .altcode = NULL }, /* 0x07bb (Greek_omegaaccent) */ + { .altcode = NULL }, /* 0x07bc */ + { .altcode = NULL }, /* 0x07bd */ + { .altcode = NULL }, /* 0x07be */ + { .altcode = NULL }, /* 0x07bf */ + { .altcode = NULL }, /* 0x07c0 */ + { .altcode = NULL }, /* 0x07c1 (Greek_ALPHA) */ + { .altcode = NULL }, /* 0x07c2 (Greek_BETA) */ + { .altcode = NULL }, /* 0x07c3 (Greek_GAMMA) */ + { .altcode = NULL }, /* 0x07c4 (Greek_DELTA) */ + { .altcode = NULL }, /* 0x07c5 (Greek_EPSILON) */ + { .altcode = NULL }, /* 0x07c6 (Greek_ZETA) */ + { .altcode = NULL }, /* 0x07c7 (Greek_ETA) */ + { .altcode = NULL }, /* 0x07c8 (Greek_THETA) */ + { .altcode = NULL }, /* 0x07c9 (Greek_IOTA) */ + { .altcode = NULL }, /* 0x07ca (Greek_KAPPA) */ + { .altcode = NULL }, /* 0x07cb (Greek_LAMBDA) */ + { .altcode = NULL }, /* 0x07cc (Greek_MU) */ + { .altcode = NULL }, /* 0x07cd (Greek_NU) */ + { .altcode = NULL }, /* 0x07ce (Greek_XI) */ + { .altcode = NULL }, /* 0x07cf (Greek_OMICRON) */ + { .altcode = NULL }, /* 0x07d0 (Greek_PI) */ + { .altcode = NULL }, /* 0x07d1 (Greek_RHO) */ + { .altcode = NULL }, /* 0x07d2 (Greek_SIGMA) */ + { .altcode = NULL }, /* 0x07d3 */ + { .altcode = NULL }, /* 0x07d4 (Greek_TAU) */ + { .altcode = NULL }, /* 0x07d5 (Greek_UPSILON) */ + { .altcode = NULL }, /* 0x07d6 (Greek_PHI) */ + { .altcode = NULL }, /* 0x07d7 (Greek_CHI) */ + { .altcode = NULL }, /* 0x07d8 (Greek_PSI) */ + { .altcode = NULL }, /* 0x07d9 (Greek_OMEGA) */ + { .altcode = NULL }, /* 0x07da */ + { .altcode = NULL }, /* 0x07db */ + { .altcode = NULL }, /* 0x07dc */ + { .altcode = NULL }, /* 0x07dd */ + { .altcode = NULL }, /* 0x07de */ + { .altcode = NULL }, /* 0x07df */ + { .altcode = NULL }, /* 0x07e0 */ + { .altcode = NULL }, /* 0x07e1 (Greek_alpha) */ + { .altcode = NULL }, /* 0x07e2 (Greek_beta) */ + { .altcode = NULL }, /* 0x07e3 (Greek_gamma) */ + { .altcode = NULL }, /* 0x07e4 (Greek_delta) */ + { .altcode = NULL }, /* 0x07e5 (Greek_epsilon) */ + { .altcode = NULL }, /* 0x07e6 (Greek_zeta) */ + { .altcode = NULL }, /* 0x07e7 (Greek_eta) */ + { .altcode = NULL }, /* 0x07e8 (Greek_theta) */ + { .altcode = NULL }, /* 0x07e9 (Greek_iota) */ + { .altcode = NULL }, /* 0x07ea (Greek_kappa) */ + { .altcode = NULL }, /* 0x07eb (Greek_lambda) */ + { .altcode = NULL }, /* 0x07ec (Greek_mu) */ + { .altcode = NULL }, /* 0x07ed (Greek_nu) */ + { .altcode = NULL }, /* 0x07ee (Greek_xi) */ + { .altcode = NULL }, /* 0x07ef (Greek_omicron) */ + { .altcode = NULL }, /* 0x07f0 (Greek_pi) */ + { .altcode = NULL }, /* 0x07f1 (Greek_rho) */ + { .altcode = NULL }, /* 0x07f2 (Greek_sigma) */ + { .altcode = NULL }, /* 0x07f3 (Greek_finalsmallsigma) */ + { .altcode = NULL }, /* 0x07f4 (Greek_tau) */ + { .altcode = NULL }, /* 0x07f5 (Greek_upsilon) */ + { .altcode = NULL }, /* 0x07f6 (Greek_phi) */ + { .altcode = NULL }, /* 0x07f7 (Greek_chi) */ + { .altcode = NULL }, /* 0x07f8 (Greek_psi) */ + { .altcode = NULL }, /* 0x07f9 (Greek_omega) */ + { .altcode = NULL }, /* 0x07fa */ + { .altcode = NULL }, /* 0x07fb */ + { .altcode = NULL }, /* 0x07fc */ + { .altcode = NULL }, /* 0x07fd */ + { .altcode = NULL }, /* 0x07fe */ + { .altcode = NULL }, /* 0x07ff */ }, { /* 0x08?? */ - { .altcode = "" }, /* 0x0800 */ - { .altcode = "" }, /* 0x0801 */ - { .altcode = "" }, /* 0x0802 */ - { .altcode = "" }, /* 0x0803 */ - { .altcode = "" }, /* 0x0804 */ - { .altcode = "" }, /* 0x0805 */ - { .altcode = "" }, /* 0x0806 */ - { .altcode = "" }, /* 0x0807 */ - { .altcode = "" }, /* 0x0808 */ - { .altcode = "" }, /* 0x0809 */ - { .altcode = "" }, /* 0x080a */ - { .altcode = "" }, /* 0x080b */ - { .altcode = "" }, /* 0x080c */ - { .altcode = "" }, /* 0x080d */ - { .altcode = "" }, /* 0x080e */ - { .altcode = "" }, /* 0x080f */ - { .altcode = "" }, /* 0x0810 */ - { .altcode = "" }, /* 0x0811 */ - { .altcode = "" }, /* 0x0812 */ - { .altcode = "" }, /* 0x0813 */ - { .altcode = "" }, /* 0x0814 */ - { .altcode = "" }, /* 0x0815 */ - { .altcode = "" }, /* 0x0816 */ - { .altcode = "" }, /* 0x0817 */ - { .altcode = "" }, /* 0x0818 */ - { .altcode = "" }, /* 0x0819 */ - { .altcode = "" }, /* 0x081a */ - { .altcode = "" }, /* 0x081b */ - { .altcode = "" }, /* 0x081c */ - { .altcode = "" }, /* 0x081d */ - { .altcode = "" }, /* 0x081e */ - { .altcode = "" }, /* 0x081f */ - { .altcode = "" }, /* 0x0820 */ - { .altcode = "" }, /* 0x0821 */ - { .altcode = "" }, /* 0x0822 */ - { .altcode = "" }, /* 0x0823 */ - { .altcode = "" }, /* 0x0824 */ - { .altcode = "" }, /* 0x0825 */ - { .altcode = "" }, /* 0x0826 */ - { .altcode = "" }, /* 0x0827 */ - { .altcode = "" }, /* 0x0828 */ - { .altcode = "" }, /* 0x0829 */ - { .altcode = "" }, /* 0x082a */ - { .altcode = "" }, /* 0x082b */ - { .altcode = "" }, /* 0x082c */ - { .altcode = "" }, /* 0x082d */ - { .altcode = "" }, /* 0x082e */ - { .altcode = "" }, /* 0x082f */ - { .altcode = "" }, /* 0x0830 */ - { .altcode = "" }, /* 0x0831 */ - { .altcode = "" }, /* 0x0832 */ - { .altcode = "" }, /* 0x0833 */ - { .altcode = "" }, /* 0x0834 */ - { .altcode = "" }, /* 0x0835 */ - { .altcode = "" }, /* 0x0836 */ - { .altcode = "" }, /* 0x0837 */ - { .altcode = "" }, /* 0x0838 */ - { .altcode = "" }, /* 0x0839 */ - { .altcode = "" }, /* 0x083a */ - { .altcode = "" }, /* 0x083b */ - { .altcode = "" }, /* 0x083c */ - { .altcode = "" }, /* 0x083d */ - { .altcode = "" }, /* 0x083e */ - { .altcode = "" }, /* 0x083f */ - { .altcode = "" }, /* 0x0840 */ - { .altcode = "" }, /* 0x0841 */ - { .altcode = "" }, /* 0x0842 */ - { .altcode = "" }, /* 0x0843 */ - { .altcode = "" }, /* 0x0844 */ - { .altcode = "" }, /* 0x0845 */ - { .altcode = "" }, /* 0x0846 */ - { .altcode = "" }, /* 0x0847 */ - { .altcode = "" }, /* 0x0848 */ - { .altcode = "" }, /* 0x0849 */ - { .altcode = "" }, /* 0x084a */ - { .altcode = "" }, /* 0x084b */ - { .altcode = "" }, /* 0x084c */ - { .altcode = "" }, /* 0x084d */ - { .altcode = "" }, /* 0x084e */ - { .altcode = "" }, /* 0x084f */ - { .altcode = "" }, /* 0x0850 */ - { .altcode = "" }, /* 0x0851 */ - { .altcode = "" }, /* 0x0852 */ - { .altcode = "" }, /* 0x0853 */ - { .altcode = "" }, /* 0x0854 */ - { .altcode = "" }, /* 0x0855 */ - { .altcode = "" }, /* 0x0856 */ - { .altcode = "" }, /* 0x0857 */ - { .altcode = "" }, /* 0x0858 */ - { .altcode = "" }, /* 0x0859 */ - { .altcode = "" }, /* 0x085a */ - { .altcode = "" }, /* 0x085b */ - { .altcode = "" }, /* 0x085c */ - { .altcode = "" }, /* 0x085d */ - { .altcode = "" }, /* 0x085e */ - { .altcode = "" }, /* 0x085f */ - { .altcode = "" }, /* 0x0860 */ - { .altcode = "" }, /* 0x0861 */ - { .altcode = "" }, /* 0x0862 */ - { .altcode = "" }, /* 0x0863 */ - { .altcode = "" }, /* 0x0864 */ - { .altcode = "" }, /* 0x0865 */ - { .altcode = "" }, /* 0x0866 */ - { .altcode = "" }, /* 0x0867 */ - { .altcode = "" }, /* 0x0868 */ - { .altcode = "" }, /* 0x0869 */ - { .altcode = "" }, /* 0x086a */ - { .altcode = "" }, /* 0x086b */ - { .altcode = "" }, /* 0x086c */ - { .altcode = "" }, /* 0x086d */ - { .altcode = "" }, /* 0x086e */ - { .altcode = "" }, /* 0x086f */ - { .altcode = "" }, /* 0x0870 */ - { .altcode = "" }, /* 0x0871 */ - { .altcode = "" }, /* 0x0872 */ - { .altcode = "" }, /* 0x0873 */ - { .altcode = "" }, /* 0x0874 */ - { .altcode = "" }, /* 0x0875 */ - { .altcode = "" }, /* 0x0876 */ - { .altcode = "" }, /* 0x0877 */ - { .altcode = "" }, /* 0x0878 */ - { .altcode = "" }, /* 0x0879 */ - { .altcode = "" }, /* 0x087a */ - { .altcode = "" }, /* 0x087b */ - { .altcode = "" }, /* 0x087c */ - { .altcode = "" }, /* 0x087d */ - { .altcode = "" }, /* 0x087e */ - { .altcode = "" }, /* 0x087f */ - { .altcode = "" }, /* 0x0880 */ - { .altcode = "" }, /* 0x0881 */ - { .altcode = "" }, /* 0x0882 */ - { .altcode = "" }, /* 0x0883 */ - { .altcode = "" }, /* 0x0884 */ - { .altcode = "" }, /* 0x0885 */ - { .altcode = "" }, /* 0x0886 */ - { .altcode = "" }, /* 0x0887 */ - { .altcode = "" }, /* 0x0888 */ - { .altcode = "" }, /* 0x0889 */ - { .altcode = "" }, /* 0x088a */ - { .altcode = "" }, /* 0x088b */ - { .altcode = "" }, /* 0x088c */ - { .altcode = "" }, /* 0x088d */ - { .altcode = "" }, /* 0x088e */ - { .altcode = "" }, /* 0x088f */ - { .altcode = "" }, /* 0x0890 */ - { .altcode = "" }, /* 0x0891 */ - { .altcode = "" }, /* 0x0892 */ - { .altcode = "" }, /* 0x0893 */ - { .altcode = "" }, /* 0x0894 */ - { .altcode = "" }, /* 0x0895 */ - { .altcode = "" }, /* 0x0896 */ - { .altcode = "" }, /* 0x0897 */ - { .altcode = "" }, /* 0x0898 */ - { .altcode = "" }, /* 0x0899 */ - { .altcode = "" }, /* 0x089a */ - { .altcode = "" }, /* 0x089b */ - { .altcode = "" }, /* 0x089c */ - { .altcode = "" }, /* 0x089d */ - { .altcode = "" }, /* 0x089e */ - { .altcode = "" }, /* 0x089f */ - { .altcode = "" }, /* 0x08a0 */ - { .altcode = "" }, /* 0x08a1 (leftradical) */ - { .altcode = "" }, /* 0x08a2 (topleftradical) */ - { .altcode = "" }, /* 0x08a3 (horizconnector) */ - { .altcode = "" }, /* 0x08a4 (topintegral) */ - { .altcode = "" }, /* 0x08a5 (botintegral) */ - { .altcode = "" }, /* 0x08a6 (vertconnector) */ - { .altcode = "" }, /* 0x08a7 (topleftsqbracket) */ - { .altcode = "" }, /* 0x08a8 (botleftsqbracket) */ - { .altcode = "" }, /* 0x08a9 (toprightsqbracket) */ - { .altcode = "" }, /* 0x08aa (botrightsqbracket) */ - { .altcode = "" }, /* 0x08ab (topleftparens) */ - { .altcode = "" }, /* 0x08ac (botleftparens) */ - { .altcode = "" }, /* 0x08ad (toprightparens) */ - { .altcode = "" }, /* 0x08ae (botrightparens) */ - { .altcode = "" }, /* 0x08af (leftmiddlecurlybrace) */ - { .altcode = "" }, /* 0x08b0 (rightmiddlecurlybrace) */ - { .altcode = "" }, /* 0x08b1 (topleftsummation) */ - { .altcode = "" }, /* 0x08b2 (botleftsummation) */ - { .altcode = "" }, /* 0x08b3 (topvertsummationconnector) */ - { .altcode = "" }, /* 0x08b4 (botvertsummationconnector) */ - { .altcode = "" }, /* 0x08b5 (toprightsummation) */ - { .altcode = "" }, /* 0x08b6 (botrightsummation) */ - { .altcode = "" }, /* 0x08b7 (rightmiddlesummation) */ - { .altcode = "" }, /* 0x08b8 */ - { .altcode = "" }, /* 0x08b9 */ - { .altcode = "" }, /* 0x08ba */ - { .altcode = "" }, /* 0x08bb */ - { .altcode = "" }, /* 0x08bc (lessthanequal) */ - { .altcode = "" }, /* 0x08bd (notequal) */ - { .altcode = "" }, /* 0x08be (greaterthanequal) */ - { .altcode = "" }, /* 0x08bf (integral) */ - { .altcode = "" }, /* 0x08c0 (therefore) */ - { .altcode = "" }, /* 0x08c1 (variation) */ - { .altcode = "" }, /* 0x08c2 (infinity) */ - { .altcode = "" }, /* 0x08c3 */ - { .altcode = "" }, /* 0x08c4 */ - { .altcode = "" }, /* 0x08c5 (nabla) */ - { .altcode = "" }, /* 0x08c6 */ - { .altcode = "" }, /* 0x08c7 */ - { .altcode = "" }, /* 0x08c8 (approximate) */ - { .altcode = "" }, /* 0x08c9 (similarequal) */ - { .altcode = "" }, /* 0x08ca */ - { .altcode = "" }, /* 0x08cb */ - { .altcode = "" }, /* 0x08cc */ - { .altcode = "" }, /* 0x08cd (ifonlyif) */ - { .altcode = "" }, /* 0x08ce (implies) */ - { .altcode = "" }, /* 0x08cf (identical) */ - { .altcode = "" }, /* 0x08d0 */ - { .altcode = "" }, /* 0x08d1 */ - { .altcode = "" }, /* 0x08d2 */ - { .altcode = "" }, /* 0x08d3 */ - { .altcode = "" }, /* 0x08d4 */ - { .altcode = "" }, /* 0x08d5 */ - { .altcode = "" }, /* 0x08d6 (radical) */ - { .altcode = "" }, /* 0x08d7 */ - { .altcode = "" }, /* 0x08d8 */ - { .altcode = "" }, /* 0x08d9 */ - { .altcode = "" }, /* 0x08da (includedin) */ - { .altcode = "" }, /* 0x08db (includes) */ - { .altcode = "" }, /* 0x08dc (intersection) */ - { .altcode = "" }, /* 0x08dd (union) */ - { .altcode = "" }, /* 0x08de (logicaland) */ - { .altcode = "" }, /* 0x08df (logicalor) */ - { .altcode = "" }, /* 0x08e0 */ - { .altcode = "" }, /* 0x08e1 */ - { .altcode = "" }, /* 0x08e2 */ - { .altcode = "" }, /* 0x08e3 */ - { .altcode = "" }, /* 0x08e4 */ - { .altcode = "" }, /* 0x08e5 */ - { .altcode = "" }, /* 0x08e6 */ - { .altcode = "" }, /* 0x08e7 */ - { .altcode = "" }, /* 0x08e8 */ - { .altcode = "" }, /* 0x08e9 */ - { .altcode = "" }, /* 0x08ea */ - { .altcode = "" }, /* 0x08eb */ - { .altcode = "" }, /* 0x08ec */ - { .altcode = "" }, /* 0x08ed */ - { .altcode = "" }, /* 0x08ee */ - { .altcode = "" }, /* 0x08ef (partialderivative) */ - { .altcode = "" }, /* 0x08f0 */ - { .altcode = "" }, /* 0x08f1 */ - { .altcode = "" }, /* 0x08f2 */ - { .altcode = "" }, /* 0x08f3 */ - { .altcode = "" }, /* 0x08f4 */ - { .altcode = "" }, /* 0x08f5 */ - { .altcode = "" }, /* 0x08f6 (function) */ - { .altcode = "" }, /* 0x08f7 */ - { .altcode = "" }, /* 0x08f8 */ - { .altcode = "" }, /* 0x08f9 */ - { .altcode = "" }, /* 0x08fa */ - { .altcode = "" }, /* 0x08fb (leftarrow) */ - { .altcode = "" }, /* 0x08fc (uparrow) */ - { .altcode = "" }, /* 0x08fd (rightarrow) */ - { .altcode = "" }, /* 0x08fe (downarrow) */ - { .altcode = "" }, /* 0x08ff */ + { .altcode = NULL }, /* 0x0800 */ + { .altcode = NULL }, /* 0x0801 */ + { .altcode = NULL }, /* 0x0802 */ + { .altcode = NULL }, /* 0x0803 */ + { .altcode = NULL }, /* 0x0804 */ + { .altcode = NULL }, /* 0x0805 */ + { .altcode = NULL }, /* 0x0806 */ + { .altcode = NULL }, /* 0x0807 */ + { .altcode = NULL }, /* 0x0808 */ + { .altcode = NULL }, /* 0x0809 */ + { .altcode = NULL }, /* 0x080a */ + { .altcode = NULL }, /* 0x080b */ + { .altcode = NULL }, /* 0x080c */ + { .altcode = NULL }, /* 0x080d */ + { .altcode = NULL }, /* 0x080e */ + { .altcode = NULL }, /* 0x080f */ + { .altcode = NULL }, /* 0x0810 */ + { .altcode = NULL }, /* 0x0811 */ + { .altcode = NULL }, /* 0x0812 */ + { .altcode = NULL }, /* 0x0813 */ + { .altcode = NULL }, /* 0x0814 */ + { .altcode = NULL }, /* 0x0815 */ + { .altcode = NULL }, /* 0x0816 */ + { .altcode = NULL }, /* 0x0817 */ + { .altcode = NULL }, /* 0x0818 */ + { .altcode = NULL }, /* 0x0819 */ + { .altcode = NULL }, /* 0x081a */ + { .altcode = NULL }, /* 0x081b */ + { .altcode = NULL }, /* 0x081c */ + { .altcode = NULL }, /* 0x081d */ + { .altcode = NULL }, /* 0x081e */ + { .altcode = NULL }, /* 0x081f */ + { .altcode = NULL }, /* 0x0820 */ + { .altcode = NULL }, /* 0x0821 */ + { .altcode = NULL }, /* 0x0822 */ + { .altcode = NULL }, /* 0x0823 */ + { .altcode = NULL }, /* 0x0824 */ + { .altcode = NULL }, /* 0x0825 */ + { .altcode = NULL }, /* 0x0826 */ + { .altcode = NULL }, /* 0x0827 */ + { .altcode = NULL }, /* 0x0828 */ + { .altcode = NULL }, /* 0x0829 */ + { .altcode = NULL }, /* 0x082a */ + { .altcode = NULL }, /* 0x082b */ + { .altcode = NULL }, /* 0x082c */ + { .altcode = NULL }, /* 0x082d */ + { .altcode = NULL }, /* 0x082e */ + { .altcode = NULL }, /* 0x082f */ + { .altcode = NULL }, /* 0x0830 */ + { .altcode = NULL }, /* 0x0831 */ + { .altcode = NULL }, /* 0x0832 */ + { .altcode = NULL }, /* 0x0833 */ + { .altcode = NULL }, /* 0x0834 */ + { .altcode = NULL }, /* 0x0835 */ + { .altcode = NULL }, /* 0x0836 */ + { .altcode = NULL }, /* 0x0837 */ + { .altcode = NULL }, /* 0x0838 */ + { .altcode = NULL }, /* 0x0839 */ + { .altcode = NULL }, /* 0x083a */ + { .altcode = NULL }, /* 0x083b */ + { .altcode = NULL }, /* 0x083c */ + { .altcode = NULL }, /* 0x083d */ + { .altcode = NULL }, /* 0x083e */ + { .altcode = NULL }, /* 0x083f */ + { .altcode = NULL }, /* 0x0840 */ + { .altcode = NULL }, /* 0x0841 */ + { .altcode = NULL }, /* 0x0842 */ + { .altcode = NULL }, /* 0x0843 */ + { .altcode = NULL }, /* 0x0844 */ + { .altcode = NULL }, /* 0x0845 */ + { .altcode = NULL }, /* 0x0846 */ + { .altcode = NULL }, /* 0x0847 */ + { .altcode = NULL }, /* 0x0848 */ + { .altcode = NULL }, /* 0x0849 */ + { .altcode = NULL }, /* 0x084a */ + { .altcode = NULL }, /* 0x084b */ + { .altcode = NULL }, /* 0x084c */ + { .altcode = NULL }, /* 0x084d */ + { .altcode = NULL }, /* 0x084e */ + { .altcode = NULL }, /* 0x084f */ + { .altcode = NULL }, /* 0x0850 */ + { .altcode = NULL }, /* 0x0851 */ + { .altcode = NULL }, /* 0x0852 */ + { .altcode = NULL }, /* 0x0853 */ + { .altcode = NULL }, /* 0x0854 */ + { .altcode = NULL }, /* 0x0855 */ + { .altcode = NULL }, /* 0x0856 */ + { .altcode = NULL }, /* 0x0857 */ + { .altcode = NULL }, /* 0x0858 */ + { .altcode = NULL }, /* 0x0859 */ + { .altcode = NULL }, /* 0x085a */ + { .altcode = NULL }, /* 0x085b */ + { .altcode = NULL }, /* 0x085c */ + { .altcode = NULL }, /* 0x085d */ + { .altcode = NULL }, /* 0x085e */ + { .altcode = NULL }, /* 0x085f */ + { .altcode = NULL }, /* 0x0860 */ + { .altcode = NULL }, /* 0x0861 */ + { .altcode = NULL }, /* 0x0862 */ + { .altcode = NULL }, /* 0x0863 */ + { .altcode = NULL }, /* 0x0864 */ + { .altcode = NULL }, /* 0x0865 */ + { .altcode = NULL }, /* 0x0866 */ + { .altcode = NULL }, /* 0x0867 */ + { .altcode = NULL }, /* 0x0868 */ + { .altcode = NULL }, /* 0x0869 */ + { .altcode = NULL }, /* 0x086a */ + { .altcode = NULL }, /* 0x086b */ + { .altcode = NULL }, /* 0x086c */ + { .altcode = NULL }, /* 0x086d */ + { .altcode = NULL }, /* 0x086e */ + { .altcode = NULL }, /* 0x086f */ + { .altcode = NULL }, /* 0x0870 */ + { .altcode = NULL }, /* 0x0871 */ + { .altcode = NULL }, /* 0x0872 */ + { .altcode = NULL }, /* 0x0873 */ + { .altcode = NULL }, /* 0x0874 */ + { .altcode = NULL }, /* 0x0875 */ + { .altcode = NULL }, /* 0x0876 */ + { .altcode = NULL }, /* 0x0877 */ + { .altcode = NULL }, /* 0x0878 */ + { .altcode = NULL }, /* 0x0879 */ + { .altcode = NULL }, /* 0x087a */ + { .altcode = NULL }, /* 0x087b */ + { .altcode = NULL }, /* 0x087c */ + { .altcode = NULL }, /* 0x087d */ + { .altcode = NULL }, /* 0x087e */ + { .altcode = NULL }, /* 0x087f */ + { .altcode = NULL }, /* 0x0880 */ + { .altcode = NULL }, /* 0x0881 */ + { .altcode = NULL }, /* 0x0882 */ + { .altcode = NULL }, /* 0x0883 */ + { .altcode = NULL }, /* 0x0884 */ + { .altcode = NULL }, /* 0x0885 */ + { .altcode = NULL }, /* 0x0886 */ + { .altcode = NULL }, /* 0x0887 */ + { .altcode = NULL }, /* 0x0888 */ + { .altcode = NULL }, /* 0x0889 */ + { .altcode = NULL }, /* 0x088a */ + { .altcode = NULL }, /* 0x088b */ + { .altcode = NULL }, /* 0x088c */ + { .altcode = NULL }, /* 0x088d */ + { .altcode = NULL }, /* 0x088e */ + { .altcode = NULL }, /* 0x088f */ + { .altcode = NULL }, /* 0x0890 */ + { .altcode = NULL }, /* 0x0891 */ + { .altcode = NULL }, /* 0x0892 */ + { .altcode = NULL }, /* 0x0893 */ + { .altcode = NULL }, /* 0x0894 */ + { .altcode = NULL }, /* 0x0895 */ + { .altcode = NULL }, /* 0x0896 */ + { .altcode = NULL }, /* 0x0897 */ + { .altcode = NULL }, /* 0x0898 */ + { .altcode = NULL }, /* 0x0899 */ + { .altcode = NULL }, /* 0x089a */ + { .altcode = NULL }, /* 0x089b */ + { .altcode = NULL }, /* 0x089c */ + { .altcode = NULL }, /* 0x089d */ + { .altcode = NULL }, /* 0x089e */ + { .altcode = NULL }, /* 0x089f */ + { .altcode = NULL }, /* 0x08a0 */ + { .altcode = NULL }, /* 0x08a1 (leftradical) */ + { .altcode = NULL }, /* 0x08a2 (topleftradical) */ + { .altcode = NULL }, /* 0x08a3 (horizconnector) */ + { .altcode = NULL }, /* 0x08a4 (topintegral) */ + { .altcode = NULL }, /* 0x08a5 (botintegral) */ + { .altcode = NULL }, /* 0x08a6 (vertconnector) */ + { .altcode = NULL }, /* 0x08a7 (topleftsqbracket) */ + { .altcode = NULL }, /* 0x08a8 (botleftsqbracket) */ + { .altcode = NULL }, /* 0x08a9 (toprightsqbracket) */ + { .altcode = NULL }, /* 0x08aa (botrightsqbracket) */ + { .altcode = NULL }, /* 0x08ab (topleftparens) */ + { .altcode = NULL }, /* 0x08ac (botleftparens) */ + { .altcode = NULL }, /* 0x08ad (toprightparens) */ + { .altcode = NULL }, /* 0x08ae (botrightparens) */ + { .altcode = NULL }, /* 0x08af (leftmiddlecurlybrace) */ + { .altcode = NULL }, /* 0x08b0 (rightmiddlecurlybrace) */ + { .altcode = NULL }, /* 0x08b1 (topleftsummation) */ + { .altcode = NULL }, /* 0x08b2 (botleftsummation) */ + { .altcode = NULL }, /* 0x08b3 (topvertsummationconnector) */ + { .altcode = NULL }, /* 0x08b4 (botvertsummationconnector) */ + { .altcode = NULL }, /* 0x08b5 (toprightsummation) */ + { .altcode = NULL }, /* 0x08b6 (botrightsummation) */ + { .altcode = NULL }, /* 0x08b7 (rightmiddlesummation) */ + { .altcode = NULL }, /* 0x08b8 */ + { .altcode = NULL }, /* 0x08b9 */ + { .altcode = NULL }, /* 0x08ba */ + { .altcode = NULL }, /* 0x08bb */ + { .altcode = NULL }, /* 0x08bc (lessthanequal) */ + { .altcode = NULL }, /* 0x08bd (notequal) */ + { .altcode = NULL }, /* 0x08be (greaterthanequal) */ + { .altcode = NULL }, /* 0x08bf (integral) */ + { .altcode = NULL }, /* 0x08c0 (therefore) */ + { .altcode = NULL }, /* 0x08c1 (variation) */ + { .altcode = NULL }, /* 0x08c2 (infinity) */ + { .altcode = NULL }, /* 0x08c3 */ + { .altcode = NULL }, /* 0x08c4 */ + { .altcode = NULL }, /* 0x08c5 (nabla) */ + { .altcode = NULL }, /* 0x08c6 */ + { .altcode = NULL }, /* 0x08c7 */ + { .altcode = NULL }, /* 0x08c8 (approximate) */ + { .altcode = NULL }, /* 0x08c9 (similarequal) */ + { .altcode = NULL }, /* 0x08ca */ + { .altcode = NULL }, /* 0x08cb */ + { .altcode = NULL }, /* 0x08cc */ + { .altcode = NULL }, /* 0x08cd (ifonlyif) */ + { .altcode = NULL }, /* 0x08ce (implies) */ + { .altcode = NULL }, /* 0x08cf (identical) */ + { .altcode = NULL }, /* 0x08d0 */ + { .altcode = NULL }, /* 0x08d1 */ + { .altcode = NULL }, /* 0x08d2 */ + { .altcode = NULL }, /* 0x08d3 */ + { .altcode = NULL }, /* 0x08d4 */ + { .altcode = NULL }, /* 0x08d5 */ + { .altcode = NULL }, /* 0x08d6 (radical) */ + { .altcode = NULL }, /* 0x08d7 */ + { .altcode = NULL }, /* 0x08d8 */ + { .altcode = NULL }, /* 0x08d9 */ + { .altcode = NULL }, /* 0x08da (includedin) */ + { .altcode = NULL }, /* 0x08db (includes) */ + { .altcode = NULL }, /* 0x08dc (intersection) */ + { .altcode = NULL }, /* 0x08dd (union) */ + { .altcode = NULL }, /* 0x08de (logicaland) */ + { .altcode = NULL }, /* 0x08df (logicalor) */ + { .altcode = NULL }, /* 0x08e0 */ + { .altcode = NULL }, /* 0x08e1 */ + { .altcode = NULL }, /* 0x08e2 */ + { .altcode = NULL }, /* 0x08e3 */ + { .altcode = NULL }, /* 0x08e4 */ + { .altcode = NULL }, /* 0x08e5 */ + { .altcode = NULL }, /* 0x08e6 */ + { .altcode = NULL }, /* 0x08e7 */ + { .altcode = NULL }, /* 0x08e8 */ + { .altcode = NULL }, /* 0x08e9 */ + { .altcode = NULL }, /* 0x08ea */ + { .altcode = NULL }, /* 0x08eb */ + { .altcode = NULL }, /* 0x08ec */ + { .altcode = NULL }, /* 0x08ed */ + { .altcode = NULL }, /* 0x08ee */ + { .altcode = NULL }, /* 0x08ef (partialderivative) */ + { .altcode = NULL }, /* 0x08f0 */ + { .altcode = NULL }, /* 0x08f1 */ + { .altcode = NULL }, /* 0x08f2 */ + { .altcode = NULL }, /* 0x08f3 */ + { .altcode = NULL }, /* 0x08f4 */ + { .altcode = NULL }, /* 0x08f5 */ + { .altcode = NULL }, /* 0x08f6 (function) */ + { .altcode = NULL }, /* 0x08f7 */ + { .altcode = NULL }, /* 0x08f8 */ + { .altcode = NULL }, /* 0x08f9 */ + { .altcode = NULL }, /* 0x08fa */ + { .altcode = NULL }, /* 0x08fb (leftarrow) */ + { .altcode = NULL }, /* 0x08fc (uparrow) */ + { .altcode = NULL }, /* 0x08fd (rightarrow) */ + { .altcode = NULL }, /* 0x08fe (downarrow) */ + { .altcode = NULL }, /* 0x08ff */ }, { /* 0x09?? */ - { .altcode = "" }, /* 0x0900 */ - { .altcode = "" }, /* 0x0901 */ - { .altcode = "" }, /* 0x0902 */ - { .altcode = "" }, /* 0x0903 */ - { .altcode = "" }, /* 0x0904 */ - { .altcode = "" }, /* 0x0905 */ - { .altcode = "" }, /* 0x0906 */ - { .altcode = "" }, /* 0x0907 */ - { .altcode = "" }, /* 0x0908 */ - { .altcode = "" }, /* 0x0909 */ - { .altcode = "" }, /* 0x090a */ - { .altcode = "" }, /* 0x090b */ - { .altcode = "" }, /* 0x090c */ - { .altcode = "" }, /* 0x090d */ - { .altcode = "" }, /* 0x090e */ - { .altcode = "" }, /* 0x090f */ - { .altcode = "" }, /* 0x0910 */ - { .altcode = "" }, /* 0x0911 */ - { .altcode = "" }, /* 0x0912 */ - { .altcode = "" }, /* 0x0913 */ - { .altcode = "" }, /* 0x0914 */ - { .altcode = "" }, /* 0x0915 */ - { .altcode = "" }, /* 0x0916 */ - { .altcode = "" }, /* 0x0917 */ - { .altcode = "" }, /* 0x0918 */ - { .altcode = "" }, /* 0x0919 */ - { .altcode = "" }, /* 0x091a */ - { .altcode = "" }, /* 0x091b */ - { .altcode = "" }, /* 0x091c */ - { .altcode = "" }, /* 0x091d */ - { .altcode = "" }, /* 0x091e */ - { .altcode = "" }, /* 0x091f */ - { .altcode = "" }, /* 0x0920 */ - { .altcode = "" }, /* 0x0921 */ - { .altcode = "" }, /* 0x0922 */ - { .altcode = "" }, /* 0x0923 */ - { .altcode = "" }, /* 0x0924 */ - { .altcode = "" }, /* 0x0925 */ - { .altcode = "" }, /* 0x0926 */ - { .altcode = "" }, /* 0x0927 */ - { .altcode = "" }, /* 0x0928 */ - { .altcode = "" }, /* 0x0929 */ - { .altcode = "" }, /* 0x092a */ - { .altcode = "" }, /* 0x092b */ - { .altcode = "" }, /* 0x092c */ - { .altcode = "" }, /* 0x092d */ - { .altcode = "" }, /* 0x092e */ - { .altcode = "" }, /* 0x092f */ - { .altcode = "" }, /* 0x0930 */ - { .altcode = "" }, /* 0x0931 */ - { .altcode = "" }, /* 0x0932 */ - { .altcode = "" }, /* 0x0933 */ - { .altcode = "" }, /* 0x0934 */ - { .altcode = "" }, /* 0x0935 */ - { .altcode = "" }, /* 0x0936 */ - { .altcode = "" }, /* 0x0937 */ - { .altcode = "" }, /* 0x0938 */ - { .altcode = "" }, /* 0x0939 */ - { .altcode = "" }, /* 0x093a */ - { .altcode = "" }, /* 0x093b */ - { .altcode = "" }, /* 0x093c */ - { .altcode = "" }, /* 0x093d */ - { .altcode = "" }, /* 0x093e */ - { .altcode = "" }, /* 0x093f */ - { .altcode = "" }, /* 0x0940 */ - { .altcode = "" }, /* 0x0941 */ - { .altcode = "" }, /* 0x0942 */ - { .altcode = "" }, /* 0x0943 */ - { .altcode = "" }, /* 0x0944 */ - { .altcode = "" }, /* 0x0945 */ - { .altcode = "" }, /* 0x0946 */ - { .altcode = "" }, /* 0x0947 */ - { .altcode = "" }, /* 0x0948 */ - { .altcode = "" }, /* 0x0949 */ - { .altcode = "" }, /* 0x094a */ - { .altcode = "" }, /* 0x094b */ - { .altcode = "" }, /* 0x094c */ - { .altcode = "" }, /* 0x094d */ - { .altcode = "" }, /* 0x094e */ - { .altcode = "" }, /* 0x094f */ - { .altcode = "" }, /* 0x0950 */ - { .altcode = "" }, /* 0x0951 */ - { .altcode = "" }, /* 0x0952 */ - { .altcode = "" }, /* 0x0953 */ - { .altcode = "" }, /* 0x0954 */ - { .altcode = "" }, /* 0x0955 */ - { .altcode = "" }, /* 0x0956 */ - { .altcode = "" }, /* 0x0957 */ - { .altcode = "" }, /* 0x0958 */ - { .altcode = "" }, /* 0x0959 */ - { .altcode = "" }, /* 0x095a */ - { .altcode = "" }, /* 0x095b */ - { .altcode = "" }, /* 0x095c */ - { .altcode = "" }, /* 0x095d */ - { .altcode = "" }, /* 0x095e */ - { .altcode = "" }, /* 0x095f */ - { .altcode = "" }, /* 0x0960 */ - { .altcode = "" }, /* 0x0961 */ - { .altcode = "" }, /* 0x0962 */ - { .altcode = "" }, /* 0x0963 */ - { .altcode = "" }, /* 0x0964 */ - { .altcode = "" }, /* 0x0965 */ - { .altcode = "" }, /* 0x0966 */ - { .altcode = "" }, /* 0x0967 */ - { .altcode = "" }, /* 0x0968 */ - { .altcode = "" }, /* 0x0969 */ - { .altcode = "" }, /* 0x096a */ - { .altcode = "" }, /* 0x096b */ - { .altcode = "" }, /* 0x096c */ - { .altcode = "" }, /* 0x096d */ - { .altcode = "" }, /* 0x096e */ - { .altcode = "" }, /* 0x096f */ - { .altcode = "" }, /* 0x0970 */ - { .altcode = "" }, /* 0x0971 */ - { .altcode = "" }, /* 0x0972 */ - { .altcode = "" }, /* 0x0973 */ - { .altcode = "" }, /* 0x0974 */ - { .altcode = "" }, /* 0x0975 */ - { .altcode = "" }, /* 0x0976 */ - { .altcode = "" }, /* 0x0977 */ - { .altcode = "" }, /* 0x0978 */ - { .altcode = "" }, /* 0x0979 */ - { .altcode = "" }, /* 0x097a */ - { .altcode = "" }, /* 0x097b */ - { .altcode = "" }, /* 0x097c */ - { .altcode = "" }, /* 0x097d */ - { .altcode = "" }, /* 0x097e */ - { .altcode = "" }, /* 0x097f */ - { .altcode = "" }, /* 0x0980 */ - { .altcode = "" }, /* 0x0981 */ - { .altcode = "" }, /* 0x0982 */ - { .altcode = "" }, /* 0x0983 */ - { .altcode = "" }, /* 0x0984 */ - { .altcode = "" }, /* 0x0985 */ - { .altcode = "" }, /* 0x0986 */ - { .altcode = "" }, /* 0x0987 */ - { .altcode = "" }, /* 0x0988 */ - { .altcode = "" }, /* 0x0989 */ - { .altcode = "" }, /* 0x098a */ - { .altcode = "" }, /* 0x098b */ - { .altcode = "" }, /* 0x098c */ - { .altcode = "" }, /* 0x098d */ - { .altcode = "" }, /* 0x098e */ - { .altcode = "" }, /* 0x098f */ - { .altcode = "" }, /* 0x0990 */ - { .altcode = "" }, /* 0x0991 */ - { .altcode = "" }, /* 0x0992 */ - { .altcode = "" }, /* 0x0993 */ - { .altcode = "" }, /* 0x0994 */ - { .altcode = "" }, /* 0x0995 */ - { .altcode = "" }, /* 0x0996 */ - { .altcode = "" }, /* 0x0997 */ - { .altcode = "" }, /* 0x0998 */ - { .altcode = "" }, /* 0x0999 */ - { .altcode = "" }, /* 0x099a */ - { .altcode = "" }, /* 0x099b */ - { .altcode = "" }, /* 0x099c */ - { .altcode = "" }, /* 0x099d */ - { .altcode = "" }, /* 0x099e */ - { .altcode = "" }, /* 0x099f */ - { .altcode = "" }, /* 0x09a0 */ - { .altcode = "" }, /* 0x09a1 */ - { .altcode = "" }, /* 0x09a2 */ - { .altcode = "" }, /* 0x09a3 */ - { .altcode = "" }, /* 0x09a4 */ - { .altcode = "" }, /* 0x09a5 */ - { .altcode = "" }, /* 0x09a6 */ - { .altcode = "" }, /* 0x09a7 */ - { .altcode = "" }, /* 0x09a8 */ - { .altcode = "" }, /* 0x09a9 */ - { .altcode = "" }, /* 0x09aa */ - { .altcode = "" }, /* 0x09ab */ - { .altcode = "" }, /* 0x09ac */ - { .altcode = "" }, /* 0x09ad */ - { .altcode = "" }, /* 0x09ae */ - { .altcode = "" }, /* 0x09af */ - { .altcode = "" }, /* 0x09b0 */ - { .altcode = "" }, /* 0x09b1 */ - { .altcode = "" }, /* 0x09b2 */ - { .altcode = "" }, /* 0x09b3 */ - { .altcode = "" }, /* 0x09b4 */ - { .altcode = "" }, /* 0x09b5 */ - { .altcode = "" }, /* 0x09b6 */ - { .altcode = "" }, /* 0x09b7 */ - { .altcode = "" }, /* 0x09b8 */ - { .altcode = "" }, /* 0x09b9 */ - { .altcode = "" }, /* 0x09ba */ - { .altcode = "" }, /* 0x09bb */ - { .altcode = "" }, /* 0x09bc */ - { .altcode = "" }, /* 0x09bd */ - { .altcode = "" }, /* 0x09be */ - { .altcode = "" }, /* 0x09bf */ - { .altcode = "" }, /* 0x09c0 */ - { .altcode = "" }, /* 0x09c1 */ - { .altcode = "" }, /* 0x09c2 */ - { .altcode = "" }, /* 0x09c3 */ - { .altcode = "" }, /* 0x09c4 */ - { .altcode = "" }, /* 0x09c5 */ - { .altcode = "" }, /* 0x09c6 */ - { .altcode = "" }, /* 0x09c7 */ - { .altcode = "" }, /* 0x09c8 */ - { .altcode = "" }, /* 0x09c9 */ - { .altcode = "" }, /* 0x09ca */ - { .altcode = "" }, /* 0x09cb */ - { .altcode = "" }, /* 0x09cc */ - { .altcode = "" }, /* 0x09cd */ - { .altcode = "" }, /* 0x09ce */ - { .altcode = "" }, /* 0x09cf */ - { .altcode = "" }, /* 0x09d0 */ - { .altcode = "" }, /* 0x09d1 */ - { .altcode = "" }, /* 0x09d2 */ - { .altcode = "" }, /* 0x09d3 */ - { .altcode = "" }, /* 0x09d4 */ - { .altcode = "" }, /* 0x09d5 */ - { .altcode = "" }, /* 0x09d6 */ - { .altcode = "" }, /* 0x09d7 */ - { .altcode = "" }, /* 0x09d8 */ - { .altcode = "" }, /* 0x09d9 */ - { .altcode = "" }, /* 0x09da */ - { .altcode = "" }, /* 0x09db */ - { .altcode = "" }, /* 0x09dc */ - { .altcode = "" }, /* 0x09dd */ - { .altcode = "" }, /* 0x09de */ - { .altcode = "" }, /* 0x09df (blank) */ - { .altcode = "" }, /* 0x09e0 (soliddiamond) */ - { .altcode = "" }, /* 0x09e1 (checkerboard) */ - { .altcode = "" }, /* 0x09e2 (ht) */ - { .altcode = "" }, /* 0x09e3 (ff) */ - { .altcode = "" }, /* 0x09e4 (cr) */ - { .altcode = "" }, /* 0x09e5 (lf) */ - { .altcode = "" }, /* 0x09e6 */ - { .altcode = "" }, /* 0x09e7 */ - { .altcode = "" }, /* 0x09e8 (nl) */ - { .altcode = "" }, /* 0x09e9 (vt) */ - { .altcode = "" }, /* 0x09ea (lowrightcorner) */ - { .altcode = "" }, /* 0x09eb (uprightcorner) */ - { .altcode = "" }, /* 0x09ec (upleftcorner) */ - { .altcode = "" }, /* 0x09ed (lowleftcorner) */ - { .altcode = "" }, /* 0x09ee (crossinglines) */ - { .altcode = "" }, /* 0x09ef (horizlinescan1) */ - { .altcode = "" }, /* 0x09f0 (horizlinescan3) */ - { .altcode = "" }, /* 0x09f1 (horizlinescan5) */ - { .altcode = "" }, /* 0x09f2 (horizlinescan7) */ - { .altcode = "" }, /* 0x09f3 (horizlinescan9) */ - { .altcode = "" }, /* 0x09f4 (leftt) */ - { .altcode = "" }, /* 0x09f5 (rightt) */ - { .altcode = "" }, /* 0x09f6 (bott) */ - { .altcode = "" }, /* 0x09f7 (topt) */ - { .altcode = "" }, /* 0x09f8 (vertbar) */ - { .altcode = "" }, /* 0x09f9 */ - { .altcode = "" }, /* 0x09fa */ - { .altcode = "" }, /* 0x09fb */ - { .altcode = "" }, /* 0x09fc */ - { .altcode = "" }, /* 0x09fd */ - { .altcode = "" }, /* 0x09fe */ - { .altcode = "" }, /* 0x09ff */ + { .altcode = NULL }, /* 0x0900 */ + { .altcode = NULL }, /* 0x0901 */ + { .altcode = NULL }, /* 0x0902 */ + { .altcode = NULL }, /* 0x0903 */ + { .altcode = NULL }, /* 0x0904 */ + { .altcode = NULL }, /* 0x0905 */ + { .altcode = NULL }, /* 0x0906 */ + { .altcode = NULL }, /* 0x0907 */ + { .altcode = NULL }, /* 0x0908 */ + { .altcode = NULL }, /* 0x0909 */ + { .altcode = NULL }, /* 0x090a */ + { .altcode = NULL }, /* 0x090b */ + { .altcode = NULL }, /* 0x090c */ + { .altcode = NULL }, /* 0x090d */ + { .altcode = NULL }, /* 0x090e */ + { .altcode = NULL }, /* 0x090f */ + { .altcode = NULL }, /* 0x0910 */ + { .altcode = NULL }, /* 0x0911 */ + { .altcode = NULL }, /* 0x0912 */ + { .altcode = NULL }, /* 0x0913 */ + { .altcode = NULL }, /* 0x0914 */ + { .altcode = NULL }, /* 0x0915 */ + { .altcode = NULL }, /* 0x0916 */ + { .altcode = NULL }, /* 0x0917 */ + { .altcode = NULL }, /* 0x0918 */ + { .altcode = NULL }, /* 0x0919 */ + { .altcode = NULL }, /* 0x091a */ + { .altcode = NULL }, /* 0x091b */ + { .altcode = NULL }, /* 0x091c */ + { .altcode = NULL }, /* 0x091d */ + { .altcode = NULL }, /* 0x091e */ + { .altcode = NULL }, /* 0x091f */ + { .altcode = NULL }, /* 0x0920 */ + { .altcode = NULL }, /* 0x0921 */ + { .altcode = NULL }, /* 0x0922 */ + { .altcode = NULL }, /* 0x0923 */ + { .altcode = NULL }, /* 0x0924 */ + { .altcode = NULL }, /* 0x0925 */ + { .altcode = NULL }, /* 0x0926 */ + { .altcode = NULL }, /* 0x0927 */ + { .altcode = NULL }, /* 0x0928 */ + { .altcode = NULL }, /* 0x0929 */ + { .altcode = NULL }, /* 0x092a */ + { .altcode = NULL }, /* 0x092b */ + { .altcode = NULL }, /* 0x092c */ + { .altcode = NULL }, /* 0x092d */ + { .altcode = NULL }, /* 0x092e */ + { .altcode = NULL }, /* 0x092f */ + { .altcode = NULL }, /* 0x0930 */ + { .altcode = NULL }, /* 0x0931 */ + { .altcode = NULL }, /* 0x0932 */ + { .altcode = NULL }, /* 0x0933 */ + { .altcode = NULL }, /* 0x0934 */ + { .altcode = NULL }, /* 0x0935 */ + { .altcode = NULL }, /* 0x0936 */ + { .altcode = NULL }, /* 0x0937 */ + { .altcode = NULL }, /* 0x0938 */ + { .altcode = NULL }, /* 0x0939 */ + { .altcode = NULL }, /* 0x093a */ + { .altcode = NULL }, /* 0x093b */ + { .altcode = NULL }, /* 0x093c */ + { .altcode = NULL }, /* 0x093d */ + { .altcode = NULL }, /* 0x093e */ + { .altcode = NULL }, /* 0x093f */ + { .altcode = NULL }, /* 0x0940 */ + { .altcode = NULL }, /* 0x0941 */ + { .altcode = NULL }, /* 0x0942 */ + { .altcode = NULL }, /* 0x0943 */ + { .altcode = NULL }, /* 0x0944 */ + { .altcode = NULL }, /* 0x0945 */ + { .altcode = NULL }, /* 0x0946 */ + { .altcode = NULL }, /* 0x0947 */ + { .altcode = NULL }, /* 0x0948 */ + { .altcode = NULL }, /* 0x0949 */ + { .altcode = NULL }, /* 0x094a */ + { .altcode = NULL }, /* 0x094b */ + { .altcode = NULL }, /* 0x094c */ + { .altcode = NULL }, /* 0x094d */ + { .altcode = NULL }, /* 0x094e */ + { .altcode = NULL }, /* 0x094f */ + { .altcode = NULL }, /* 0x0950 */ + { .altcode = NULL }, /* 0x0951 */ + { .altcode = NULL }, /* 0x0952 */ + { .altcode = NULL }, /* 0x0953 */ + { .altcode = NULL }, /* 0x0954 */ + { .altcode = NULL }, /* 0x0955 */ + { .altcode = NULL }, /* 0x0956 */ + { .altcode = NULL }, /* 0x0957 */ + { .altcode = NULL }, /* 0x0958 */ + { .altcode = NULL }, /* 0x0959 */ + { .altcode = NULL }, /* 0x095a */ + { .altcode = NULL }, /* 0x095b */ + { .altcode = NULL }, /* 0x095c */ + { .altcode = NULL }, /* 0x095d */ + { .altcode = NULL }, /* 0x095e */ + { .altcode = NULL }, /* 0x095f */ + { .altcode = NULL }, /* 0x0960 */ + { .altcode = NULL }, /* 0x0961 */ + { .altcode = NULL }, /* 0x0962 */ + { .altcode = NULL }, /* 0x0963 */ + { .altcode = NULL }, /* 0x0964 */ + { .altcode = NULL }, /* 0x0965 */ + { .altcode = NULL }, /* 0x0966 */ + { .altcode = NULL }, /* 0x0967 */ + { .altcode = NULL }, /* 0x0968 */ + { .altcode = NULL }, /* 0x0969 */ + { .altcode = NULL }, /* 0x096a */ + { .altcode = NULL }, /* 0x096b */ + { .altcode = NULL }, /* 0x096c */ + { .altcode = NULL }, /* 0x096d */ + { .altcode = NULL }, /* 0x096e */ + { .altcode = NULL }, /* 0x096f */ + { .altcode = NULL }, /* 0x0970 */ + { .altcode = NULL }, /* 0x0971 */ + { .altcode = NULL }, /* 0x0972 */ + { .altcode = NULL }, /* 0x0973 */ + { .altcode = NULL }, /* 0x0974 */ + { .altcode = NULL }, /* 0x0975 */ + { .altcode = NULL }, /* 0x0976 */ + { .altcode = NULL }, /* 0x0977 */ + { .altcode = NULL }, /* 0x0978 */ + { .altcode = NULL }, /* 0x0979 */ + { .altcode = NULL }, /* 0x097a */ + { .altcode = NULL }, /* 0x097b */ + { .altcode = NULL }, /* 0x097c */ + { .altcode = NULL }, /* 0x097d */ + { .altcode = NULL }, /* 0x097e */ + { .altcode = NULL }, /* 0x097f */ + { .altcode = NULL }, /* 0x0980 */ + { .altcode = NULL }, /* 0x0981 */ + { .altcode = NULL }, /* 0x0982 */ + { .altcode = NULL }, /* 0x0983 */ + { .altcode = NULL }, /* 0x0984 */ + { .altcode = NULL }, /* 0x0985 */ + { .altcode = NULL }, /* 0x0986 */ + { .altcode = NULL }, /* 0x0987 */ + { .altcode = NULL }, /* 0x0988 */ + { .altcode = NULL }, /* 0x0989 */ + { .altcode = NULL }, /* 0x098a */ + { .altcode = NULL }, /* 0x098b */ + { .altcode = NULL }, /* 0x098c */ + { .altcode = NULL }, /* 0x098d */ + { .altcode = NULL }, /* 0x098e */ + { .altcode = NULL }, /* 0x098f */ + { .altcode = NULL }, /* 0x0990 */ + { .altcode = NULL }, /* 0x0991 */ + { .altcode = NULL }, /* 0x0992 */ + { .altcode = NULL }, /* 0x0993 */ + { .altcode = NULL }, /* 0x0994 */ + { .altcode = NULL }, /* 0x0995 */ + { .altcode = NULL }, /* 0x0996 */ + { .altcode = NULL }, /* 0x0997 */ + { .altcode = NULL }, /* 0x0998 */ + { .altcode = NULL }, /* 0x0999 */ + { .altcode = NULL }, /* 0x099a */ + { .altcode = NULL }, /* 0x099b */ + { .altcode = NULL }, /* 0x099c */ + { .altcode = NULL }, /* 0x099d */ + { .altcode = NULL }, /* 0x099e */ + { .altcode = NULL }, /* 0x099f */ + { .altcode = NULL }, /* 0x09a0 */ + { .altcode = NULL }, /* 0x09a1 */ + { .altcode = NULL }, /* 0x09a2 */ + { .altcode = NULL }, /* 0x09a3 */ + { .altcode = NULL }, /* 0x09a4 */ + { .altcode = NULL }, /* 0x09a5 */ + { .altcode = NULL }, /* 0x09a6 */ + { .altcode = NULL }, /* 0x09a7 */ + { .altcode = NULL }, /* 0x09a8 */ + { .altcode = NULL }, /* 0x09a9 */ + { .altcode = NULL }, /* 0x09aa */ + { .altcode = NULL }, /* 0x09ab */ + { .altcode = NULL }, /* 0x09ac */ + { .altcode = NULL }, /* 0x09ad */ + { .altcode = NULL }, /* 0x09ae */ + { .altcode = NULL }, /* 0x09af */ + { .altcode = NULL }, /* 0x09b0 */ + { .altcode = NULL }, /* 0x09b1 */ + { .altcode = NULL }, /* 0x09b2 */ + { .altcode = NULL }, /* 0x09b3 */ + { .altcode = NULL }, /* 0x09b4 */ + { .altcode = NULL }, /* 0x09b5 */ + { .altcode = NULL }, /* 0x09b6 */ + { .altcode = NULL }, /* 0x09b7 */ + { .altcode = NULL }, /* 0x09b8 */ + { .altcode = NULL }, /* 0x09b9 */ + { .altcode = NULL }, /* 0x09ba */ + { .altcode = NULL }, /* 0x09bb */ + { .altcode = NULL }, /* 0x09bc */ + { .altcode = NULL }, /* 0x09bd */ + { .altcode = NULL }, /* 0x09be */ + { .altcode = NULL }, /* 0x09bf */ + { .altcode = NULL }, /* 0x09c0 */ + { .altcode = NULL }, /* 0x09c1 */ + { .altcode = NULL }, /* 0x09c2 */ + { .altcode = NULL }, /* 0x09c3 */ + { .altcode = NULL }, /* 0x09c4 */ + { .altcode = NULL }, /* 0x09c5 */ + { .altcode = NULL }, /* 0x09c6 */ + { .altcode = NULL }, /* 0x09c7 */ + { .altcode = NULL }, /* 0x09c8 */ + { .altcode = NULL }, /* 0x09c9 */ + { .altcode = NULL }, /* 0x09ca */ + { .altcode = NULL }, /* 0x09cb */ + { .altcode = NULL }, /* 0x09cc */ + { .altcode = NULL }, /* 0x09cd */ + { .altcode = NULL }, /* 0x09ce */ + { .altcode = NULL }, /* 0x09cf */ + { .altcode = NULL }, /* 0x09d0 */ + { .altcode = NULL }, /* 0x09d1 */ + { .altcode = NULL }, /* 0x09d2 */ + { .altcode = NULL }, /* 0x09d3 */ + { .altcode = NULL }, /* 0x09d4 */ + { .altcode = NULL }, /* 0x09d5 */ + { .altcode = NULL }, /* 0x09d6 */ + { .altcode = NULL }, /* 0x09d7 */ + { .altcode = NULL }, /* 0x09d8 */ + { .altcode = NULL }, /* 0x09d9 */ + { .altcode = NULL }, /* 0x09da */ + { .altcode = NULL }, /* 0x09db */ + { .altcode = NULL }, /* 0x09dc */ + { .altcode = NULL }, /* 0x09dd */ + { .altcode = NULL }, /* 0x09de */ + { .altcode = NULL }, /* 0x09df (blank) */ + { .altcode = NULL }, /* 0x09e0 (soliddiamond) */ + { .altcode = NULL }, /* 0x09e1 (checkerboard) */ + { .altcode = NULL }, /* 0x09e2 (ht) */ + { .altcode = NULL }, /* 0x09e3 (ff) */ + { .altcode = NULL }, /* 0x09e4 (cr) */ + { .altcode = NULL }, /* 0x09e5 (lf) */ + { .altcode = NULL }, /* 0x09e6 */ + { .altcode = NULL }, /* 0x09e7 */ + { .altcode = NULL }, /* 0x09e8 (nl) */ + { .altcode = NULL }, /* 0x09e9 (vt) */ + { .altcode = NULL }, /* 0x09ea (lowrightcorner) */ + { .altcode = NULL }, /* 0x09eb (uprightcorner) */ + { .altcode = NULL }, /* 0x09ec (upleftcorner) */ + { .altcode = NULL }, /* 0x09ed (lowleftcorner) */ + { .altcode = NULL }, /* 0x09ee (crossinglines) */ + { .altcode = NULL }, /* 0x09ef (horizlinescan1) */ + { .altcode = NULL }, /* 0x09f0 (horizlinescan3) */ + { .altcode = NULL }, /* 0x09f1 (horizlinescan5) */ + { .altcode = NULL }, /* 0x09f2 (horizlinescan7) */ + { .altcode = NULL }, /* 0x09f3 (horizlinescan9) */ + { .altcode = NULL }, /* 0x09f4 (leftt) */ + { .altcode = NULL }, /* 0x09f5 (rightt) */ + { .altcode = NULL }, /* 0x09f6 (bott) */ + { .altcode = NULL }, /* 0x09f7 (topt) */ + { .altcode = NULL }, /* 0x09f8 (vertbar) */ + { .altcode = NULL }, /* 0x09f9 */ + { .altcode = NULL }, /* 0x09fa */ + { .altcode = NULL }, /* 0x09fb */ + { .altcode = NULL }, /* 0x09fc */ + { .altcode = NULL }, /* 0x09fd */ + { .altcode = NULL }, /* 0x09fe */ + { .altcode = NULL }, /* 0x09ff */ }, { /* 0x0a?? */ - { .altcode = "" }, /* 0x0a00 */ - { .altcode = "" }, /* 0x0a01 */ - { .altcode = "" }, /* 0x0a02 */ - { .altcode = "" }, /* 0x0a03 */ - { .altcode = "" }, /* 0x0a04 */ - { .altcode = "" }, /* 0x0a05 */ - { .altcode = "" }, /* 0x0a06 */ - { .altcode = "" }, /* 0x0a07 */ - { .altcode = "" }, /* 0x0a08 */ - { .altcode = "" }, /* 0x0a09 */ - { .altcode = "" }, /* 0x0a0a */ - { .altcode = "" }, /* 0x0a0b */ - { .altcode = "" }, /* 0x0a0c */ - { .altcode = "" }, /* 0x0a0d */ - { .altcode = "" }, /* 0x0a0e */ - { .altcode = "" }, /* 0x0a0f */ - { .altcode = "" }, /* 0x0a10 */ - { .altcode = "" }, /* 0x0a11 */ - { .altcode = "" }, /* 0x0a12 */ - { .altcode = "" }, /* 0x0a13 */ - { .altcode = "" }, /* 0x0a14 */ - { .altcode = "" }, /* 0x0a15 */ - { .altcode = "" }, /* 0x0a16 */ - { .altcode = "" }, /* 0x0a17 */ - { .altcode = "" }, /* 0x0a18 */ - { .altcode = "" }, /* 0x0a19 */ - { .altcode = "" }, /* 0x0a1a */ - { .altcode = "" }, /* 0x0a1b */ - { .altcode = "" }, /* 0x0a1c */ - { .altcode = "" }, /* 0x0a1d */ - { .altcode = "" }, /* 0x0a1e */ - { .altcode = "" }, /* 0x0a1f */ - { .altcode = "" }, /* 0x0a20 */ - { .altcode = "" }, /* 0x0a21 */ - { .altcode = "" }, /* 0x0a22 */ - { .altcode = "" }, /* 0x0a23 */ - { .altcode = "" }, /* 0x0a24 */ - { .altcode = "" }, /* 0x0a25 */ - { .altcode = "" }, /* 0x0a26 */ - { .altcode = "" }, /* 0x0a27 */ - { .altcode = "" }, /* 0x0a28 */ - { .altcode = "" }, /* 0x0a29 */ - { .altcode = "" }, /* 0x0a2a */ - { .altcode = "" }, /* 0x0a2b */ - { .altcode = "" }, /* 0x0a2c */ - { .altcode = "" }, /* 0x0a2d */ - { .altcode = "" }, /* 0x0a2e */ - { .altcode = "" }, /* 0x0a2f */ - { .altcode = "" }, /* 0x0a30 */ - { .altcode = "" }, /* 0x0a31 */ - { .altcode = "" }, /* 0x0a32 */ - { .altcode = "" }, /* 0x0a33 */ - { .altcode = "" }, /* 0x0a34 */ - { .altcode = "" }, /* 0x0a35 */ - { .altcode = "" }, /* 0x0a36 */ - { .altcode = "" }, /* 0x0a37 */ - { .altcode = "" }, /* 0x0a38 */ - { .altcode = "" }, /* 0x0a39 */ - { .altcode = "" }, /* 0x0a3a */ - { .altcode = "" }, /* 0x0a3b */ - { .altcode = "" }, /* 0x0a3c */ - { .altcode = "" }, /* 0x0a3d */ - { .altcode = "" }, /* 0x0a3e */ - { .altcode = "" }, /* 0x0a3f */ - { .altcode = "" }, /* 0x0a40 */ - { .altcode = "" }, /* 0x0a41 */ - { .altcode = "" }, /* 0x0a42 */ - { .altcode = "" }, /* 0x0a43 */ - { .altcode = "" }, /* 0x0a44 */ - { .altcode = "" }, /* 0x0a45 */ - { .altcode = "" }, /* 0x0a46 */ - { .altcode = "" }, /* 0x0a47 */ - { .altcode = "" }, /* 0x0a48 */ - { .altcode = "" }, /* 0x0a49 */ - { .altcode = "" }, /* 0x0a4a */ - { .altcode = "" }, /* 0x0a4b */ - { .altcode = "" }, /* 0x0a4c */ - { .altcode = "" }, /* 0x0a4d */ - { .altcode = "" }, /* 0x0a4e */ - { .altcode = "" }, /* 0x0a4f */ - { .altcode = "" }, /* 0x0a50 */ - { .altcode = "" }, /* 0x0a51 */ - { .altcode = "" }, /* 0x0a52 */ - { .altcode = "" }, /* 0x0a53 */ - { .altcode = "" }, /* 0x0a54 */ - { .altcode = "" }, /* 0x0a55 */ - { .altcode = "" }, /* 0x0a56 */ - { .altcode = "" }, /* 0x0a57 */ - { .altcode = "" }, /* 0x0a58 */ - { .altcode = "" }, /* 0x0a59 */ - { .altcode = "" }, /* 0x0a5a */ - { .altcode = "" }, /* 0x0a5b */ - { .altcode = "" }, /* 0x0a5c */ - { .altcode = "" }, /* 0x0a5d */ - { .altcode = "" }, /* 0x0a5e */ - { .altcode = "" }, /* 0x0a5f */ - { .altcode = "" }, /* 0x0a60 */ - { .altcode = "" }, /* 0x0a61 */ - { .altcode = "" }, /* 0x0a62 */ - { .altcode = "" }, /* 0x0a63 */ - { .altcode = "" }, /* 0x0a64 */ - { .altcode = "" }, /* 0x0a65 */ - { .altcode = "" }, /* 0x0a66 */ - { .altcode = "" }, /* 0x0a67 */ - { .altcode = "" }, /* 0x0a68 */ - { .altcode = "" }, /* 0x0a69 */ - { .altcode = "" }, /* 0x0a6a */ - { .altcode = "" }, /* 0x0a6b */ - { .altcode = "" }, /* 0x0a6c */ - { .altcode = "" }, /* 0x0a6d */ - { .altcode = "" }, /* 0x0a6e */ - { .altcode = "" }, /* 0x0a6f */ - { .altcode = "" }, /* 0x0a70 */ - { .altcode = "" }, /* 0x0a71 */ - { .altcode = "" }, /* 0x0a72 */ - { .altcode = "" }, /* 0x0a73 */ - { .altcode = "" }, /* 0x0a74 */ - { .altcode = "" }, /* 0x0a75 */ - { .altcode = "" }, /* 0x0a76 */ - { .altcode = "" }, /* 0x0a77 */ - { .altcode = "" }, /* 0x0a78 */ - { .altcode = "" }, /* 0x0a79 */ - { .altcode = "" }, /* 0x0a7a */ - { .altcode = "" }, /* 0x0a7b */ - { .altcode = "" }, /* 0x0a7c */ - { .altcode = "" }, /* 0x0a7d */ - { .altcode = "" }, /* 0x0a7e */ - { .altcode = "" }, /* 0x0a7f */ - { .altcode = "" }, /* 0x0a80 */ - { .altcode = "" }, /* 0x0a81 */ - { .altcode = "" }, /* 0x0a82 */ - { .altcode = "" }, /* 0x0a83 */ - { .altcode = "" }, /* 0x0a84 */ - { .altcode = "" }, /* 0x0a85 */ - { .altcode = "" }, /* 0x0a86 */ - { .altcode = "" }, /* 0x0a87 */ - { .altcode = "" }, /* 0x0a88 */ - { .altcode = "" }, /* 0x0a89 */ - { .altcode = "" }, /* 0x0a8a */ - { .altcode = "" }, /* 0x0a8b */ - { .altcode = "" }, /* 0x0a8c */ - { .altcode = "" }, /* 0x0a8d */ - { .altcode = "" }, /* 0x0a8e */ - { .altcode = "" }, /* 0x0a8f */ - { .altcode = "" }, /* 0x0a90 */ - { .altcode = "" }, /* 0x0a91 */ - { .altcode = "" }, /* 0x0a92 */ - { .altcode = "" }, /* 0x0a93 */ - { .altcode = "" }, /* 0x0a94 */ - { .altcode = "" }, /* 0x0a95 */ - { .altcode = "" }, /* 0x0a96 */ - { .altcode = "" }, /* 0x0a97 */ - { .altcode = "" }, /* 0x0a98 */ - { .altcode = "" }, /* 0x0a99 */ - { .altcode = "" }, /* 0x0a9a */ - { .altcode = "" }, /* 0x0a9b */ - { .altcode = "" }, /* 0x0a9c */ - { .altcode = "" }, /* 0x0a9d */ - { .altcode = "" }, /* 0x0a9e */ - { .altcode = "" }, /* 0x0a9f */ - { .altcode = "" }, /* 0x0aa0 */ - { .altcode = "" }, /* 0x0aa1 (emspace) */ - { .altcode = "" }, /* 0x0aa2 (enspace) */ - { .altcode = "" }, /* 0x0aa3 (em3space) */ - { .altcode = "" }, /* 0x0aa4 (em4space) */ - { .altcode = "" }, /* 0x0aa5 (digitspace) */ - { .altcode = "" }, /* 0x0aa6 (punctspace) */ - { .altcode = "" }, /* 0x0aa7 (thinspace) */ - { .altcode = "" }, /* 0x0aa8 (hairspace) */ - { .altcode = "" }, /* 0x0aa9 (emdash) */ - { .altcode = "" }, /* 0x0aaa (endash) */ - { .altcode = "" }, /* 0x0aab */ - { .altcode = "" }, /* 0x0aac (signifblank) */ - { .altcode = "" }, /* 0x0aad */ - { .altcode = "" }, /* 0x0aae (ellipsis) */ - { .altcode = "" }, /* 0x0aaf (doubbaselinedot) */ - { .altcode = "" }, /* 0x0ab0 (onethird) */ - { .altcode = "" }, /* 0x0ab1 (twothirds) */ - { .altcode = "" }, /* 0x0ab2 (onefifth) */ - { .altcode = "" }, /* 0x0ab3 (twofifths) */ - { .altcode = "" }, /* 0x0ab4 (threefifths) */ - { .altcode = "" }, /* 0x0ab5 (fourfifths) */ - { .altcode = "" }, /* 0x0ab6 (onesixth) */ - { .altcode = "" }, /* 0x0ab7 (fivesixths) */ - { .altcode = "" }, /* 0x0ab8 (careof) */ - { .altcode = "" }, /* 0x0ab9 */ - { .altcode = "" }, /* 0x0aba */ - { .altcode = "" }, /* 0x0abb (figdash) */ - { .altcode = "" }, /* 0x0abc (leftanglebracket) */ - { .altcode = "" }, /* 0x0abd (decimalpoint) */ - { .altcode = "" }, /* 0x0abe (rightanglebracket) */ - { .altcode = "" }, /* 0x0abf (marker) */ - { .altcode = "" }, /* 0x0ac0 */ - { .altcode = "" }, /* 0x0ac1 */ - { .altcode = "" }, /* 0x0ac2 */ - { .altcode = "" }, /* 0x0ac3 (oneeighth) */ - { .altcode = "" }, /* 0x0ac4 (threeeighths) */ - { .altcode = "" }, /* 0x0ac5 (fiveeighths) */ - { .altcode = "" }, /* 0x0ac6 (seveneighths) */ - { .altcode = "" }, /* 0x0ac7 */ - { .altcode = "" }, /* 0x0ac8 */ - { .altcode = "" }, /* 0x0ac9 (trademark) */ - { .altcode = "" }, /* 0x0aca (signaturemark) */ - { .altcode = "" }, /* 0x0acb (trademarkincircle) */ - { .altcode = "" }, /* 0x0acc (leftopentriangle) */ - { .altcode = "" }, /* 0x0acd (rightopentriangle) */ - { .altcode = "" }, /* 0x0ace (emopencircle) */ - { .altcode = "" }, /* 0x0acf (emopenrectangle) */ - { .altcode = "" }, /* 0x0ad0 (leftsinglequotemark) */ - { .altcode = "" }, /* 0x0ad1 (rightsinglequotemark) */ - { .altcode = "" }, /* 0x0ad2 (leftdoublequotemark) */ - { .altcode = "" }, /* 0x0ad3 (rightdoublequotemark) */ - { .altcode = "" }, /* 0x0ad4 (prescription) */ - { .altcode = "" }, /* 0x0ad5 */ - { .altcode = "" }, /* 0x0ad6 (minutes) */ - { .altcode = "" }, /* 0x0ad7 (seconds) */ - { .altcode = "" }, /* 0x0ad8 */ - { .altcode = "" }, /* 0x0ad9 (latincross) */ - { .altcode = "" }, /* 0x0ada (hexagram) */ - { .altcode = "" }, /* 0x0adb (filledrectbullet) */ - { .altcode = "" }, /* 0x0adc (filledlefttribullet) */ - { .altcode = "" }, /* 0x0add (filledrighttribullet) */ - { .altcode = "" }, /* 0x0ade (emfilledcircle) */ - { .altcode = "" }, /* 0x0adf (emfilledrect) */ - { .altcode = "" }, /* 0x0ae0 (enopencircbullet) */ - { .altcode = "" }, /* 0x0ae1 (enopensquarebullet) */ - { .altcode = "" }, /* 0x0ae2 (openrectbullet) */ - { .altcode = "" }, /* 0x0ae3 (opentribulletup) */ - { .altcode = "" }, /* 0x0ae4 (opentribulletdown) */ - { .altcode = "" }, /* 0x0ae5 (openstar) */ - { .altcode = "" }, /* 0x0ae6 (enfilledcircbullet) */ - { .altcode = "" }, /* 0x0ae7 (enfilledsqbullet) */ - { .altcode = "" }, /* 0x0ae8 (filledtribulletup) */ - { .altcode = "" }, /* 0x0ae9 (filledtribulletdown) */ - { .altcode = "" }, /* 0x0aea (leftpointer) */ - { .altcode = "" }, /* 0x0aeb (rightpointer) */ - { .altcode = "" }, /* 0x0aec (club) */ - { .altcode = "" }, /* 0x0aed (diamond) */ - { .altcode = "" }, /* 0x0aee (heart) */ - { .altcode = "" }, /* 0x0aef */ - { .altcode = "" }, /* 0x0af0 (maltesecross) */ - { .altcode = "" }, /* 0x0af1 (dagger) */ - { .altcode = "" }, /* 0x0af2 (doubledagger) */ - { .altcode = "" }, /* 0x0af3 (checkmark) */ - { .altcode = "" }, /* 0x0af4 (ballotcross) */ - { .altcode = "" }, /* 0x0af5 (musicalsharp) */ - { .altcode = "" }, /* 0x0af6 (musicalflat) */ - { .altcode = "" }, /* 0x0af7 (malesymbol) */ - { .altcode = "" }, /* 0x0af8 (femalesymbol) */ - { .altcode = "" }, /* 0x0af9 (telephone) */ - { .altcode = "" }, /* 0x0afa (telephonerecorder) */ - { .altcode = "" }, /* 0x0afb (phonographcopyright) */ - { .altcode = "" }, /* 0x0afc (caret) */ - { .altcode = "" }, /* 0x0afd (singlelowquotemark) */ - { .altcode = "" }, /* 0x0afe (doublelowquotemark) */ - { .altcode = "" }, /* 0x0aff (cursor) */ + { .altcode = NULL }, /* 0x0a00 */ + { .altcode = NULL }, /* 0x0a01 */ + { .altcode = NULL }, /* 0x0a02 */ + { .altcode = NULL }, /* 0x0a03 */ + { .altcode = NULL }, /* 0x0a04 */ + { .altcode = NULL }, /* 0x0a05 */ + { .altcode = NULL }, /* 0x0a06 */ + { .altcode = NULL }, /* 0x0a07 */ + { .altcode = NULL }, /* 0x0a08 */ + { .altcode = NULL }, /* 0x0a09 */ + { .altcode = NULL }, /* 0x0a0a */ + { .altcode = NULL }, /* 0x0a0b */ + { .altcode = NULL }, /* 0x0a0c */ + { .altcode = NULL }, /* 0x0a0d */ + { .altcode = NULL }, /* 0x0a0e */ + { .altcode = NULL }, /* 0x0a0f */ + { .altcode = NULL }, /* 0x0a10 */ + { .altcode = NULL }, /* 0x0a11 */ + { .altcode = NULL }, /* 0x0a12 */ + { .altcode = NULL }, /* 0x0a13 */ + { .altcode = NULL }, /* 0x0a14 */ + { .altcode = NULL }, /* 0x0a15 */ + { .altcode = NULL }, /* 0x0a16 */ + { .altcode = NULL }, /* 0x0a17 */ + { .altcode = NULL }, /* 0x0a18 */ + { .altcode = NULL }, /* 0x0a19 */ + { .altcode = NULL }, /* 0x0a1a */ + { .altcode = NULL }, /* 0x0a1b */ + { .altcode = NULL }, /* 0x0a1c */ + { .altcode = NULL }, /* 0x0a1d */ + { .altcode = NULL }, /* 0x0a1e */ + { .altcode = NULL }, /* 0x0a1f */ + { .altcode = NULL }, /* 0x0a20 */ + { .altcode = NULL }, /* 0x0a21 */ + { .altcode = NULL }, /* 0x0a22 */ + { .altcode = NULL }, /* 0x0a23 */ + { .altcode = NULL }, /* 0x0a24 */ + { .altcode = NULL }, /* 0x0a25 */ + { .altcode = NULL }, /* 0x0a26 */ + { .altcode = NULL }, /* 0x0a27 */ + { .altcode = NULL }, /* 0x0a28 */ + { .altcode = NULL }, /* 0x0a29 */ + { .altcode = NULL }, /* 0x0a2a */ + { .altcode = NULL }, /* 0x0a2b */ + { .altcode = NULL }, /* 0x0a2c */ + { .altcode = NULL }, /* 0x0a2d */ + { .altcode = NULL }, /* 0x0a2e */ + { .altcode = NULL }, /* 0x0a2f */ + { .altcode = NULL }, /* 0x0a30 */ + { .altcode = NULL }, /* 0x0a31 */ + { .altcode = NULL }, /* 0x0a32 */ + { .altcode = NULL }, /* 0x0a33 */ + { .altcode = NULL }, /* 0x0a34 */ + { .altcode = NULL }, /* 0x0a35 */ + { .altcode = NULL }, /* 0x0a36 */ + { .altcode = NULL }, /* 0x0a37 */ + { .altcode = NULL }, /* 0x0a38 */ + { .altcode = NULL }, /* 0x0a39 */ + { .altcode = NULL }, /* 0x0a3a */ + { .altcode = NULL }, /* 0x0a3b */ + { .altcode = NULL }, /* 0x0a3c */ + { .altcode = NULL }, /* 0x0a3d */ + { .altcode = NULL }, /* 0x0a3e */ + { .altcode = NULL }, /* 0x0a3f */ + { .altcode = NULL }, /* 0x0a40 */ + { .altcode = NULL }, /* 0x0a41 */ + { .altcode = NULL }, /* 0x0a42 */ + { .altcode = NULL }, /* 0x0a43 */ + { .altcode = NULL }, /* 0x0a44 */ + { .altcode = NULL }, /* 0x0a45 */ + { .altcode = NULL }, /* 0x0a46 */ + { .altcode = NULL }, /* 0x0a47 */ + { .altcode = NULL }, /* 0x0a48 */ + { .altcode = NULL }, /* 0x0a49 */ + { .altcode = NULL }, /* 0x0a4a */ + { .altcode = NULL }, /* 0x0a4b */ + { .altcode = NULL }, /* 0x0a4c */ + { .altcode = NULL }, /* 0x0a4d */ + { .altcode = NULL }, /* 0x0a4e */ + { .altcode = NULL }, /* 0x0a4f */ + { .altcode = NULL }, /* 0x0a50 */ + { .altcode = NULL }, /* 0x0a51 */ + { .altcode = NULL }, /* 0x0a52 */ + { .altcode = NULL }, /* 0x0a53 */ + { .altcode = NULL }, /* 0x0a54 */ + { .altcode = NULL }, /* 0x0a55 */ + { .altcode = NULL }, /* 0x0a56 */ + { .altcode = NULL }, /* 0x0a57 */ + { .altcode = NULL }, /* 0x0a58 */ + { .altcode = NULL }, /* 0x0a59 */ + { .altcode = NULL }, /* 0x0a5a */ + { .altcode = NULL }, /* 0x0a5b */ + { .altcode = NULL }, /* 0x0a5c */ + { .altcode = NULL }, /* 0x0a5d */ + { .altcode = NULL }, /* 0x0a5e */ + { .altcode = NULL }, /* 0x0a5f */ + { .altcode = NULL }, /* 0x0a60 */ + { .altcode = NULL }, /* 0x0a61 */ + { .altcode = NULL }, /* 0x0a62 */ + { .altcode = NULL }, /* 0x0a63 */ + { .altcode = NULL }, /* 0x0a64 */ + { .altcode = NULL }, /* 0x0a65 */ + { .altcode = NULL }, /* 0x0a66 */ + { .altcode = NULL }, /* 0x0a67 */ + { .altcode = NULL }, /* 0x0a68 */ + { .altcode = NULL }, /* 0x0a69 */ + { .altcode = NULL }, /* 0x0a6a */ + { .altcode = NULL }, /* 0x0a6b */ + { .altcode = NULL }, /* 0x0a6c */ + { .altcode = NULL }, /* 0x0a6d */ + { .altcode = NULL }, /* 0x0a6e */ + { .altcode = NULL }, /* 0x0a6f */ + { .altcode = NULL }, /* 0x0a70 */ + { .altcode = NULL }, /* 0x0a71 */ + { .altcode = NULL }, /* 0x0a72 */ + { .altcode = NULL }, /* 0x0a73 */ + { .altcode = NULL }, /* 0x0a74 */ + { .altcode = NULL }, /* 0x0a75 */ + { .altcode = NULL }, /* 0x0a76 */ + { .altcode = NULL }, /* 0x0a77 */ + { .altcode = NULL }, /* 0x0a78 */ + { .altcode = NULL }, /* 0x0a79 */ + { .altcode = NULL }, /* 0x0a7a */ + { .altcode = NULL }, /* 0x0a7b */ + { .altcode = NULL }, /* 0x0a7c */ + { .altcode = NULL }, /* 0x0a7d */ + { .altcode = NULL }, /* 0x0a7e */ + { .altcode = NULL }, /* 0x0a7f */ + { .altcode = NULL }, /* 0x0a80 */ + { .altcode = NULL }, /* 0x0a81 */ + { .altcode = NULL }, /* 0x0a82 */ + { .altcode = NULL }, /* 0x0a83 */ + { .altcode = NULL }, /* 0x0a84 */ + { .altcode = NULL }, /* 0x0a85 */ + { .altcode = NULL }, /* 0x0a86 */ + { .altcode = NULL }, /* 0x0a87 */ + { .altcode = NULL }, /* 0x0a88 */ + { .altcode = NULL }, /* 0x0a89 */ + { .altcode = NULL }, /* 0x0a8a */ + { .altcode = NULL }, /* 0x0a8b */ + { .altcode = NULL }, /* 0x0a8c */ + { .altcode = NULL }, /* 0x0a8d */ + { .altcode = NULL }, /* 0x0a8e */ + { .altcode = NULL }, /* 0x0a8f */ + { .altcode = NULL }, /* 0x0a90 */ + { .altcode = NULL }, /* 0x0a91 */ + { .altcode = NULL }, /* 0x0a92 */ + { .altcode = NULL }, /* 0x0a93 */ + { .altcode = NULL }, /* 0x0a94 */ + { .altcode = NULL }, /* 0x0a95 */ + { .altcode = NULL }, /* 0x0a96 */ + { .altcode = NULL }, /* 0x0a97 */ + { .altcode = NULL }, /* 0x0a98 */ + { .altcode = NULL }, /* 0x0a99 */ + { .altcode = NULL }, /* 0x0a9a */ + { .altcode = NULL }, /* 0x0a9b */ + { .altcode = NULL }, /* 0x0a9c */ + { .altcode = NULL }, /* 0x0a9d */ + { .altcode = NULL }, /* 0x0a9e */ + { .altcode = NULL }, /* 0x0a9f */ + { .altcode = NULL }, /* 0x0aa0 */ + { .altcode = NULL }, /* 0x0aa1 (emspace) */ + { .altcode = NULL }, /* 0x0aa2 (enspace) */ + { .altcode = NULL }, /* 0x0aa3 (em3space) */ + { .altcode = NULL }, /* 0x0aa4 (em4space) */ + { .altcode = NULL }, /* 0x0aa5 (digitspace) */ + { .altcode = NULL }, /* 0x0aa6 (punctspace) */ + { .altcode = NULL }, /* 0x0aa7 (thinspace) */ + { .altcode = NULL }, /* 0x0aa8 (hairspace) */ + { .altcode = NULL }, /* 0x0aa9 (emdash) */ + { .altcode = NULL }, /* 0x0aaa (endash) */ + { .altcode = NULL }, /* 0x0aab */ + { .altcode = NULL }, /* 0x0aac (signifblank) */ + { .altcode = NULL }, /* 0x0aad */ + { .altcode = NULL }, /* 0x0aae (ellipsis) */ + { .altcode = NULL }, /* 0x0aaf (doubbaselinedot) */ + { .altcode = NULL }, /* 0x0ab0 (onethird) */ + { .altcode = NULL }, /* 0x0ab1 (twothirds) */ + { .altcode = NULL }, /* 0x0ab2 (onefifth) */ + { .altcode = NULL }, /* 0x0ab3 (twofifths) */ + { .altcode = NULL }, /* 0x0ab4 (threefifths) */ + { .altcode = NULL }, /* 0x0ab5 (fourfifths) */ + { .altcode = NULL }, /* 0x0ab6 (onesixth) */ + { .altcode = NULL }, /* 0x0ab7 (fivesixths) */ + { .altcode = NULL }, /* 0x0ab8 (careof) */ + { .altcode = NULL }, /* 0x0ab9 */ + { .altcode = NULL }, /* 0x0aba */ + { .altcode = NULL }, /* 0x0abb (figdash) */ + { .altcode = NULL }, /* 0x0abc (leftanglebracket) */ + { .altcode = NULL }, /* 0x0abd (decimalpoint) */ + { .altcode = NULL }, /* 0x0abe (rightanglebracket) */ + { .altcode = NULL }, /* 0x0abf (marker) */ + { .altcode = NULL }, /* 0x0ac0 */ + { .altcode = NULL }, /* 0x0ac1 */ + { .altcode = NULL }, /* 0x0ac2 */ + { .altcode = NULL }, /* 0x0ac3 (oneeighth) */ + { .altcode = NULL }, /* 0x0ac4 (threeeighths) */ + { .altcode = NULL }, /* 0x0ac5 (fiveeighths) */ + { .altcode = NULL }, /* 0x0ac6 (seveneighths) */ + { .altcode = NULL }, /* 0x0ac7 */ + { .altcode = NULL }, /* 0x0ac8 */ + { .altcode = NULL }, /* 0x0ac9 (trademark) */ + { .altcode = NULL }, /* 0x0aca (signaturemark) */ + { .altcode = NULL }, /* 0x0acb (trademarkincircle) */ + { .altcode = NULL }, /* 0x0acc (leftopentriangle) */ + { .altcode = NULL }, /* 0x0acd (rightopentriangle) */ + { .altcode = NULL }, /* 0x0ace (emopencircle) */ + { .altcode = NULL }, /* 0x0acf (emopenrectangle) */ + { .altcode = NULL }, /* 0x0ad0 (leftsinglequotemark) */ + { .altcode = NULL }, /* 0x0ad1 (rightsinglequotemark) */ + { .altcode = NULL }, /* 0x0ad2 (leftdoublequotemark) */ + { .altcode = NULL }, /* 0x0ad3 (rightdoublequotemark) */ + { .altcode = NULL }, /* 0x0ad4 (prescription) */ + { .altcode = NULL }, /* 0x0ad5 */ + { .altcode = NULL }, /* 0x0ad6 (minutes) */ + { .altcode = NULL }, /* 0x0ad7 (seconds) */ + { .altcode = NULL }, /* 0x0ad8 */ + { .altcode = NULL }, /* 0x0ad9 (latincross) */ + { .altcode = NULL }, /* 0x0ada (hexagram) */ + { .altcode = NULL }, /* 0x0adb (filledrectbullet) */ + { .altcode = NULL }, /* 0x0adc (filledlefttribullet) */ + { .altcode = NULL }, /* 0x0add (filledrighttribullet) */ + { .altcode = NULL }, /* 0x0ade (emfilledcircle) */ + { .altcode = NULL }, /* 0x0adf (emfilledrect) */ + { .altcode = NULL }, /* 0x0ae0 (enopencircbullet) */ + { .altcode = NULL }, /* 0x0ae1 (enopensquarebullet) */ + { .altcode = NULL }, /* 0x0ae2 (openrectbullet) */ + { .altcode = NULL }, /* 0x0ae3 (opentribulletup) */ + { .altcode = NULL }, /* 0x0ae4 (opentribulletdown) */ + { .altcode = NULL }, /* 0x0ae5 (openstar) */ + { .altcode = NULL }, /* 0x0ae6 (enfilledcircbullet) */ + { .altcode = NULL }, /* 0x0ae7 (enfilledsqbullet) */ + { .altcode = NULL }, /* 0x0ae8 (filledtribulletup) */ + { .altcode = NULL }, /* 0x0ae9 (filledtribulletdown) */ + { .altcode = NULL }, /* 0x0aea (leftpointer) */ + { .altcode = NULL }, /* 0x0aeb (rightpointer) */ + { .altcode = NULL }, /* 0x0aec (club) */ + { .altcode = NULL }, /* 0x0aed (diamond) */ + { .altcode = NULL }, /* 0x0aee (heart) */ + { .altcode = NULL }, /* 0x0aef */ + { .altcode = NULL }, /* 0x0af0 (maltesecross) */ + { .altcode = NULL }, /* 0x0af1 (dagger) */ + { .altcode = NULL }, /* 0x0af2 (doubledagger) */ + { .altcode = NULL }, /* 0x0af3 (checkmark) */ + { .altcode = NULL }, /* 0x0af4 (ballotcross) */ + { .altcode = NULL }, /* 0x0af5 (musicalsharp) */ + { .altcode = NULL }, /* 0x0af6 (musicalflat) */ + { .altcode = NULL }, /* 0x0af7 (malesymbol) */ + { .altcode = NULL }, /* 0x0af8 (femalesymbol) */ + { .altcode = NULL }, /* 0x0af9 (telephone) */ + { .altcode = NULL }, /* 0x0afa (telephonerecorder) */ + { .altcode = NULL }, /* 0x0afb (phonographcopyright) */ + { .altcode = NULL }, /* 0x0afc (caret) */ + { .altcode = NULL }, /* 0x0afd (singlelowquotemark) */ + { .altcode = NULL }, /* 0x0afe (doublelowquotemark) */ + { .altcode = NULL }, /* 0x0aff (cursor) */ }, { /* 0x0b?? */ - { .altcode = "" }, /* 0x0b00 */ - { .altcode = "" }, /* 0x0b01 */ - { .altcode = "" }, /* 0x0b02 */ - { .altcode = "" }, /* 0x0b03 */ - { .altcode = "" }, /* 0x0b04 */ - { .altcode = "" }, /* 0x0b05 */ - { .altcode = "" }, /* 0x0b06 */ - { .altcode = "" }, /* 0x0b07 */ - { .altcode = "" }, /* 0x0b08 */ - { .altcode = "" }, /* 0x0b09 */ - { .altcode = "" }, /* 0x0b0a */ - { .altcode = "" }, /* 0x0b0b */ - { .altcode = "" }, /* 0x0b0c */ - { .altcode = "" }, /* 0x0b0d */ - { .altcode = "" }, /* 0x0b0e */ - { .altcode = "" }, /* 0x0b0f */ - { .altcode = "" }, /* 0x0b10 */ - { .altcode = "" }, /* 0x0b11 */ - { .altcode = "" }, /* 0x0b12 */ - { .altcode = "" }, /* 0x0b13 */ - { .altcode = "" }, /* 0x0b14 */ - { .altcode = "" }, /* 0x0b15 */ - { .altcode = "" }, /* 0x0b16 */ - { .altcode = "" }, /* 0x0b17 */ - { .altcode = "" }, /* 0x0b18 */ - { .altcode = "" }, /* 0x0b19 */ - { .altcode = "" }, /* 0x0b1a */ - { .altcode = "" }, /* 0x0b1b */ - { .altcode = "" }, /* 0x0b1c */ - { .altcode = "" }, /* 0x0b1d */ - { .altcode = "" }, /* 0x0b1e */ - { .altcode = "" }, /* 0x0b1f */ - { .altcode = "" }, /* 0x0b20 */ - { .altcode = "" }, /* 0x0b21 */ - { .altcode = "" }, /* 0x0b22 */ - { .altcode = "" }, /* 0x0b23 */ - { .altcode = "" }, /* 0x0b24 */ - { .altcode = "" }, /* 0x0b25 */ - { .altcode = "" }, /* 0x0b26 */ - { .altcode = "" }, /* 0x0b27 */ - { .altcode = "" }, /* 0x0b28 */ - { .altcode = "" }, /* 0x0b29 */ - { .altcode = "" }, /* 0x0b2a */ - { .altcode = "" }, /* 0x0b2b */ - { .altcode = "" }, /* 0x0b2c */ - { .altcode = "" }, /* 0x0b2d */ - { .altcode = "" }, /* 0x0b2e */ - { .altcode = "" }, /* 0x0b2f */ - { .altcode = "" }, /* 0x0b30 */ - { .altcode = "" }, /* 0x0b31 */ - { .altcode = "" }, /* 0x0b32 */ - { .altcode = "" }, /* 0x0b33 */ - { .altcode = "" }, /* 0x0b34 */ - { .altcode = "" }, /* 0x0b35 */ - { .altcode = "" }, /* 0x0b36 */ - { .altcode = "" }, /* 0x0b37 */ - { .altcode = "" }, /* 0x0b38 */ - { .altcode = "" }, /* 0x0b39 */ - { .altcode = "" }, /* 0x0b3a */ - { .altcode = "" }, /* 0x0b3b */ - { .altcode = "" }, /* 0x0b3c */ - { .altcode = "" }, /* 0x0b3d */ - { .altcode = "" }, /* 0x0b3e */ - { .altcode = "" }, /* 0x0b3f */ - { .altcode = "" }, /* 0x0b40 */ - { .altcode = "" }, /* 0x0b41 */ - { .altcode = "" }, /* 0x0b42 */ - { .altcode = "" }, /* 0x0b43 */ - { .altcode = "" }, /* 0x0b44 */ - { .altcode = "" }, /* 0x0b45 */ - { .altcode = "" }, /* 0x0b46 */ - { .altcode = "" }, /* 0x0b47 */ - { .altcode = "" }, /* 0x0b48 */ - { .altcode = "" }, /* 0x0b49 */ - { .altcode = "" }, /* 0x0b4a */ - { .altcode = "" }, /* 0x0b4b */ - { .altcode = "" }, /* 0x0b4c */ - { .altcode = "" }, /* 0x0b4d */ - { .altcode = "" }, /* 0x0b4e */ - { .altcode = "" }, /* 0x0b4f */ - { .altcode = "" }, /* 0x0b50 */ - { .altcode = "" }, /* 0x0b51 */ - { .altcode = "" }, /* 0x0b52 */ - { .altcode = "" }, /* 0x0b53 */ - { .altcode = "" }, /* 0x0b54 */ - { .altcode = "" }, /* 0x0b55 */ - { .altcode = "" }, /* 0x0b56 */ - { .altcode = "" }, /* 0x0b57 */ - { .altcode = "" }, /* 0x0b58 */ - { .altcode = "" }, /* 0x0b59 */ - { .altcode = "" }, /* 0x0b5a */ - { .altcode = "" }, /* 0x0b5b */ - { .altcode = "" }, /* 0x0b5c */ - { .altcode = "" }, /* 0x0b5d */ - { .altcode = "" }, /* 0x0b5e */ - { .altcode = "" }, /* 0x0b5f */ - { .altcode = "" }, /* 0x0b60 */ - { .altcode = "" }, /* 0x0b61 */ - { .altcode = "" }, /* 0x0b62 */ - { .altcode = "" }, /* 0x0b63 */ - { .altcode = "" }, /* 0x0b64 */ - { .altcode = "" }, /* 0x0b65 */ - { .altcode = "" }, /* 0x0b66 */ - { .altcode = "" }, /* 0x0b67 */ - { .altcode = "" }, /* 0x0b68 */ - { .altcode = "" }, /* 0x0b69 */ - { .altcode = "" }, /* 0x0b6a */ - { .altcode = "" }, /* 0x0b6b */ - { .altcode = "" }, /* 0x0b6c */ - { .altcode = "" }, /* 0x0b6d */ - { .altcode = "" }, /* 0x0b6e */ - { .altcode = "" }, /* 0x0b6f */ - { .altcode = "" }, /* 0x0b70 */ - { .altcode = "" }, /* 0x0b71 */ - { .altcode = "" }, /* 0x0b72 */ - { .altcode = "" }, /* 0x0b73 */ - { .altcode = "" }, /* 0x0b74 */ - { .altcode = "" }, /* 0x0b75 */ - { .altcode = "" }, /* 0x0b76 */ - { .altcode = "" }, /* 0x0b77 */ - { .altcode = "" }, /* 0x0b78 */ - { .altcode = "" }, /* 0x0b79 */ - { .altcode = "" }, /* 0x0b7a */ - { .altcode = "" }, /* 0x0b7b */ - { .altcode = "" }, /* 0x0b7c */ - { .altcode = "" }, /* 0x0b7d */ - { .altcode = "" }, /* 0x0b7e */ - { .altcode = "" }, /* 0x0b7f */ - { .altcode = "" }, /* 0x0b80 */ - { .altcode = "" }, /* 0x0b81 */ - { .altcode = "" }, /* 0x0b82 */ - { .altcode = "" }, /* 0x0b83 */ - { .altcode = "" }, /* 0x0b84 */ - { .altcode = "" }, /* 0x0b85 */ - { .altcode = "" }, /* 0x0b86 */ - { .altcode = "" }, /* 0x0b87 */ - { .altcode = "" }, /* 0x0b88 */ - { .altcode = "" }, /* 0x0b89 */ - { .altcode = "" }, /* 0x0b8a */ - { .altcode = "" }, /* 0x0b8b */ - { .altcode = "" }, /* 0x0b8c */ - { .altcode = "" }, /* 0x0b8d */ - { .altcode = "" }, /* 0x0b8e */ - { .altcode = "" }, /* 0x0b8f */ - { .altcode = "" }, /* 0x0b90 */ - { .altcode = "" }, /* 0x0b91 */ - { .altcode = "" }, /* 0x0b92 */ - { .altcode = "" }, /* 0x0b93 */ - { .altcode = "" }, /* 0x0b94 */ - { .altcode = "" }, /* 0x0b95 */ - { .altcode = "" }, /* 0x0b96 */ - { .altcode = "" }, /* 0x0b97 */ - { .altcode = "" }, /* 0x0b98 */ - { .altcode = "" }, /* 0x0b99 */ - { .altcode = "" }, /* 0x0b9a */ - { .altcode = "" }, /* 0x0b9b */ - { .altcode = "" }, /* 0x0b9c */ - { .altcode = "" }, /* 0x0b9d */ - { .altcode = "" }, /* 0x0b9e */ - { .altcode = "" }, /* 0x0b9f */ - { .altcode = "" }, /* 0x0ba0 */ - { .altcode = "" }, /* 0x0ba1 */ - { .altcode = "" }, /* 0x0ba2 */ - { .altcode = "" }, /* 0x0ba3 (leftcaret) */ - { .altcode = "" }, /* 0x0ba4 */ - { .altcode = "" }, /* 0x0ba5 */ - { .altcode = "" }, /* 0x0ba6 (rightcaret) */ - { .altcode = "" }, /* 0x0ba7 */ - { .altcode = "" }, /* 0x0ba8 (downcaret) */ - { .altcode = "" }, /* 0x0ba9 (upcaret) */ - { .altcode = "" }, /* 0x0baa */ - { .altcode = "" }, /* 0x0bab */ - { .altcode = "" }, /* 0x0bac */ - { .altcode = "" }, /* 0x0bad */ - { .altcode = "" }, /* 0x0bae */ - { .altcode = "" }, /* 0x0baf */ - { .altcode = "" }, /* 0x0bb0 */ - { .altcode = "" }, /* 0x0bb1 */ - { .altcode = "" }, /* 0x0bb2 */ - { .altcode = "" }, /* 0x0bb3 */ - { .altcode = "" }, /* 0x0bb4 */ - { .altcode = "" }, /* 0x0bb5 */ - { .altcode = "" }, /* 0x0bb6 */ - { .altcode = "" }, /* 0x0bb7 */ - { .altcode = "" }, /* 0x0bb8 */ - { .altcode = "" }, /* 0x0bb9 */ - { .altcode = "" }, /* 0x0bba */ - { .altcode = "" }, /* 0x0bbb */ - { .altcode = "" }, /* 0x0bbc */ - { .altcode = "" }, /* 0x0bbd */ - { .altcode = "" }, /* 0x0bbe */ - { .altcode = "" }, /* 0x0bbf */ - { .altcode = "" }, /* 0x0bc0 (overbar) */ - { .altcode = "" }, /* 0x0bc1 */ - { .altcode = "" }, /* 0x0bc2 (downtack) */ - { .altcode = "" }, /* 0x0bc3 (upshoe) */ - { .altcode = "" }, /* 0x0bc4 (downstile) */ - { .altcode = "" }, /* 0x0bc5 */ - { .altcode = "" }, /* 0x0bc6 (underbar) */ - { .altcode = "" }, /* 0x0bc7 */ - { .altcode = "" }, /* 0x0bc8 */ - { .altcode = "" }, /* 0x0bc9 */ - { .altcode = "" }, /* 0x0bca (jot) */ - { .altcode = "" }, /* 0x0bcb */ - { .altcode = "" }, /* 0x0bcc (quad) */ - { .altcode = "" }, /* 0x0bcd */ - { .altcode = "" }, /* 0x0bce (uptack) */ - { .altcode = "" }, /* 0x0bcf (circle) */ - { .altcode = "" }, /* 0x0bd0 */ - { .altcode = "" }, /* 0x0bd1 */ - { .altcode = "" }, /* 0x0bd2 */ - { .altcode = "" }, /* 0x0bd3 (upstile) */ - { .altcode = "" }, /* 0x0bd4 */ - { .altcode = "" }, /* 0x0bd5 */ - { .altcode = "" }, /* 0x0bd6 (downshoe) */ - { .altcode = "" }, /* 0x0bd7 */ - { .altcode = "" }, /* 0x0bd8 (rightshoe) */ - { .altcode = "" }, /* 0x0bd9 */ - { .altcode = "" }, /* 0x0bda (leftshoe) */ - { .altcode = "" }, /* 0x0bdb */ - { .altcode = "" }, /* 0x0bdc (lefttack) */ - { .altcode = "" }, /* 0x0bdd */ - { .altcode = "" }, /* 0x0bde */ - { .altcode = "" }, /* 0x0bdf */ - { .altcode = "" }, /* 0x0be0 */ - { .altcode = "" }, /* 0x0be1 */ - { .altcode = "" }, /* 0x0be2 */ - { .altcode = "" }, /* 0x0be3 */ - { .altcode = "" }, /* 0x0be4 */ - { .altcode = "" }, /* 0x0be5 */ - { .altcode = "" }, /* 0x0be6 */ - { .altcode = "" }, /* 0x0be7 */ - { .altcode = "" }, /* 0x0be8 */ - { .altcode = "" }, /* 0x0be9 */ - { .altcode = "" }, /* 0x0bea */ - { .altcode = "" }, /* 0x0beb */ - { .altcode = "" }, /* 0x0bec */ - { .altcode = "" }, /* 0x0bed */ - { .altcode = "" }, /* 0x0bee */ - { .altcode = "" }, /* 0x0bef */ - { .altcode = "" }, /* 0x0bf0 */ - { .altcode = "" }, /* 0x0bf1 */ - { .altcode = "" }, /* 0x0bf2 */ - { .altcode = "" }, /* 0x0bf3 */ - { .altcode = "" }, /* 0x0bf4 */ - { .altcode = "" }, /* 0x0bf5 */ - { .altcode = "" }, /* 0x0bf6 */ - { .altcode = "" }, /* 0x0bf7 */ - { .altcode = "" }, /* 0x0bf8 */ - { .altcode = "" }, /* 0x0bf9 */ - { .altcode = "" }, /* 0x0bfa */ - { .altcode = "" }, /* 0x0bfb */ - { .altcode = "" }, /* 0x0bfc (righttack) */ - { .altcode = "" }, /* 0x0bfd */ - { .altcode = "" }, /* 0x0bfe */ - { .altcode = "" }, /* 0x0bff */ + { .altcode = NULL }, /* 0x0b00 */ + { .altcode = NULL }, /* 0x0b01 */ + { .altcode = NULL }, /* 0x0b02 */ + { .altcode = NULL }, /* 0x0b03 */ + { .altcode = NULL }, /* 0x0b04 */ + { .altcode = NULL }, /* 0x0b05 */ + { .altcode = NULL }, /* 0x0b06 */ + { .altcode = NULL }, /* 0x0b07 */ + { .altcode = NULL }, /* 0x0b08 */ + { .altcode = NULL }, /* 0x0b09 */ + { .altcode = NULL }, /* 0x0b0a */ + { .altcode = NULL }, /* 0x0b0b */ + { .altcode = NULL }, /* 0x0b0c */ + { .altcode = NULL }, /* 0x0b0d */ + { .altcode = NULL }, /* 0x0b0e */ + { .altcode = NULL }, /* 0x0b0f */ + { .altcode = NULL }, /* 0x0b10 */ + { .altcode = NULL }, /* 0x0b11 */ + { .altcode = NULL }, /* 0x0b12 */ + { .altcode = NULL }, /* 0x0b13 */ + { .altcode = NULL }, /* 0x0b14 */ + { .altcode = NULL }, /* 0x0b15 */ + { .altcode = NULL }, /* 0x0b16 */ + { .altcode = NULL }, /* 0x0b17 */ + { .altcode = NULL }, /* 0x0b18 */ + { .altcode = NULL }, /* 0x0b19 */ + { .altcode = NULL }, /* 0x0b1a */ + { .altcode = NULL }, /* 0x0b1b */ + { .altcode = NULL }, /* 0x0b1c */ + { .altcode = NULL }, /* 0x0b1d */ + { .altcode = NULL }, /* 0x0b1e */ + { .altcode = NULL }, /* 0x0b1f */ + { .altcode = NULL }, /* 0x0b20 */ + { .altcode = NULL }, /* 0x0b21 */ + { .altcode = NULL }, /* 0x0b22 */ + { .altcode = NULL }, /* 0x0b23 */ + { .altcode = NULL }, /* 0x0b24 */ + { .altcode = NULL }, /* 0x0b25 */ + { .altcode = NULL }, /* 0x0b26 */ + { .altcode = NULL }, /* 0x0b27 */ + { .altcode = NULL }, /* 0x0b28 */ + { .altcode = NULL }, /* 0x0b29 */ + { .altcode = NULL }, /* 0x0b2a */ + { .altcode = NULL }, /* 0x0b2b */ + { .altcode = NULL }, /* 0x0b2c */ + { .altcode = NULL }, /* 0x0b2d */ + { .altcode = NULL }, /* 0x0b2e */ + { .altcode = NULL }, /* 0x0b2f */ + { .altcode = NULL }, /* 0x0b30 */ + { .altcode = NULL }, /* 0x0b31 */ + { .altcode = NULL }, /* 0x0b32 */ + { .altcode = NULL }, /* 0x0b33 */ + { .altcode = NULL }, /* 0x0b34 */ + { .altcode = NULL }, /* 0x0b35 */ + { .altcode = NULL }, /* 0x0b36 */ + { .altcode = NULL }, /* 0x0b37 */ + { .altcode = NULL }, /* 0x0b38 */ + { .altcode = NULL }, /* 0x0b39 */ + { .altcode = NULL }, /* 0x0b3a */ + { .altcode = NULL }, /* 0x0b3b */ + { .altcode = NULL }, /* 0x0b3c */ + { .altcode = NULL }, /* 0x0b3d */ + { .altcode = NULL }, /* 0x0b3e */ + { .altcode = NULL }, /* 0x0b3f */ + { .altcode = NULL }, /* 0x0b40 */ + { .altcode = NULL }, /* 0x0b41 */ + { .altcode = NULL }, /* 0x0b42 */ + { .altcode = NULL }, /* 0x0b43 */ + { .altcode = NULL }, /* 0x0b44 */ + { .altcode = NULL }, /* 0x0b45 */ + { .altcode = NULL }, /* 0x0b46 */ + { .altcode = NULL }, /* 0x0b47 */ + { .altcode = NULL }, /* 0x0b48 */ + { .altcode = NULL }, /* 0x0b49 */ + { .altcode = NULL }, /* 0x0b4a */ + { .altcode = NULL }, /* 0x0b4b */ + { .altcode = NULL }, /* 0x0b4c */ + { .altcode = NULL }, /* 0x0b4d */ + { .altcode = NULL }, /* 0x0b4e */ + { .altcode = NULL }, /* 0x0b4f */ + { .altcode = NULL }, /* 0x0b50 */ + { .altcode = NULL }, /* 0x0b51 */ + { .altcode = NULL }, /* 0x0b52 */ + { .altcode = NULL }, /* 0x0b53 */ + { .altcode = NULL }, /* 0x0b54 */ + { .altcode = NULL }, /* 0x0b55 */ + { .altcode = NULL }, /* 0x0b56 */ + { .altcode = NULL }, /* 0x0b57 */ + { .altcode = NULL }, /* 0x0b58 */ + { .altcode = NULL }, /* 0x0b59 */ + { .altcode = NULL }, /* 0x0b5a */ + { .altcode = NULL }, /* 0x0b5b */ + { .altcode = NULL }, /* 0x0b5c */ + { .altcode = NULL }, /* 0x0b5d */ + { .altcode = NULL }, /* 0x0b5e */ + { .altcode = NULL }, /* 0x0b5f */ + { .altcode = NULL }, /* 0x0b60 */ + { .altcode = NULL }, /* 0x0b61 */ + { .altcode = NULL }, /* 0x0b62 */ + { .altcode = NULL }, /* 0x0b63 */ + { .altcode = NULL }, /* 0x0b64 */ + { .altcode = NULL }, /* 0x0b65 */ + { .altcode = NULL }, /* 0x0b66 */ + { .altcode = NULL }, /* 0x0b67 */ + { .altcode = NULL }, /* 0x0b68 */ + { .altcode = NULL }, /* 0x0b69 */ + { .altcode = NULL }, /* 0x0b6a */ + { .altcode = NULL }, /* 0x0b6b */ + { .altcode = NULL }, /* 0x0b6c */ + { .altcode = NULL }, /* 0x0b6d */ + { .altcode = NULL }, /* 0x0b6e */ + { .altcode = NULL }, /* 0x0b6f */ + { .altcode = NULL }, /* 0x0b70 */ + { .altcode = NULL }, /* 0x0b71 */ + { .altcode = NULL }, /* 0x0b72 */ + { .altcode = NULL }, /* 0x0b73 */ + { .altcode = NULL }, /* 0x0b74 */ + { .altcode = NULL }, /* 0x0b75 */ + { .altcode = NULL }, /* 0x0b76 */ + { .altcode = NULL }, /* 0x0b77 */ + { .altcode = NULL }, /* 0x0b78 */ + { .altcode = NULL }, /* 0x0b79 */ + { .altcode = NULL }, /* 0x0b7a */ + { .altcode = NULL }, /* 0x0b7b */ + { .altcode = NULL }, /* 0x0b7c */ + { .altcode = NULL }, /* 0x0b7d */ + { .altcode = NULL }, /* 0x0b7e */ + { .altcode = NULL }, /* 0x0b7f */ + { .altcode = NULL }, /* 0x0b80 */ + { .altcode = NULL }, /* 0x0b81 */ + { .altcode = NULL }, /* 0x0b82 */ + { .altcode = NULL }, /* 0x0b83 */ + { .altcode = NULL }, /* 0x0b84 */ + { .altcode = NULL }, /* 0x0b85 */ + { .altcode = NULL }, /* 0x0b86 */ + { .altcode = NULL }, /* 0x0b87 */ + { .altcode = NULL }, /* 0x0b88 */ + { .altcode = NULL }, /* 0x0b89 */ + { .altcode = NULL }, /* 0x0b8a */ + { .altcode = NULL }, /* 0x0b8b */ + { .altcode = NULL }, /* 0x0b8c */ + { .altcode = NULL }, /* 0x0b8d */ + { .altcode = NULL }, /* 0x0b8e */ + { .altcode = NULL }, /* 0x0b8f */ + { .altcode = NULL }, /* 0x0b90 */ + { .altcode = NULL }, /* 0x0b91 */ + { .altcode = NULL }, /* 0x0b92 */ + { .altcode = NULL }, /* 0x0b93 */ + { .altcode = NULL }, /* 0x0b94 */ + { .altcode = NULL }, /* 0x0b95 */ + { .altcode = NULL }, /* 0x0b96 */ + { .altcode = NULL }, /* 0x0b97 */ + { .altcode = NULL }, /* 0x0b98 */ + { .altcode = NULL }, /* 0x0b99 */ + { .altcode = NULL }, /* 0x0b9a */ + { .altcode = NULL }, /* 0x0b9b */ + { .altcode = NULL }, /* 0x0b9c */ + { .altcode = NULL }, /* 0x0b9d */ + { .altcode = NULL }, /* 0x0b9e */ + { .altcode = NULL }, /* 0x0b9f */ + { .altcode = NULL }, /* 0x0ba0 */ + { .altcode = NULL }, /* 0x0ba1 */ + { .altcode = NULL }, /* 0x0ba2 */ + { .altcode = NULL }, /* 0x0ba3 (leftcaret) */ + { .altcode = NULL }, /* 0x0ba4 */ + { .altcode = NULL }, /* 0x0ba5 */ + { .altcode = NULL }, /* 0x0ba6 (rightcaret) */ + { .altcode = NULL }, /* 0x0ba7 */ + { .altcode = NULL }, /* 0x0ba8 (downcaret) */ + { .altcode = NULL }, /* 0x0ba9 (upcaret) */ + { .altcode = NULL }, /* 0x0baa */ + { .altcode = NULL }, /* 0x0bab */ + { .altcode = NULL }, /* 0x0bac */ + { .altcode = NULL }, /* 0x0bad */ + { .altcode = NULL }, /* 0x0bae */ + { .altcode = NULL }, /* 0x0baf */ + { .altcode = NULL }, /* 0x0bb0 */ + { .altcode = NULL }, /* 0x0bb1 */ + { .altcode = NULL }, /* 0x0bb2 */ + { .altcode = NULL }, /* 0x0bb3 */ + { .altcode = NULL }, /* 0x0bb4 */ + { .altcode = NULL }, /* 0x0bb5 */ + { .altcode = NULL }, /* 0x0bb6 */ + { .altcode = NULL }, /* 0x0bb7 */ + { .altcode = NULL }, /* 0x0bb8 */ + { .altcode = NULL }, /* 0x0bb9 */ + { .altcode = NULL }, /* 0x0bba */ + { .altcode = NULL }, /* 0x0bbb */ + { .altcode = NULL }, /* 0x0bbc */ + { .altcode = NULL }, /* 0x0bbd */ + { .altcode = NULL }, /* 0x0bbe */ + { .altcode = NULL }, /* 0x0bbf */ + { .altcode = NULL }, /* 0x0bc0 (overbar) */ + { .altcode = NULL }, /* 0x0bc1 */ + { .altcode = NULL }, /* 0x0bc2 (downtack) */ + { .altcode = NULL }, /* 0x0bc3 (upshoe) */ + { .altcode = NULL }, /* 0x0bc4 (downstile) */ + { .altcode = NULL }, /* 0x0bc5 */ + { .altcode = NULL }, /* 0x0bc6 (underbar) */ + { .altcode = NULL }, /* 0x0bc7 */ + { .altcode = NULL }, /* 0x0bc8 */ + { .altcode = NULL }, /* 0x0bc9 */ + { .altcode = NULL }, /* 0x0bca (jot) */ + { .altcode = NULL }, /* 0x0bcb */ + { .altcode = NULL }, /* 0x0bcc (quad) */ + { .altcode = NULL }, /* 0x0bcd */ + { .altcode = NULL }, /* 0x0bce (uptack) */ + { .altcode = NULL }, /* 0x0bcf (circle) */ + { .altcode = NULL }, /* 0x0bd0 */ + { .altcode = NULL }, /* 0x0bd1 */ + { .altcode = NULL }, /* 0x0bd2 */ + { .altcode = NULL }, /* 0x0bd3 (upstile) */ + { .altcode = NULL }, /* 0x0bd4 */ + { .altcode = NULL }, /* 0x0bd5 */ + { .altcode = NULL }, /* 0x0bd6 (downshoe) */ + { .altcode = NULL }, /* 0x0bd7 */ + { .altcode = NULL }, /* 0x0bd8 (rightshoe) */ + { .altcode = NULL }, /* 0x0bd9 */ + { .altcode = NULL }, /* 0x0bda (leftshoe) */ + { .altcode = NULL }, /* 0x0bdb */ + { .altcode = NULL }, /* 0x0bdc (lefttack) */ + { .altcode = NULL }, /* 0x0bdd */ + { .altcode = NULL }, /* 0x0bde */ + { .altcode = NULL }, /* 0x0bdf */ + { .altcode = NULL }, /* 0x0be0 */ + { .altcode = NULL }, /* 0x0be1 */ + { .altcode = NULL }, /* 0x0be2 */ + { .altcode = NULL }, /* 0x0be3 */ + { .altcode = NULL }, /* 0x0be4 */ + { .altcode = NULL }, /* 0x0be5 */ + { .altcode = NULL }, /* 0x0be6 */ + { .altcode = NULL }, /* 0x0be7 */ + { .altcode = NULL }, /* 0x0be8 */ + { .altcode = NULL }, /* 0x0be9 */ + { .altcode = NULL }, /* 0x0bea */ + { .altcode = NULL }, /* 0x0beb */ + { .altcode = NULL }, /* 0x0bec */ + { .altcode = NULL }, /* 0x0bed */ + { .altcode = NULL }, /* 0x0bee */ + { .altcode = NULL }, /* 0x0bef */ + { .altcode = NULL }, /* 0x0bf0 */ + { .altcode = NULL }, /* 0x0bf1 */ + { .altcode = NULL }, /* 0x0bf2 */ + { .altcode = NULL }, /* 0x0bf3 */ + { .altcode = NULL }, /* 0x0bf4 */ + { .altcode = NULL }, /* 0x0bf5 */ + { .altcode = NULL }, /* 0x0bf6 */ + { .altcode = NULL }, /* 0x0bf7 */ + { .altcode = NULL }, /* 0x0bf8 */ + { .altcode = NULL }, /* 0x0bf9 */ + { .altcode = NULL }, /* 0x0bfa */ + { .altcode = NULL }, /* 0x0bfb */ + { .altcode = NULL }, /* 0x0bfc (righttack) */ + { .altcode = NULL }, /* 0x0bfd */ + { .altcode = NULL }, /* 0x0bfe */ + { .altcode = NULL }, /* 0x0bff */ }, { /* 0x0c?? */ - { .altcode = "" }, /* 0x0c00 */ - { .altcode = "" }, /* 0x0c01 */ - { .altcode = "" }, /* 0x0c02 */ - { .altcode = "" }, /* 0x0c03 */ - { .altcode = "" }, /* 0x0c04 */ - { .altcode = "" }, /* 0x0c05 */ - { .altcode = "" }, /* 0x0c06 */ - { .altcode = "" }, /* 0x0c07 */ - { .altcode = "" }, /* 0x0c08 */ - { .altcode = "" }, /* 0x0c09 */ - { .altcode = "" }, /* 0x0c0a */ - { .altcode = "" }, /* 0x0c0b */ - { .altcode = "" }, /* 0x0c0c */ - { .altcode = "" }, /* 0x0c0d */ - { .altcode = "" }, /* 0x0c0e */ - { .altcode = "" }, /* 0x0c0f */ - { .altcode = "" }, /* 0x0c10 */ - { .altcode = "" }, /* 0x0c11 */ - { .altcode = "" }, /* 0x0c12 */ - { .altcode = "" }, /* 0x0c13 */ - { .altcode = "" }, /* 0x0c14 */ - { .altcode = "" }, /* 0x0c15 */ - { .altcode = "" }, /* 0x0c16 */ - { .altcode = "" }, /* 0x0c17 */ - { .altcode = "" }, /* 0x0c18 */ - { .altcode = "" }, /* 0x0c19 */ - { .altcode = "" }, /* 0x0c1a */ - { .altcode = "" }, /* 0x0c1b */ - { .altcode = "" }, /* 0x0c1c */ - { .altcode = "" }, /* 0x0c1d */ - { .altcode = "" }, /* 0x0c1e */ - { .altcode = "" }, /* 0x0c1f */ - { .altcode = "" }, /* 0x0c20 */ - { .altcode = "" }, /* 0x0c21 */ - { .altcode = "" }, /* 0x0c22 */ - { .altcode = "" }, /* 0x0c23 */ - { .altcode = "" }, /* 0x0c24 */ - { .altcode = "" }, /* 0x0c25 */ - { .altcode = "" }, /* 0x0c26 */ - { .altcode = "" }, /* 0x0c27 */ - { .altcode = "" }, /* 0x0c28 */ - { .altcode = "" }, /* 0x0c29 */ - { .altcode = "" }, /* 0x0c2a */ - { .altcode = "" }, /* 0x0c2b */ - { .altcode = "" }, /* 0x0c2c */ - { .altcode = "" }, /* 0x0c2d */ - { .altcode = "" }, /* 0x0c2e */ - { .altcode = "" }, /* 0x0c2f */ - { .altcode = "" }, /* 0x0c30 */ - { .altcode = "" }, /* 0x0c31 */ - { .altcode = "" }, /* 0x0c32 */ - { .altcode = "" }, /* 0x0c33 */ - { .altcode = "" }, /* 0x0c34 */ - { .altcode = "" }, /* 0x0c35 */ - { .altcode = "" }, /* 0x0c36 */ - { .altcode = "" }, /* 0x0c37 */ - { .altcode = "" }, /* 0x0c38 */ - { .altcode = "" }, /* 0x0c39 */ - { .altcode = "" }, /* 0x0c3a */ - { .altcode = "" }, /* 0x0c3b */ - { .altcode = "" }, /* 0x0c3c */ - { .altcode = "" }, /* 0x0c3d */ - { .altcode = "" }, /* 0x0c3e */ - { .altcode = "" }, /* 0x0c3f */ - { .altcode = "" }, /* 0x0c40 */ - { .altcode = "" }, /* 0x0c41 */ - { .altcode = "" }, /* 0x0c42 */ - { .altcode = "" }, /* 0x0c43 */ - { .altcode = "" }, /* 0x0c44 */ - { .altcode = "" }, /* 0x0c45 */ - { .altcode = "" }, /* 0x0c46 */ - { .altcode = "" }, /* 0x0c47 */ - { .altcode = "" }, /* 0x0c48 */ - { .altcode = "" }, /* 0x0c49 */ - { .altcode = "" }, /* 0x0c4a */ - { .altcode = "" }, /* 0x0c4b */ - { .altcode = "" }, /* 0x0c4c */ - { .altcode = "" }, /* 0x0c4d */ - { .altcode = "" }, /* 0x0c4e */ - { .altcode = "" }, /* 0x0c4f */ - { .altcode = "" }, /* 0x0c50 */ - { .altcode = "" }, /* 0x0c51 */ - { .altcode = "" }, /* 0x0c52 */ - { .altcode = "" }, /* 0x0c53 */ - { .altcode = "" }, /* 0x0c54 */ - { .altcode = "" }, /* 0x0c55 */ - { .altcode = "" }, /* 0x0c56 */ - { .altcode = "" }, /* 0x0c57 */ - { .altcode = "" }, /* 0x0c58 */ - { .altcode = "" }, /* 0x0c59 */ - { .altcode = "" }, /* 0x0c5a */ - { .altcode = "" }, /* 0x0c5b */ - { .altcode = "" }, /* 0x0c5c */ - { .altcode = "" }, /* 0x0c5d */ - { .altcode = "" }, /* 0x0c5e */ - { .altcode = "" }, /* 0x0c5f */ - { .altcode = "" }, /* 0x0c60 */ - { .altcode = "" }, /* 0x0c61 */ - { .altcode = "" }, /* 0x0c62 */ - { .altcode = "" }, /* 0x0c63 */ - { .altcode = "" }, /* 0x0c64 */ - { .altcode = "" }, /* 0x0c65 */ - { .altcode = "" }, /* 0x0c66 */ - { .altcode = "" }, /* 0x0c67 */ - { .altcode = "" }, /* 0x0c68 */ - { .altcode = "" }, /* 0x0c69 */ - { .altcode = "" }, /* 0x0c6a */ - { .altcode = "" }, /* 0x0c6b */ - { .altcode = "" }, /* 0x0c6c */ - { .altcode = "" }, /* 0x0c6d */ - { .altcode = "" }, /* 0x0c6e */ - { .altcode = "" }, /* 0x0c6f */ - { .altcode = "" }, /* 0x0c70 */ - { .altcode = "" }, /* 0x0c71 */ - { .altcode = "" }, /* 0x0c72 */ - { .altcode = "" }, /* 0x0c73 */ - { .altcode = "" }, /* 0x0c74 */ - { .altcode = "" }, /* 0x0c75 */ - { .altcode = "" }, /* 0x0c76 */ - { .altcode = "" }, /* 0x0c77 */ - { .altcode = "" }, /* 0x0c78 */ - { .altcode = "" }, /* 0x0c79 */ - { .altcode = "" }, /* 0x0c7a */ - { .altcode = "" }, /* 0x0c7b */ - { .altcode = "" }, /* 0x0c7c */ - { .altcode = "" }, /* 0x0c7d */ - { .altcode = "" }, /* 0x0c7e */ - { .altcode = "" }, /* 0x0c7f */ - { .altcode = "" }, /* 0x0c80 */ - { .altcode = "" }, /* 0x0c81 */ - { .altcode = "" }, /* 0x0c82 */ - { .altcode = "" }, /* 0x0c83 */ - { .altcode = "" }, /* 0x0c84 */ - { .altcode = "" }, /* 0x0c85 */ - { .altcode = "" }, /* 0x0c86 */ - { .altcode = "" }, /* 0x0c87 */ - { .altcode = "" }, /* 0x0c88 */ - { .altcode = "" }, /* 0x0c89 */ - { .altcode = "" }, /* 0x0c8a */ - { .altcode = "" }, /* 0x0c8b */ - { .altcode = "" }, /* 0x0c8c */ - { .altcode = "" }, /* 0x0c8d */ - { .altcode = "" }, /* 0x0c8e */ - { .altcode = "" }, /* 0x0c8f */ - { .altcode = "" }, /* 0x0c90 */ - { .altcode = "" }, /* 0x0c91 */ - { .altcode = "" }, /* 0x0c92 */ - { .altcode = "" }, /* 0x0c93 */ - { .altcode = "" }, /* 0x0c94 */ - { .altcode = "" }, /* 0x0c95 */ - { .altcode = "" }, /* 0x0c96 */ - { .altcode = "" }, /* 0x0c97 */ - { .altcode = "" }, /* 0x0c98 */ - { .altcode = "" }, /* 0x0c99 */ - { .altcode = "" }, /* 0x0c9a */ - { .altcode = "" }, /* 0x0c9b */ - { .altcode = "" }, /* 0x0c9c */ - { .altcode = "" }, /* 0x0c9d */ - { .altcode = "" }, /* 0x0c9e */ - { .altcode = "" }, /* 0x0c9f */ - { .altcode = "" }, /* 0x0ca0 */ - { .altcode = "" }, /* 0x0ca1 */ - { .altcode = "" }, /* 0x0ca2 */ - { .altcode = "" }, /* 0x0ca3 */ - { .altcode = "" }, /* 0x0ca4 */ - { .altcode = "" }, /* 0x0ca5 */ - { .altcode = "" }, /* 0x0ca6 */ - { .altcode = "" }, /* 0x0ca7 */ - { .altcode = "" }, /* 0x0ca8 */ - { .altcode = "" }, /* 0x0ca9 */ - { .altcode = "" }, /* 0x0caa */ - { .altcode = "" }, /* 0x0cab */ - { .altcode = "" }, /* 0x0cac */ - { .altcode = "" }, /* 0x0cad */ - { .altcode = "" }, /* 0x0cae */ - { .altcode = "" }, /* 0x0caf */ - { .altcode = "" }, /* 0x0cb0 */ - { .altcode = "" }, /* 0x0cb1 */ - { .altcode = "" }, /* 0x0cb2 */ - { .altcode = "" }, /* 0x0cb3 */ - { .altcode = "" }, /* 0x0cb4 */ - { .altcode = "" }, /* 0x0cb5 */ - { .altcode = "" }, /* 0x0cb6 */ - { .altcode = "" }, /* 0x0cb7 */ - { .altcode = "" }, /* 0x0cb8 */ - { .altcode = "" }, /* 0x0cb9 */ - { .altcode = "" }, /* 0x0cba */ - { .altcode = "" }, /* 0x0cbb */ - { .altcode = "" }, /* 0x0cbc */ - { .altcode = "" }, /* 0x0cbd */ - { .altcode = "" }, /* 0x0cbe */ - { .altcode = "" }, /* 0x0cbf */ - { .altcode = "" }, /* 0x0cc0 */ - { .altcode = "" }, /* 0x0cc1 */ - { .altcode = "" }, /* 0x0cc2 */ - { .altcode = "" }, /* 0x0cc3 */ - { .altcode = "" }, /* 0x0cc4 */ - { .altcode = "" }, /* 0x0cc5 */ - { .altcode = "" }, /* 0x0cc6 */ - { .altcode = "" }, /* 0x0cc7 */ - { .altcode = "" }, /* 0x0cc8 */ - { .altcode = "" }, /* 0x0cc9 */ - { .altcode = "" }, /* 0x0cca */ - { .altcode = "" }, /* 0x0ccb */ - { .altcode = "" }, /* 0x0ccc */ - { .altcode = "" }, /* 0x0ccd */ - { .altcode = "" }, /* 0x0cce */ - { .altcode = "" }, /* 0x0ccf */ - { .altcode = "" }, /* 0x0cd0 */ - { .altcode = "" }, /* 0x0cd1 */ - { .altcode = "" }, /* 0x0cd2 */ - { .altcode = "" }, /* 0x0cd3 */ - { .altcode = "" }, /* 0x0cd4 */ - { .altcode = "" }, /* 0x0cd5 */ - { .altcode = "" }, /* 0x0cd6 */ - { .altcode = "" }, /* 0x0cd7 */ - { .altcode = "" }, /* 0x0cd8 */ - { .altcode = "" }, /* 0x0cd9 */ - { .altcode = "" }, /* 0x0cda */ - { .altcode = "" }, /* 0x0cdb */ - { .altcode = "" }, /* 0x0cdc */ - { .altcode = "" }, /* 0x0cdd */ - { .altcode = "" }, /* 0x0cde */ - { .altcode = "" }, /* 0x0cdf (hebrew_doublelowline) */ - { .altcode = "" }, /* 0x0ce0 (hebrew_aleph) */ - { .altcode = "" }, /* 0x0ce1 (hebrew_beth) */ - { .altcode = "" }, /* 0x0ce2 (hebrew_gimmel) */ - { .altcode = "" }, /* 0x0ce3 (hebrew_daleth) */ - { .altcode = "" }, /* 0x0ce4 (hebrew_he) */ - { .altcode = "" }, /* 0x0ce5 (hebrew_waw) */ - { .altcode = "" }, /* 0x0ce6 (hebrew_zayin) */ - { .altcode = "" }, /* 0x0ce7 (hebrew_het) */ - { .altcode = "" }, /* 0x0ce8 (hebrew_teth) */ - { .altcode = "" }, /* 0x0ce9 (hebrew_yod) */ - { .altcode = "" }, /* 0x0cea (hebrew_finalkaph) */ - { .altcode = "" }, /* 0x0ceb (hebrew_kaph) */ - { .altcode = "" }, /* 0x0cec (hebrew_lamed) */ - { .altcode = "" }, /* 0x0ced (hebrew_finalmem) */ - { .altcode = "" }, /* 0x0cee (hebrew_mem) */ - { .altcode = "" }, /* 0x0cef (hebrew_finalnun) */ - { .altcode = "" }, /* 0x0cf0 (hebrew_nun) */ - { .altcode = "" }, /* 0x0cf1 (hebrew_samekh) */ - { .altcode = "" }, /* 0x0cf2 (hebrew_ayin) */ - { .altcode = "" }, /* 0x0cf3 (hebrew_finalpe) */ - { .altcode = "" }, /* 0x0cf4 (hebrew_pe) */ - { .altcode = "" }, /* 0x0cf5 (hebrew_finalzadi) */ - { .altcode = "" }, /* 0x0cf6 (hebrew_zadi) */ - { .altcode = "" }, /* 0x0cf7 (hebrew_kuf) */ - { .altcode = "" }, /* 0x0cf8 (hebrew_resh) */ - { .altcode = "" }, /* 0x0cf9 (hebrew_shin) */ - { .altcode = "" }, /* 0x0cfa (hebrew_taf) */ - { .altcode = "" }, /* 0x0cfb */ - { .altcode = "" }, /* 0x0cfc */ - { .altcode = "" }, /* 0x0cfd */ - { .altcode = "" }, /* 0x0cfe */ - { .altcode = "" }, /* 0x0cff */ + { .altcode = NULL }, /* 0x0c00 */ + { .altcode = NULL }, /* 0x0c01 */ + { .altcode = NULL }, /* 0x0c02 */ + { .altcode = NULL }, /* 0x0c03 */ + { .altcode = NULL }, /* 0x0c04 */ + { .altcode = NULL }, /* 0x0c05 */ + { .altcode = NULL }, /* 0x0c06 */ + { .altcode = NULL }, /* 0x0c07 */ + { .altcode = NULL }, /* 0x0c08 */ + { .altcode = NULL }, /* 0x0c09 */ + { .altcode = NULL }, /* 0x0c0a */ + { .altcode = NULL }, /* 0x0c0b */ + { .altcode = NULL }, /* 0x0c0c */ + { .altcode = NULL }, /* 0x0c0d */ + { .altcode = NULL }, /* 0x0c0e */ + { .altcode = NULL }, /* 0x0c0f */ + { .altcode = NULL }, /* 0x0c10 */ + { .altcode = NULL }, /* 0x0c11 */ + { .altcode = NULL }, /* 0x0c12 */ + { .altcode = NULL }, /* 0x0c13 */ + { .altcode = NULL }, /* 0x0c14 */ + { .altcode = NULL }, /* 0x0c15 */ + { .altcode = NULL }, /* 0x0c16 */ + { .altcode = NULL }, /* 0x0c17 */ + { .altcode = NULL }, /* 0x0c18 */ + { .altcode = NULL }, /* 0x0c19 */ + { .altcode = NULL }, /* 0x0c1a */ + { .altcode = NULL }, /* 0x0c1b */ + { .altcode = NULL }, /* 0x0c1c */ + { .altcode = NULL }, /* 0x0c1d */ + { .altcode = NULL }, /* 0x0c1e */ + { .altcode = NULL }, /* 0x0c1f */ + { .altcode = NULL }, /* 0x0c20 */ + { .altcode = NULL }, /* 0x0c21 */ + { .altcode = NULL }, /* 0x0c22 */ + { .altcode = NULL }, /* 0x0c23 */ + { .altcode = NULL }, /* 0x0c24 */ + { .altcode = NULL }, /* 0x0c25 */ + { .altcode = NULL }, /* 0x0c26 */ + { .altcode = NULL }, /* 0x0c27 */ + { .altcode = NULL }, /* 0x0c28 */ + { .altcode = NULL }, /* 0x0c29 */ + { .altcode = NULL }, /* 0x0c2a */ + { .altcode = NULL }, /* 0x0c2b */ + { .altcode = NULL }, /* 0x0c2c */ + { .altcode = NULL }, /* 0x0c2d */ + { .altcode = NULL }, /* 0x0c2e */ + { .altcode = NULL }, /* 0x0c2f */ + { .altcode = NULL }, /* 0x0c30 */ + { .altcode = NULL }, /* 0x0c31 */ + { .altcode = NULL }, /* 0x0c32 */ + { .altcode = NULL }, /* 0x0c33 */ + { .altcode = NULL }, /* 0x0c34 */ + { .altcode = NULL }, /* 0x0c35 */ + { .altcode = NULL }, /* 0x0c36 */ + { .altcode = NULL }, /* 0x0c37 */ + { .altcode = NULL }, /* 0x0c38 */ + { .altcode = NULL }, /* 0x0c39 */ + { .altcode = NULL }, /* 0x0c3a */ + { .altcode = NULL }, /* 0x0c3b */ + { .altcode = NULL }, /* 0x0c3c */ + { .altcode = NULL }, /* 0x0c3d */ + { .altcode = NULL }, /* 0x0c3e */ + { .altcode = NULL }, /* 0x0c3f */ + { .altcode = NULL }, /* 0x0c40 */ + { .altcode = NULL }, /* 0x0c41 */ + { .altcode = NULL }, /* 0x0c42 */ + { .altcode = NULL }, /* 0x0c43 */ + { .altcode = NULL }, /* 0x0c44 */ + { .altcode = NULL }, /* 0x0c45 */ + { .altcode = NULL }, /* 0x0c46 */ + { .altcode = NULL }, /* 0x0c47 */ + { .altcode = NULL }, /* 0x0c48 */ + { .altcode = NULL }, /* 0x0c49 */ + { .altcode = NULL }, /* 0x0c4a */ + { .altcode = NULL }, /* 0x0c4b */ + { .altcode = NULL }, /* 0x0c4c */ + { .altcode = NULL }, /* 0x0c4d */ + { .altcode = NULL }, /* 0x0c4e */ + { .altcode = NULL }, /* 0x0c4f */ + { .altcode = NULL }, /* 0x0c50 */ + { .altcode = NULL }, /* 0x0c51 */ + { .altcode = NULL }, /* 0x0c52 */ + { .altcode = NULL }, /* 0x0c53 */ + { .altcode = NULL }, /* 0x0c54 */ + { .altcode = NULL }, /* 0x0c55 */ + { .altcode = NULL }, /* 0x0c56 */ + { .altcode = NULL }, /* 0x0c57 */ + { .altcode = NULL }, /* 0x0c58 */ + { .altcode = NULL }, /* 0x0c59 */ + { .altcode = NULL }, /* 0x0c5a */ + { .altcode = NULL }, /* 0x0c5b */ + { .altcode = NULL }, /* 0x0c5c */ + { .altcode = NULL }, /* 0x0c5d */ + { .altcode = NULL }, /* 0x0c5e */ + { .altcode = NULL }, /* 0x0c5f */ + { .altcode = NULL }, /* 0x0c60 */ + { .altcode = NULL }, /* 0x0c61 */ + { .altcode = NULL }, /* 0x0c62 */ + { .altcode = NULL }, /* 0x0c63 */ + { .altcode = NULL }, /* 0x0c64 */ + { .altcode = NULL }, /* 0x0c65 */ + { .altcode = NULL }, /* 0x0c66 */ + { .altcode = NULL }, /* 0x0c67 */ + { .altcode = NULL }, /* 0x0c68 */ + { .altcode = NULL }, /* 0x0c69 */ + { .altcode = NULL }, /* 0x0c6a */ + { .altcode = NULL }, /* 0x0c6b */ + { .altcode = NULL }, /* 0x0c6c */ + { .altcode = NULL }, /* 0x0c6d */ + { .altcode = NULL }, /* 0x0c6e */ + { .altcode = NULL }, /* 0x0c6f */ + { .altcode = NULL }, /* 0x0c70 */ + { .altcode = NULL }, /* 0x0c71 */ + { .altcode = NULL }, /* 0x0c72 */ + { .altcode = NULL }, /* 0x0c73 */ + { .altcode = NULL }, /* 0x0c74 */ + { .altcode = NULL }, /* 0x0c75 */ + { .altcode = NULL }, /* 0x0c76 */ + { .altcode = NULL }, /* 0x0c77 */ + { .altcode = NULL }, /* 0x0c78 */ + { .altcode = NULL }, /* 0x0c79 */ + { .altcode = NULL }, /* 0x0c7a */ + { .altcode = NULL }, /* 0x0c7b */ + { .altcode = NULL }, /* 0x0c7c */ + { .altcode = NULL }, /* 0x0c7d */ + { .altcode = NULL }, /* 0x0c7e */ + { .altcode = NULL }, /* 0x0c7f */ + { .altcode = NULL }, /* 0x0c80 */ + { .altcode = NULL }, /* 0x0c81 */ + { .altcode = NULL }, /* 0x0c82 */ + { .altcode = NULL }, /* 0x0c83 */ + { .altcode = NULL }, /* 0x0c84 */ + { .altcode = NULL }, /* 0x0c85 */ + { .altcode = NULL }, /* 0x0c86 */ + { .altcode = NULL }, /* 0x0c87 */ + { .altcode = NULL }, /* 0x0c88 */ + { .altcode = NULL }, /* 0x0c89 */ + { .altcode = NULL }, /* 0x0c8a */ + { .altcode = NULL }, /* 0x0c8b */ + { .altcode = NULL }, /* 0x0c8c */ + { .altcode = NULL }, /* 0x0c8d */ + { .altcode = NULL }, /* 0x0c8e */ + { .altcode = NULL }, /* 0x0c8f */ + { .altcode = NULL }, /* 0x0c90 */ + { .altcode = NULL }, /* 0x0c91 */ + { .altcode = NULL }, /* 0x0c92 */ + { .altcode = NULL }, /* 0x0c93 */ + { .altcode = NULL }, /* 0x0c94 */ + { .altcode = NULL }, /* 0x0c95 */ + { .altcode = NULL }, /* 0x0c96 */ + { .altcode = NULL }, /* 0x0c97 */ + { .altcode = NULL }, /* 0x0c98 */ + { .altcode = NULL }, /* 0x0c99 */ + { .altcode = NULL }, /* 0x0c9a */ + { .altcode = NULL }, /* 0x0c9b */ + { .altcode = NULL }, /* 0x0c9c */ + { .altcode = NULL }, /* 0x0c9d */ + { .altcode = NULL }, /* 0x0c9e */ + { .altcode = NULL }, /* 0x0c9f */ + { .altcode = NULL }, /* 0x0ca0 */ + { .altcode = NULL }, /* 0x0ca1 */ + { .altcode = NULL }, /* 0x0ca2 */ + { .altcode = NULL }, /* 0x0ca3 */ + { .altcode = NULL }, /* 0x0ca4 */ + { .altcode = NULL }, /* 0x0ca5 */ + { .altcode = NULL }, /* 0x0ca6 */ + { .altcode = NULL }, /* 0x0ca7 */ + { .altcode = NULL }, /* 0x0ca8 */ + { .altcode = NULL }, /* 0x0ca9 */ + { .altcode = NULL }, /* 0x0caa */ + { .altcode = NULL }, /* 0x0cab */ + { .altcode = NULL }, /* 0x0cac */ + { .altcode = NULL }, /* 0x0cad */ + { .altcode = NULL }, /* 0x0cae */ + { .altcode = NULL }, /* 0x0caf */ + { .altcode = NULL }, /* 0x0cb0 */ + { .altcode = NULL }, /* 0x0cb1 */ + { .altcode = NULL }, /* 0x0cb2 */ + { .altcode = NULL }, /* 0x0cb3 */ + { .altcode = NULL }, /* 0x0cb4 */ + { .altcode = NULL }, /* 0x0cb5 */ + { .altcode = NULL }, /* 0x0cb6 */ + { .altcode = NULL }, /* 0x0cb7 */ + { .altcode = NULL }, /* 0x0cb8 */ + { .altcode = NULL }, /* 0x0cb9 */ + { .altcode = NULL }, /* 0x0cba */ + { .altcode = NULL }, /* 0x0cbb */ + { .altcode = NULL }, /* 0x0cbc */ + { .altcode = NULL }, /* 0x0cbd */ + { .altcode = NULL }, /* 0x0cbe */ + { .altcode = NULL }, /* 0x0cbf */ + { .altcode = NULL }, /* 0x0cc0 */ + { .altcode = NULL }, /* 0x0cc1 */ + { .altcode = NULL }, /* 0x0cc2 */ + { .altcode = NULL }, /* 0x0cc3 */ + { .altcode = NULL }, /* 0x0cc4 */ + { .altcode = NULL }, /* 0x0cc5 */ + { .altcode = NULL }, /* 0x0cc6 */ + { .altcode = NULL }, /* 0x0cc7 */ + { .altcode = NULL }, /* 0x0cc8 */ + { .altcode = NULL }, /* 0x0cc9 */ + { .altcode = NULL }, /* 0x0cca */ + { .altcode = NULL }, /* 0x0ccb */ + { .altcode = NULL }, /* 0x0ccc */ + { .altcode = NULL }, /* 0x0ccd */ + { .altcode = NULL }, /* 0x0cce */ + { .altcode = NULL }, /* 0x0ccf */ + { .altcode = NULL }, /* 0x0cd0 */ + { .altcode = NULL }, /* 0x0cd1 */ + { .altcode = NULL }, /* 0x0cd2 */ + { .altcode = NULL }, /* 0x0cd3 */ + { .altcode = NULL }, /* 0x0cd4 */ + { .altcode = NULL }, /* 0x0cd5 */ + { .altcode = NULL }, /* 0x0cd6 */ + { .altcode = NULL }, /* 0x0cd7 */ + { .altcode = NULL }, /* 0x0cd8 */ + { .altcode = NULL }, /* 0x0cd9 */ + { .altcode = NULL }, /* 0x0cda */ + { .altcode = NULL }, /* 0x0cdb */ + { .altcode = NULL }, /* 0x0cdc */ + { .altcode = NULL }, /* 0x0cdd */ + { .altcode = NULL }, /* 0x0cde */ + { .altcode = NULL }, /* 0x0cdf (hebrew_doublelowline) */ + { .altcode = NULL }, /* 0x0ce0 (hebrew_aleph) */ + { .altcode = NULL }, /* 0x0ce1 (hebrew_beth) */ + { .altcode = NULL }, /* 0x0ce2 (hebrew_gimmel) */ + { .altcode = NULL }, /* 0x0ce3 (hebrew_daleth) */ + { .altcode = NULL }, /* 0x0ce4 (hebrew_he) */ + { .altcode = NULL }, /* 0x0ce5 (hebrew_waw) */ + { .altcode = NULL }, /* 0x0ce6 (hebrew_zayin) */ + { .altcode = NULL }, /* 0x0ce7 (hebrew_het) */ + { .altcode = NULL }, /* 0x0ce8 (hebrew_teth) */ + { .altcode = NULL }, /* 0x0ce9 (hebrew_yod) */ + { .altcode = NULL }, /* 0x0cea (hebrew_finalkaph) */ + { .altcode = NULL }, /* 0x0ceb (hebrew_kaph) */ + { .altcode = NULL }, /* 0x0cec (hebrew_lamed) */ + { .altcode = NULL }, /* 0x0ced (hebrew_finalmem) */ + { .altcode = NULL }, /* 0x0cee (hebrew_mem) */ + { .altcode = NULL }, /* 0x0cef (hebrew_finalnun) */ + { .altcode = NULL }, /* 0x0cf0 (hebrew_nun) */ + { .altcode = NULL }, /* 0x0cf1 (hebrew_samekh) */ + { .altcode = NULL }, /* 0x0cf2 (hebrew_ayin) */ + { .altcode = NULL }, /* 0x0cf3 (hebrew_finalpe) */ + { .altcode = NULL }, /* 0x0cf4 (hebrew_pe) */ + { .altcode = NULL }, /* 0x0cf5 (hebrew_finalzadi) */ + { .altcode = NULL }, /* 0x0cf6 (hebrew_zadi) */ + { .altcode = NULL }, /* 0x0cf7 (hebrew_kuf) */ + { .altcode = NULL }, /* 0x0cf8 (hebrew_resh) */ + { .altcode = NULL }, /* 0x0cf9 (hebrew_shin) */ + { .altcode = NULL }, /* 0x0cfa (hebrew_taf) */ + { .altcode = NULL }, /* 0x0cfb */ + { .altcode = NULL }, /* 0x0cfc */ + { .altcode = NULL }, /* 0x0cfd */ + { .altcode = NULL }, /* 0x0cfe */ + { .altcode = NULL }, /* 0x0cff */ }, { /* 0x0d?? */ - { .altcode = "" }, /* 0x0d00 */ - { .altcode = "" }, /* 0x0d01 */ - { .altcode = "" }, /* 0x0d02 */ - { .altcode = "" }, /* 0x0d03 */ - { .altcode = "" }, /* 0x0d04 */ - { .altcode = "" }, /* 0x0d05 */ - { .altcode = "" }, /* 0x0d06 */ - { .altcode = "" }, /* 0x0d07 */ - { .altcode = "" }, /* 0x0d08 */ - { .altcode = "" }, /* 0x0d09 */ - { .altcode = "" }, /* 0x0d0a */ - { .altcode = "" }, /* 0x0d0b */ - { .altcode = "" }, /* 0x0d0c */ - { .altcode = "" }, /* 0x0d0d */ - { .altcode = "" }, /* 0x0d0e */ - { .altcode = "" }, /* 0x0d0f */ - { .altcode = "" }, /* 0x0d10 */ - { .altcode = "" }, /* 0x0d11 */ - { .altcode = "" }, /* 0x0d12 */ - { .altcode = "" }, /* 0x0d13 */ - { .altcode = "" }, /* 0x0d14 */ - { .altcode = "" }, /* 0x0d15 */ - { .altcode = "" }, /* 0x0d16 */ - { .altcode = "" }, /* 0x0d17 */ - { .altcode = "" }, /* 0x0d18 */ - { .altcode = "" }, /* 0x0d19 */ - { .altcode = "" }, /* 0x0d1a */ - { .altcode = "" }, /* 0x0d1b */ - { .altcode = "" }, /* 0x0d1c */ - { .altcode = "" }, /* 0x0d1d */ - { .altcode = "" }, /* 0x0d1e */ - { .altcode = "" }, /* 0x0d1f */ - { .altcode = "" }, /* 0x0d20 */ - { .altcode = "" }, /* 0x0d21 */ - { .altcode = "" }, /* 0x0d22 */ - { .altcode = "" }, /* 0x0d23 */ - { .altcode = "" }, /* 0x0d24 */ - { .altcode = "" }, /* 0x0d25 */ - { .altcode = "" }, /* 0x0d26 */ - { .altcode = "" }, /* 0x0d27 */ - { .altcode = "" }, /* 0x0d28 */ - { .altcode = "" }, /* 0x0d29 */ - { .altcode = "" }, /* 0x0d2a */ - { .altcode = "" }, /* 0x0d2b */ - { .altcode = "" }, /* 0x0d2c */ - { .altcode = "" }, /* 0x0d2d */ - { .altcode = "" }, /* 0x0d2e */ - { .altcode = "" }, /* 0x0d2f */ - { .altcode = "" }, /* 0x0d30 */ - { .altcode = "" }, /* 0x0d31 */ - { .altcode = "" }, /* 0x0d32 */ - { .altcode = "" }, /* 0x0d33 */ - { .altcode = "" }, /* 0x0d34 */ - { .altcode = "" }, /* 0x0d35 */ - { .altcode = "" }, /* 0x0d36 */ - { .altcode = "" }, /* 0x0d37 */ - { .altcode = "" }, /* 0x0d38 */ - { .altcode = "" }, /* 0x0d39 */ - { .altcode = "" }, /* 0x0d3a */ - { .altcode = "" }, /* 0x0d3b */ - { .altcode = "" }, /* 0x0d3c */ - { .altcode = "" }, /* 0x0d3d */ - { .altcode = "" }, /* 0x0d3e */ - { .altcode = "" }, /* 0x0d3f */ - { .altcode = "" }, /* 0x0d40 */ - { .altcode = "" }, /* 0x0d41 */ - { .altcode = "" }, /* 0x0d42 */ - { .altcode = "" }, /* 0x0d43 */ - { .altcode = "" }, /* 0x0d44 */ - { .altcode = "" }, /* 0x0d45 */ - { .altcode = "" }, /* 0x0d46 */ - { .altcode = "" }, /* 0x0d47 */ - { .altcode = "" }, /* 0x0d48 */ - { .altcode = "" }, /* 0x0d49 */ - { .altcode = "" }, /* 0x0d4a */ - { .altcode = "" }, /* 0x0d4b */ - { .altcode = "" }, /* 0x0d4c */ - { .altcode = "" }, /* 0x0d4d */ - { .altcode = "" }, /* 0x0d4e */ - { .altcode = "" }, /* 0x0d4f */ - { .altcode = "" }, /* 0x0d50 */ - { .altcode = "" }, /* 0x0d51 */ - { .altcode = "" }, /* 0x0d52 */ - { .altcode = "" }, /* 0x0d53 */ - { .altcode = "" }, /* 0x0d54 */ - { .altcode = "" }, /* 0x0d55 */ - { .altcode = "" }, /* 0x0d56 */ - { .altcode = "" }, /* 0x0d57 */ - { .altcode = "" }, /* 0x0d58 */ - { .altcode = "" }, /* 0x0d59 */ - { .altcode = "" }, /* 0x0d5a */ - { .altcode = "" }, /* 0x0d5b */ - { .altcode = "" }, /* 0x0d5c */ - { .altcode = "" }, /* 0x0d5d */ - { .altcode = "" }, /* 0x0d5e */ - { .altcode = "" }, /* 0x0d5f */ - { .altcode = "" }, /* 0x0d60 */ - { .altcode = "" }, /* 0x0d61 */ - { .altcode = "" }, /* 0x0d62 */ - { .altcode = "" }, /* 0x0d63 */ - { .altcode = "" }, /* 0x0d64 */ - { .altcode = "" }, /* 0x0d65 */ - { .altcode = "" }, /* 0x0d66 */ - { .altcode = "" }, /* 0x0d67 */ - { .altcode = "" }, /* 0x0d68 */ - { .altcode = "" }, /* 0x0d69 */ - { .altcode = "" }, /* 0x0d6a */ - { .altcode = "" }, /* 0x0d6b */ - { .altcode = "" }, /* 0x0d6c */ - { .altcode = "" }, /* 0x0d6d */ - { .altcode = "" }, /* 0x0d6e */ - { .altcode = "" }, /* 0x0d6f */ - { .altcode = "" }, /* 0x0d70 */ - { .altcode = "" }, /* 0x0d71 */ - { .altcode = "" }, /* 0x0d72 */ - { .altcode = "" }, /* 0x0d73 */ - { .altcode = "" }, /* 0x0d74 */ - { .altcode = "" }, /* 0x0d75 */ - { .altcode = "" }, /* 0x0d76 */ - { .altcode = "" }, /* 0x0d77 */ - { .altcode = "" }, /* 0x0d78 */ - { .altcode = "" }, /* 0x0d79 */ - { .altcode = "" }, /* 0x0d7a */ - { .altcode = "" }, /* 0x0d7b */ - { .altcode = "" }, /* 0x0d7c */ - { .altcode = "" }, /* 0x0d7d */ - { .altcode = "" }, /* 0x0d7e */ - { .altcode = "" }, /* 0x0d7f */ - { .altcode = "" }, /* 0x0d80 */ - { .altcode = "" }, /* 0x0d81 */ - { .altcode = "" }, /* 0x0d82 */ - { .altcode = "" }, /* 0x0d83 */ - { .altcode = "" }, /* 0x0d84 */ - { .altcode = "" }, /* 0x0d85 */ - { .altcode = "" }, /* 0x0d86 */ - { .altcode = "" }, /* 0x0d87 */ - { .altcode = "" }, /* 0x0d88 */ - { .altcode = "" }, /* 0x0d89 */ - { .altcode = "" }, /* 0x0d8a */ - { .altcode = "" }, /* 0x0d8b */ - { .altcode = "" }, /* 0x0d8c */ - { .altcode = "" }, /* 0x0d8d */ - { .altcode = "" }, /* 0x0d8e */ - { .altcode = "" }, /* 0x0d8f */ - { .altcode = "" }, /* 0x0d90 */ - { .altcode = "" }, /* 0x0d91 */ - { .altcode = "" }, /* 0x0d92 */ - { .altcode = "" }, /* 0x0d93 */ - { .altcode = "" }, /* 0x0d94 */ - { .altcode = "" }, /* 0x0d95 */ - { .altcode = "" }, /* 0x0d96 */ - { .altcode = "" }, /* 0x0d97 */ - { .altcode = "" }, /* 0x0d98 */ - { .altcode = "" }, /* 0x0d99 */ - { .altcode = "" }, /* 0x0d9a */ - { .altcode = "" }, /* 0x0d9b */ - { .altcode = "" }, /* 0x0d9c */ - { .altcode = "" }, /* 0x0d9d */ - { .altcode = "" }, /* 0x0d9e */ - { .altcode = "" }, /* 0x0d9f */ - { .altcode = "" }, /* 0x0da0 */ - { .altcode = "" }, /* 0x0da1 (Thai_kokai) */ - { .altcode = "" }, /* 0x0da2 (Thai_khokhai) */ - { .altcode = "" }, /* 0x0da3 (Thai_khokhuat) */ - { .altcode = "" }, /* 0x0da4 (Thai_khokhwai) */ - { .altcode = "" }, /* 0x0da5 (Thai_khokhon) */ - { .altcode = "" }, /* 0x0da6 (Thai_khorakhang) */ - { .altcode = "" }, /* 0x0da7 (Thai_ngongu) */ - { .altcode = "" }, /* 0x0da8 (Thai_chochan) */ - { .altcode = "" }, /* 0x0da9 (Thai_choching) */ - { .altcode = "" }, /* 0x0daa (Thai_chochang) */ - { .altcode = "" }, /* 0x0dab (Thai_soso) */ - { .altcode = "" }, /* 0x0dac (Thai_chochoe) */ - { .altcode = "" }, /* 0x0dad (Thai_yoying) */ - { .altcode = "" }, /* 0x0dae (Thai_dochada) */ - { .altcode = "" }, /* 0x0daf (Thai_topatak) */ - { .altcode = "" }, /* 0x0db0 (Thai_thothan) */ - { .altcode = "" }, /* 0x0db1 (Thai_thonangmontho) */ - { .altcode = "" }, /* 0x0db2 (Thai_thophuthao) */ - { .altcode = "" }, /* 0x0db3 (Thai_nonen) */ - { .altcode = "" }, /* 0x0db4 (Thai_dodek) */ - { .altcode = "" }, /* 0x0db5 (Thai_totao) */ - { .altcode = "" }, /* 0x0db6 (Thai_thothung) */ - { .altcode = "" }, /* 0x0db7 (Thai_thothahan) */ - { .altcode = "" }, /* 0x0db8 (Thai_thothong) */ - { .altcode = "" }, /* 0x0db9 (Thai_nonu) */ - { .altcode = "" }, /* 0x0dba (Thai_bobaimai) */ - { .altcode = "" }, /* 0x0dbb (Thai_popla) */ - { .altcode = "" }, /* 0x0dbc (Thai_phophung) */ - { .altcode = "" }, /* 0x0dbd (Thai_fofa) */ - { .altcode = "" }, /* 0x0dbe (Thai_phophan) */ - { .altcode = "" }, /* 0x0dbf (Thai_fofan) */ - { .altcode = "" }, /* 0x0dc0 (Thai_phosamphao) */ - { .altcode = "" }, /* 0x0dc1 (Thai_moma) */ - { .altcode = "" }, /* 0x0dc2 (Thai_yoyak) */ - { .altcode = "" }, /* 0x0dc3 (Thai_rorua) */ - { .altcode = "" }, /* 0x0dc4 (Thai_ru) */ - { .altcode = "" }, /* 0x0dc5 (Thai_loling) */ - { .altcode = "" }, /* 0x0dc6 (Thai_lu) */ - { .altcode = "" }, /* 0x0dc7 (Thai_wowaen) */ - { .altcode = "" }, /* 0x0dc8 (Thai_sosala) */ - { .altcode = "" }, /* 0x0dc9 (Thai_sorusi) */ - { .altcode = "" }, /* 0x0dca (Thai_sosua) */ - { .altcode = "" }, /* 0x0dcb (Thai_hohip) */ - { .altcode = "" }, /* 0x0dcc (Thai_lochula) */ - { .altcode = "" }, /* 0x0dcd (Thai_oang) */ - { .altcode = "" }, /* 0x0dce (Thai_honokhuk) */ - { .altcode = "" }, /* 0x0dcf (Thai_paiyannoi) */ - { .altcode = "" }, /* 0x0dd0 (Thai_saraa) */ - { .altcode = "" }, /* 0x0dd1 (Thai_maihanakat) */ - { .altcode = "" }, /* 0x0dd2 (Thai_saraaa) */ - { .altcode = "" }, /* 0x0dd3 (Thai_saraam) */ - { .altcode = "" }, /* 0x0dd4 (Thai_sarai) */ - { .altcode = "" }, /* 0x0dd5 (Thai_saraii) */ - { .altcode = "" }, /* 0x0dd6 (Thai_saraue) */ - { .altcode = "" }, /* 0x0dd7 (Thai_sarauee) */ - { .altcode = "" }, /* 0x0dd8 (Thai_sarau) */ - { .altcode = "" }, /* 0x0dd9 (Thai_sarauu) */ - { .altcode = "" }, /* 0x0dda (Thai_phinthu) */ - { .altcode = "" }, /* 0x0ddb */ - { .altcode = "" }, /* 0x0ddc */ - { .altcode = "" }, /* 0x0ddd */ - { .altcode = "" }, /* 0x0dde (Thai_maihanakat_maitho) */ - { .altcode = "" }, /* 0x0ddf (Thai_baht) */ - { .altcode = "" }, /* 0x0de0 (Thai_sarae) */ - { .altcode = "" }, /* 0x0de1 (Thai_saraae) */ - { .altcode = "" }, /* 0x0de2 (Thai_sarao) */ - { .altcode = "" }, /* 0x0de3 (Thai_saraaimaimuan) */ - { .altcode = "" }, /* 0x0de4 (Thai_saraaimaimalai) */ - { .altcode = "" }, /* 0x0de5 (Thai_lakkhangyao) */ - { .altcode = "" }, /* 0x0de6 (Thai_maiyamok) */ - { .altcode = "" }, /* 0x0de7 (Thai_maitaikhu) */ - { .altcode = "" }, /* 0x0de8 (Thai_maiek) */ - { .altcode = "" }, /* 0x0de9 (Thai_maitho) */ - { .altcode = "" }, /* 0x0dea (Thai_maitri) */ - { .altcode = "" }, /* 0x0deb (Thai_maichattawa) */ - { .altcode = "" }, /* 0x0dec (Thai_thanthakhat) */ - { .altcode = "" }, /* 0x0ded (Thai_nikhahit) */ - { .altcode = "" }, /* 0x0dee */ - { .altcode = "" }, /* 0x0def */ - { .altcode = "" }, /* 0x0df0 (Thai_leksun) */ - { .altcode = "" }, /* 0x0df1 (Thai_leknung) */ - { .altcode = "" }, /* 0x0df2 (Thai_leksong) */ - { .altcode = "" }, /* 0x0df3 (Thai_leksam) */ - { .altcode = "" }, /* 0x0df4 (Thai_leksi) */ - { .altcode = "" }, /* 0x0df5 (Thai_lekha) */ - { .altcode = "" }, /* 0x0df6 (Thai_lekhok) */ - { .altcode = "" }, /* 0x0df7 (Thai_lekchet) */ - { .altcode = "" }, /* 0x0df8 (Thai_lekpaet) */ - { .altcode = "" }, /* 0x0df9 (Thai_lekkao) */ - { .altcode = "" }, /* 0x0dfa */ - { .altcode = "" }, /* 0x0dfb */ - { .altcode = "" }, /* 0x0dfc */ - { .altcode = "" }, /* 0x0dfd */ - { .altcode = "" }, /* 0x0dfe */ - { .altcode = "" }, /* 0x0dff */ + { .altcode = NULL }, /* 0x0d00 */ + { .altcode = NULL }, /* 0x0d01 */ + { .altcode = NULL }, /* 0x0d02 */ + { .altcode = NULL }, /* 0x0d03 */ + { .altcode = NULL }, /* 0x0d04 */ + { .altcode = NULL }, /* 0x0d05 */ + { .altcode = NULL }, /* 0x0d06 */ + { .altcode = NULL }, /* 0x0d07 */ + { .altcode = NULL }, /* 0x0d08 */ + { .altcode = NULL }, /* 0x0d09 */ + { .altcode = NULL }, /* 0x0d0a */ + { .altcode = NULL }, /* 0x0d0b */ + { .altcode = NULL }, /* 0x0d0c */ + { .altcode = NULL }, /* 0x0d0d */ + { .altcode = NULL }, /* 0x0d0e */ + { .altcode = NULL }, /* 0x0d0f */ + { .altcode = NULL }, /* 0x0d10 */ + { .altcode = NULL }, /* 0x0d11 */ + { .altcode = NULL }, /* 0x0d12 */ + { .altcode = NULL }, /* 0x0d13 */ + { .altcode = NULL }, /* 0x0d14 */ + { .altcode = NULL }, /* 0x0d15 */ + { .altcode = NULL }, /* 0x0d16 */ + { .altcode = NULL }, /* 0x0d17 */ + { .altcode = NULL }, /* 0x0d18 */ + { .altcode = NULL }, /* 0x0d19 */ + { .altcode = NULL }, /* 0x0d1a */ + { .altcode = NULL }, /* 0x0d1b */ + { .altcode = NULL }, /* 0x0d1c */ + { .altcode = NULL }, /* 0x0d1d */ + { .altcode = NULL }, /* 0x0d1e */ + { .altcode = NULL }, /* 0x0d1f */ + { .altcode = NULL }, /* 0x0d20 */ + { .altcode = NULL }, /* 0x0d21 */ + { .altcode = NULL }, /* 0x0d22 */ + { .altcode = NULL }, /* 0x0d23 */ + { .altcode = NULL }, /* 0x0d24 */ + { .altcode = NULL }, /* 0x0d25 */ + { .altcode = NULL }, /* 0x0d26 */ + { .altcode = NULL }, /* 0x0d27 */ + { .altcode = NULL }, /* 0x0d28 */ + { .altcode = NULL }, /* 0x0d29 */ + { .altcode = NULL }, /* 0x0d2a */ + { .altcode = NULL }, /* 0x0d2b */ + { .altcode = NULL }, /* 0x0d2c */ + { .altcode = NULL }, /* 0x0d2d */ + { .altcode = NULL }, /* 0x0d2e */ + { .altcode = NULL }, /* 0x0d2f */ + { .altcode = NULL }, /* 0x0d30 */ + { .altcode = NULL }, /* 0x0d31 */ + { .altcode = NULL }, /* 0x0d32 */ + { .altcode = NULL }, /* 0x0d33 */ + { .altcode = NULL }, /* 0x0d34 */ + { .altcode = NULL }, /* 0x0d35 */ + { .altcode = NULL }, /* 0x0d36 */ + { .altcode = NULL }, /* 0x0d37 */ + { .altcode = NULL }, /* 0x0d38 */ + { .altcode = NULL }, /* 0x0d39 */ + { .altcode = NULL }, /* 0x0d3a */ + { .altcode = NULL }, /* 0x0d3b */ + { .altcode = NULL }, /* 0x0d3c */ + { .altcode = NULL }, /* 0x0d3d */ + { .altcode = NULL }, /* 0x0d3e */ + { .altcode = NULL }, /* 0x0d3f */ + { .altcode = NULL }, /* 0x0d40 */ + { .altcode = NULL }, /* 0x0d41 */ + { .altcode = NULL }, /* 0x0d42 */ + { .altcode = NULL }, /* 0x0d43 */ + { .altcode = NULL }, /* 0x0d44 */ + { .altcode = NULL }, /* 0x0d45 */ + { .altcode = NULL }, /* 0x0d46 */ + { .altcode = NULL }, /* 0x0d47 */ + { .altcode = NULL }, /* 0x0d48 */ + { .altcode = NULL }, /* 0x0d49 */ + { .altcode = NULL }, /* 0x0d4a */ + { .altcode = NULL }, /* 0x0d4b */ + { .altcode = NULL }, /* 0x0d4c */ + { .altcode = NULL }, /* 0x0d4d */ + { .altcode = NULL }, /* 0x0d4e */ + { .altcode = NULL }, /* 0x0d4f */ + { .altcode = NULL }, /* 0x0d50 */ + { .altcode = NULL }, /* 0x0d51 */ + { .altcode = NULL }, /* 0x0d52 */ + { .altcode = NULL }, /* 0x0d53 */ + { .altcode = NULL }, /* 0x0d54 */ + { .altcode = NULL }, /* 0x0d55 */ + { .altcode = NULL }, /* 0x0d56 */ + { .altcode = NULL }, /* 0x0d57 */ + { .altcode = NULL }, /* 0x0d58 */ + { .altcode = NULL }, /* 0x0d59 */ + { .altcode = NULL }, /* 0x0d5a */ + { .altcode = NULL }, /* 0x0d5b */ + { .altcode = NULL }, /* 0x0d5c */ + { .altcode = NULL }, /* 0x0d5d */ + { .altcode = NULL }, /* 0x0d5e */ + { .altcode = NULL }, /* 0x0d5f */ + { .altcode = NULL }, /* 0x0d60 */ + { .altcode = NULL }, /* 0x0d61 */ + { .altcode = NULL }, /* 0x0d62 */ + { .altcode = NULL }, /* 0x0d63 */ + { .altcode = NULL }, /* 0x0d64 */ + { .altcode = NULL }, /* 0x0d65 */ + { .altcode = NULL }, /* 0x0d66 */ + { .altcode = NULL }, /* 0x0d67 */ + { .altcode = NULL }, /* 0x0d68 */ + { .altcode = NULL }, /* 0x0d69 */ + { .altcode = NULL }, /* 0x0d6a */ + { .altcode = NULL }, /* 0x0d6b */ + { .altcode = NULL }, /* 0x0d6c */ + { .altcode = NULL }, /* 0x0d6d */ + { .altcode = NULL }, /* 0x0d6e */ + { .altcode = NULL }, /* 0x0d6f */ + { .altcode = NULL }, /* 0x0d70 */ + { .altcode = NULL }, /* 0x0d71 */ + { .altcode = NULL }, /* 0x0d72 */ + { .altcode = NULL }, /* 0x0d73 */ + { .altcode = NULL }, /* 0x0d74 */ + { .altcode = NULL }, /* 0x0d75 */ + { .altcode = NULL }, /* 0x0d76 */ + { .altcode = NULL }, /* 0x0d77 */ + { .altcode = NULL }, /* 0x0d78 */ + { .altcode = NULL }, /* 0x0d79 */ + { .altcode = NULL }, /* 0x0d7a */ + { .altcode = NULL }, /* 0x0d7b */ + { .altcode = NULL }, /* 0x0d7c */ + { .altcode = NULL }, /* 0x0d7d */ + { .altcode = NULL }, /* 0x0d7e */ + { .altcode = NULL }, /* 0x0d7f */ + { .altcode = NULL }, /* 0x0d80 */ + { .altcode = NULL }, /* 0x0d81 */ + { .altcode = NULL }, /* 0x0d82 */ + { .altcode = NULL }, /* 0x0d83 */ + { .altcode = NULL }, /* 0x0d84 */ + { .altcode = NULL }, /* 0x0d85 */ + { .altcode = NULL }, /* 0x0d86 */ + { .altcode = NULL }, /* 0x0d87 */ + { .altcode = NULL }, /* 0x0d88 */ + { .altcode = NULL }, /* 0x0d89 */ + { .altcode = NULL }, /* 0x0d8a */ + { .altcode = NULL }, /* 0x0d8b */ + { .altcode = NULL }, /* 0x0d8c */ + { .altcode = NULL }, /* 0x0d8d */ + { .altcode = NULL }, /* 0x0d8e */ + { .altcode = NULL }, /* 0x0d8f */ + { .altcode = NULL }, /* 0x0d90 */ + { .altcode = NULL }, /* 0x0d91 */ + { .altcode = NULL }, /* 0x0d92 */ + { .altcode = NULL }, /* 0x0d93 */ + { .altcode = NULL }, /* 0x0d94 */ + { .altcode = NULL }, /* 0x0d95 */ + { .altcode = NULL }, /* 0x0d96 */ + { .altcode = NULL }, /* 0x0d97 */ + { .altcode = NULL }, /* 0x0d98 */ + { .altcode = NULL }, /* 0x0d99 */ + { .altcode = NULL }, /* 0x0d9a */ + { .altcode = NULL }, /* 0x0d9b */ + { .altcode = NULL }, /* 0x0d9c */ + { .altcode = NULL }, /* 0x0d9d */ + { .altcode = NULL }, /* 0x0d9e */ + { .altcode = NULL }, /* 0x0d9f */ + { .altcode = NULL }, /* 0x0da0 */ + { .altcode = NULL }, /* 0x0da1 (Thai_kokai) */ + { .altcode = NULL }, /* 0x0da2 (Thai_khokhai) */ + { .altcode = NULL }, /* 0x0da3 (Thai_khokhuat) */ + { .altcode = NULL }, /* 0x0da4 (Thai_khokhwai) */ + { .altcode = NULL }, /* 0x0da5 (Thai_khokhon) */ + { .altcode = NULL }, /* 0x0da6 (Thai_khorakhang) */ + { .altcode = NULL }, /* 0x0da7 (Thai_ngongu) */ + { .altcode = NULL }, /* 0x0da8 (Thai_chochan) */ + { .altcode = NULL }, /* 0x0da9 (Thai_choching) */ + { .altcode = NULL }, /* 0x0daa (Thai_chochang) */ + { .altcode = NULL }, /* 0x0dab (Thai_soso) */ + { .altcode = NULL }, /* 0x0dac (Thai_chochoe) */ + { .altcode = NULL }, /* 0x0dad (Thai_yoying) */ + { .altcode = NULL }, /* 0x0dae (Thai_dochada) */ + { .altcode = NULL }, /* 0x0daf (Thai_topatak) */ + { .altcode = NULL }, /* 0x0db0 (Thai_thothan) */ + { .altcode = NULL }, /* 0x0db1 (Thai_thonangmontho) */ + { .altcode = NULL }, /* 0x0db2 (Thai_thophuthao) */ + { .altcode = NULL }, /* 0x0db3 (Thai_nonen) */ + { .altcode = NULL }, /* 0x0db4 (Thai_dodek) */ + { .altcode = NULL }, /* 0x0db5 (Thai_totao) */ + { .altcode = NULL }, /* 0x0db6 (Thai_thothung) */ + { .altcode = NULL }, /* 0x0db7 (Thai_thothahan) */ + { .altcode = NULL }, /* 0x0db8 (Thai_thothong) */ + { .altcode = NULL }, /* 0x0db9 (Thai_nonu) */ + { .altcode = NULL }, /* 0x0dba (Thai_bobaimai) */ + { .altcode = NULL }, /* 0x0dbb (Thai_popla) */ + { .altcode = NULL }, /* 0x0dbc (Thai_phophung) */ + { .altcode = NULL }, /* 0x0dbd (Thai_fofa) */ + { .altcode = NULL }, /* 0x0dbe (Thai_phophan) */ + { .altcode = NULL }, /* 0x0dbf (Thai_fofan) */ + { .altcode = NULL }, /* 0x0dc0 (Thai_phosamphao) */ + { .altcode = NULL }, /* 0x0dc1 (Thai_moma) */ + { .altcode = NULL }, /* 0x0dc2 (Thai_yoyak) */ + { .altcode = NULL }, /* 0x0dc3 (Thai_rorua) */ + { .altcode = NULL }, /* 0x0dc4 (Thai_ru) */ + { .altcode = NULL }, /* 0x0dc5 (Thai_loling) */ + { .altcode = NULL }, /* 0x0dc6 (Thai_lu) */ + { .altcode = NULL }, /* 0x0dc7 (Thai_wowaen) */ + { .altcode = NULL }, /* 0x0dc8 (Thai_sosala) */ + { .altcode = NULL }, /* 0x0dc9 (Thai_sorusi) */ + { .altcode = NULL }, /* 0x0dca (Thai_sosua) */ + { .altcode = NULL }, /* 0x0dcb (Thai_hohip) */ + { .altcode = NULL }, /* 0x0dcc (Thai_lochula) */ + { .altcode = NULL }, /* 0x0dcd (Thai_oang) */ + { .altcode = NULL }, /* 0x0dce (Thai_honokhuk) */ + { .altcode = NULL }, /* 0x0dcf (Thai_paiyannoi) */ + { .altcode = NULL }, /* 0x0dd0 (Thai_saraa) */ + { .altcode = NULL }, /* 0x0dd1 (Thai_maihanakat) */ + { .altcode = NULL }, /* 0x0dd2 (Thai_saraaa) */ + { .altcode = NULL }, /* 0x0dd3 (Thai_saraam) */ + { .altcode = NULL }, /* 0x0dd4 (Thai_sarai) */ + { .altcode = NULL }, /* 0x0dd5 (Thai_saraii) */ + { .altcode = NULL }, /* 0x0dd6 (Thai_saraue) */ + { .altcode = NULL }, /* 0x0dd7 (Thai_sarauee) */ + { .altcode = NULL }, /* 0x0dd8 (Thai_sarau) */ + { .altcode = NULL }, /* 0x0dd9 (Thai_sarauu) */ + { .altcode = NULL }, /* 0x0dda (Thai_phinthu) */ + { .altcode = NULL }, /* 0x0ddb */ + { .altcode = NULL }, /* 0x0ddc */ + { .altcode = NULL }, /* 0x0ddd */ + { .altcode = NULL }, /* 0x0dde (Thai_maihanakat_maitho) */ + { .altcode = NULL }, /* 0x0ddf (Thai_baht) */ + { .altcode = NULL }, /* 0x0de0 (Thai_sarae) */ + { .altcode = NULL }, /* 0x0de1 (Thai_saraae) */ + { .altcode = NULL }, /* 0x0de2 (Thai_sarao) */ + { .altcode = NULL }, /* 0x0de3 (Thai_saraaimaimuan) */ + { .altcode = NULL }, /* 0x0de4 (Thai_saraaimaimalai) */ + { .altcode = NULL }, /* 0x0de5 (Thai_lakkhangyao) */ + { .altcode = NULL }, /* 0x0de6 (Thai_maiyamok) */ + { .altcode = NULL }, /* 0x0de7 (Thai_maitaikhu) */ + { .altcode = NULL }, /* 0x0de8 (Thai_maiek) */ + { .altcode = NULL }, /* 0x0de9 (Thai_maitho) */ + { .altcode = NULL }, /* 0x0dea (Thai_maitri) */ + { .altcode = NULL }, /* 0x0deb (Thai_maichattawa) */ + { .altcode = NULL }, /* 0x0dec (Thai_thanthakhat) */ + { .altcode = NULL }, /* 0x0ded (Thai_nikhahit) */ + { .altcode = NULL }, /* 0x0dee */ + { .altcode = NULL }, /* 0x0def */ + { .altcode = NULL }, /* 0x0df0 (Thai_leksun) */ + { .altcode = NULL }, /* 0x0df1 (Thai_leknung) */ + { .altcode = NULL }, /* 0x0df2 (Thai_leksong) */ + { .altcode = NULL }, /* 0x0df3 (Thai_leksam) */ + { .altcode = NULL }, /* 0x0df4 (Thai_leksi) */ + { .altcode = NULL }, /* 0x0df5 (Thai_lekha) */ + { .altcode = NULL }, /* 0x0df6 (Thai_lekhok) */ + { .altcode = NULL }, /* 0x0df7 (Thai_lekchet) */ + { .altcode = NULL }, /* 0x0df8 (Thai_lekpaet) */ + { .altcode = NULL }, /* 0x0df9 (Thai_lekkao) */ + { .altcode = NULL }, /* 0x0dfa */ + { .altcode = NULL }, /* 0x0dfb */ + { .altcode = NULL }, /* 0x0dfc */ + { .altcode = NULL }, /* 0x0dfd */ + { .altcode = NULL }, /* 0x0dfe */ + { .altcode = NULL }, /* 0x0dff */ }, { /* 0x0e?? */ - { .altcode = "" }, /* 0x0e00 */ - { .altcode = "" }, /* 0x0e01 */ - { .altcode = "" }, /* 0x0e02 */ - { .altcode = "" }, /* 0x0e03 */ - { .altcode = "" }, /* 0x0e04 */ - { .altcode = "" }, /* 0x0e05 */ - { .altcode = "" }, /* 0x0e06 */ - { .altcode = "" }, /* 0x0e07 */ - { .altcode = "" }, /* 0x0e08 */ - { .altcode = "" }, /* 0x0e09 */ - { .altcode = "" }, /* 0x0e0a */ - { .altcode = "" }, /* 0x0e0b */ - { .altcode = "" }, /* 0x0e0c */ - { .altcode = "" }, /* 0x0e0d */ - { .altcode = "" }, /* 0x0e0e */ - { .altcode = "" }, /* 0x0e0f */ - { .altcode = "" }, /* 0x0e10 */ - { .altcode = "" }, /* 0x0e11 */ - { .altcode = "" }, /* 0x0e12 */ - { .altcode = "" }, /* 0x0e13 */ - { .altcode = "" }, /* 0x0e14 */ - { .altcode = "" }, /* 0x0e15 */ - { .altcode = "" }, /* 0x0e16 */ - { .altcode = "" }, /* 0x0e17 */ - { .altcode = "" }, /* 0x0e18 */ - { .altcode = "" }, /* 0x0e19 */ - { .altcode = "" }, /* 0x0e1a */ - { .altcode = "" }, /* 0x0e1b */ - { .altcode = "" }, /* 0x0e1c */ - { .altcode = "" }, /* 0x0e1d */ - { .altcode = "" }, /* 0x0e1e */ - { .altcode = "" }, /* 0x0e1f */ - { .altcode = "" }, /* 0x0e20 */ - { .altcode = "" }, /* 0x0e21 */ - { .altcode = "" }, /* 0x0e22 */ - { .altcode = "" }, /* 0x0e23 */ - { .altcode = "" }, /* 0x0e24 */ - { .altcode = "" }, /* 0x0e25 */ - { .altcode = "" }, /* 0x0e26 */ - { .altcode = "" }, /* 0x0e27 */ - { .altcode = "" }, /* 0x0e28 */ - { .altcode = "" }, /* 0x0e29 */ - { .altcode = "" }, /* 0x0e2a */ - { .altcode = "" }, /* 0x0e2b */ - { .altcode = "" }, /* 0x0e2c */ - { .altcode = "" }, /* 0x0e2d */ - { .altcode = "" }, /* 0x0e2e */ - { .altcode = "" }, /* 0x0e2f */ - { .altcode = "" }, /* 0x0e30 */ - { .altcode = "" }, /* 0x0e31 */ - { .altcode = "" }, /* 0x0e32 */ - { .altcode = "" }, /* 0x0e33 */ - { .altcode = "" }, /* 0x0e34 */ - { .altcode = "" }, /* 0x0e35 */ - { .altcode = "" }, /* 0x0e36 */ - { .altcode = "" }, /* 0x0e37 */ - { .altcode = "" }, /* 0x0e38 */ - { .altcode = "" }, /* 0x0e39 */ - { .altcode = "" }, /* 0x0e3a */ - { .altcode = "" }, /* 0x0e3b */ - { .altcode = "" }, /* 0x0e3c */ - { .altcode = "" }, /* 0x0e3d */ - { .altcode = "" }, /* 0x0e3e */ - { .altcode = "" }, /* 0x0e3f */ - { .altcode = "" }, /* 0x0e40 */ - { .altcode = "" }, /* 0x0e41 */ - { .altcode = "" }, /* 0x0e42 */ - { .altcode = "" }, /* 0x0e43 */ - { .altcode = "" }, /* 0x0e44 */ - { .altcode = "" }, /* 0x0e45 */ - { .altcode = "" }, /* 0x0e46 */ - { .altcode = "" }, /* 0x0e47 */ - { .altcode = "" }, /* 0x0e48 */ - { .altcode = "" }, /* 0x0e49 */ - { .altcode = "" }, /* 0x0e4a */ - { .altcode = "" }, /* 0x0e4b */ - { .altcode = "" }, /* 0x0e4c */ - { .altcode = "" }, /* 0x0e4d */ - { .altcode = "" }, /* 0x0e4e */ - { .altcode = "" }, /* 0x0e4f */ - { .altcode = "" }, /* 0x0e50 */ - { .altcode = "" }, /* 0x0e51 */ - { .altcode = "" }, /* 0x0e52 */ - { .altcode = "" }, /* 0x0e53 */ - { .altcode = "" }, /* 0x0e54 */ - { .altcode = "" }, /* 0x0e55 */ - { .altcode = "" }, /* 0x0e56 */ - { .altcode = "" }, /* 0x0e57 */ - { .altcode = "" }, /* 0x0e58 */ - { .altcode = "" }, /* 0x0e59 */ - { .altcode = "" }, /* 0x0e5a */ - { .altcode = "" }, /* 0x0e5b */ - { .altcode = "" }, /* 0x0e5c */ - { .altcode = "" }, /* 0x0e5d */ - { .altcode = "" }, /* 0x0e5e */ - { .altcode = "" }, /* 0x0e5f */ - { .altcode = "" }, /* 0x0e60 */ - { .altcode = "" }, /* 0x0e61 */ - { .altcode = "" }, /* 0x0e62 */ - { .altcode = "" }, /* 0x0e63 */ - { .altcode = "" }, /* 0x0e64 */ - { .altcode = "" }, /* 0x0e65 */ - { .altcode = "" }, /* 0x0e66 */ - { .altcode = "" }, /* 0x0e67 */ - { .altcode = "" }, /* 0x0e68 */ - { .altcode = "" }, /* 0x0e69 */ - { .altcode = "" }, /* 0x0e6a */ - { .altcode = "" }, /* 0x0e6b */ - { .altcode = "" }, /* 0x0e6c */ - { .altcode = "" }, /* 0x0e6d */ - { .altcode = "" }, /* 0x0e6e */ - { .altcode = "" }, /* 0x0e6f */ - { .altcode = "" }, /* 0x0e70 */ - { .altcode = "" }, /* 0x0e71 */ - { .altcode = "" }, /* 0x0e72 */ - { .altcode = "" }, /* 0x0e73 */ - { .altcode = "" }, /* 0x0e74 */ - { .altcode = "" }, /* 0x0e75 */ - { .altcode = "" }, /* 0x0e76 */ - { .altcode = "" }, /* 0x0e77 */ - { .altcode = "" }, /* 0x0e78 */ - { .altcode = "" }, /* 0x0e79 */ - { .altcode = "" }, /* 0x0e7a */ - { .altcode = "" }, /* 0x0e7b */ - { .altcode = "" }, /* 0x0e7c */ - { .altcode = "" }, /* 0x0e7d */ - { .altcode = "" }, /* 0x0e7e */ - { .altcode = "" }, /* 0x0e7f */ - { .altcode = "" }, /* 0x0e80 */ - { .altcode = "" }, /* 0x0e81 */ - { .altcode = "" }, /* 0x0e82 */ - { .altcode = "" }, /* 0x0e83 */ - { .altcode = "" }, /* 0x0e84 */ - { .altcode = "" }, /* 0x0e85 */ - { .altcode = "" }, /* 0x0e86 */ - { .altcode = "" }, /* 0x0e87 */ - { .altcode = "" }, /* 0x0e88 */ - { .altcode = "" }, /* 0x0e89 */ - { .altcode = "" }, /* 0x0e8a */ - { .altcode = "" }, /* 0x0e8b */ - { .altcode = "" }, /* 0x0e8c */ - { .altcode = "" }, /* 0x0e8d */ - { .altcode = "" }, /* 0x0e8e */ - { .altcode = "" }, /* 0x0e8f */ - { .altcode = "" }, /* 0x0e90 */ - { .altcode = "" }, /* 0x0e91 */ - { .altcode = "" }, /* 0x0e92 */ - { .altcode = "" }, /* 0x0e93 */ - { .altcode = "" }, /* 0x0e94 */ - { .altcode = "" }, /* 0x0e95 */ - { .altcode = "" }, /* 0x0e96 */ - { .altcode = "" }, /* 0x0e97 */ - { .altcode = "" }, /* 0x0e98 */ - { .altcode = "" }, /* 0x0e99 */ - { .altcode = "" }, /* 0x0e9a */ - { .altcode = "" }, /* 0x0e9b */ - { .altcode = "" }, /* 0x0e9c */ - { .altcode = "" }, /* 0x0e9d */ - { .altcode = "" }, /* 0x0e9e */ - { .altcode = "" }, /* 0x0e9f */ - { .altcode = "" }, /* 0x0ea0 */ - { .altcode = "" }, /* 0x0ea1 (Hangul_Kiyeog) */ - { .altcode = "" }, /* 0x0ea2 (Hangul_SsangKiyeog) */ - { .altcode = "" }, /* 0x0ea3 (Hangul_KiyeogSios) */ - { .altcode = "" }, /* 0x0ea4 (Hangul_Nieun) */ - { .altcode = "" }, /* 0x0ea5 (Hangul_NieunJieuj) */ - { .altcode = "" }, /* 0x0ea6 (Hangul_NieunHieuh) */ - { .altcode = "" }, /* 0x0ea7 (Hangul_Dikeud) */ - { .altcode = "" }, /* 0x0ea8 (Hangul_SsangDikeud) */ - { .altcode = "" }, /* 0x0ea9 (Hangul_Rieul) */ - { .altcode = "" }, /* 0x0eaa (Hangul_RieulKiyeog) */ - { .altcode = "" }, /* 0x0eab (Hangul_RieulMieum) */ - { .altcode = "" }, /* 0x0eac (Hangul_RieulPieub) */ - { .altcode = "" }, /* 0x0ead (Hangul_RieulSios) */ - { .altcode = "" }, /* 0x0eae (Hangul_RieulTieut) */ - { .altcode = "" }, /* 0x0eaf (Hangul_RieulPhieuf) */ - { .altcode = "" }, /* 0x0eb0 (Hangul_RieulHieuh) */ - { .altcode = "" }, /* 0x0eb1 (Hangul_Mieum) */ - { .altcode = "" }, /* 0x0eb2 (Hangul_Pieub) */ - { .altcode = "" }, /* 0x0eb3 (Hangul_SsangPieub) */ - { .altcode = "" }, /* 0x0eb4 (Hangul_PieubSios) */ - { .altcode = "" }, /* 0x0eb5 (Hangul_Sios) */ - { .altcode = "" }, /* 0x0eb6 (Hangul_SsangSios) */ - { .altcode = "" }, /* 0x0eb7 (Hangul_Ieung) */ - { .altcode = "" }, /* 0x0eb8 (Hangul_Jieuj) */ - { .altcode = "" }, /* 0x0eb9 (Hangul_SsangJieuj) */ - { .altcode = "" }, /* 0x0eba (Hangul_Cieuc) */ - { .altcode = "" }, /* 0x0ebb (Hangul_Khieuq) */ - { .altcode = "" }, /* 0x0ebc (Hangul_Tieut) */ - { .altcode = "" }, /* 0x0ebd (Hangul_Phieuf) */ - { .altcode = "" }, /* 0x0ebe (Hangul_Hieuh) */ - { .altcode = "" }, /* 0x0ebf (Hangul_A) */ - { .altcode = "" }, /* 0x0ec0 (Hangul_AE) */ - { .altcode = "" }, /* 0x0ec1 (Hangul_YA) */ - { .altcode = "" }, /* 0x0ec2 (Hangul_YAE) */ - { .altcode = "" }, /* 0x0ec3 (Hangul_EO) */ - { .altcode = "" }, /* 0x0ec4 (Hangul_E) */ - { .altcode = "" }, /* 0x0ec5 (Hangul_YEO) */ - { .altcode = "" }, /* 0x0ec6 (Hangul_YE) */ - { .altcode = "" }, /* 0x0ec7 (Hangul_O) */ - { .altcode = "" }, /* 0x0ec8 (Hangul_WA) */ - { .altcode = "" }, /* 0x0ec9 (Hangul_WAE) */ - { .altcode = "" }, /* 0x0eca (Hangul_OE) */ - { .altcode = "" }, /* 0x0ecb (Hangul_YO) */ - { .altcode = "" }, /* 0x0ecc (Hangul_U) */ - { .altcode = "" }, /* 0x0ecd (Hangul_WEO) */ - { .altcode = "" }, /* 0x0ece (Hangul_WE) */ - { .altcode = "" }, /* 0x0ecf (Hangul_WI) */ - { .altcode = "" }, /* 0x0ed0 (Hangul_YU) */ - { .altcode = "" }, /* 0x0ed1 (Hangul_EU) */ - { .altcode = "" }, /* 0x0ed2 (Hangul_YI) */ - { .altcode = "" }, /* 0x0ed3 (Hangul_I) */ - { .altcode = "" }, /* 0x0ed4 (Hangul_J_Kiyeog) */ - { .altcode = "" }, /* 0x0ed5 (Hangul_J_SsangKiyeog) */ - { .altcode = "" }, /* 0x0ed6 (Hangul_J_KiyeogSios) */ - { .altcode = "" }, /* 0x0ed7 (Hangul_J_Nieun) */ - { .altcode = "" }, /* 0x0ed8 (Hangul_J_NieunJieuj) */ - { .altcode = "" }, /* 0x0ed9 (Hangul_J_NieunHieuh) */ - { .altcode = "" }, /* 0x0eda (Hangul_J_Dikeud) */ - { .altcode = "" }, /* 0x0edb (Hangul_J_Rieul) */ - { .altcode = "" }, /* 0x0edc (Hangul_J_RieulKiyeog) */ - { .altcode = "" }, /* 0x0edd (Hangul_J_RieulMieum) */ - { .altcode = "" }, /* 0x0ede (Hangul_J_RieulPieub) */ - { .altcode = "" }, /* 0x0edf (Hangul_J_RieulSios) */ - { .altcode = "" }, /* 0x0ee0 (Hangul_J_RieulTieut) */ - { .altcode = "" }, /* 0x0ee1 (Hangul_J_RieulPhieuf) */ - { .altcode = "" }, /* 0x0ee2 (Hangul_J_RieulHieuh) */ - { .altcode = "" }, /* 0x0ee3 (Hangul_J_Mieum) */ - { .altcode = "" }, /* 0x0ee4 (Hangul_J_Pieub) */ - { .altcode = "" }, /* 0x0ee5 (Hangul_J_PieubSios) */ - { .altcode = "" }, /* 0x0ee6 (Hangul_J_Sios) */ - { .altcode = "" }, /* 0x0ee7 (Hangul_J_SsangSios) */ - { .altcode = "" }, /* 0x0ee8 (Hangul_J_Ieung) */ - { .altcode = "" }, /* 0x0ee9 (Hangul_J_Jieuj) */ - { .altcode = "" }, /* 0x0eea (Hangul_J_Cieuc) */ - { .altcode = "" }, /* 0x0eeb (Hangul_J_Khieuq) */ - { .altcode = "" }, /* 0x0eec (Hangul_J_Tieut) */ - { .altcode = "" }, /* 0x0eed (Hangul_J_Phieuf) */ - { .altcode = "" }, /* 0x0eee (Hangul_J_Hieuh) */ - { .altcode = "" }, /* 0x0eef (Hangul_RieulYeorinHieuh) */ - { .altcode = "" }, /* 0x0ef0 (Hangul_SunkyeongeumMieum) */ - { .altcode = "" }, /* 0x0ef1 (Hangul_SunkyeongeumPieub) */ - { .altcode = "" }, /* 0x0ef2 (Hangul_PanSios) */ - { .altcode = "" }, /* 0x0ef3 (Hangul_KkogjiDalrinIeung) */ - { .altcode = "" }, /* 0x0ef4 (Hangul_SunkyeongeumPhieuf) */ - { .altcode = "" }, /* 0x0ef5 (Hangul_YeorinHieuh) */ - { .altcode = "" }, /* 0x0ef6 (Hangul_AraeA) */ - { .altcode = "" }, /* 0x0ef7 (Hangul_AraeAE) */ - { .altcode = "" }, /* 0x0ef8 (Hangul_J_PanSios) */ - { .altcode = "" }, /* 0x0ef9 (Hangul_J_KkogjiDalrinIeung) */ - { .altcode = "" }, /* 0x0efa (Hangul_J_YeorinHieuh) */ - { .altcode = "" }, /* 0x0efb */ - { .altcode = "" }, /* 0x0efc */ - { .altcode = "" }, /* 0x0efd */ - { .altcode = "" }, /* 0x0efe */ - { .altcode = "" }, /* 0x0eff (Korean_Won) */ + { .altcode = NULL }, /* 0x0e00 */ + { .altcode = NULL }, /* 0x0e01 */ + { .altcode = NULL }, /* 0x0e02 */ + { .altcode = NULL }, /* 0x0e03 */ + { .altcode = NULL }, /* 0x0e04 */ + { .altcode = NULL }, /* 0x0e05 */ + { .altcode = NULL }, /* 0x0e06 */ + { .altcode = NULL }, /* 0x0e07 */ + { .altcode = NULL }, /* 0x0e08 */ + { .altcode = NULL }, /* 0x0e09 */ + { .altcode = NULL }, /* 0x0e0a */ + { .altcode = NULL }, /* 0x0e0b */ + { .altcode = NULL }, /* 0x0e0c */ + { .altcode = NULL }, /* 0x0e0d */ + { .altcode = NULL }, /* 0x0e0e */ + { .altcode = NULL }, /* 0x0e0f */ + { .altcode = NULL }, /* 0x0e10 */ + { .altcode = NULL }, /* 0x0e11 */ + { .altcode = NULL }, /* 0x0e12 */ + { .altcode = NULL }, /* 0x0e13 */ + { .altcode = NULL }, /* 0x0e14 */ + { .altcode = NULL }, /* 0x0e15 */ + { .altcode = NULL }, /* 0x0e16 */ + { .altcode = NULL }, /* 0x0e17 */ + { .altcode = NULL }, /* 0x0e18 */ + { .altcode = NULL }, /* 0x0e19 */ + { .altcode = NULL }, /* 0x0e1a */ + { .altcode = NULL }, /* 0x0e1b */ + { .altcode = NULL }, /* 0x0e1c */ + { .altcode = NULL }, /* 0x0e1d */ + { .altcode = NULL }, /* 0x0e1e */ + { .altcode = NULL }, /* 0x0e1f */ + { .altcode = NULL }, /* 0x0e20 */ + { .altcode = NULL }, /* 0x0e21 */ + { .altcode = NULL }, /* 0x0e22 */ + { .altcode = NULL }, /* 0x0e23 */ + { .altcode = NULL }, /* 0x0e24 */ + { .altcode = NULL }, /* 0x0e25 */ + { .altcode = NULL }, /* 0x0e26 */ + { .altcode = NULL }, /* 0x0e27 */ + { .altcode = NULL }, /* 0x0e28 */ + { .altcode = NULL }, /* 0x0e29 */ + { .altcode = NULL }, /* 0x0e2a */ + { .altcode = NULL }, /* 0x0e2b */ + { .altcode = NULL }, /* 0x0e2c */ + { .altcode = NULL }, /* 0x0e2d */ + { .altcode = NULL }, /* 0x0e2e */ + { .altcode = NULL }, /* 0x0e2f */ + { .altcode = NULL }, /* 0x0e30 */ + { .altcode = NULL }, /* 0x0e31 */ + { .altcode = NULL }, /* 0x0e32 */ + { .altcode = NULL }, /* 0x0e33 */ + { .altcode = NULL }, /* 0x0e34 */ + { .altcode = NULL }, /* 0x0e35 */ + { .altcode = NULL }, /* 0x0e36 */ + { .altcode = NULL }, /* 0x0e37 */ + { .altcode = NULL }, /* 0x0e38 */ + { .altcode = NULL }, /* 0x0e39 */ + { .altcode = NULL }, /* 0x0e3a */ + { .altcode = NULL }, /* 0x0e3b */ + { .altcode = NULL }, /* 0x0e3c */ + { .altcode = NULL }, /* 0x0e3d */ + { .altcode = NULL }, /* 0x0e3e */ + { .altcode = NULL }, /* 0x0e3f */ + { .altcode = NULL }, /* 0x0e40 */ + { .altcode = NULL }, /* 0x0e41 */ + { .altcode = NULL }, /* 0x0e42 */ + { .altcode = NULL }, /* 0x0e43 */ + { .altcode = NULL }, /* 0x0e44 */ + { .altcode = NULL }, /* 0x0e45 */ + { .altcode = NULL }, /* 0x0e46 */ + { .altcode = NULL }, /* 0x0e47 */ + { .altcode = NULL }, /* 0x0e48 */ + { .altcode = NULL }, /* 0x0e49 */ + { .altcode = NULL }, /* 0x0e4a */ + { .altcode = NULL }, /* 0x0e4b */ + { .altcode = NULL }, /* 0x0e4c */ + { .altcode = NULL }, /* 0x0e4d */ + { .altcode = NULL }, /* 0x0e4e */ + { .altcode = NULL }, /* 0x0e4f */ + { .altcode = NULL }, /* 0x0e50 */ + { .altcode = NULL }, /* 0x0e51 */ + { .altcode = NULL }, /* 0x0e52 */ + { .altcode = NULL }, /* 0x0e53 */ + { .altcode = NULL }, /* 0x0e54 */ + { .altcode = NULL }, /* 0x0e55 */ + { .altcode = NULL }, /* 0x0e56 */ + { .altcode = NULL }, /* 0x0e57 */ + { .altcode = NULL }, /* 0x0e58 */ + { .altcode = NULL }, /* 0x0e59 */ + { .altcode = NULL }, /* 0x0e5a */ + { .altcode = NULL }, /* 0x0e5b */ + { .altcode = NULL }, /* 0x0e5c */ + { .altcode = NULL }, /* 0x0e5d */ + { .altcode = NULL }, /* 0x0e5e */ + { .altcode = NULL }, /* 0x0e5f */ + { .altcode = NULL }, /* 0x0e60 */ + { .altcode = NULL }, /* 0x0e61 */ + { .altcode = NULL }, /* 0x0e62 */ + { .altcode = NULL }, /* 0x0e63 */ + { .altcode = NULL }, /* 0x0e64 */ + { .altcode = NULL }, /* 0x0e65 */ + { .altcode = NULL }, /* 0x0e66 */ + { .altcode = NULL }, /* 0x0e67 */ + { .altcode = NULL }, /* 0x0e68 */ + { .altcode = NULL }, /* 0x0e69 */ + { .altcode = NULL }, /* 0x0e6a */ + { .altcode = NULL }, /* 0x0e6b */ + { .altcode = NULL }, /* 0x0e6c */ + { .altcode = NULL }, /* 0x0e6d */ + { .altcode = NULL }, /* 0x0e6e */ + { .altcode = NULL }, /* 0x0e6f */ + { .altcode = NULL }, /* 0x0e70 */ + { .altcode = NULL }, /* 0x0e71 */ + { .altcode = NULL }, /* 0x0e72 */ + { .altcode = NULL }, /* 0x0e73 */ + { .altcode = NULL }, /* 0x0e74 */ + { .altcode = NULL }, /* 0x0e75 */ + { .altcode = NULL }, /* 0x0e76 */ + { .altcode = NULL }, /* 0x0e77 */ + { .altcode = NULL }, /* 0x0e78 */ + { .altcode = NULL }, /* 0x0e79 */ + { .altcode = NULL }, /* 0x0e7a */ + { .altcode = NULL }, /* 0x0e7b */ + { .altcode = NULL }, /* 0x0e7c */ + { .altcode = NULL }, /* 0x0e7d */ + { .altcode = NULL }, /* 0x0e7e */ + { .altcode = NULL }, /* 0x0e7f */ + { .altcode = NULL }, /* 0x0e80 */ + { .altcode = NULL }, /* 0x0e81 */ + { .altcode = NULL }, /* 0x0e82 */ + { .altcode = NULL }, /* 0x0e83 */ + { .altcode = NULL }, /* 0x0e84 */ + { .altcode = NULL }, /* 0x0e85 */ + { .altcode = NULL }, /* 0x0e86 */ + { .altcode = NULL }, /* 0x0e87 */ + { .altcode = NULL }, /* 0x0e88 */ + { .altcode = NULL }, /* 0x0e89 */ + { .altcode = NULL }, /* 0x0e8a */ + { .altcode = NULL }, /* 0x0e8b */ + { .altcode = NULL }, /* 0x0e8c */ + { .altcode = NULL }, /* 0x0e8d */ + { .altcode = NULL }, /* 0x0e8e */ + { .altcode = NULL }, /* 0x0e8f */ + { .altcode = NULL }, /* 0x0e90 */ + { .altcode = NULL }, /* 0x0e91 */ + { .altcode = NULL }, /* 0x0e92 */ + { .altcode = NULL }, /* 0x0e93 */ + { .altcode = NULL }, /* 0x0e94 */ + { .altcode = NULL }, /* 0x0e95 */ + { .altcode = NULL }, /* 0x0e96 */ + { .altcode = NULL }, /* 0x0e97 */ + { .altcode = NULL }, /* 0x0e98 */ + { .altcode = NULL }, /* 0x0e99 */ + { .altcode = NULL }, /* 0x0e9a */ + { .altcode = NULL }, /* 0x0e9b */ + { .altcode = NULL }, /* 0x0e9c */ + { .altcode = NULL }, /* 0x0e9d */ + { .altcode = NULL }, /* 0x0e9e */ + { .altcode = NULL }, /* 0x0e9f */ + { .altcode = NULL }, /* 0x0ea0 */ + { .altcode = NULL }, /* 0x0ea1 (Hangul_Kiyeog) */ + { .altcode = NULL }, /* 0x0ea2 (Hangul_SsangKiyeog) */ + { .altcode = NULL }, /* 0x0ea3 (Hangul_KiyeogSios) */ + { .altcode = NULL }, /* 0x0ea4 (Hangul_Nieun) */ + { .altcode = NULL }, /* 0x0ea5 (Hangul_NieunJieuj) */ + { .altcode = NULL }, /* 0x0ea6 (Hangul_NieunHieuh) */ + { .altcode = NULL }, /* 0x0ea7 (Hangul_Dikeud) */ + { .altcode = NULL }, /* 0x0ea8 (Hangul_SsangDikeud) */ + { .altcode = NULL }, /* 0x0ea9 (Hangul_Rieul) */ + { .altcode = NULL }, /* 0x0eaa (Hangul_RieulKiyeog) */ + { .altcode = NULL }, /* 0x0eab (Hangul_RieulMieum) */ + { .altcode = NULL }, /* 0x0eac (Hangul_RieulPieub) */ + { .altcode = NULL }, /* 0x0ead (Hangul_RieulSios) */ + { .altcode = NULL }, /* 0x0eae (Hangul_RieulTieut) */ + { .altcode = NULL }, /* 0x0eaf (Hangul_RieulPhieuf) */ + { .altcode = NULL }, /* 0x0eb0 (Hangul_RieulHieuh) */ + { .altcode = NULL }, /* 0x0eb1 (Hangul_Mieum) */ + { .altcode = NULL }, /* 0x0eb2 (Hangul_Pieub) */ + { .altcode = NULL }, /* 0x0eb3 (Hangul_SsangPieub) */ + { .altcode = NULL }, /* 0x0eb4 (Hangul_PieubSios) */ + { .altcode = NULL }, /* 0x0eb5 (Hangul_Sios) */ + { .altcode = NULL }, /* 0x0eb6 (Hangul_SsangSios) */ + { .altcode = NULL }, /* 0x0eb7 (Hangul_Ieung) */ + { .altcode = NULL }, /* 0x0eb8 (Hangul_Jieuj) */ + { .altcode = NULL }, /* 0x0eb9 (Hangul_SsangJieuj) */ + { .altcode = NULL }, /* 0x0eba (Hangul_Cieuc) */ + { .altcode = NULL }, /* 0x0ebb (Hangul_Khieuq) */ + { .altcode = NULL }, /* 0x0ebc (Hangul_Tieut) */ + { .altcode = NULL }, /* 0x0ebd (Hangul_Phieuf) */ + { .altcode = NULL }, /* 0x0ebe (Hangul_Hieuh) */ + { .altcode = NULL }, /* 0x0ebf (Hangul_A) */ + { .altcode = NULL }, /* 0x0ec0 (Hangul_AE) */ + { .altcode = NULL }, /* 0x0ec1 (Hangul_YA) */ + { .altcode = NULL }, /* 0x0ec2 (Hangul_YAE) */ + { .altcode = NULL }, /* 0x0ec3 (Hangul_EO) */ + { .altcode = NULL }, /* 0x0ec4 (Hangul_E) */ + { .altcode = NULL }, /* 0x0ec5 (Hangul_YEO) */ + { .altcode = NULL }, /* 0x0ec6 (Hangul_YE) */ + { .altcode = NULL }, /* 0x0ec7 (Hangul_O) */ + { .altcode = NULL }, /* 0x0ec8 (Hangul_WA) */ + { .altcode = NULL }, /* 0x0ec9 (Hangul_WAE) */ + { .altcode = NULL }, /* 0x0eca (Hangul_OE) */ + { .altcode = NULL }, /* 0x0ecb (Hangul_YO) */ + { .altcode = NULL }, /* 0x0ecc (Hangul_U) */ + { .altcode = NULL }, /* 0x0ecd (Hangul_WEO) */ + { .altcode = NULL }, /* 0x0ece (Hangul_WE) */ + { .altcode = NULL }, /* 0x0ecf (Hangul_WI) */ + { .altcode = NULL }, /* 0x0ed0 (Hangul_YU) */ + { .altcode = NULL }, /* 0x0ed1 (Hangul_EU) */ + { .altcode = NULL }, /* 0x0ed2 (Hangul_YI) */ + { .altcode = NULL }, /* 0x0ed3 (Hangul_I) */ + { .altcode = NULL }, /* 0x0ed4 (Hangul_J_Kiyeog) */ + { .altcode = NULL }, /* 0x0ed5 (Hangul_J_SsangKiyeog) */ + { .altcode = NULL }, /* 0x0ed6 (Hangul_J_KiyeogSios) */ + { .altcode = NULL }, /* 0x0ed7 (Hangul_J_Nieun) */ + { .altcode = NULL }, /* 0x0ed8 (Hangul_J_NieunJieuj) */ + { .altcode = NULL }, /* 0x0ed9 (Hangul_J_NieunHieuh) */ + { .altcode = NULL }, /* 0x0eda (Hangul_J_Dikeud) */ + { .altcode = NULL }, /* 0x0edb (Hangul_J_Rieul) */ + { .altcode = NULL }, /* 0x0edc (Hangul_J_RieulKiyeog) */ + { .altcode = NULL }, /* 0x0edd (Hangul_J_RieulMieum) */ + { .altcode = NULL }, /* 0x0ede (Hangul_J_RieulPieub) */ + { .altcode = NULL }, /* 0x0edf (Hangul_J_RieulSios) */ + { .altcode = NULL }, /* 0x0ee0 (Hangul_J_RieulTieut) */ + { .altcode = NULL }, /* 0x0ee1 (Hangul_J_RieulPhieuf) */ + { .altcode = NULL }, /* 0x0ee2 (Hangul_J_RieulHieuh) */ + { .altcode = NULL }, /* 0x0ee3 (Hangul_J_Mieum) */ + { .altcode = NULL }, /* 0x0ee4 (Hangul_J_Pieub) */ + { .altcode = NULL }, /* 0x0ee5 (Hangul_J_PieubSios) */ + { .altcode = NULL }, /* 0x0ee6 (Hangul_J_Sios) */ + { .altcode = NULL }, /* 0x0ee7 (Hangul_J_SsangSios) */ + { .altcode = NULL }, /* 0x0ee8 (Hangul_J_Ieung) */ + { .altcode = NULL }, /* 0x0ee9 (Hangul_J_Jieuj) */ + { .altcode = NULL }, /* 0x0eea (Hangul_J_Cieuc) */ + { .altcode = NULL }, /* 0x0eeb (Hangul_J_Khieuq) */ + { .altcode = NULL }, /* 0x0eec (Hangul_J_Tieut) */ + { .altcode = NULL }, /* 0x0eed (Hangul_J_Phieuf) */ + { .altcode = NULL }, /* 0x0eee (Hangul_J_Hieuh) */ + { .altcode = NULL }, /* 0x0eef (Hangul_RieulYeorinHieuh) */ + { .altcode = NULL }, /* 0x0ef0 (Hangul_SunkyeongeumMieum) */ + { .altcode = NULL }, /* 0x0ef1 (Hangul_SunkyeongeumPieub) */ + { .altcode = NULL }, /* 0x0ef2 (Hangul_PanSios) */ + { .altcode = NULL }, /* 0x0ef3 (Hangul_KkogjiDalrinIeung) */ + { .altcode = NULL }, /* 0x0ef4 (Hangul_SunkyeongeumPhieuf) */ + { .altcode = NULL }, /* 0x0ef5 (Hangul_YeorinHieuh) */ + { .altcode = NULL }, /* 0x0ef6 (Hangul_AraeA) */ + { .altcode = NULL }, /* 0x0ef7 (Hangul_AraeAE) */ + { .altcode = NULL }, /* 0x0ef8 (Hangul_J_PanSios) */ + { .altcode = NULL }, /* 0x0ef9 (Hangul_J_KkogjiDalrinIeung) */ + { .altcode = NULL }, /* 0x0efa (Hangul_J_YeorinHieuh) */ + { .altcode = NULL }, /* 0x0efb */ + { .altcode = NULL }, /* 0x0efc */ + { .altcode = NULL }, /* 0x0efd */ + { .altcode = NULL }, /* 0x0efe */ + { .altcode = NULL }, /* 0x0eff (Korean_Won) */ }, - {{""}}, /* 0x0f?? */ - {{""}}, /* 0x10?? */ - {{""}}, /* 0x11?? */ - {{""}}, /* 0x12?? */ + {{NULL}}, /* 0x0f?? */ + {{NULL}}, /* 0x10?? */ + {{NULL}}, /* 0x11?? */ + {{NULL}}, /* 0x12?? */ { /* 0x13?? */ - { .altcode = "" }, /* 0x1300 */ - { .altcode = "" }, /* 0x1301 */ - { .altcode = "" }, /* 0x1302 */ - { .altcode = "" }, /* 0x1303 */ - { .altcode = "" }, /* 0x1304 */ - { .altcode = "" }, /* 0x1305 */ - { .altcode = "" }, /* 0x1306 */ - { .altcode = "" }, /* 0x1307 */ - { .altcode = "" }, /* 0x1308 */ - { .altcode = "" }, /* 0x1309 */ - { .altcode = "" }, /* 0x130a */ - { .altcode = "" }, /* 0x130b */ - { .altcode = "" }, /* 0x130c */ - { .altcode = "" }, /* 0x130d */ - { .altcode = "" }, /* 0x130e */ - { .altcode = "" }, /* 0x130f */ - { .altcode = "" }, /* 0x1310 */ - { .altcode = "" }, /* 0x1311 */ - { .altcode = "" }, /* 0x1312 */ - { .altcode = "" }, /* 0x1313 */ - { .altcode = "" }, /* 0x1314 */ - { .altcode = "" }, /* 0x1315 */ - { .altcode = "" }, /* 0x1316 */ - { .altcode = "" }, /* 0x1317 */ - { .altcode = "" }, /* 0x1318 */ - { .altcode = "" }, /* 0x1319 */ - { .altcode = "" }, /* 0x131a */ - { .altcode = "" }, /* 0x131b */ - { .altcode = "" }, /* 0x131c */ - { .altcode = "" }, /* 0x131d */ - { .altcode = "" }, /* 0x131e */ - { .altcode = "" }, /* 0x131f */ - { .altcode = "" }, /* 0x1320 */ - { .altcode = "" }, /* 0x1321 */ - { .altcode = "" }, /* 0x1322 */ - { .altcode = "" }, /* 0x1323 */ - { .altcode = "" }, /* 0x1324 */ - { .altcode = "" }, /* 0x1325 */ - { .altcode = "" }, /* 0x1326 */ - { .altcode = "" }, /* 0x1327 */ - { .altcode = "" }, /* 0x1328 */ - { .altcode = "" }, /* 0x1329 */ - { .altcode = "" }, /* 0x132a */ - { .altcode = "" }, /* 0x132b */ - { .altcode = "" }, /* 0x132c */ - { .altcode = "" }, /* 0x132d */ - { .altcode = "" }, /* 0x132e */ - { .altcode = "" }, /* 0x132f */ - { .altcode = "" }, /* 0x1330 */ - { .altcode = "" }, /* 0x1331 */ - { .altcode = "" }, /* 0x1332 */ - { .altcode = "" }, /* 0x1333 */ - { .altcode = "" }, /* 0x1334 */ - { .altcode = "" }, /* 0x1335 */ - { .altcode = "" }, /* 0x1336 */ - { .altcode = "" }, /* 0x1337 */ - { .altcode = "" }, /* 0x1338 */ - { .altcode = "" }, /* 0x1339 */ - { .altcode = "" }, /* 0x133a */ - { .altcode = "" }, /* 0x133b */ - { .altcode = "" }, /* 0x133c */ - { .altcode = "" }, /* 0x133d */ - { .altcode = "" }, /* 0x133e */ - { .altcode = "" }, /* 0x133f */ - { .altcode = "" }, /* 0x1340 */ - { .altcode = "" }, /* 0x1341 */ - { .altcode = "" }, /* 0x1342 */ - { .altcode = "" }, /* 0x1343 */ - { .altcode = "" }, /* 0x1344 */ - { .altcode = "" }, /* 0x1345 */ - { .altcode = "" }, /* 0x1346 */ - { .altcode = "" }, /* 0x1347 */ - { .altcode = "" }, /* 0x1348 */ - { .altcode = "" }, /* 0x1349 */ - { .altcode = "" }, /* 0x134a */ - { .altcode = "" }, /* 0x134b */ - { .altcode = "" }, /* 0x134c */ - { .altcode = "" }, /* 0x134d */ - { .altcode = "" }, /* 0x134e */ - { .altcode = "" }, /* 0x134f */ - { .altcode = "" }, /* 0x1350 */ - { .altcode = "" }, /* 0x1351 */ - { .altcode = "" }, /* 0x1352 */ - { .altcode = "" }, /* 0x1353 */ - { .altcode = "" }, /* 0x1354 */ - { .altcode = "" }, /* 0x1355 */ - { .altcode = "" }, /* 0x1356 */ - { .altcode = "" }, /* 0x1357 */ - { .altcode = "" }, /* 0x1358 */ - { .altcode = "" }, /* 0x1359 */ - { .altcode = "" }, /* 0x135a */ - { .altcode = "" }, /* 0x135b */ - { .altcode = "" }, /* 0x135c */ - { .altcode = "" }, /* 0x135d */ - { .altcode = "" }, /* 0x135e */ - { .altcode = "" }, /* 0x135f */ - { .altcode = "" }, /* 0x1360 */ - { .altcode = "" }, /* 0x1361 */ - { .altcode = "" }, /* 0x1362 */ - { .altcode = "" }, /* 0x1363 */ - { .altcode = "" }, /* 0x1364 */ - { .altcode = "" }, /* 0x1365 */ - { .altcode = "" }, /* 0x1366 */ - { .altcode = "" }, /* 0x1367 */ - { .altcode = "" }, /* 0x1368 */ - { .altcode = "" }, /* 0x1369 */ - { .altcode = "" }, /* 0x136a */ - { .altcode = "" }, /* 0x136b */ - { .altcode = "" }, /* 0x136c */ - { .altcode = "" }, /* 0x136d */ - { .altcode = "" }, /* 0x136e */ - { .altcode = "" }, /* 0x136f */ - { .altcode = "" }, /* 0x1370 */ - { .altcode = "" }, /* 0x1371 */ - { .altcode = "" }, /* 0x1372 */ - { .altcode = "" }, /* 0x1373 */ - { .altcode = "" }, /* 0x1374 */ - { .altcode = "" }, /* 0x1375 */ - { .altcode = "" }, /* 0x1376 */ - { .altcode = "" }, /* 0x1377 */ - { .altcode = "" }, /* 0x1378 */ - { .altcode = "" }, /* 0x1379 */ - { .altcode = "" }, /* 0x137a */ - { .altcode = "" }, /* 0x137b */ - { .altcode = "" }, /* 0x137c */ - { .altcode = "" }, /* 0x137d */ - { .altcode = "" }, /* 0x137e */ - { .altcode = "" }, /* 0x137f */ - { .altcode = "" }, /* 0x1380 */ - { .altcode = "" }, /* 0x1381 */ - { .altcode = "" }, /* 0x1382 */ - { .altcode = "" }, /* 0x1383 */ - { .altcode = "" }, /* 0x1384 */ - { .altcode = "" }, /* 0x1385 */ - { .altcode = "" }, /* 0x1386 */ - { .altcode = "" }, /* 0x1387 */ - { .altcode = "" }, /* 0x1388 */ - { .altcode = "" }, /* 0x1389 */ - { .altcode = "" }, /* 0x138a */ - { .altcode = "" }, /* 0x138b */ - { .altcode = "" }, /* 0x138c */ - { .altcode = "" }, /* 0x138d */ - { .altcode = "" }, /* 0x138e */ - { .altcode = "" }, /* 0x138f */ - { .altcode = "" }, /* 0x1390 */ - { .altcode = "" }, /* 0x1391 */ - { .altcode = "" }, /* 0x1392 */ - { .altcode = "" }, /* 0x1393 */ - { .altcode = "" }, /* 0x1394 */ - { .altcode = "" }, /* 0x1395 */ - { .altcode = "" }, /* 0x1396 */ - { .altcode = "" }, /* 0x1397 */ - { .altcode = "" }, /* 0x1398 */ - { .altcode = "" }, /* 0x1399 */ - { .altcode = "" }, /* 0x139a */ - { .altcode = "" }, /* 0x139b */ - { .altcode = "" }, /* 0x139c */ - { .altcode = "" }, /* 0x139d */ - { .altcode = "" }, /* 0x139e */ - { .altcode = "" }, /* 0x139f */ - { .altcode = "" }, /* 0x13a0 */ - { .altcode = "" }, /* 0x13a1 */ - { .altcode = "" }, /* 0x13a2 */ - { .altcode = "" }, /* 0x13a3 */ - { .altcode = "" }, /* 0x13a4 */ - { .altcode = "" }, /* 0x13a5 */ - { .altcode = "" }, /* 0x13a6 */ - { .altcode = "" }, /* 0x13a7 */ - { .altcode = "" }, /* 0x13a8 */ - { .altcode = "" }, /* 0x13a9 */ - { .altcode = "" }, /* 0x13aa */ - { .altcode = "" }, /* 0x13ab */ - { .altcode = "" }, /* 0x13ac */ - { .altcode = "" }, /* 0x13ad */ - { .altcode = "" }, /* 0x13ae */ - { .altcode = "" }, /* 0x13af */ - { .altcode = "" }, /* 0x13b0 */ - { .altcode = "" }, /* 0x13b1 */ - { .altcode = "" }, /* 0x13b2 */ - { .altcode = "" }, /* 0x13b3 */ - { .altcode = "" }, /* 0x13b4 */ - { .altcode = "" }, /* 0x13b5 */ - { .altcode = "" }, /* 0x13b6 */ - { .altcode = "" }, /* 0x13b7 */ - { .altcode = "" }, /* 0x13b8 */ - { .altcode = "" }, /* 0x13b9 */ - { .altcode = "" }, /* 0x13ba */ - { .altcode = "" }, /* 0x13bb */ - { .altcode = "" }, /* 0x13bc (OE) */ - { .altcode = "" }, /* 0x13bd (oe) */ - { .altcode = "" }, /* 0x13be (Ydiaeresis) */ - { .altcode = "" }, /* 0x13bf */ - { .altcode = "" }, /* 0x13c0 */ - { .altcode = "" }, /* 0x13c1 */ - { .altcode = "" }, /* 0x13c2 */ - { .altcode = "" }, /* 0x13c3 */ - { .altcode = "" }, /* 0x13c4 */ - { .altcode = "" }, /* 0x13c5 */ - { .altcode = "" }, /* 0x13c6 */ - { .altcode = "" }, /* 0x13c7 */ - { .altcode = "" }, /* 0x13c8 */ - { .altcode = "" }, /* 0x13c9 */ - { .altcode = "" }, /* 0x13ca */ - { .altcode = "" }, /* 0x13cb */ - { .altcode = "" }, /* 0x13cc */ - { .altcode = "" }, /* 0x13cd */ - { .altcode = "" }, /* 0x13ce */ - { .altcode = "" }, /* 0x13cf */ - { .altcode = "" }, /* 0x13d0 */ - { .altcode = "" }, /* 0x13d1 */ - { .altcode = "" }, /* 0x13d2 */ - { .altcode = "" }, /* 0x13d3 */ - { .altcode = "" }, /* 0x13d4 */ - { .altcode = "" }, /* 0x13d5 */ - { .altcode = "" }, /* 0x13d6 */ - { .altcode = "" }, /* 0x13d7 */ - { .altcode = "" }, /* 0x13d8 */ - { .altcode = "" }, /* 0x13d9 */ - { .altcode = "" }, /* 0x13da */ - { .altcode = "" }, /* 0x13db */ - { .altcode = "" }, /* 0x13dc */ - { .altcode = "" }, /* 0x13dd */ - { .altcode = "" }, /* 0x13de */ - { .altcode = "" }, /* 0x13df */ - { .altcode = "" }, /* 0x13e0 */ - { .altcode = "" }, /* 0x13e1 */ - { .altcode = "" }, /* 0x13e2 */ - { .altcode = "" }, /* 0x13e3 */ - { .altcode = "" }, /* 0x13e4 */ - { .altcode = "" }, /* 0x13e5 */ - { .altcode = "" }, /* 0x13e6 */ - { .altcode = "" }, /* 0x13e7 */ - { .altcode = "" }, /* 0x13e8 */ - { .altcode = "" }, /* 0x13e9 */ - { .altcode = "" }, /* 0x13ea */ - { .altcode = "" }, /* 0x13eb */ - { .altcode = "" }, /* 0x13ec */ - { .altcode = "" }, /* 0x13ed */ - { .altcode = "" }, /* 0x13ee */ - { .altcode = "" }, /* 0x13ef */ - { .altcode = "" }, /* 0x13f0 */ - { .altcode = "" }, /* 0x13f1 */ - { .altcode = "" }, /* 0x13f2 */ - { .altcode = "" }, /* 0x13f3 */ - { .altcode = "" }, /* 0x13f4 */ - { .altcode = "" }, /* 0x13f5 */ - { .altcode = "" }, /* 0x13f6 */ - { .altcode = "" }, /* 0x13f7 */ - { .altcode = "" }, /* 0x13f8 */ - { .altcode = "" }, /* 0x13f9 */ - { .altcode = "" }, /* 0x13fa */ - { .altcode = "" }, /* 0x13fb */ - { .altcode = "" }, /* 0x13fc */ - { .altcode = "" }, /* 0x13fd */ - { .altcode = "" }, /* 0x13fe */ - { .altcode = "" }, /* 0x13ff */ + { .altcode = NULL }, /* 0x1300 */ + { .altcode = NULL }, /* 0x1301 */ + { .altcode = NULL }, /* 0x1302 */ + { .altcode = NULL }, /* 0x1303 */ + { .altcode = NULL }, /* 0x1304 */ + { .altcode = NULL }, /* 0x1305 */ + { .altcode = NULL }, /* 0x1306 */ + { .altcode = NULL }, /* 0x1307 */ + { .altcode = NULL }, /* 0x1308 */ + { .altcode = NULL }, /* 0x1309 */ + { .altcode = NULL }, /* 0x130a */ + { .altcode = NULL }, /* 0x130b */ + { .altcode = NULL }, /* 0x130c */ + { .altcode = NULL }, /* 0x130d */ + { .altcode = NULL }, /* 0x130e */ + { .altcode = NULL }, /* 0x130f */ + { .altcode = NULL }, /* 0x1310 */ + { .altcode = NULL }, /* 0x1311 */ + { .altcode = NULL }, /* 0x1312 */ + { .altcode = NULL }, /* 0x1313 */ + { .altcode = NULL }, /* 0x1314 */ + { .altcode = NULL }, /* 0x1315 */ + { .altcode = NULL }, /* 0x1316 */ + { .altcode = NULL }, /* 0x1317 */ + { .altcode = NULL }, /* 0x1318 */ + { .altcode = NULL }, /* 0x1319 */ + { .altcode = NULL }, /* 0x131a */ + { .altcode = NULL }, /* 0x131b */ + { .altcode = NULL }, /* 0x131c */ + { .altcode = NULL }, /* 0x131d */ + { .altcode = NULL }, /* 0x131e */ + { .altcode = NULL }, /* 0x131f */ + { .altcode = NULL }, /* 0x1320 */ + { .altcode = NULL }, /* 0x1321 */ + { .altcode = NULL }, /* 0x1322 */ + { .altcode = NULL }, /* 0x1323 */ + { .altcode = NULL }, /* 0x1324 */ + { .altcode = NULL }, /* 0x1325 */ + { .altcode = NULL }, /* 0x1326 */ + { .altcode = NULL }, /* 0x1327 */ + { .altcode = NULL }, /* 0x1328 */ + { .altcode = NULL }, /* 0x1329 */ + { .altcode = NULL }, /* 0x132a */ + { .altcode = NULL }, /* 0x132b */ + { .altcode = NULL }, /* 0x132c */ + { .altcode = NULL }, /* 0x132d */ + { .altcode = NULL }, /* 0x132e */ + { .altcode = NULL }, /* 0x132f */ + { .altcode = NULL }, /* 0x1330 */ + { .altcode = NULL }, /* 0x1331 */ + { .altcode = NULL }, /* 0x1332 */ + { .altcode = NULL }, /* 0x1333 */ + { .altcode = NULL }, /* 0x1334 */ + { .altcode = NULL }, /* 0x1335 */ + { .altcode = NULL }, /* 0x1336 */ + { .altcode = NULL }, /* 0x1337 */ + { .altcode = NULL }, /* 0x1338 */ + { .altcode = NULL }, /* 0x1339 */ + { .altcode = NULL }, /* 0x133a */ + { .altcode = NULL }, /* 0x133b */ + { .altcode = NULL }, /* 0x133c */ + { .altcode = NULL }, /* 0x133d */ + { .altcode = NULL }, /* 0x133e */ + { .altcode = NULL }, /* 0x133f */ + { .altcode = NULL }, /* 0x1340 */ + { .altcode = NULL }, /* 0x1341 */ + { .altcode = NULL }, /* 0x1342 */ + { .altcode = NULL }, /* 0x1343 */ + { .altcode = NULL }, /* 0x1344 */ + { .altcode = NULL }, /* 0x1345 */ + { .altcode = NULL }, /* 0x1346 */ + { .altcode = NULL }, /* 0x1347 */ + { .altcode = NULL }, /* 0x1348 */ + { .altcode = NULL }, /* 0x1349 */ + { .altcode = NULL }, /* 0x134a */ + { .altcode = NULL }, /* 0x134b */ + { .altcode = NULL }, /* 0x134c */ + { .altcode = NULL }, /* 0x134d */ + { .altcode = NULL }, /* 0x134e */ + { .altcode = NULL }, /* 0x134f */ + { .altcode = NULL }, /* 0x1350 */ + { .altcode = NULL }, /* 0x1351 */ + { .altcode = NULL }, /* 0x1352 */ + { .altcode = NULL }, /* 0x1353 */ + { .altcode = NULL }, /* 0x1354 */ + { .altcode = NULL }, /* 0x1355 */ + { .altcode = NULL }, /* 0x1356 */ + { .altcode = NULL }, /* 0x1357 */ + { .altcode = NULL }, /* 0x1358 */ + { .altcode = NULL }, /* 0x1359 */ + { .altcode = NULL }, /* 0x135a */ + { .altcode = NULL }, /* 0x135b */ + { .altcode = NULL }, /* 0x135c */ + { .altcode = NULL }, /* 0x135d */ + { .altcode = NULL }, /* 0x135e */ + { .altcode = NULL }, /* 0x135f */ + { .altcode = NULL }, /* 0x1360 */ + { .altcode = NULL }, /* 0x1361 */ + { .altcode = NULL }, /* 0x1362 */ + { .altcode = NULL }, /* 0x1363 */ + { .altcode = NULL }, /* 0x1364 */ + { .altcode = NULL }, /* 0x1365 */ + { .altcode = NULL }, /* 0x1366 */ + { .altcode = NULL }, /* 0x1367 */ + { .altcode = NULL }, /* 0x1368 */ + { .altcode = NULL }, /* 0x1369 */ + { .altcode = NULL }, /* 0x136a */ + { .altcode = NULL }, /* 0x136b */ + { .altcode = NULL }, /* 0x136c */ + { .altcode = NULL }, /* 0x136d */ + { .altcode = NULL }, /* 0x136e */ + { .altcode = NULL }, /* 0x136f */ + { .altcode = NULL }, /* 0x1370 */ + { .altcode = NULL }, /* 0x1371 */ + { .altcode = NULL }, /* 0x1372 */ + { .altcode = NULL }, /* 0x1373 */ + { .altcode = NULL }, /* 0x1374 */ + { .altcode = NULL }, /* 0x1375 */ + { .altcode = NULL }, /* 0x1376 */ + { .altcode = NULL }, /* 0x1377 */ + { .altcode = NULL }, /* 0x1378 */ + { .altcode = NULL }, /* 0x1379 */ + { .altcode = NULL }, /* 0x137a */ + { .altcode = NULL }, /* 0x137b */ + { .altcode = NULL }, /* 0x137c */ + { .altcode = NULL }, /* 0x137d */ + { .altcode = NULL }, /* 0x137e */ + { .altcode = NULL }, /* 0x137f */ + { .altcode = NULL }, /* 0x1380 */ + { .altcode = NULL }, /* 0x1381 */ + { .altcode = NULL }, /* 0x1382 */ + { .altcode = NULL }, /* 0x1383 */ + { .altcode = NULL }, /* 0x1384 */ + { .altcode = NULL }, /* 0x1385 */ + { .altcode = NULL }, /* 0x1386 */ + { .altcode = NULL }, /* 0x1387 */ + { .altcode = NULL }, /* 0x1388 */ + { .altcode = NULL }, /* 0x1389 */ + { .altcode = NULL }, /* 0x138a */ + { .altcode = NULL }, /* 0x138b */ + { .altcode = NULL }, /* 0x138c */ + { .altcode = NULL }, /* 0x138d */ + { .altcode = NULL }, /* 0x138e */ + { .altcode = NULL }, /* 0x138f */ + { .altcode = NULL }, /* 0x1390 */ + { .altcode = NULL }, /* 0x1391 */ + { .altcode = NULL }, /* 0x1392 */ + { .altcode = NULL }, /* 0x1393 */ + { .altcode = NULL }, /* 0x1394 */ + { .altcode = NULL }, /* 0x1395 */ + { .altcode = NULL }, /* 0x1396 */ + { .altcode = NULL }, /* 0x1397 */ + { .altcode = NULL }, /* 0x1398 */ + { .altcode = NULL }, /* 0x1399 */ + { .altcode = NULL }, /* 0x139a */ + { .altcode = NULL }, /* 0x139b */ + { .altcode = NULL }, /* 0x139c */ + { .altcode = NULL }, /* 0x139d */ + { .altcode = NULL }, /* 0x139e */ + { .altcode = NULL }, /* 0x139f */ + { .altcode = NULL }, /* 0x13a0 */ + { .altcode = NULL }, /* 0x13a1 */ + { .altcode = NULL }, /* 0x13a2 */ + { .altcode = NULL }, /* 0x13a3 */ + { .altcode = NULL }, /* 0x13a4 */ + { .altcode = NULL }, /* 0x13a5 */ + { .altcode = NULL }, /* 0x13a6 */ + { .altcode = NULL }, /* 0x13a7 */ + { .altcode = NULL }, /* 0x13a8 */ + { .altcode = NULL }, /* 0x13a9 */ + { .altcode = NULL }, /* 0x13aa */ + { .altcode = NULL }, /* 0x13ab */ + { .altcode = NULL }, /* 0x13ac */ + { .altcode = NULL }, /* 0x13ad */ + { .altcode = NULL }, /* 0x13ae */ + { .altcode = NULL }, /* 0x13af */ + { .altcode = NULL }, /* 0x13b0 */ + { .altcode = NULL }, /* 0x13b1 */ + { .altcode = NULL }, /* 0x13b2 */ + { .altcode = NULL }, /* 0x13b3 */ + { .altcode = NULL }, /* 0x13b4 */ + { .altcode = NULL }, /* 0x13b5 */ + { .altcode = NULL }, /* 0x13b6 */ + { .altcode = NULL }, /* 0x13b7 */ + { .altcode = NULL }, /* 0x13b8 */ + { .altcode = NULL }, /* 0x13b9 */ + { .altcode = NULL }, /* 0x13ba */ + { .altcode = NULL }, /* 0x13bb */ + { .altcode = NULL }, /* 0x13bc (OE) */ + { .altcode = NULL }, /* 0x13bd (oe) */ + { .altcode = NULL }, /* 0x13be (Ydiaeresis) */ + { .altcode = NULL }, /* 0x13bf */ + { .altcode = NULL }, /* 0x13c0 */ + { .altcode = NULL }, /* 0x13c1 */ + { .altcode = NULL }, /* 0x13c2 */ + { .altcode = NULL }, /* 0x13c3 */ + { .altcode = NULL }, /* 0x13c4 */ + { .altcode = NULL }, /* 0x13c5 */ + { .altcode = NULL }, /* 0x13c6 */ + { .altcode = NULL }, /* 0x13c7 */ + { .altcode = NULL }, /* 0x13c8 */ + { .altcode = NULL }, /* 0x13c9 */ + { .altcode = NULL }, /* 0x13ca */ + { .altcode = NULL }, /* 0x13cb */ + { .altcode = NULL }, /* 0x13cc */ + { .altcode = NULL }, /* 0x13cd */ + { .altcode = NULL }, /* 0x13ce */ + { .altcode = NULL }, /* 0x13cf */ + { .altcode = NULL }, /* 0x13d0 */ + { .altcode = NULL }, /* 0x13d1 */ + { .altcode = NULL }, /* 0x13d2 */ + { .altcode = NULL }, /* 0x13d3 */ + { .altcode = NULL }, /* 0x13d4 */ + { .altcode = NULL }, /* 0x13d5 */ + { .altcode = NULL }, /* 0x13d6 */ + { .altcode = NULL }, /* 0x13d7 */ + { .altcode = NULL }, /* 0x13d8 */ + { .altcode = NULL }, /* 0x13d9 */ + { .altcode = NULL }, /* 0x13da */ + { .altcode = NULL }, /* 0x13db */ + { .altcode = NULL }, /* 0x13dc */ + { .altcode = NULL }, /* 0x13dd */ + { .altcode = NULL }, /* 0x13de */ + { .altcode = NULL }, /* 0x13df */ + { .altcode = NULL }, /* 0x13e0 */ + { .altcode = NULL }, /* 0x13e1 */ + { .altcode = NULL }, /* 0x13e2 */ + { .altcode = NULL }, /* 0x13e3 */ + { .altcode = NULL }, /* 0x13e4 */ + { .altcode = NULL }, /* 0x13e5 */ + { .altcode = NULL }, /* 0x13e6 */ + { .altcode = NULL }, /* 0x13e7 */ + { .altcode = NULL }, /* 0x13e8 */ + { .altcode = NULL }, /* 0x13e9 */ + { .altcode = NULL }, /* 0x13ea */ + { .altcode = NULL }, /* 0x13eb */ + { .altcode = NULL }, /* 0x13ec */ + { .altcode = NULL }, /* 0x13ed */ + { .altcode = NULL }, /* 0x13ee */ + { .altcode = NULL }, /* 0x13ef */ + { .altcode = NULL }, /* 0x13f0 */ + { .altcode = NULL }, /* 0x13f1 */ + { .altcode = NULL }, /* 0x13f2 */ + { .altcode = NULL }, /* 0x13f3 */ + { .altcode = NULL }, /* 0x13f4 */ + { .altcode = NULL }, /* 0x13f5 */ + { .altcode = NULL }, /* 0x13f6 */ + { .altcode = NULL }, /* 0x13f7 */ + { .altcode = NULL }, /* 0x13f8 */ + { .altcode = NULL }, /* 0x13f9 */ + { .altcode = NULL }, /* 0x13fa */ + { .altcode = NULL }, /* 0x13fb */ + { .altcode = NULL }, /* 0x13fc */ + { .altcode = NULL }, /* 0x13fd */ + { .altcode = NULL }, /* 0x13fe */ + { .altcode = NULL }, /* 0x13ff */ }, - {{""}}, /* 0x14?? */ - {{""}}, /* 0x15?? */ - {{""}}, /* 0x16?? */ - {{""}}, /* 0x17?? */ - {{""}}, /* 0x18?? */ - {{""}}, /* 0x19?? */ - {{""}}, /* 0x1a?? */ - {{""}}, /* 0x1b?? */ - {{""}}, /* 0x1c?? */ - {{""}}, /* 0x1d?? */ - {{""}}, /* 0x1e?? */ - {{""}}, /* 0x1f?? */ + {{NULL}}, /* 0x14?? */ + {{NULL}}, /* 0x15?? */ + {{NULL}}, /* 0x16?? */ + {{NULL}}, /* 0x17?? */ + {{NULL}}, /* 0x18?? */ + {{NULL}}, /* 0x19?? */ + {{NULL}}, /* 0x1a?? */ + {{NULL}}, /* 0x1b?? */ + {{NULL}}, /* 0x1c?? */ + {{NULL}}, /* 0x1d?? */ + {{NULL}}, /* 0x1e?? */ + {{NULL}}, /* 0x1f?? */ { /* 0x20?? */ - { .altcode = "" }, /* 0x2000 */ - { .altcode = "" }, /* 0x2001 */ - { .altcode = "" }, /* 0x2002 */ - { .altcode = "" }, /* 0x2003 */ - { .altcode = "" }, /* 0x2004 */ - { .altcode = "" }, /* 0x2005 */ - { .altcode = "" }, /* 0x2006 */ - { .altcode = "" }, /* 0x2007 */ - { .altcode = "" }, /* 0x2008 */ - { .altcode = "" }, /* 0x2009 */ - { .altcode = "" }, /* 0x200a */ - { .altcode = "" }, /* 0x200b */ - { .altcode = "" }, /* 0x200c */ - { .altcode = "" }, /* 0x200d */ - { .altcode = "" }, /* 0x200e */ - { .altcode = "" }, /* 0x200f */ - { .altcode = "" }, /* 0x2010 */ - { .altcode = "" }, /* 0x2011 */ - { .altcode = "" }, /* 0x2012 */ - { .altcode = "" }, /* 0x2013 */ - { .altcode = "" }, /* 0x2014 */ - { .altcode = "" }, /* 0x2015 */ - { .altcode = "" }, /* 0x2016 */ - { .altcode = "" }, /* 0x2017 */ - { .altcode = "" }, /* 0x2018 */ - { .altcode = "" }, /* 0x2019 */ - { .altcode = "" }, /* 0x201a */ - { .altcode = "" }, /* 0x201b */ - { .altcode = "" }, /* 0x201c */ - { .altcode = "" }, /* 0x201d */ - { .altcode = "" }, /* 0x201e */ - { .altcode = "" }, /* 0x201f */ - { .altcode = "" }, /* 0x2020 */ - { .altcode = "" }, /* 0x2021 */ - { .altcode = "" }, /* 0x2022 */ - { .altcode = "" }, /* 0x2023 */ - { .altcode = "" }, /* 0x2024 */ - { .altcode = "" }, /* 0x2025 */ - { .altcode = "" }, /* 0x2026 */ - { .altcode = "" }, /* 0x2027 */ - { .altcode = "" }, /* 0x2028 */ - { .altcode = "" }, /* 0x2029 */ - { .altcode = "" }, /* 0x202a */ - { .altcode = "" }, /* 0x202b */ - { .altcode = "" }, /* 0x202c */ - { .altcode = "" }, /* 0x202d */ - { .altcode = "" }, /* 0x202e */ - { .altcode = "" }, /* 0x202f */ - { .altcode = "" }, /* 0x2030 */ - { .altcode = "" }, /* 0x2031 */ - { .altcode = "" }, /* 0x2032 */ - { .altcode = "" }, /* 0x2033 */ - { .altcode = "" }, /* 0x2034 */ - { .altcode = "" }, /* 0x2035 */ - { .altcode = "" }, /* 0x2036 */ - { .altcode = "" }, /* 0x2037 */ - { .altcode = "" }, /* 0x2038 */ - { .altcode = "" }, /* 0x2039 */ - { .altcode = "" }, /* 0x203a */ - { .altcode = "" }, /* 0x203b */ - { .altcode = "" }, /* 0x203c */ - { .altcode = "" }, /* 0x203d */ - { .altcode = "" }, /* 0x203e */ - { .altcode = "" }, /* 0x203f */ - { .altcode = "" }, /* 0x2040 */ - { .altcode = "" }, /* 0x2041 */ - { .altcode = "" }, /* 0x2042 */ - { .altcode = "" }, /* 0x2043 */ - { .altcode = "" }, /* 0x2044 */ - { .altcode = "" }, /* 0x2045 */ - { .altcode = "" }, /* 0x2046 */ - { .altcode = "" }, /* 0x2047 */ - { .altcode = "" }, /* 0x2048 */ - { .altcode = "" }, /* 0x2049 */ - { .altcode = "" }, /* 0x204a */ - { .altcode = "" }, /* 0x204b */ - { .altcode = "" }, /* 0x204c */ - { .altcode = "" }, /* 0x204d */ - { .altcode = "" }, /* 0x204e */ - { .altcode = "" }, /* 0x204f */ - { .altcode = "" }, /* 0x2050 */ - { .altcode = "" }, /* 0x2051 */ - { .altcode = "" }, /* 0x2052 */ - { .altcode = "" }, /* 0x2053 */ - { .altcode = "" }, /* 0x2054 */ - { .altcode = "" }, /* 0x2055 */ - { .altcode = "" }, /* 0x2056 */ - { .altcode = "" }, /* 0x2057 */ - { .altcode = "" }, /* 0x2058 */ - { .altcode = "" }, /* 0x2059 */ - { .altcode = "" }, /* 0x205a */ - { .altcode = "" }, /* 0x205b */ - { .altcode = "" }, /* 0x205c */ - { .altcode = "" }, /* 0x205d */ - { .altcode = "" }, /* 0x205e */ - { .altcode = "" }, /* 0x205f */ - { .altcode = "" }, /* 0x2060 */ - { .altcode = "" }, /* 0x2061 */ - { .altcode = "" }, /* 0x2062 */ - { .altcode = "" }, /* 0x2063 */ - { .altcode = "" }, /* 0x2064 */ - { .altcode = "" }, /* 0x2065 */ - { .altcode = "" }, /* 0x2066 */ - { .altcode = "" }, /* 0x2067 */ - { .altcode = "" }, /* 0x2068 */ - { .altcode = "" }, /* 0x2069 */ - { .altcode = "" }, /* 0x206a */ - { .altcode = "" }, /* 0x206b */ - { .altcode = "" }, /* 0x206c */ - { .altcode = "" }, /* 0x206d */ - { .altcode = "" }, /* 0x206e */ - { .altcode = "" }, /* 0x206f */ - { .altcode = "" }, /* 0x2070 */ - { .altcode = "" }, /* 0x2071 */ - { .altcode = "" }, /* 0x2072 */ - { .altcode = "" }, /* 0x2073 */ - { .altcode = "" }, /* 0x2074 */ - { .altcode = "" }, /* 0x2075 */ - { .altcode = "" }, /* 0x2076 */ - { .altcode = "" }, /* 0x2077 */ - { .altcode = "" }, /* 0x2078 */ - { .altcode = "" }, /* 0x2079 */ - { .altcode = "" }, /* 0x207a */ - { .altcode = "" }, /* 0x207b */ - { .altcode = "" }, /* 0x207c */ - { .altcode = "" }, /* 0x207d */ - { .altcode = "" }, /* 0x207e */ - { .altcode = "" }, /* 0x207f */ - { .altcode = "" }, /* 0x2080 */ - { .altcode = "" }, /* 0x2081 */ - { .altcode = "" }, /* 0x2082 */ - { .altcode = "" }, /* 0x2083 */ - { .altcode = "" }, /* 0x2084 */ - { .altcode = "" }, /* 0x2085 */ - { .altcode = "" }, /* 0x2086 */ - { .altcode = "" }, /* 0x2087 */ - { .altcode = "" }, /* 0x2088 */ - { .altcode = "" }, /* 0x2089 */ - { .altcode = "" }, /* 0x208a */ - { .altcode = "" }, /* 0x208b */ - { .altcode = "" }, /* 0x208c */ - { .altcode = "" }, /* 0x208d */ - { .altcode = "" }, /* 0x208e */ - { .altcode = "" }, /* 0x208f */ - { .altcode = "" }, /* 0x2090 */ - { .altcode = "" }, /* 0x2091 */ - { .altcode = "" }, /* 0x2092 */ - { .altcode = "" }, /* 0x2093 */ - { .altcode = "" }, /* 0x2094 */ - { .altcode = "" }, /* 0x2095 */ - { .altcode = "" }, /* 0x2096 */ - { .altcode = "" }, /* 0x2097 */ - { .altcode = "" }, /* 0x2098 */ - { .altcode = "" }, /* 0x2099 */ - { .altcode = "" }, /* 0x209a */ - { .altcode = "" }, /* 0x209b */ - { .altcode = "" }, /* 0x209c */ - { .altcode = "" }, /* 0x209d */ - { .altcode = "" }, /* 0x209e */ - { .altcode = "" }, /* 0x209f */ - { .altcode = "" }, /* 0x20a0 */ - { .altcode = "" }, /* 0x20a1 */ - { .altcode = "" }, /* 0x20a2 */ - { .altcode = "" }, /* 0x20a3 */ - { .altcode = "" }, /* 0x20a4 */ - { .altcode = "" }, /* 0x20a5 */ - { .altcode = "" }, /* 0x20a6 */ - { .altcode = "" }, /* 0x20a7 */ - { .altcode = "" }, /* 0x20a8 */ - { .altcode = "" }, /* 0x20a9 */ - { .altcode = "" }, /* 0x20aa */ - { .altcode = "" }, /* 0x20ab */ - { .altcode = "" }, /* 0x20ac (EuroSign) */ - { .altcode = "" }, /* 0x20ad */ - { .altcode = "" }, /* 0x20ae */ - { .altcode = "" }, /* 0x20af */ - { .altcode = "" }, /* 0x20b0 */ - { .altcode = "" }, /* 0x20b1 */ - { .altcode = "" }, /* 0x20b2 */ - { .altcode = "" }, /* 0x20b3 */ - { .altcode = "" }, /* 0x20b4 */ - { .altcode = "" }, /* 0x20b5 */ - { .altcode = "" }, /* 0x20b6 */ - { .altcode = "" }, /* 0x20b7 */ - { .altcode = "" }, /* 0x20b8 */ - { .altcode = "" }, /* 0x20b9 */ - { .altcode = "" }, /* 0x20ba */ - { .altcode = "" }, /* 0x20bb */ - { .altcode = "" }, /* 0x20bc */ - { .altcode = "" }, /* 0x20bd */ - { .altcode = "" }, /* 0x20be */ - { .altcode = "" }, /* 0x20bf */ - { .altcode = "" }, /* 0x20c0 */ - { .altcode = "" }, /* 0x20c1 */ - { .altcode = "" }, /* 0x20c2 */ - { .altcode = "" }, /* 0x20c3 */ - { .altcode = "" }, /* 0x20c4 */ - { .altcode = "" }, /* 0x20c5 */ - { .altcode = "" }, /* 0x20c6 */ - { .altcode = "" }, /* 0x20c7 */ - { .altcode = "" }, /* 0x20c8 */ - { .altcode = "" }, /* 0x20c9 */ - { .altcode = "" }, /* 0x20ca */ - { .altcode = "" }, /* 0x20cb */ - { .altcode = "" }, /* 0x20cc */ - { .altcode = "" }, /* 0x20cd */ - { .altcode = "" }, /* 0x20ce */ - { .altcode = "" }, /* 0x20cf */ - { .altcode = "" }, /* 0x20d0 */ - { .altcode = "" }, /* 0x20d1 */ - { .altcode = "" }, /* 0x20d2 */ - { .altcode = "" }, /* 0x20d3 */ - { .altcode = "" }, /* 0x20d4 */ - { .altcode = "" }, /* 0x20d5 */ - { .altcode = "" }, /* 0x20d6 */ - { .altcode = "" }, /* 0x20d7 */ - { .altcode = "" }, /* 0x20d8 */ - { .altcode = "" }, /* 0x20d9 */ - { .altcode = "" }, /* 0x20da */ - { .altcode = "" }, /* 0x20db */ - { .altcode = "" }, /* 0x20dc */ - { .altcode = "" }, /* 0x20dd */ - { .altcode = "" }, /* 0x20de */ - { .altcode = "" }, /* 0x20df */ - { .altcode = "" }, /* 0x20e0 */ - { .altcode = "" }, /* 0x20e1 */ - { .altcode = "" }, /* 0x20e2 */ - { .altcode = "" }, /* 0x20e3 */ - { .altcode = "" }, /* 0x20e4 */ - { .altcode = "" }, /* 0x20e5 */ - { .altcode = "" }, /* 0x20e6 */ - { .altcode = "" }, /* 0x20e7 */ - { .altcode = "" }, /* 0x20e8 */ - { .altcode = "" }, /* 0x20e9 */ - { .altcode = "" }, /* 0x20ea */ - { .altcode = "" }, /* 0x20eb */ - { .altcode = "" }, /* 0x20ec */ - { .altcode = "" }, /* 0x20ed */ - { .altcode = "" }, /* 0x20ee */ - { .altcode = "" }, /* 0x20ef */ - { .altcode = "" }, /* 0x20f0 */ - { .altcode = "" }, /* 0x20f1 */ - { .altcode = "" }, /* 0x20f2 */ - { .altcode = "" }, /* 0x20f3 */ - { .altcode = "" }, /* 0x20f4 */ - { .altcode = "" }, /* 0x20f5 */ - { .altcode = "" }, /* 0x20f6 */ - { .altcode = "" }, /* 0x20f7 */ - { .altcode = "" }, /* 0x20f8 */ - { .altcode = "" }, /* 0x20f9 */ - { .altcode = "" }, /* 0x20fa */ - { .altcode = "" }, /* 0x20fb */ - { .altcode = "" }, /* 0x20fc */ - { .altcode = "" }, /* 0x20fd */ - { .altcode = "" }, /* 0x20fe */ - { .altcode = "" }, /* 0x20ff */ + { .altcode = NULL }, /* 0x2000 */ + { .altcode = NULL }, /* 0x2001 */ + { .altcode = NULL }, /* 0x2002 */ + { .altcode = NULL }, /* 0x2003 */ + { .altcode = NULL }, /* 0x2004 */ + { .altcode = NULL }, /* 0x2005 */ + { .altcode = NULL }, /* 0x2006 */ + { .altcode = NULL }, /* 0x2007 */ + { .altcode = NULL }, /* 0x2008 */ + { .altcode = NULL }, /* 0x2009 */ + { .altcode = NULL }, /* 0x200a */ + { .altcode = NULL }, /* 0x200b */ + { .altcode = NULL }, /* 0x200c */ + { .altcode = NULL }, /* 0x200d */ + { .altcode = NULL }, /* 0x200e */ + { .altcode = NULL }, /* 0x200f */ + { .altcode = NULL }, /* 0x2010 */ + { .altcode = NULL }, /* 0x2011 */ + { .altcode = NULL }, /* 0x2012 */ + { .altcode = NULL }, /* 0x2013 */ + { .altcode = NULL }, /* 0x2014 */ + { .altcode = NULL }, /* 0x2015 */ + { .altcode = NULL }, /* 0x2016 */ + { .altcode = NULL }, /* 0x2017 */ + { .altcode = NULL }, /* 0x2018 */ + { .altcode = NULL }, /* 0x2019 */ + { .altcode = NULL }, /* 0x201a */ + { .altcode = NULL }, /* 0x201b */ + { .altcode = NULL }, /* 0x201c */ + { .altcode = NULL }, /* 0x201d */ + { .altcode = NULL }, /* 0x201e */ + { .altcode = NULL }, /* 0x201f */ + { .altcode = NULL }, /* 0x2020 */ + { .altcode = NULL }, /* 0x2021 */ + { .altcode = NULL }, /* 0x2022 */ + { .altcode = NULL }, /* 0x2023 */ + { .altcode = NULL }, /* 0x2024 */ + { .altcode = NULL }, /* 0x2025 */ + { .altcode = NULL }, /* 0x2026 */ + { .altcode = NULL }, /* 0x2027 */ + { .altcode = NULL }, /* 0x2028 */ + { .altcode = NULL }, /* 0x2029 */ + { .altcode = NULL }, /* 0x202a */ + { .altcode = NULL }, /* 0x202b */ + { .altcode = NULL }, /* 0x202c */ + { .altcode = NULL }, /* 0x202d */ + { .altcode = NULL }, /* 0x202e */ + { .altcode = NULL }, /* 0x202f */ + { .altcode = NULL }, /* 0x2030 */ + { .altcode = NULL }, /* 0x2031 */ + { .altcode = NULL }, /* 0x2032 */ + { .altcode = NULL }, /* 0x2033 */ + { .altcode = NULL }, /* 0x2034 */ + { .altcode = NULL }, /* 0x2035 */ + { .altcode = NULL }, /* 0x2036 */ + { .altcode = NULL }, /* 0x2037 */ + { .altcode = NULL }, /* 0x2038 */ + { .altcode = NULL }, /* 0x2039 */ + { .altcode = NULL }, /* 0x203a */ + { .altcode = NULL }, /* 0x203b */ + { .altcode = NULL }, /* 0x203c */ + { .altcode = NULL }, /* 0x203d */ + { .altcode = NULL }, /* 0x203e */ + { .altcode = NULL }, /* 0x203f */ + { .altcode = NULL }, /* 0x2040 */ + { .altcode = NULL }, /* 0x2041 */ + { .altcode = NULL }, /* 0x2042 */ + { .altcode = NULL }, /* 0x2043 */ + { .altcode = NULL }, /* 0x2044 */ + { .altcode = NULL }, /* 0x2045 */ + { .altcode = NULL }, /* 0x2046 */ + { .altcode = NULL }, /* 0x2047 */ + { .altcode = NULL }, /* 0x2048 */ + { .altcode = NULL }, /* 0x2049 */ + { .altcode = NULL }, /* 0x204a */ + { .altcode = NULL }, /* 0x204b */ + { .altcode = NULL }, /* 0x204c */ + { .altcode = NULL }, /* 0x204d */ + { .altcode = NULL }, /* 0x204e */ + { .altcode = NULL }, /* 0x204f */ + { .altcode = NULL }, /* 0x2050 */ + { .altcode = NULL }, /* 0x2051 */ + { .altcode = NULL }, /* 0x2052 */ + { .altcode = NULL }, /* 0x2053 */ + { .altcode = NULL }, /* 0x2054 */ + { .altcode = NULL }, /* 0x2055 */ + { .altcode = NULL }, /* 0x2056 */ + { .altcode = NULL }, /* 0x2057 */ + { .altcode = NULL }, /* 0x2058 */ + { .altcode = NULL }, /* 0x2059 */ + { .altcode = NULL }, /* 0x205a */ + { .altcode = NULL }, /* 0x205b */ + { .altcode = NULL }, /* 0x205c */ + { .altcode = NULL }, /* 0x205d */ + { .altcode = NULL }, /* 0x205e */ + { .altcode = NULL }, /* 0x205f */ + { .altcode = NULL }, /* 0x2060 */ + { .altcode = NULL }, /* 0x2061 */ + { .altcode = NULL }, /* 0x2062 */ + { .altcode = NULL }, /* 0x2063 */ + { .altcode = NULL }, /* 0x2064 */ + { .altcode = NULL }, /* 0x2065 */ + { .altcode = NULL }, /* 0x2066 */ + { .altcode = NULL }, /* 0x2067 */ + { .altcode = NULL }, /* 0x2068 */ + { .altcode = NULL }, /* 0x2069 */ + { .altcode = NULL }, /* 0x206a */ + { .altcode = NULL }, /* 0x206b */ + { .altcode = NULL }, /* 0x206c */ + { .altcode = NULL }, /* 0x206d */ + { .altcode = NULL }, /* 0x206e */ + { .altcode = NULL }, /* 0x206f */ + { .altcode = NULL }, /* 0x2070 */ + { .altcode = NULL }, /* 0x2071 */ + { .altcode = NULL }, /* 0x2072 */ + { .altcode = NULL }, /* 0x2073 */ + { .altcode = NULL }, /* 0x2074 */ + { .altcode = NULL }, /* 0x2075 */ + { .altcode = NULL }, /* 0x2076 */ + { .altcode = NULL }, /* 0x2077 */ + { .altcode = NULL }, /* 0x2078 */ + { .altcode = NULL }, /* 0x2079 */ + { .altcode = NULL }, /* 0x207a */ + { .altcode = NULL }, /* 0x207b */ + { .altcode = NULL }, /* 0x207c */ + { .altcode = NULL }, /* 0x207d */ + { .altcode = NULL }, /* 0x207e */ + { .altcode = NULL }, /* 0x207f */ + { .altcode = NULL }, /* 0x2080 */ + { .altcode = NULL }, /* 0x2081 */ + { .altcode = NULL }, /* 0x2082 */ + { .altcode = NULL }, /* 0x2083 */ + { .altcode = NULL }, /* 0x2084 */ + { .altcode = NULL }, /* 0x2085 */ + { .altcode = NULL }, /* 0x2086 */ + { .altcode = NULL }, /* 0x2087 */ + { .altcode = NULL }, /* 0x2088 */ + { .altcode = NULL }, /* 0x2089 */ + { .altcode = NULL }, /* 0x208a */ + { .altcode = NULL }, /* 0x208b */ + { .altcode = NULL }, /* 0x208c */ + { .altcode = NULL }, /* 0x208d */ + { .altcode = NULL }, /* 0x208e */ + { .altcode = NULL }, /* 0x208f */ + { .altcode = NULL }, /* 0x2090 */ + { .altcode = NULL }, /* 0x2091 */ + { .altcode = NULL }, /* 0x2092 */ + { .altcode = NULL }, /* 0x2093 */ + { .altcode = NULL }, /* 0x2094 */ + { .altcode = NULL }, /* 0x2095 */ + { .altcode = NULL }, /* 0x2096 */ + { .altcode = NULL }, /* 0x2097 */ + { .altcode = NULL }, /* 0x2098 */ + { .altcode = NULL }, /* 0x2099 */ + { .altcode = NULL }, /* 0x209a */ + { .altcode = NULL }, /* 0x209b */ + { .altcode = NULL }, /* 0x209c */ + { .altcode = NULL }, /* 0x209d */ + { .altcode = NULL }, /* 0x209e */ + { .altcode = NULL }, /* 0x209f */ + { .altcode = NULL }, /* 0x20a0 */ + { .altcode = NULL }, /* 0x20a1 */ + { .altcode = NULL }, /* 0x20a2 */ + { .altcode = NULL }, /* 0x20a3 */ + { .altcode = NULL }, /* 0x20a4 */ + { .altcode = NULL }, /* 0x20a5 */ + { .altcode = NULL }, /* 0x20a6 */ + { .altcode = NULL }, /* 0x20a7 */ + { .altcode = NULL }, /* 0x20a8 */ + { .altcode = NULL }, /* 0x20a9 */ + { .altcode = NULL }, /* 0x20aa */ + { .altcode = NULL }, /* 0x20ab */ + { .altcode = NULL }, /* 0x20ac (EuroSign) */ + { .altcode = NULL }, /* 0x20ad */ + { .altcode = NULL }, /* 0x20ae */ + { .altcode = NULL }, /* 0x20af */ + { .altcode = NULL }, /* 0x20b0 */ + { .altcode = NULL }, /* 0x20b1 */ + { .altcode = NULL }, /* 0x20b2 */ + { .altcode = NULL }, /* 0x20b3 */ + { .altcode = NULL }, /* 0x20b4 */ + { .altcode = NULL }, /* 0x20b5 */ + { .altcode = NULL }, /* 0x20b6 */ + { .altcode = NULL }, /* 0x20b7 */ + { .altcode = NULL }, /* 0x20b8 */ + { .altcode = NULL }, /* 0x20b9 */ + { .altcode = NULL }, /* 0x20ba */ + { .altcode = NULL }, /* 0x20bb */ + { .altcode = NULL }, /* 0x20bc */ + { .altcode = NULL }, /* 0x20bd */ + { .altcode = NULL }, /* 0x20be */ + { .altcode = NULL }, /* 0x20bf */ + { .altcode = NULL }, /* 0x20c0 */ + { .altcode = NULL }, /* 0x20c1 */ + { .altcode = NULL }, /* 0x20c2 */ + { .altcode = NULL }, /* 0x20c3 */ + { .altcode = NULL }, /* 0x20c4 */ + { .altcode = NULL }, /* 0x20c5 */ + { .altcode = NULL }, /* 0x20c6 */ + { .altcode = NULL }, /* 0x20c7 */ + { .altcode = NULL }, /* 0x20c8 */ + { .altcode = NULL }, /* 0x20c9 */ + { .altcode = NULL }, /* 0x20ca */ + { .altcode = NULL }, /* 0x20cb */ + { .altcode = NULL }, /* 0x20cc */ + { .altcode = NULL }, /* 0x20cd */ + { .altcode = NULL }, /* 0x20ce */ + { .altcode = NULL }, /* 0x20cf */ + { .altcode = NULL }, /* 0x20d0 */ + { .altcode = NULL }, /* 0x20d1 */ + { .altcode = NULL }, /* 0x20d2 */ + { .altcode = NULL }, /* 0x20d3 */ + { .altcode = NULL }, /* 0x20d4 */ + { .altcode = NULL }, /* 0x20d5 */ + { .altcode = NULL }, /* 0x20d6 */ + { .altcode = NULL }, /* 0x20d7 */ + { .altcode = NULL }, /* 0x20d8 */ + { .altcode = NULL }, /* 0x20d9 */ + { .altcode = NULL }, /* 0x20da */ + { .altcode = NULL }, /* 0x20db */ + { .altcode = NULL }, /* 0x20dc */ + { .altcode = NULL }, /* 0x20dd */ + { .altcode = NULL }, /* 0x20de */ + { .altcode = NULL }, /* 0x20df */ + { .altcode = NULL }, /* 0x20e0 */ + { .altcode = NULL }, /* 0x20e1 */ + { .altcode = NULL }, /* 0x20e2 */ + { .altcode = NULL }, /* 0x20e3 */ + { .altcode = NULL }, /* 0x20e4 */ + { .altcode = NULL }, /* 0x20e5 */ + { .altcode = NULL }, /* 0x20e6 */ + { .altcode = NULL }, /* 0x20e7 */ + { .altcode = NULL }, /* 0x20e8 */ + { .altcode = NULL }, /* 0x20e9 */ + { .altcode = NULL }, /* 0x20ea */ + { .altcode = NULL }, /* 0x20eb */ + { .altcode = NULL }, /* 0x20ec */ + { .altcode = NULL }, /* 0x20ed */ + { .altcode = NULL }, /* 0x20ee */ + { .altcode = NULL }, /* 0x20ef */ + { .altcode = NULL }, /* 0x20f0 */ + { .altcode = NULL }, /* 0x20f1 */ + { .altcode = NULL }, /* 0x20f2 */ + { .altcode = NULL }, /* 0x20f3 */ + { .altcode = NULL }, /* 0x20f4 */ + { .altcode = NULL }, /* 0x20f5 */ + { .altcode = NULL }, /* 0x20f6 */ + { .altcode = NULL }, /* 0x20f7 */ + { .altcode = NULL }, /* 0x20f8 */ + { .altcode = NULL }, /* 0x20f9 */ + { .altcode = NULL }, /* 0x20fa */ + { .altcode = NULL }, /* 0x20fb */ + { .altcode = NULL }, /* 0x20fc */ + { .altcode = NULL }, /* 0x20fd */ + { .altcode = NULL }, /* 0x20fe */ + { .altcode = NULL }, /* 0x20ff */ }, - {{""}}, /* 0x21?? */ - {{""}}, /* 0x22?? */ - {{""}}, /* 0x23?? */ - {{""}}, /* 0x24?? */ - {{""}}, /* 0x25?? */ - {{""}}, /* 0x26?? */ - {{""}}, /* 0x27?? */ - {{""}}, /* 0x28?? */ - {{""}}, /* 0x29?? */ - {{""}}, /* 0x2a?? */ - {{""}}, /* 0x2b?? */ - {{""}}, /* 0x2c?? */ - {{""}}, /* 0x2d?? */ - {{""}}, /* 0x2e?? */ - {{""}}, /* 0x2f?? */ - {{""}}, /* 0x30?? */ - {{""}}, /* 0x31?? */ - {{""}}, /* 0x32?? */ - {{""}}, /* 0x33?? */ - {{""}}, /* 0x34?? */ - {{""}}, /* 0x35?? */ - {{""}}, /* 0x36?? */ - {{""}}, /* 0x37?? */ - {{""}}, /* 0x38?? */ - {{""}}, /* 0x39?? */ - {{""}}, /* 0x3a?? */ - {{""}}, /* 0x3b?? */ - {{""}}, /* 0x3c?? */ - {{""}}, /* 0x3d?? */ - {{""}}, /* 0x3e?? */ - {{""}}, /* 0x3f?? */ - {{""}}, /* 0x40?? */ - {{""}}, /* 0x41?? */ - {{""}}, /* 0x42?? */ - {{""}}, /* 0x43?? */ - {{""}}, /* 0x44?? */ - {{""}}, /* 0x45?? */ - {{""}}, /* 0x46?? */ - {{""}}, /* 0x47?? */ - {{""}}, /* 0x48?? */ - {{""}}, /* 0x49?? */ - {{""}}, /* 0x4a?? */ - {{""}}, /* 0x4b?? */ - {{""}}, /* 0x4c?? */ - {{""}}, /* 0x4d?? */ - {{""}}, /* 0x4e?? */ - {{""}}, /* 0x4f?? */ - {{""}}, /* 0x50?? */ - {{""}}, /* 0x51?? */ - {{""}}, /* 0x52?? */ - {{""}}, /* 0x53?? */ - {{""}}, /* 0x54?? */ - {{""}}, /* 0x55?? */ - {{""}}, /* 0x56?? */ - {{""}}, /* 0x57?? */ - {{""}}, /* 0x58?? */ - {{""}}, /* 0x59?? */ - {{""}}, /* 0x5a?? */ - {{""}}, /* 0x5b?? */ - {{""}}, /* 0x5c?? */ - {{""}}, /* 0x5d?? */ - {{""}}, /* 0x5e?? */ - {{""}}, /* 0x5f?? */ - {{""}}, /* 0x60?? */ - {{""}}, /* 0x61?? */ - {{""}}, /* 0x62?? */ - {{""}}, /* 0x63?? */ - {{""}}, /* 0x64?? */ - {{""}}, /* 0x65?? */ - {{""}}, /* 0x66?? */ - {{""}}, /* 0x67?? */ - {{""}}, /* 0x68?? */ - {{""}}, /* 0x69?? */ - {{""}}, /* 0x6a?? */ - {{""}}, /* 0x6b?? */ - {{""}}, /* 0x6c?? */ - {{""}}, /* 0x6d?? */ - {{""}}, /* 0x6e?? */ - {{""}}, /* 0x6f?? */ - {{""}}, /* 0x70?? */ - {{""}}, /* 0x71?? */ - {{""}}, /* 0x72?? */ - {{""}}, /* 0x73?? */ - {{""}}, /* 0x74?? */ - {{""}}, /* 0x75?? */ - {{""}}, /* 0x76?? */ - {{""}}, /* 0x77?? */ - {{""}}, /* 0x78?? */ - {{""}}, /* 0x79?? */ - {{""}}, /* 0x7a?? */ - {{""}}, /* 0x7b?? */ - {{""}}, /* 0x7c?? */ - {{""}}, /* 0x7d?? */ - {{""}}, /* 0x7e?? */ - {{""}}, /* 0x7f?? */ - {{""}}, /* 0x80?? */ - {{""}}, /* 0x81?? */ - {{""}}, /* 0x82?? */ - {{""}}, /* 0x83?? */ - {{""}}, /* 0x84?? */ - {{""}}, /* 0x85?? */ - {{""}}, /* 0x86?? */ - {{""}}, /* 0x87?? */ - {{""}}, /* 0x88?? */ - {{""}}, /* 0x89?? */ - {{""}}, /* 0x8a?? */ - {{""}}, /* 0x8b?? */ - {{""}}, /* 0x8c?? */ - {{""}}, /* 0x8d?? */ - {{""}}, /* 0x8e?? */ - {{""}}, /* 0x8f?? */ - {{""}}, /* 0x90?? */ - {{""}}, /* 0x91?? */ - {{""}}, /* 0x92?? */ - {{""}}, /* 0x93?? */ - {{""}}, /* 0x94?? */ - {{""}}, /* 0x95?? */ - {{""}}, /* 0x96?? */ - {{""}}, /* 0x97?? */ - {{""}}, /* 0x98?? */ - {{""}}, /* 0x99?? */ - {{""}}, /* 0x9a?? */ - {{""}}, /* 0x9b?? */ - {{""}}, /* 0x9c?? */ - {{""}}, /* 0x9d?? */ - {{""}}, /* 0x9e?? */ - {{""}}, /* 0x9f?? */ - {{""}}, /* 0xa0?? */ - {{""}}, /* 0xa1?? */ - {{""}}, /* 0xa2?? */ - {{""}}, /* 0xa3?? */ - {{""}}, /* 0xa4?? */ - {{""}}, /* 0xa5?? */ - {{""}}, /* 0xa6?? */ - {{""}}, /* 0xa7?? */ - {{""}}, /* 0xa8?? */ - {{""}}, /* 0xa9?? */ - {{""}}, /* 0xaa?? */ - {{""}}, /* 0xab?? */ - {{""}}, /* 0xac?? */ - {{""}}, /* 0xad?? */ - {{""}}, /* 0xae?? */ - {{""}}, /* 0xaf?? */ - {{""}}, /* 0xb0?? */ - {{""}}, /* 0xb1?? */ - {{""}}, /* 0xb2?? */ - {{""}}, /* 0xb3?? */ - {{""}}, /* 0xb4?? */ - {{""}}, /* 0xb5?? */ - {{""}}, /* 0xb6?? */ - {{""}}, /* 0xb7?? */ - {{""}}, /* 0xb8?? */ - {{""}}, /* 0xb9?? */ - {{""}}, /* 0xba?? */ - {{""}}, /* 0xbb?? */ - {{""}}, /* 0xbc?? */ - {{""}}, /* 0xbd?? */ - {{""}}, /* 0xbe?? */ - {{""}}, /* 0xbf?? */ - {{""}}, /* 0xc0?? */ - {{""}}, /* 0xc1?? */ - {{""}}, /* 0xc2?? */ - {{""}}, /* 0xc3?? */ - {{""}}, /* 0xc4?? */ - {{""}}, /* 0xc5?? */ - {{""}}, /* 0xc6?? */ - {{""}}, /* 0xc7?? */ - {{""}}, /* 0xc8?? */ - {{""}}, /* 0xc9?? */ - {{""}}, /* 0xca?? */ - {{""}}, /* 0xcb?? */ - {{""}}, /* 0xcc?? */ - {{""}}, /* 0xcd?? */ - {{""}}, /* 0xce?? */ - {{""}}, /* 0xcf?? */ - {{""}}, /* 0xd0?? */ - {{""}}, /* 0xd1?? */ - {{""}}, /* 0xd2?? */ - {{""}}, /* 0xd3?? */ - {{""}}, /* 0xd4?? */ - {{""}}, /* 0xd5?? */ - {{""}}, /* 0xd6?? */ - {{""}}, /* 0xd7?? */ - {{""}}, /* 0xd8?? */ - {{""}}, /* 0xd9?? */ - {{""}}, /* 0xda?? */ - {{""}}, /* 0xdb?? */ - {{""}}, /* 0xdc?? */ - {{""}}, /* 0xdd?? */ - {{""}}, /* 0xde?? */ - {{""}}, /* 0xdf?? */ - {{""}}, /* 0xe0?? */ - {{""}}, /* 0xe1?? */ - {{""}}, /* 0xe2?? */ - {{""}}, /* 0xe3?? */ - {{""}}, /* 0xe4?? */ - {{""}}, /* 0xe5?? */ - {{""}}, /* 0xe6?? */ - {{""}}, /* 0xe7?? */ - {{""}}, /* 0xe8?? */ - {{""}}, /* 0xe9?? */ - {{""}}, /* 0xea?? */ - {{""}}, /* 0xeb?? */ - {{""}}, /* 0xec?? */ - {{""}}, /* 0xed?? */ - {{""}}, /* 0xee?? */ - {{""}}, /* 0xef?? */ - {{""}}, /* 0xf0?? */ - {{""}}, /* 0xf1?? */ - {{""}}, /* 0xf2?? */ - {{""}}, /* 0xf3?? */ - {{""}}, /* 0xf4?? */ - {{""}}, /* 0xf5?? */ - {{""}}, /* 0xf6?? */ - {{""}}, /* 0xf7?? */ - {{""}}, /* 0xf8?? */ - {{""}}, /* 0xf9?? */ - {{""}}, /* 0xfa?? */ - {{""}}, /* 0xfb?? */ - {{""}}, /* 0xfc?? */ + {{NULL}}, /* 0x21?? */ + {{NULL}}, /* 0x22?? */ + {{NULL}}, /* 0x23?? */ + {{NULL}}, /* 0x24?? */ + {{NULL}}, /* 0x25?? */ + {{NULL}}, /* 0x26?? */ + {{NULL}}, /* 0x27?? */ + {{NULL}}, /* 0x28?? */ + {{NULL}}, /* 0x29?? */ + {{NULL}}, /* 0x2a?? */ + {{NULL}}, /* 0x2b?? */ + {{NULL}}, /* 0x2c?? */ + {{NULL}}, /* 0x2d?? */ + {{NULL}}, /* 0x2e?? */ + {{NULL}}, /* 0x2f?? */ + {{NULL}}, /* 0x30?? */ + {{NULL}}, /* 0x31?? */ + {{NULL}}, /* 0x32?? */ + {{NULL}}, /* 0x33?? */ + {{NULL}}, /* 0x34?? */ + {{NULL}}, /* 0x35?? */ + {{NULL}}, /* 0x36?? */ + {{NULL}}, /* 0x37?? */ + {{NULL}}, /* 0x38?? */ + {{NULL}}, /* 0x39?? */ + {{NULL}}, /* 0x3a?? */ + {{NULL}}, /* 0x3b?? */ + {{NULL}}, /* 0x3c?? */ + {{NULL}}, /* 0x3d?? */ + {{NULL}}, /* 0x3e?? */ + {{NULL}}, /* 0x3f?? */ + {{NULL}}, /* 0x40?? */ + {{NULL}}, /* 0x41?? */ + {{NULL}}, /* 0x42?? */ + {{NULL}}, /* 0x43?? */ + {{NULL}}, /* 0x44?? */ + {{NULL}}, /* 0x45?? */ + {{NULL}}, /* 0x46?? */ + {{NULL}}, /* 0x47?? */ + {{NULL}}, /* 0x48?? */ + {{NULL}}, /* 0x49?? */ + {{NULL}}, /* 0x4a?? */ + {{NULL}}, /* 0x4b?? */ + {{NULL}}, /* 0x4c?? */ + {{NULL}}, /* 0x4d?? */ + {{NULL}}, /* 0x4e?? */ + {{NULL}}, /* 0x4f?? */ + {{NULL}}, /* 0x50?? */ + {{NULL}}, /* 0x51?? */ + {{NULL}}, /* 0x52?? */ + {{NULL}}, /* 0x53?? */ + {{NULL}}, /* 0x54?? */ + {{NULL}}, /* 0x55?? */ + {{NULL}}, /* 0x56?? */ + {{NULL}}, /* 0x57?? */ + {{NULL}}, /* 0x58?? */ + {{NULL}}, /* 0x59?? */ + {{NULL}}, /* 0x5a?? */ + {{NULL}}, /* 0x5b?? */ + {{NULL}}, /* 0x5c?? */ + {{NULL}}, /* 0x5d?? */ + {{NULL}}, /* 0x5e?? */ + {{NULL}}, /* 0x5f?? */ + {{NULL}}, /* 0x60?? */ + {{NULL}}, /* 0x61?? */ + {{NULL}}, /* 0x62?? */ + {{NULL}}, /* 0x63?? */ + {{NULL}}, /* 0x64?? */ + {{NULL}}, /* 0x65?? */ + {{NULL}}, /* 0x66?? */ + {{NULL}}, /* 0x67?? */ + {{NULL}}, /* 0x68?? */ + {{NULL}}, /* 0x69?? */ + {{NULL}}, /* 0x6a?? */ + {{NULL}}, /* 0x6b?? */ + {{NULL}}, /* 0x6c?? */ + {{NULL}}, /* 0x6d?? */ + {{NULL}}, /* 0x6e?? */ + {{NULL}}, /* 0x6f?? */ + {{NULL}}, /* 0x70?? */ + {{NULL}}, /* 0x71?? */ + {{NULL}}, /* 0x72?? */ + {{NULL}}, /* 0x73?? */ + {{NULL}}, /* 0x74?? */ + {{NULL}}, /* 0x75?? */ + {{NULL}}, /* 0x76?? */ + {{NULL}}, /* 0x77?? */ + {{NULL}}, /* 0x78?? */ + {{NULL}}, /* 0x79?? */ + {{NULL}}, /* 0x7a?? */ + {{NULL}}, /* 0x7b?? */ + {{NULL}}, /* 0x7c?? */ + {{NULL}}, /* 0x7d?? */ + {{NULL}}, /* 0x7e?? */ + {{NULL}}, /* 0x7f?? */ + {{NULL}}, /* 0x80?? */ + {{NULL}}, /* 0x81?? */ + {{NULL}}, /* 0x82?? */ + {{NULL}}, /* 0x83?? */ + {{NULL}}, /* 0x84?? */ + {{NULL}}, /* 0x85?? */ + {{NULL}}, /* 0x86?? */ + {{NULL}}, /* 0x87?? */ + {{NULL}}, /* 0x88?? */ + {{NULL}}, /* 0x89?? */ + {{NULL}}, /* 0x8a?? */ + {{NULL}}, /* 0x8b?? */ + {{NULL}}, /* 0x8c?? */ + {{NULL}}, /* 0x8d?? */ + {{NULL}}, /* 0x8e?? */ + {{NULL}}, /* 0x8f?? */ + {{NULL}}, /* 0x90?? */ + {{NULL}}, /* 0x91?? */ + {{NULL}}, /* 0x92?? */ + {{NULL}}, /* 0x93?? */ + {{NULL}}, /* 0x94?? */ + {{NULL}}, /* 0x95?? */ + {{NULL}}, /* 0x96?? */ + {{NULL}}, /* 0x97?? */ + {{NULL}}, /* 0x98?? */ + {{NULL}}, /* 0x99?? */ + {{NULL}}, /* 0x9a?? */ + {{NULL}}, /* 0x9b?? */ + {{NULL}}, /* 0x9c?? */ + {{NULL}}, /* 0x9d?? */ + {{NULL}}, /* 0x9e?? */ + {{NULL}}, /* 0x9f?? */ + {{NULL}}, /* 0xa0?? */ + {{NULL}}, /* 0xa1?? */ + {{NULL}}, /* 0xa2?? */ + {{NULL}}, /* 0xa3?? */ + {{NULL}}, /* 0xa4?? */ + {{NULL}}, /* 0xa5?? */ + {{NULL}}, /* 0xa6?? */ + {{NULL}}, /* 0xa7?? */ + {{NULL}}, /* 0xa8?? */ + {{NULL}}, /* 0xa9?? */ + {{NULL}}, /* 0xaa?? */ + {{NULL}}, /* 0xab?? */ + {{NULL}}, /* 0xac?? */ + {{NULL}}, /* 0xad?? */ + {{NULL}}, /* 0xae?? */ + {{NULL}}, /* 0xaf?? */ + {{NULL}}, /* 0xb0?? */ + {{NULL}}, /* 0xb1?? */ + {{NULL}}, /* 0xb2?? */ + {{NULL}}, /* 0xb3?? */ + {{NULL}}, /* 0xb4?? */ + {{NULL}}, /* 0xb5?? */ + {{NULL}}, /* 0xb6?? */ + {{NULL}}, /* 0xb7?? */ + {{NULL}}, /* 0xb8?? */ + {{NULL}}, /* 0xb9?? */ + {{NULL}}, /* 0xba?? */ + {{NULL}}, /* 0xbb?? */ + {{NULL}}, /* 0xbc?? */ + {{NULL}}, /* 0xbd?? */ + {{NULL}}, /* 0xbe?? */ + {{NULL}}, /* 0xbf?? */ + {{NULL}}, /* 0xc0?? */ + {{NULL}}, /* 0xc1?? */ + {{NULL}}, /* 0xc2?? */ + {{NULL}}, /* 0xc3?? */ + {{NULL}}, /* 0xc4?? */ + {{NULL}}, /* 0xc5?? */ + {{NULL}}, /* 0xc6?? */ + {{NULL}}, /* 0xc7?? */ + {{NULL}}, /* 0xc8?? */ + {{NULL}}, /* 0xc9?? */ + {{NULL}}, /* 0xca?? */ + {{NULL}}, /* 0xcb?? */ + {{NULL}}, /* 0xcc?? */ + {{NULL}}, /* 0xcd?? */ + {{NULL}}, /* 0xce?? */ + {{NULL}}, /* 0xcf?? */ + {{NULL}}, /* 0xd0?? */ + {{NULL}}, /* 0xd1?? */ + {{NULL}}, /* 0xd2?? */ + {{NULL}}, /* 0xd3?? */ + {{NULL}}, /* 0xd4?? */ + {{NULL}}, /* 0xd5?? */ + {{NULL}}, /* 0xd6?? */ + {{NULL}}, /* 0xd7?? */ + {{NULL}}, /* 0xd8?? */ + {{NULL}}, /* 0xd9?? */ + {{NULL}}, /* 0xda?? */ + {{NULL}}, /* 0xdb?? */ + {{NULL}}, /* 0xdc?? */ + {{NULL}}, /* 0xdd?? */ + {{NULL}}, /* 0xde?? */ + {{NULL}}, /* 0xdf?? */ + {{NULL}}, /* 0xe0?? */ + {{NULL}}, /* 0xe1?? */ + {{NULL}}, /* 0xe2?? */ + {{NULL}}, /* 0xe3?? */ + {{NULL}}, /* 0xe4?? */ + {{NULL}}, /* 0xe5?? */ + {{NULL}}, /* 0xe6?? */ + {{NULL}}, /* 0xe7?? */ + {{NULL}}, /* 0xe8?? */ + {{NULL}}, /* 0xe9?? */ + {{NULL}}, /* 0xea?? */ + {{NULL}}, /* 0xeb?? */ + {{NULL}}, /* 0xec?? */ + {{NULL}}, /* 0xed?? */ + {{NULL}}, /* 0xee?? */ + {{NULL}}, /* 0xef?? */ + {{NULL}}, /* 0xf0?? */ + {{NULL}}, /* 0xf1?? */ + {{NULL}}, /* 0xf2?? */ + {{NULL}}, /* 0xf3?? */ + {{NULL}}, /* 0xf4?? */ + {{NULL}}, /* 0xf5?? */ + {{NULL}}, /* 0xf6?? */ + {{NULL}}, /* 0xf7?? */ + {{NULL}}, /* 0xf8?? */ + {{NULL}}, /* 0xf9?? */ + {{NULL}}, /* 0xfa?? */ + {{NULL}}, /* 0xfb?? */ + {{NULL}}, /* 0xfc?? */ { /* 0xfd?? */ - { .altcode = "" }, /* 0xfd00 */ - { .altcode = "" }, /* 0xfd01 (3270_Duplicate) */ - { .altcode = "" }, /* 0xfd02 (3270_FieldMark) */ - { .altcode = "" }, /* 0xfd03 (3270_Right2) */ - { .altcode = "" }, /* 0xfd04 (3270_Left2) */ - { .altcode = "" }, /* 0xfd05 (3270_BackTab) */ - { .altcode = "" }, /* 0xfd06 (3270_EraseEOF) */ - { .altcode = "" }, /* 0xfd07 (3270_EraseInput) */ - { .altcode = "" }, /* 0xfd08 (3270_Reset) */ - { .altcode = "" }, /* 0xfd09 (3270_Quit) */ - { .altcode = "" }, /* 0xfd0a (3270_PA1) */ - { .altcode = "" }, /* 0xfd0b (3270_PA2) */ - { .altcode = "" }, /* 0xfd0c (3270_PA3) */ - { .altcode = "" }, /* 0xfd0d (3270_Test) */ - { .altcode = "" }, /* 0xfd0e (3270_Attn) */ - { .altcode = "" }, /* 0xfd0f (3270_CursorBlink) */ - { .altcode = "" }, /* 0xfd10 (3270_AltCursor) */ - { .altcode = "" }, /* 0xfd11 (3270_KeyClick) */ - { .altcode = "" }, /* 0xfd12 (3270_Jump) */ - { .altcode = "" }, /* 0xfd13 (3270_Ident) */ - { .altcode = "" }, /* 0xfd14 (3270_Rule) */ - { .altcode = "" }, /* 0xfd15 (3270_Copy) */ - { .altcode = "" }, /* 0xfd16 (3270_Play) */ - { .altcode = "" }, /* 0xfd17 (3270_Setup) */ - { .altcode = "" }, /* 0xfd18 (3270_Record) */ - { .altcode = "" }, /* 0xfd19 (3270_ChangeScreen) */ - { .altcode = "" }, /* 0xfd1a (3270_DeleteWord) */ - { .altcode = "" }, /* 0xfd1b (3270_ExSelect) */ - { .altcode = "" }, /* 0xfd1c (3270_CursorSelect) */ - { .altcode = "" }, /* 0xfd1d (3270_PrintScreen) */ - { .altcode = "" }, /* 0xfd1e (3270_Enter) */ - { .altcode = "" }, /* 0xfd1f */ - { .altcode = "" }, /* 0xfd20 */ - { .altcode = "" }, /* 0xfd21 */ - { .altcode = "" }, /* 0xfd22 */ - { .altcode = "" }, /* 0xfd23 */ - { .altcode = "" }, /* 0xfd24 */ - { .altcode = "" }, /* 0xfd25 */ - { .altcode = "" }, /* 0xfd26 */ - { .altcode = "" }, /* 0xfd27 */ - { .altcode = "" }, /* 0xfd28 */ - { .altcode = "" }, /* 0xfd29 */ - { .altcode = "" }, /* 0xfd2a */ - { .altcode = "" }, /* 0xfd2b */ - { .altcode = "" }, /* 0xfd2c */ - { .altcode = "" }, /* 0xfd2d */ - { .altcode = "" }, /* 0xfd2e */ - { .altcode = "" }, /* 0xfd2f */ - { .altcode = "" }, /* 0xfd30 */ - { .altcode = "" }, /* 0xfd31 */ - { .altcode = "" }, /* 0xfd32 */ - { .altcode = "" }, /* 0xfd33 */ - { .altcode = "" }, /* 0xfd34 */ - { .altcode = "" }, /* 0xfd35 */ - { .altcode = "" }, /* 0xfd36 */ - { .altcode = "" }, /* 0xfd37 */ - { .altcode = "" }, /* 0xfd38 */ - { .altcode = "" }, /* 0xfd39 */ - { .altcode = "" }, /* 0xfd3a */ - { .altcode = "" }, /* 0xfd3b */ - { .altcode = "" }, /* 0xfd3c */ - { .altcode = "" }, /* 0xfd3d */ - { .altcode = "" }, /* 0xfd3e */ - { .altcode = "" }, /* 0xfd3f */ - { .altcode = "" }, /* 0xfd40 */ - { .altcode = "" }, /* 0xfd41 */ - { .altcode = "" }, /* 0xfd42 */ - { .altcode = "" }, /* 0xfd43 */ - { .altcode = "" }, /* 0xfd44 */ - { .altcode = "" }, /* 0xfd45 */ - { .altcode = "" }, /* 0xfd46 */ - { .altcode = "" }, /* 0xfd47 */ - { .altcode = "" }, /* 0xfd48 */ - { .altcode = "" }, /* 0xfd49 */ - { .altcode = "" }, /* 0xfd4a */ - { .altcode = "" }, /* 0xfd4b */ - { .altcode = "" }, /* 0xfd4c */ - { .altcode = "" }, /* 0xfd4d */ - { .altcode = "" }, /* 0xfd4e */ - { .altcode = "" }, /* 0xfd4f */ - { .altcode = "" }, /* 0xfd50 */ - { .altcode = "" }, /* 0xfd51 */ - { .altcode = "" }, /* 0xfd52 */ - { .altcode = "" }, /* 0xfd53 */ - { .altcode = "" }, /* 0xfd54 */ - { .altcode = "" }, /* 0xfd55 */ - { .altcode = "" }, /* 0xfd56 */ - { .altcode = "" }, /* 0xfd57 */ - { .altcode = "" }, /* 0xfd58 */ - { .altcode = "" }, /* 0xfd59 */ - { .altcode = "" }, /* 0xfd5a */ - { .altcode = "" }, /* 0xfd5b */ - { .altcode = "" }, /* 0xfd5c */ - { .altcode = "" }, /* 0xfd5d */ - { .altcode = "" }, /* 0xfd5e */ - { .altcode = "" }, /* 0xfd5f */ - { .altcode = "" }, /* 0xfd60 */ - { .altcode = "" }, /* 0xfd61 */ - { .altcode = "" }, /* 0xfd62 */ - { .altcode = "" }, /* 0xfd63 */ - { .altcode = "" }, /* 0xfd64 */ - { .altcode = "" }, /* 0xfd65 */ - { .altcode = "" }, /* 0xfd66 */ - { .altcode = "" }, /* 0xfd67 */ - { .altcode = "" }, /* 0xfd68 */ - { .altcode = "" }, /* 0xfd69 */ - { .altcode = "" }, /* 0xfd6a */ - { .altcode = "" }, /* 0xfd6b */ - { .altcode = "" }, /* 0xfd6c */ - { .altcode = "" }, /* 0xfd6d */ - { .altcode = "" }, /* 0xfd6e */ - { .altcode = "" }, /* 0xfd6f */ - { .altcode = "" }, /* 0xfd70 */ - { .altcode = "" }, /* 0xfd71 */ - { .altcode = "" }, /* 0xfd72 */ - { .altcode = "" }, /* 0xfd73 */ - { .altcode = "" }, /* 0xfd74 */ - { .altcode = "" }, /* 0xfd75 */ - { .altcode = "" }, /* 0xfd76 */ - { .altcode = "" }, /* 0xfd77 */ - { .altcode = "" }, /* 0xfd78 */ - { .altcode = "" }, /* 0xfd79 */ - { .altcode = "" }, /* 0xfd7a */ - { .altcode = "" }, /* 0xfd7b */ - { .altcode = "" }, /* 0xfd7c */ - { .altcode = "" }, /* 0xfd7d */ - { .altcode = "" }, /* 0xfd7e */ - { .altcode = "" }, /* 0xfd7f */ - { .altcode = "" }, /* 0xfd80 */ - { .altcode = "" }, /* 0xfd81 */ - { .altcode = "" }, /* 0xfd82 */ - { .altcode = "" }, /* 0xfd83 */ - { .altcode = "" }, /* 0xfd84 */ - { .altcode = "" }, /* 0xfd85 */ - { .altcode = "" }, /* 0xfd86 */ - { .altcode = "" }, /* 0xfd87 */ - { .altcode = "" }, /* 0xfd88 */ - { .altcode = "" }, /* 0xfd89 */ - { .altcode = "" }, /* 0xfd8a */ - { .altcode = "" }, /* 0xfd8b */ - { .altcode = "" }, /* 0xfd8c */ - { .altcode = "" }, /* 0xfd8d */ - { .altcode = "" }, /* 0xfd8e */ - { .altcode = "" }, /* 0xfd8f */ - { .altcode = "" }, /* 0xfd90 */ - { .altcode = "" }, /* 0xfd91 */ - { .altcode = "" }, /* 0xfd92 */ - { .altcode = "" }, /* 0xfd93 */ - { .altcode = "" }, /* 0xfd94 */ - { .altcode = "" }, /* 0xfd95 */ - { .altcode = "" }, /* 0xfd96 */ - { .altcode = "" }, /* 0xfd97 */ - { .altcode = "" }, /* 0xfd98 */ - { .altcode = "" }, /* 0xfd99 */ - { .altcode = "" }, /* 0xfd9a */ - { .altcode = "" }, /* 0xfd9b */ - { .altcode = "" }, /* 0xfd9c */ - { .altcode = "" }, /* 0xfd9d */ - { .altcode = "" }, /* 0xfd9e */ - { .altcode = "" }, /* 0xfd9f */ - { .altcode = "" }, /* 0xfda0 */ - { .altcode = "" }, /* 0xfda1 */ - { .altcode = "" }, /* 0xfda2 */ - { .altcode = "" }, /* 0xfda3 */ - { .altcode = "" }, /* 0xfda4 */ - { .altcode = "" }, /* 0xfda5 */ - { .altcode = "" }, /* 0xfda6 */ - { .altcode = "" }, /* 0xfda7 */ - { .altcode = "" }, /* 0xfda8 */ - { .altcode = "" }, /* 0xfda9 */ - { .altcode = "" }, /* 0xfdaa */ - { .altcode = "" }, /* 0xfdab */ - { .altcode = "" }, /* 0xfdac */ - { .altcode = "" }, /* 0xfdad */ - { .altcode = "" }, /* 0xfdae */ - { .altcode = "" }, /* 0xfdaf */ - { .altcode = "" }, /* 0xfdb0 */ - { .altcode = "" }, /* 0xfdb1 */ - { .altcode = "" }, /* 0xfdb2 */ - { .altcode = "" }, /* 0xfdb3 */ - { .altcode = "" }, /* 0xfdb4 */ - { .altcode = "" }, /* 0xfdb5 */ - { .altcode = "" }, /* 0xfdb6 */ - { .altcode = "" }, /* 0xfdb7 */ - { .altcode = "" }, /* 0xfdb8 */ - { .altcode = "" }, /* 0xfdb9 */ - { .altcode = "" }, /* 0xfdba */ - { .altcode = "" }, /* 0xfdbb */ - { .altcode = "" }, /* 0xfdbc */ - { .altcode = "" }, /* 0xfdbd */ - { .altcode = "" }, /* 0xfdbe */ - { .altcode = "" }, /* 0xfdbf */ - { .altcode = "" }, /* 0xfdc0 */ - { .altcode = "" }, /* 0xfdc1 */ - { .altcode = "" }, /* 0xfdc2 */ - { .altcode = "" }, /* 0xfdc3 */ - { .altcode = "" }, /* 0xfdc4 */ - { .altcode = "" }, /* 0xfdc5 */ - { .altcode = "" }, /* 0xfdc6 */ - { .altcode = "" }, /* 0xfdc7 */ - { .altcode = "" }, /* 0xfdc8 */ - { .altcode = "" }, /* 0xfdc9 */ - { .altcode = "" }, /* 0xfdca */ - { .altcode = "" }, /* 0xfdcb */ - { .altcode = "" }, /* 0xfdcc */ - { .altcode = "" }, /* 0xfdcd */ - { .altcode = "" }, /* 0xfdce */ - { .altcode = "" }, /* 0xfdcf */ - { .altcode = "" }, /* 0xfdd0 */ - { .altcode = "" }, /* 0xfdd1 */ - { .altcode = "" }, /* 0xfdd2 */ - { .altcode = "" }, /* 0xfdd3 */ - { .altcode = "" }, /* 0xfdd4 */ - { .altcode = "" }, /* 0xfdd5 */ - { .altcode = "" }, /* 0xfdd6 */ - { .altcode = "" }, /* 0xfdd7 */ - { .altcode = "" }, /* 0xfdd8 */ - { .altcode = "" }, /* 0xfdd9 */ - { .altcode = "" }, /* 0xfdda */ - { .altcode = "" }, /* 0xfddb */ - { .altcode = "" }, /* 0xfddc */ - { .altcode = "" }, /* 0xfddd */ - { .altcode = "" }, /* 0xfdde */ - { .altcode = "" }, /* 0xfddf */ - { .altcode = "" }, /* 0xfde0 */ - { .altcode = "" }, /* 0xfde1 */ - { .altcode = "" }, /* 0xfde2 */ - { .altcode = "" }, /* 0xfde3 */ - { .altcode = "" }, /* 0xfde4 */ - { .altcode = "" }, /* 0xfde5 */ - { .altcode = "" }, /* 0xfde6 */ - { .altcode = "" }, /* 0xfde7 */ - { .altcode = "" }, /* 0xfde8 */ - { .altcode = "" }, /* 0xfde9 */ - { .altcode = "" }, /* 0xfdea */ - { .altcode = "" }, /* 0xfdeb */ - { .altcode = "" }, /* 0xfdec */ - { .altcode = "" }, /* 0xfded */ - { .altcode = "" }, /* 0xfdee */ - { .altcode = "" }, /* 0xfdef */ - { .altcode = "" }, /* 0xfdf0 */ - { .altcode = "" }, /* 0xfdf1 */ - { .altcode = "" }, /* 0xfdf2 */ - { .altcode = "" }, /* 0xfdf3 */ - { .altcode = "" }, /* 0xfdf4 */ - { .altcode = "" }, /* 0xfdf5 */ - { .altcode = "" }, /* 0xfdf6 */ - { .altcode = "" }, /* 0xfdf7 */ - { .altcode = "" }, /* 0xfdf8 */ - { .altcode = "" }, /* 0xfdf9 */ - { .altcode = "" }, /* 0xfdfa */ - { .altcode = "" }, /* 0xfdfb */ - { .altcode = "" }, /* 0xfdfc */ - { .altcode = "" }, /* 0xfdfd */ - { .altcode = "" }, /* 0xfdfe */ - { .altcode = "" }, /* 0xfdff */ + { .altcode = NULL }, /* 0xfd00 */ + { .altcode = NULL }, /* 0xfd01 (3270_Duplicate) */ + { .altcode = NULL }, /* 0xfd02 (3270_FieldMark) */ + { .altcode = NULL }, /* 0xfd03 (3270_Right2) */ + { .altcode = NULL }, /* 0xfd04 (3270_Left2) */ + { .altcode = NULL }, /* 0xfd05 (3270_BackTab) */ + { .altcode = NULL }, /* 0xfd06 (3270_EraseEOF) */ + { .altcode = NULL }, /* 0xfd07 (3270_EraseInput) */ + { .altcode = NULL }, /* 0xfd08 (3270_Reset) */ + { .altcode = NULL }, /* 0xfd09 (3270_Quit) */ + { .altcode = NULL }, /* 0xfd0a (3270_PA1) */ + { .altcode = NULL }, /* 0xfd0b (3270_PA2) */ + { .altcode = NULL }, /* 0xfd0c (3270_PA3) */ + { .altcode = NULL }, /* 0xfd0d (3270_Test) */ + { .altcode = NULL }, /* 0xfd0e (3270_Attn) */ + { .altcode = NULL }, /* 0xfd0f (3270_CursorBlink) */ + { .altcode = NULL }, /* 0xfd10 (3270_AltCursor) */ + { .altcode = NULL }, /* 0xfd11 (3270_KeyClick) */ + { .altcode = NULL }, /* 0xfd12 (3270_Jump) */ + { .altcode = NULL }, /* 0xfd13 (3270_Ident) */ + { .altcode = NULL }, /* 0xfd14 (3270_Rule) */ + { .altcode = NULL }, /* 0xfd15 (3270_Copy) */ + { .altcode = NULL }, /* 0xfd16 (3270_Play) */ + { .altcode = NULL }, /* 0xfd17 (3270_Setup) */ + { .altcode = NULL }, /* 0xfd18 (3270_Record) */ + { .altcode = NULL }, /* 0xfd19 (3270_ChangeScreen) */ + { .altcode = NULL }, /* 0xfd1a (3270_DeleteWord) */ + { .altcode = NULL }, /* 0xfd1b (3270_ExSelect) */ + { .altcode = NULL }, /* 0xfd1c (3270_CursorSelect) */ + { .altcode = NULL }, /* 0xfd1d (3270_PrintScreen) */ + { .altcode = NULL }, /* 0xfd1e (3270_Enter) */ + { .altcode = NULL }, /* 0xfd1f */ + { .altcode = NULL }, /* 0xfd20 */ + { .altcode = NULL }, /* 0xfd21 */ + { .altcode = NULL }, /* 0xfd22 */ + { .altcode = NULL }, /* 0xfd23 */ + { .altcode = NULL }, /* 0xfd24 */ + { .altcode = NULL }, /* 0xfd25 */ + { .altcode = NULL }, /* 0xfd26 */ + { .altcode = NULL }, /* 0xfd27 */ + { .altcode = NULL }, /* 0xfd28 */ + { .altcode = NULL }, /* 0xfd29 */ + { .altcode = NULL }, /* 0xfd2a */ + { .altcode = NULL }, /* 0xfd2b */ + { .altcode = NULL }, /* 0xfd2c */ + { .altcode = NULL }, /* 0xfd2d */ + { .altcode = NULL }, /* 0xfd2e */ + { .altcode = NULL }, /* 0xfd2f */ + { .altcode = NULL }, /* 0xfd30 */ + { .altcode = NULL }, /* 0xfd31 */ + { .altcode = NULL }, /* 0xfd32 */ + { .altcode = NULL }, /* 0xfd33 */ + { .altcode = NULL }, /* 0xfd34 */ + { .altcode = NULL }, /* 0xfd35 */ + { .altcode = NULL }, /* 0xfd36 */ + { .altcode = NULL }, /* 0xfd37 */ + { .altcode = NULL }, /* 0xfd38 */ + { .altcode = NULL }, /* 0xfd39 */ + { .altcode = NULL }, /* 0xfd3a */ + { .altcode = NULL }, /* 0xfd3b */ + { .altcode = NULL }, /* 0xfd3c */ + { .altcode = NULL }, /* 0xfd3d */ + { .altcode = NULL }, /* 0xfd3e */ + { .altcode = NULL }, /* 0xfd3f */ + { .altcode = NULL }, /* 0xfd40 */ + { .altcode = NULL }, /* 0xfd41 */ + { .altcode = NULL }, /* 0xfd42 */ + { .altcode = NULL }, /* 0xfd43 */ + { .altcode = NULL }, /* 0xfd44 */ + { .altcode = NULL }, /* 0xfd45 */ + { .altcode = NULL }, /* 0xfd46 */ + { .altcode = NULL }, /* 0xfd47 */ + { .altcode = NULL }, /* 0xfd48 */ + { .altcode = NULL }, /* 0xfd49 */ + { .altcode = NULL }, /* 0xfd4a */ + { .altcode = NULL }, /* 0xfd4b */ + { .altcode = NULL }, /* 0xfd4c */ + { .altcode = NULL }, /* 0xfd4d */ + { .altcode = NULL }, /* 0xfd4e */ + { .altcode = NULL }, /* 0xfd4f */ + { .altcode = NULL }, /* 0xfd50 */ + { .altcode = NULL }, /* 0xfd51 */ + { .altcode = NULL }, /* 0xfd52 */ + { .altcode = NULL }, /* 0xfd53 */ + { .altcode = NULL }, /* 0xfd54 */ + { .altcode = NULL }, /* 0xfd55 */ + { .altcode = NULL }, /* 0xfd56 */ + { .altcode = NULL }, /* 0xfd57 */ + { .altcode = NULL }, /* 0xfd58 */ + { .altcode = NULL }, /* 0xfd59 */ + { .altcode = NULL }, /* 0xfd5a */ + { .altcode = NULL }, /* 0xfd5b */ + { .altcode = NULL }, /* 0xfd5c */ + { .altcode = NULL }, /* 0xfd5d */ + { .altcode = NULL }, /* 0xfd5e */ + { .altcode = NULL }, /* 0xfd5f */ + { .altcode = NULL }, /* 0xfd60 */ + { .altcode = NULL }, /* 0xfd61 */ + { .altcode = NULL }, /* 0xfd62 */ + { .altcode = NULL }, /* 0xfd63 */ + { .altcode = NULL }, /* 0xfd64 */ + { .altcode = NULL }, /* 0xfd65 */ + { .altcode = NULL }, /* 0xfd66 */ + { .altcode = NULL }, /* 0xfd67 */ + { .altcode = NULL }, /* 0xfd68 */ + { .altcode = NULL }, /* 0xfd69 */ + { .altcode = NULL }, /* 0xfd6a */ + { .altcode = NULL }, /* 0xfd6b */ + { .altcode = NULL }, /* 0xfd6c */ + { .altcode = NULL }, /* 0xfd6d */ + { .altcode = NULL }, /* 0xfd6e */ + { .altcode = NULL }, /* 0xfd6f */ + { .altcode = NULL }, /* 0xfd70 */ + { .altcode = NULL }, /* 0xfd71 */ + { .altcode = NULL }, /* 0xfd72 */ + { .altcode = NULL }, /* 0xfd73 */ + { .altcode = NULL }, /* 0xfd74 */ + { .altcode = NULL }, /* 0xfd75 */ + { .altcode = NULL }, /* 0xfd76 */ + { .altcode = NULL }, /* 0xfd77 */ + { .altcode = NULL }, /* 0xfd78 */ + { .altcode = NULL }, /* 0xfd79 */ + { .altcode = NULL }, /* 0xfd7a */ + { .altcode = NULL }, /* 0xfd7b */ + { .altcode = NULL }, /* 0xfd7c */ + { .altcode = NULL }, /* 0xfd7d */ + { .altcode = NULL }, /* 0xfd7e */ + { .altcode = NULL }, /* 0xfd7f */ + { .altcode = NULL }, /* 0xfd80 */ + { .altcode = NULL }, /* 0xfd81 */ + { .altcode = NULL }, /* 0xfd82 */ + { .altcode = NULL }, /* 0xfd83 */ + { .altcode = NULL }, /* 0xfd84 */ + { .altcode = NULL }, /* 0xfd85 */ + { .altcode = NULL }, /* 0xfd86 */ + { .altcode = NULL }, /* 0xfd87 */ + { .altcode = NULL }, /* 0xfd88 */ + { .altcode = NULL }, /* 0xfd89 */ + { .altcode = NULL }, /* 0xfd8a */ + { .altcode = NULL }, /* 0xfd8b */ + { .altcode = NULL }, /* 0xfd8c */ + { .altcode = NULL }, /* 0xfd8d */ + { .altcode = NULL }, /* 0xfd8e */ + { .altcode = NULL }, /* 0xfd8f */ + { .altcode = NULL }, /* 0xfd90 */ + { .altcode = NULL }, /* 0xfd91 */ + { .altcode = NULL }, /* 0xfd92 */ + { .altcode = NULL }, /* 0xfd93 */ + { .altcode = NULL }, /* 0xfd94 */ + { .altcode = NULL }, /* 0xfd95 */ + { .altcode = NULL }, /* 0xfd96 */ + { .altcode = NULL }, /* 0xfd97 */ + { .altcode = NULL }, /* 0xfd98 */ + { .altcode = NULL }, /* 0xfd99 */ + { .altcode = NULL }, /* 0xfd9a */ + { .altcode = NULL }, /* 0xfd9b */ + { .altcode = NULL }, /* 0xfd9c */ + { .altcode = NULL }, /* 0xfd9d */ + { .altcode = NULL }, /* 0xfd9e */ + { .altcode = NULL }, /* 0xfd9f */ + { .altcode = NULL }, /* 0xfda0 */ + { .altcode = NULL }, /* 0xfda1 */ + { .altcode = NULL }, /* 0xfda2 */ + { .altcode = NULL }, /* 0xfda3 */ + { .altcode = NULL }, /* 0xfda4 */ + { .altcode = NULL }, /* 0xfda5 */ + { .altcode = NULL }, /* 0xfda6 */ + { .altcode = NULL }, /* 0xfda7 */ + { .altcode = NULL }, /* 0xfda8 */ + { .altcode = NULL }, /* 0xfda9 */ + { .altcode = NULL }, /* 0xfdaa */ + { .altcode = NULL }, /* 0xfdab */ + { .altcode = NULL }, /* 0xfdac */ + { .altcode = NULL }, /* 0xfdad */ + { .altcode = NULL }, /* 0xfdae */ + { .altcode = NULL }, /* 0xfdaf */ + { .altcode = NULL }, /* 0xfdb0 */ + { .altcode = NULL }, /* 0xfdb1 */ + { .altcode = NULL }, /* 0xfdb2 */ + { .altcode = NULL }, /* 0xfdb3 */ + { .altcode = NULL }, /* 0xfdb4 */ + { .altcode = NULL }, /* 0xfdb5 */ + { .altcode = NULL }, /* 0xfdb6 */ + { .altcode = NULL }, /* 0xfdb7 */ + { .altcode = NULL }, /* 0xfdb8 */ + { .altcode = NULL }, /* 0xfdb9 */ + { .altcode = NULL }, /* 0xfdba */ + { .altcode = NULL }, /* 0xfdbb */ + { .altcode = NULL }, /* 0xfdbc */ + { .altcode = NULL }, /* 0xfdbd */ + { .altcode = NULL }, /* 0xfdbe */ + { .altcode = NULL }, /* 0xfdbf */ + { .altcode = NULL }, /* 0xfdc0 */ + { .altcode = NULL }, /* 0xfdc1 */ + { .altcode = NULL }, /* 0xfdc2 */ + { .altcode = NULL }, /* 0xfdc3 */ + { .altcode = NULL }, /* 0xfdc4 */ + { .altcode = NULL }, /* 0xfdc5 */ + { .altcode = NULL }, /* 0xfdc6 */ + { .altcode = NULL }, /* 0xfdc7 */ + { .altcode = NULL }, /* 0xfdc8 */ + { .altcode = NULL }, /* 0xfdc9 */ + { .altcode = NULL }, /* 0xfdca */ + { .altcode = NULL }, /* 0xfdcb */ + { .altcode = NULL }, /* 0xfdcc */ + { .altcode = NULL }, /* 0xfdcd */ + { .altcode = NULL }, /* 0xfdce */ + { .altcode = NULL }, /* 0xfdcf */ + { .altcode = NULL }, /* 0xfdd0 */ + { .altcode = NULL }, /* 0xfdd1 */ + { .altcode = NULL }, /* 0xfdd2 */ + { .altcode = NULL }, /* 0xfdd3 */ + { .altcode = NULL }, /* 0xfdd4 */ + { .altcode = NULL }, /* 0xfdd5 */ + { .altcode = NULL }, /* 0xfdd6 */ + { .altcode = NULL }, /* 0xfdd7 */ + { .altcode = NULL }, /* 0xfdd8 */ + { .altcode = NULL }, /* 0xfdd9 */ + { .altcode = NULL }, /* 0xfdda */ + { .altcode = NULL }, /* 0xfddb */ + { .altcode = NULL }, /* 0xfddc */ + { .altcode = NULL }, /* 0xfddd */ + { .altcode = NULL }, /* 0xfdde */ + { .altcode = NULL }, /* 0xfddf */ + { .altcode = NULL }, /* 0xfde0 */ + { .altcode = NULL }, /* 0xfde1 */ + { .altcode = NULL }, /* 0xfde2 */ + { .altcode = NULL }, /* 0xfde3 */ + { .altcode = NULL }, /* 0xfde4 */ + { .altcode = NULL }, /* 0xfde5 */ + { .altcode = NULL }, /* 0xfde6 */ + { .altcode = NULL }, /* 0xfde7 */ + { .altcode = NULL }, /* 0xfde8 */ + { .altcode = NULL }, /* 0xfde9 */ + { .altcode = NULL }, /* 0xfdea */ + { .altcode = NULL }, /* 0xfdeb */ + { .altcode = NULL }, /* 0xfdec */ + { .altcode = NULL }, /* 0xfded */ + { .altcode = NULL }, /* 0xfdee */ + { .altcode = NULL }, /* 0xfdef */ + { .altcode = NULL }, /* 0xfdf0 */ + { .altcode = NULL }, /* 0xfdf1 */ + { .altcode = NULL }, /* 0xfdf2 */ + { .altcode = NULL }, /* 0xfdf3 */ + { .altcode = NULL }, /* 0xfdf4 */ + { .altcode = NULL }, /* 0xfdf5 */ + { .altcode = NULL }, /* 0xfdf6 */ + { .altcode = NULL }, /* 0xfdf7 */ + { .altcode = NULL }, /* 0xfdf8 */ + { .altcode = NULL }, /* 0xfdf9 */ + { .altcode = NULL }, /* 0xfdfa */ + { .altcode = NULL }, /* 0xfdfb */ + { .altcode = NULL }, /* 0xfdfc */ + { .altcode = NULL }, /* 0xfdfd */ + { .altcode = NULL }, /* 0xfdfe */ + { .altcode = NULL }, /* 0xfdff */ }, { /* 0xfe?? */ - { .altcode = "" }, /* 0xfe00 */ - { .altcode = "" }, /* 0xfe01 (ISO_Lock) */ - { .altcode = "" }, /* 0xfe02 (ISO_Level2_Latch) */ - { .altcode = "" }, /* 0xfe03 (ISO_Level3_Shift) */ - { .altcode = "" }, /* 0xfe04 (ISO_Level3_Latch) */ - { .altcode = "" }, /* 0xfe05 (ISO_Level3_Lock) */ - { .altcode = "" }, /* 0xfe06 (ISO_Group_Latch) */ - { .altcode = "" }, /* 0xfe07 (ISO_Group_Lock) */ - { .altcode = "" }, /* 0xfe08 (ISO_Next_Group) */ - { .altcode = "" }, /* 0xfe09 (ISO_Next_Group_Lock) */ - { .altcode = "" }, /* 0xfe0a (ISO_Prev_Group) */ - { .altcode = "" }, /* 0xfe0b (ISO_Prev_Group_Lock) */ - { .altcode = "" }, /* 0xfe0c (ISO_First_Group) */ - { .altcode = "" }, /* 0xfe0d (ISO_First_Group_Lock) */ - { .altcode = "" }, /* 0xfe0e (ISO_Last_Group) */ - { .altcode = "" }, /* 0xfe0f (ISO_Last_Group_Lock) */ - { .altcode = "" }, /* 0xfe10 */ - { .altcode = "" }, /* 0xfe11 (ISO_Level5_Shift) */ - { .altcode = "" }, /* 0xfe12 (ISO_Level5_Latch) */ - { .altcode = "" }, /* 0xfe13 (ISO_Level5_Lock) */ - { .altcode = "" }, /* 0xfe14 */ - { .altcode = "" }, /* 0xfe15 */ - { .altcode = "" }, /* 0xfe16 */ - { .altcode = "" }, /* 0xfe17 */ - { .altcode = "" }, /* 0xfe18 */ - { .altcode = "" }, /* 0xfe19 */ - { .altcode = "" }, /* 0xfe1a */ - { .altcode = "" }, /* 0xfe1b */ - { .altcode = "" }, /* 0xfe1c */ - { .altcode = "" }, /* 0xfe1d */ - { .altcode = "" }, /* 0xfe1e */ - { .altcode = "" }, /* 0xfe1f */ - { .altcode = "" }, /* 0xfe20 (ISO_Left_Tab) */ - { .altcode = "" }, /* 0xfe21 (ISO_Move_Line_Up) */ - { .altcode = "" }, /* 0xfe22 (ISO_Move_Line_Down) */ - { .altcode = "" }, /* 0xfe23 (ISO_Partial_Line_Up) */ - { .altcode = "" }, /* 0xfe24 (ISO_Partial_Line_Down) */ - { .altcode = "" }, /* 0xfe25 (ISO_Partial_Space_Left) */ - { .altcode = "" }, /* 0xfe26 (ISO_Partial_Space_Right) */ - { .altcode = "" }, /* 0xfe27 (ISO_Set_Margin_Left) */ - { .altcode = "" }, /* 0xfe28 (ISO_Set_Margin_Right) */ - { .altcode = "" }, /* 0xfe29 (ISO_Release_Margin_Left) */ - { .altcode = "" }, /* 0xfe2a (ISO_Release_Margin_Right) */ - { .altcode = "" }, /* 0xfe2b (ISO_Release_Both_Margins) */ - { .altcode = "" }, /* 0xfe2c (ISO_Fast_Cursor_Left) */ - { .altcode = "" }, /* 0xfe2d (ISO_Fast_Cursor_Right) */ - { .altcode = "" }, /* 0xfe2e (ISO_Fast_Cursor_Up) */ - { .altcode = "" }, /* 0xfe2f (ISO_Fast_Cursor_Down) */ - { .altcode = "" }, /* 0xfe30 (ISO_Continuous_Underline) */ - { .altcode = "" }, /* 0xfe31 (ISO_Discontinuous_Underline) */ - { .altcode = "" }, /* 0xfe32 (ISO_Emphasize) */ - { .altcode = "" }, /* 0xfe33 (ISO_Center_Object) */ - { .altcode = "" }, /* 0xfe34 (ISO_Enter) */ - { .altcode = "" }, /* 0xfe35 */ - { .altcode = "" }, /* 0xfe36 */ - { .altcode = "" }, /* 0xfe37 */ - { .altcode = "" }, /* 0xfe38 */ - { .altcode = "" }, /* 0xfe39 */ - { .altcode = "" }, /* 0xfe3a */ - { .altcode = "" }, /* 0xfe3b */ - { .altcode = "" }, /* 0xfe3c */ - { .altcode = "" }, /* 0xfe3d */ - { .altcode = "" }, /* 0xfe3e */ - { .altcode = "" }, /* 0xfe3f */ - { .altcode = "" }, /* 0xfe40 */ - { .altcode = "" }, /* 0xfe41 */ - { .altcode = "" }, /* 0xfe42 */ - { .altcode = "" }, /* 0xfe43 */ - { .altcode = "" }, /* 0xfe44 */ - { .altcode = "" }, /* 0xfe45 */ - { .altcode = "" }, /* 0xfe46 */ - { .altcode = "" }, /* 0xfe47 */ - { .altcode = "" }, /* 0xfe48 */ - { .altcode = "" }, /* 0xfe49 */ - { .altcode = "" }, /* 0xfe4a */ - { .altcode = "" }, /* 0xfe4b */ - { .altcode = "" }, /* 0xfe4c */ - { .altcode = "" }, /* 0xfe4d */ - { .altcode = "" }, /* 0xfe4e */ - { .altcode = "" }, /* 0xfe4f */ - { .altcode = "" }, /* 0xfe50 (dead_grave) */ - { .altcode = "" }, /* 0xfe51 (dead_acute) */ - { .altcode = "" }, /* 0xfe52 (dead_circumflex) */ - { .altcode = "" }, /* 0xfe53 (dead_perispomeni) */ - { .altcode = "" }, /* 0xfe54 (dead_macron) */ - { .altcode = "" }, /* 0xfe55 (dead_breve) */ - { .altcode = "" }, /* 0xfe56 (dead_abovedot) */ - { .altcode = "" }, /* 0xfe57 (dead_diaeresis) */ - { .altcode = "" }, /* 0xfe58 (dead_abovering) */ - { .altcode = "" }, /* 0xfe59 (dead_doubleacute) */ - { .altcode = "" }, /* 0xfe5a (dead_caron) */ - { .altcode = "" }, /* 0xfe5b (dead_cedilla) */ - { .altcode = "" }, /* 0xfe5c (dead_ogonek) */ - { .altcode = "" }, /* 0xfe5d (dead_iota) */ - { .altcode = "" }, /* 0xfe5e (dead_voiced_sound) */ - { .altcode = "" }, /* 0xfe5f (dead_semivoiced_sound) */ - { .altcode = "" }, /* 0xfe60 (dead_belowdot) */ - { .altcode = "" }, /* 0xfe61 (dead_hook) */ - { .altcode = "" }, /* 0xfe62 (dead_horn) */ - { .altcode = "" }, /* 0xfe63 (dead_stroke) */ - { .altcode = "" }, /* 0xfe64 (dead_psili) */ - { .altcode = "" }, /* 0xfe65 (dead_dasia) */ - { .altcode = "" }, /* 0xfe66 (dead_doublegrave) */ - { .altcode = "" }, /* 0xfe67 (dead_belowring) */ - { .altcode = "" }, /* 0xfe68 (dead_belowmacron) */ - { .altcode = "" }, /* 0xfe69 (dead_belowcircumflex) */ - { .altcode = "" }, /* 0xfe6a (dead_belowtilde) */ - { .altcode = "" }, /* 0xfe6b (dead_belowbreve) */ - { .altcode = "" }, /* 0xfe6c (dead_belowdiaeresis) */ - { .altcode = "" }, /* 0xfe6d (dead_invertedbreve) */ - { .altcode = "" }, /* 0xfe6e (dead_belowcomma) */ - { .altcode = "" }, /* 0xfe6f (dead_currency) */ - { .altcode = "" }, /* 0xfe70 (AccessX_Enable) */ - { .altcode = "" }, /* 0xfe71 (AccessX_Feedback_Enable) */ - { .altcode = "" }, /* 0xfe72 (RepeatKeys_Enable) */ - { .altcode = "" }, /* 0xfe73 (SlowKeys_Enable) */ - { .altcode = "" }, /* 0xfe74 (BounceKeys_Enable) */ - { .altcode = "" }, /* 0xfe75 (StickyKeys_Enable) */ - { .altcode = "" }, /* 0xfe76 (MouseKeys_Enable) */ - { .altcode = "" }, /* 0xfe77 (MouseKeys_Accel_Enable) */ - { .altcode = "" }, /* 0xfe78 (Overlay1_Enable) */ - { .altcode = "" }, /* 0xfe79 (Overlay2_Enable) */ - { .altcode = "" }, /* 0xfe7a (AudibleBell_Enable) */ - { .altcode = "" }, /* 0xfe7b */ - { .altcode = "" }, /* 0xfe7c */ - { .altcode = "" }, /* 0xfe7d */ - { .altcode = "" }, /* 0xfe7e */ - { .altcode = "" }, /* 0xfe7f */ - { .altcode = "" }, /* 0xfe80 (dead_a) */ - { .altcode = "" }, /* 0xfe81 (dead_A) */ - { .altcode = "" }, /* 0xfe82 (dead_e) */ - { .altcode = "" }, /* 0xfe83 (dead_E) */ - { .altcode = "" }, /* 0xfe84 (dead_i) */ - { .altcode = "" }, /* 0xfe85 (dead_I) */ - { .altcode = "" }, /* 0xfe86 (dead_o) */ - { .altcode = "" }, /* 0xfe87 (dead_O) */ - { .altcode = "" }, /* 0xfe88 (dead_u) */ - { .altcode = "" }, /* 0xfe89 (dead_U) */ - { .altcode = "" }, /* 0xfe8a (dead_small_schwa) */ - { .altcode = "" }, /* 0xfe8b (dead_capital_schwa) */ - { .altcode = "" }, /* 0xfe8c */ - { .altcode = "" }, /* 0xfe8d */ - { .altcode = "" }, /* 0xfe8e */ - { .altcode = "" }, /* 0xfe8f */ - { .altcode = "" }, /* 0xfe90 */ - { .altcode = "" }, /* 0xfe91 */ - { .altcode = "" }, /* 0xfe92 */ - { .altcode = "" }, /* 0xfe93 */ - { .altcode = "" }, /* 0xfe94 */ - { .altcode = "" }, /* 0xfe95 */ - { .altcode = "" }, /* 0xfe96 */ - { .altcode = "" }, /* 0xfe97 */ - { .altcode = "" }, /* 0xfe98 */ - { .altcode = "" }, /* 0xfe99 */ - { .altcode = "" }, /* 0xfe9a */ - { .altcode = "" }, /* 0xfe9b */ - { .altcode = "" }, /* 0xfe9c */ - { .altcode = "" }, /* 0xfe9d */ - { .altcode = "" }, /* 0xfe9e */ - { .altcode = "" }, /* 0xfe9f */ - { .altcode = "" }, /* 0xfea0 */ - { .altcode = "" }, /* 0xfea1 */ - { .altcode = "" }, /* 0xfea2 */ - { .altcode = "" }, /* 0xfea3 */ - { .altcode = "" }, /* 0xfea4 */ - { .altcode = "" }, /* 0xfea5 */ - { .altcode = "" }, /* 0xfea6 */ - { .altcode = "" }, /* 0xfea7 */ - { .altcode = "" }, /* 0xfea8 */ - { .altcode = "" }, /* 0xfea9 */ - { .altcode = "" }, /* 0xfeaa */ - { .altcode = "" }, /* 0xfeab */ - { .altcode = "" }, /* 0xfeac */ - { .altcode = "" }, /* 0xfead */ - { .altcode = "" }, /* 0xfeae */ - { .altcode = "" }, /* 0xfeaf */ - { .altcode = "" }, /* 0xfeb0 */ - { .altcode = "" }, /* 0xfeb1 */ - { .altcode = "" }, /* 0xfeb2 */ - { .altcode = "" }, /* 0xfeb3 */ - { .altcode = "" }, /* 0xfeb4 */ - { .altcode = "" }, /* 0xfeb5 */ - { .altcode = "" }, /* 0xfeb6 */ - { .altcode = "" }, /* 0xfeb7 */ - { .altcode = "" }, /* 0xfeb8 */ - { .altcode = "" }, /* 0xfeb9 */ - { .altcode = "" }, /* 0xfeba */ - { .altcode = "" }, /* 0xfebb */ - { .altcode = "" }, /* 0xfebc */ - { .altcode = "" }, /* 0xfebd */ - { .altcode = "" }, /* 0xfebe */ - { .altcode = "" }, /* 0xfebf */ - { .altcode = "" }, /* 0xfec0 */ - { .altcode = "" }, /* 0xfec1 */ - { .altcode = "" }, /* 0xfec2 */ - { .altcode = "" }, /* 0xfec3 */ - { .altcode = "" }, /* 0xfec4 */ - { .altcode = "" }, /* 0xfec5 */ - { .altcode = "" }, /* 0xfec6 */ - { .altcode = "" }, /* 0xfec7 */ - { .altcode = "" }, /* 0xfec8 */ - { .altcode = "" }, /* 0xfec9 */ - { .altcode = "" }, /* 0xfeca */ - { .altcode = "" }, /* 0xfecb */ - { .altcode = "" }, /* 0xfecc */ - { .altcode = "" }, /* 0xfecd */ - { .altcode = "" }, /* 0xfece */ - { .altcode = "" }, /* 0xfecf */ - { .altcode = "" }, /* 0xfed0 (First_Virtual_Screen) */ - { .altcode = "" }, /* 0xfed1 (Prev_Virtual_Screen) */ - { .altcode = "" }, /* 0xfed2 (Next_Virtual_Screen) */ - { .altcode = "" }, /* 0xfed3 */ - { .altcode = "" }, /* 0xfed4 (Last_Virtual_Screen) */ - { .altcode = "" }, /* 0xfed5 (Terminate_Server) */ - { .altcode = "" }, /* 0xfed6 */ - { .altcode = "" }, /* 0xfed7 */ - { .altcode = "" }, /* 0xfed8 */ - { .altcode = "" }, /* 0xfed9 */ - { .altcode = "" }, /* 0xfeda */ - { .altcode = "" }, /* 0xfedb */ - { .altcode = "" }, /* 0xfedc */ - { .altcode = "" }, /* 0xfedd */ - { .altcode = "" }, /* 0xfede */ - { .altcode = "" }, /* 0xfedf */ - { .altcode = "" }, /* 0xfee0 (Pointer_Left) */ - { .altcode = "" }, /* 0xfee1 (Pointer_Right) */ - { .altcode = "" }, /* 0xfee2 (Pointer_Up) */ - { .altcode = "" }, /* 0xfee3 (Pointer_Down) */ - { .altcode = "" }, /* 0xfee4 (Pointer_UpLeft) */ - { .altcode = "" }, /* 0xfee5 (Pointer_UpRight) */ - { .altcode = "" }, /* 0xfee6 (Pointer_DownLeft) */ - { .altcode = "" }, /* 0xfee7 (Pointer_DownRight) */ - { .altcode = "" }, /* 0xfee8 (Pointer_Button_Dflt) */ - { .altcode = "" }, /* 0xfee9 (Pointer_Button1) */ - { .altcode = "" }, /* 0xfeea (Pointer_Button2) */ - { .altcode = "" }, /* 0xfeeb (Pointer_Button3) */ - { .altcode = "" }, /* 0xfeec (Pointer_Button4) */ - { .altcode = "" }, /* 0xfeed (Pointer_Button5) */ - { .altcode = "" }, /* 0xfeee (Pointer_DblClick_Dflt) */ - { .altcode = "" }, /* 0xfeef (Pointer_DblClick1) */ - { .altcode = "" }, /* 0xfef0 (Pointer_DblClick2) */ - { .altcode = "" }, /* 0xfef1 (Pointer_DblClick3) */ - { .altcode = "" }, /* 0xfef2 (Pointer_DblClick4) */ - { .altcode = "" }, /* 0xfef3 (Pointer_DblClick5) */ - { .altcode = "" }, /* 0xfef4 (Pointer_Drag_Dflt) */ - { .altcode = "" }, /* 0xfef5 (Pointer_Drag1) */ - { .altcode = "" }, /* 0xfef6 (Pointer_Drag2) */ - { .altcode = "" }, /* 0xfef7 (Pointer_Drag3) */ - { .altcode = "" }, /* 0xfef8 (Pointer_Drag4) */ - { .altcode = "" }, /* 0xfef9 (Pointer_EnableKeys) */ - { .altcode = "" }, /* 0xfefa (Pointer_Accelerate) */ - { .altcode = "" }, /* 0xfefb (Pointer_DfltBtnNext) */ - { .altcode = "" }, /* 0xfefc (Pointer_DfltBtnPrev) */ - { .altcode = "" }, /* 0xfefd (Pointer_Drag5) */ - { .altcode = "" }, /* 0xfefe */ - { .altcode = "" }, /* 0xfeff */ + { .altcode = NULL }, /* 0xfe00 */ + { .altcode = NULL }, /* 0xfe01 (ISO_Lock) */ + { .altcode = NULL }, /* 0xfe02 (ISO_Level2_Latch) */ + { .altcode = NULL }, /* 0xfe03 (ISO_Level3_Shift) */ + { .altcode = NULL }, /* 0xfe04 (ISO_Level3_Latch) */ + { .altcode = NULL }, /* 0xfe05 (ISO_Level3_Lock) */ + { .altcode = NULL }, /* 0xfe06 (ISO_Group_Latch) */ + { .altcode = NULL }, /* 0xfe07 (ISO_Group_Lock) */ + { .altcode = NULL }, /* 0xfe08 (ISO_Next_Group) */ + { .altcode = NULL }, /* 0xfe09 (ISO_Next_Group_Lock) */ + { .altcode = NULL }, /* 0xfe0a (ISO_Prev_Group) */ + { .altcode = NULL }, /* 0xfe0b (ISO_Prev_Group_Lock) */ + { .altcode = NULL }, /* 0xfe0c (ISO_First_Group) */ + { .altcode = NULL }, /* 0xfe0d (ISO_First_Group_Lock) */ + { .altcode = NULL }, /* 0xfe0e (ISO_Last_Group) */ + { .altcode = NULL }, /* 0xfe0f (ISO_Last_Group_Lock) */ + { .altcode = NULL }, /* 0xfe10 */ + { .altcode = NULL }, /* 0xfe11 (ISO_Level5_Shift) */ + { .altcode = NULL }, /* 0xfe12 (ISO_Level5_Latch) */ + { .altcode = NULL }, /* 0xfe13 (ISO_Level5_Lock) */ + { .altcode = NULL }, /* 0xfe14 */ + { .altcode = NULL }, /* 0xfe15 */ + { .altcode = NULL }, /* 0xfe16 */ + { .altcode = NULL }, /* 0xfe17 */ + { .altcode = NULL }, /* 0xfe18 */ + { .altcode = NULL }, /* 0xfe19 */ + { .altcode = NULL }, /* 0xfe1a */ + { .altcode = NULL }, /* 0xfe1b */ + { .altcode = NULL }, /* 0xfe1c */ + { .altcode = NULL }, /* 0xfe1d */ + { .altcode = NULL }, /* 0xfe1e */ + { .altcode = NULL }, /* 0xfe1f */ + { .altcode = NULL }, /* 0xfe20 (ISO_Left_Tab) */ + { .altcode = NULL }, /* 0xfe21 (ISO_Move_Line_Up) */ + { .altcode = NULL }, /* 0xfe22 (ISO_Move_Line_Down) */ + { .altcode = NULL }, /* 0xfe23 (ISO_Partial_Line_Up) */ + { .altcode = NULL }, /* 0xfe24 (ISO_Partial_Line_Down) */ + { .altcode = NULL }, /* 0xfe25 (ISO_Partial_Space_Left) */ + { .altcode = NULL }, /* 0xfe26 (ISO_Partial_Space_Right) */ + { .altcode = NULL }, /* 0xfe27 (ISO_Set_Margin_Left) */ + { .altcode = NULL }, /* 0xfe28 (ISO_Set_Margin_Right) */ + { .altcode = NULL }, /* 0xfe29 (ISO_Release_Margin_Left) */ + { .altcode = NULL }, /* 0xfe2a (ISO_Release_Margin_Right) */ + { .altcode = NULL }, /* 0xfe2b (ISO_Release_Both_Margins) */ + { .altcode = NULL }, /* 0xfe2c (ISO_Fast_Cursor_Left) */ + { .altcode = NULL }, /* 0xfe2d (ISO_Fast_Cursor_Right) */ + { .altcode = NULL }, /* 0xfe2e (ISO_Fast_Cursor_Up) */ + { .altcode = NULL }, /* 0xfe2f (ISO_Fast_Cursor_Down) */ + { .altcode = NULL }, /* 0xfe30 (ISO_Continuous_Underline) */ + { .altcode = NULL }, /* 0xfe31 (ISO_Discontinuous_Underline) */ + { .altcode = NULL }, /* 0xfe32 (ISO_Emphasize) */ + { .altcode = NULL }, /* 0xfe33 (ISO_Center_Object) */ + { .altcode = NULL }, /* 0xfe34 (ISO_Enter) */ + { .altcode = NULL }, /* 0xfe35 */ + { .altcode = NULL }, /* 0xfe36 */ + { .altcode = NULL }, /* 0xfe37 */ + { .altcode = NULL }, /* 0xfe38 */ + { .altcode = NULL }, /* 0xfe39 */ + { .altcode = NULL }, /* 0xfe3a */ + { .altcode = NULL }, /* 0xfe3b */ + { .altcode = NULL }, /* 0xfe3c */ + { .altcode = NULL }, /* 0xfe3d */ + { .altcode = NULL }, /* 0xfe3e */ + { .altcode = NULL }, /* 0xfe3f */ + { .altcode = NULL }, /* 0xfe40 */ + { .altcode = NULL }, /* 0xfe41 */ + { .altcode = NULL }, /* 0xfe42 */ + { .altcode = NULL }, /* 0xfe43 */ + { .altcode = NULL }, /* 0xfe44 */ + { .altcode = NULL }, /* 0xfe45 */ + { .altcode = NULL }, /* 0xfe46 */ + { .altcode = NULL }, /* 0xfe47 */ + { .altcode = NULL }, /* 0xfe48 */ + { .altcode = NULL }, /* 0xfe49 */ + { .altcode = NULL }, /* 0xfe4a */ + { .altcode = NULL }, /* 0xfe4b */ + { .altcode = NULL }, /* 0xfe4c */ + { .altcode = NULL }, /* 0xfe4d */ + { .altcode = NULL }, /* 0xfe4e */ + { .altcode = NULL }, /* 0xfe4f */ + { .altcode = NULL }, /* 0xfe50 (dead_grave) */ + { .altcode = NULL }, /* 0xfe51 (dead_acute) */ + { .altcode = NULL }, /* 0xfe52 (dead_circumflex) */ + { .altcode = NULL }, /* 0xfe53 (dead_perispomeni) */ + { .altcode = NULL }, /* 0xfe54 (dead_macron) */ + { .altcode = NULL }, /* 0xfe55 (dead_breve) */ + { .altcode = NULL }, /* 0xfe56 (dead_abovedot) */ + { .altcode = NULL }, /* 0xfe57 (dead_diaeresis) */ + { .altcode = NULL }, /* 0xfe58 (dead_abovering) */ + { .altcode = NULL }, /* 0xfe59 (dead_doubleacute) */ + { .altcode = NULL }, /* 0xfe5a (dead_caron) */ + { .altcode = NULL }, /* 0xfe5b (dead_cedilla) */ + { .altcode = NULL }, /* 0xfe5c (dead_ogonek) */ + { .altcode = NULL }, /* 0xfe5d (dead_iota) */ + { .altcode = NULL }, /* 0xfe5e (dead_voiced_sound) */ + { .altcode = NULL }, /* 0xfe5f (dead_semivoiced_sound) */ + { .altcode = NULL }, /* 0xfe60 (dead_belowdot) */ + { .altcode = NULL }, /* 0xfe61 (dead_hook) */ + { .altcode = NULL }, /* 0xfe62 (dead_horn) */ + { .altcode = NULL }, /* 0xfe63 (dead_stroke) */ + { .altcode = NULL }, /* 0xfe64 (dead_psili) */ + { .altcode = NULL }, /* 0xfe65 (dead_dasia) */ + { .altcode = NULL }, /* 0xfe66 (dead_doublegrave) */ + { .altcode = NULL }, /* 0xfe67 (dead_belowring) */ + { .altcode = NULL }, /* 0xfe68 (dead_belowmacron) */ + { .altcode = NULL }, /* 0xfe69 (dead_belowcircumflex) */ + { .altcode = NULL }, /* 0xfe6a (dead_belowtilde) */ + { .altcode = NULL }, /* 0xfe6b (dead_belowbreve) */ + { .altcode = NULL }, /* 0xfe6c (dead_belowdiaeresis) */ + { .altcode = NULL }, /* 0xfe6d (dead_invertedbreve) */ + { .altcode = NULL }, /* 0xfe6e (dead_belowcomma) */ + { .altcode = NULL }, /* 0xfe6f (dead_currency) */ + { .altcode = NULL }, /* 0xfe70 (AccessX_Enable) */ + { .altcode = NULL }, /* 0xfe71 (AccessX_Feedback_Enable) */ + { .altcode = NULL }, /* 0xfe72 (RepeatKeys_Enable) */ + { .altcode = NULL }, /* 0xfe73 (SlowKeys_Enable) */ + { .altcode = NULL }, /* 0xfe74 (BounceKeys_Enable) */ + { .altcode = NULL }, /* 0xfe75 (StickyKeys_Enable) */ + { .altcode = NULL }, /* 0xfe76 (MouseKeys_Enable) */ + { .altcode = NULL }, /* 0xfe77 (MouseKeys_Accel_Enable) */ + { .altcode = NULL }, /* 0xfe78 (Overlay1_Enable) */ + { .altcode = NULL }, /* 0xfe79 (Overlay2_Enable) */ + { .altcode = NULL }, /* 0xfe7a (AudibleBell_Enable) */ + { .altcode = NULL }, /* 0xfe7b */ + { .altcode = NULL }, /* 0xfe7c */ + { .altcode = NULL }, /* 0xfe7d */ + { .altcode = NULL }, /* 0xfe7e */ + { .altcode = NULL }, /* 0xfe7f */ + { .altcode = NULL }, /* 0xfe80 (dead_a) */ + { .altcode = NULL }, /* 0xfe81 (dead_A) */ + { .altcode = NULL }, /* 0xfe82 (dead_e) */ + { .altcode = NULL }, /* 0xfe83 (dead_E) */ + { .altcode = NULL }, /* 0xfe84 (dead_i) */ + { .altcode = NULL }, /* 0xfe85 (dead_I) */ + { .altcode = NULL }, /* 0xfe86 (dead_o) */ + { .altcode = NULL }, /* 0xfe87 (dead_O) */ + { .altcode = NULL }, /* 0xfe88 (dead_u) */ + { .altcode = NULL }, /* 0xfe89 (dead_U) */ + { .altcode = NULL }, /* 0xfe8a (dead_small_schwa) */ + { .altcode = NULL }, /* 0xfe8b (dead_capital_schwa) */ + { .altcode = NULL }, /* 0xfe8c */ + { .altcode = NULL }, /* 0xfe8d */ + { .altcode = NULL }, /* 0xfe8e */ + { .altcode = NULL }, /* 0xfe8f */ + { .altcode = NULL }, /* 0xfe90 */ + { .altcode = NULL }, /* 0xfe91 */ + { .altcode = NULL }, /* 0xfe92 */ + { .altcode = NULL }, /* 0xfe93 */ + { .altcode = NULL }, /* 0xfe94 */ + { .altcode = NULL }, /* 0xfe95 */ + { .altcode = NULL }, /* 0xfe96 */ + { .altcode = NULL }, /* 0xfe97 */ + { .altcode = NULL }, /* 0xfe98 */ + { .altcode = NULL }, /* 0xfe99 */ + { .altcode = NULL }, /* 0xfe9a */ + { .altcode = NULL }, /* 0xfe9b */ + { .altcode = NULL }, /* 0xfe9c */ + { .altcode = NULL }, /* 0xfe9d */ + { .altcode = NULL }, /* 0xfe9e */ + { .altcode = NULL }, /* 0xfe9f */ + { .altcode = NULL }, /* 0xfea0 */ + { .altcode = NULL }, /* 0xfea1 */ + { .altcode = NULL }, /* 0xfea2 */ + { .altcode = NULL }, /* 0xfea3 */ + { .altcode = NULL }, /* 0xfea4 */ + { .altcode = NULL }, /* 0xfea5 */ + { .altcode = NULL }, /* 0xfea6 */ + { .altcode = NULL }, /* 0xfea7 */ + { .altcode = NULL }, /* 0xfea8 */ + { .altcode = NULL }, /* 0xfea9 */ + { .altcode = NULL }, /* 0xfeaa */ + { .altcode = NULL }, /* 0xfeab */ + { .altcode = NULL }, /* 0xfeac */ + { .altcode = NULL }, /* 0xfead */ + { .altcode = NULL }, /* 0xfeae */ + { .altcode = NULL }, /* 0xfeaf */ + { .altcode = NULL }, /* 0xfeb0 */ + { .altcode = NULL }, /* 0xfeb1 */ + { .altcode = NULL }, /* 0xfeb2 */ + { .altcode = NULL }, /* 0xfeb3 */ + { .altcode = NULL }, /* 0xfeb4 */ + { .altcode = NULL }, /* 0xfeb5 */ + { .altcode = NULL }, /* 0xfeb6 */ + { .altcode = NULL }, /* 0xfeb7 */ + { .altcode = NULL }, /* 0xfeb8 */ + { .altcode = NULL }, /* 0xfeb9 */ + { .altcode = NULL }, /* 0xfeba */ + { .altcode = NULL }, /* 0xfebb */ + { .altcode = NULL }, /* 0xfebc */ + { .altcode = NULL }, /* 0xfebd */ + { .altcode = NULL }, /* 0xfebe */ + { .altcode = NULL }, /* 0xfebf */ + { .altcode = NULL }, /* 0xfec0 */ + { .altcode = NULL }, /* 0xfec1 */ + { .altcode = NULL }, /* 0xfec2 */ + { .altcode = NULL }, /* 0xfec3 */ + { .altcode = NULL }, /* 0xfec4 */ + { .altcode = NULL }, /* 0xfec5 */ + { .altcode = NULL }, /* 0xfec6 */ + { .altcode = NULL }, /* 0xfec7 */ + { .altcode = NULL }, /* 0xfec8 */ + { .altcode = NULL }, /* 0xfec9 */ + { .altcode = NULL }, /* 0xfeca */ + { .altcode = NULL }, /* 0xfecb */ + { .altcode = NULL }, /* 0xfecc */ + { .altcode = NULL }, /* 0xfecd */ + { .altcode = NULL }, /* 0xfece */ + { .altcode = NULL }, /* 0xfecf */ + { .altcode = NULL }, /* 0xfed0 (First_Virtual_Screen) */ + { .altcode = NULL }, /* 0xfed1 (Prev_Virtual_Screen) */ + { .altcode = NULL }, /* 0xfed2 (Next_Virtual_Screen) */ + { .altcode = NULL }, /* 0xfed3 */ + { .altcode = NULL }, /* 0xfed4 (Last_Virtual_Screen) */ + { .altcode = NULL }, /* 0xfed5 (Terminate_Server) */ + { .altcode = NULL }, /* 0xfed6 */ + { .altcode = NULL }, /* 0xfed7 */ + { .altcode = NULL }, /* 0xfed8 */ + { .altcode = NULL }, /* 0xfed9 */ + { .altcode = NULL }, /* 0xfeda */ + { .altcode = NULL }, /* 0xfedb */ + { .altcode = NULL }, /* 0xfedc */ + { .altcode = NULL }, /* 0xfedd */ + { .altcode = NULL }, /* 0xfede */ + { .altcode = NULL }, /* 0xfedf */ + { .altcode = NULL }, /* 0xfee0 (Pointer_Left) */ + { .altcode = NULL }, /* 0xfee1 (Pointer_Right) */ + { .altcode = NULL }, /* 0xfee2 (Pointer_Up) */ + { .altcode = NULL }, /* 0xfee3 (Pointer_Down) */ + { .altcode = NULL }, /* 0xfee4 (Pointer_UpLeft) */ + { .altcode = NULL }, /* 0xfee5 (Pointer_UpRight) */ + { .altcode = NULL }, /* 0xfee6 (Pointer_DownLeft) */ + { .altcode = NULL }, /* 0xfee7 (Pointer_DownRight) */ + { .altcode = NULL }, /* 0xfee8 (Pointer_Button_Dflt) */ + { .altcode = NULL }, /* 0xfee9 (Pointer_Button1) */ + { .altcode = NULL }, /* 0xfeea (Pointer_Button2) */ + { .altcode = NULL }, /* 0xfeeb (Pointer_Button3) */ + { .altcode = NULL }, /* 0xfeec (Pointer_Button4) */ + { .altcode = NULL }, /* 0xfeed (Pointer_Button5) */ + { .altcode = NULL }, /* 0xfeee (Pointer_DblClick_Dflt) */ + { .altcode = NULL }, /* 0xfeef (Pointer_DblClick1) */ + { .altcode = NULL }, /* 0xfef0 (Pointer_DblClick2) */ + { .altcode = NULL }, /* 0xfef1 (Pointer_DblClick3) */ + { .altcode = NULL }, /* 0xfef2 (Pointer_DblClick4) */ + { .altcode = NULL }, /* 0xfef3 (Pointer_DblClick5) */ + { .altcode = NULL }, /* 0xfef4 (Pointer_Drag_Dflt) */ + { .altcode = NULL }, /* 0xfef5 (Pointer_Drag1) */ + { .altcode = NULL }, /* 0xfef6 (Pointer_Drag2) */ + { .altcode = NULL }, /* 0xfef7 (Pointer_Drag3) */ + { .altcode = NULL }, /* 0xfef8 (Pointer_Drag4) */ + { .altcode = NULL }, /* 0xfef9 (Pointer_EnableKeys) */ + { .altcode = NULL }, /* 0xfefa (Pointer_Accelerate) */ + { .altcode = NULL }, /* 0xfefb (Pointer_DfltBtnNext) */ + { .altcode = NULL }, /* 0xfefc (Pointer_DfltBtnPrev) */ + { .altcode = NULL }, /* 0xfefd (Pointer_Drag5) */ + { .altcode = NULL }, /* 0xfefe */ + { .altcode = NULL }, /* 0xfeff */ }, { /* 0xff?? */ - { .altcode = "" }, /* 0xff00 */ - { .altcode = "" }, /* 0xff01 */ - { .altcode = "" }, /* 0xff02 */ - { .altcode = "" }, /* 0xff03 */ - { .altcode = "" }, /* 0xff04 */ - { .altcode = "" }, /* 0xff05 */ - { .altcode = "" }, /* 0xff06 */ - { .altcode = "" }, /* 0xff07 */ - { .altcode = "" }, /* 0xff08 (BackSpace) */ - { .altcode = "" }, /* 0xff09 (Tab) */ - { .altcode = "" }, /* 0xff0a (Linefeed) */ - { .altcode = "" }, /* 0xff0b (Clear) */ - { .altcode = "" }, /* 0xff0c */ - { .altcode = "" }, /* 0xff0d (Return) */ - { .altcode = "" }, /* 0xff0e */ - { .altcode = "" }, /* 0xff0f */ - { .altcode = "" }, /* 0xff10 */ - { .altcode = "" }, /* 0xff11 */ - { .altcode = "" }, /* 0xff12 */ - { .altcode = "" }, /* 0xff13 (Pause) */ - { .altcode = "" }, /* 0xff14 (Scroll_Lock) */ - { .altcode = "" }, /* 0xff15 (Sys_Req) */ - { .altcode = "" }, /* 0xff16 */ - { .altcode = "" }, /* 0xff17 */ - { .altcode = "" }, /* 0xff18 */ - { .altcode = "" }, /* 0xff19 */ - { .altcode = "" }, /* 0xff1a */ - { .altcode = "" }, /* 0xff1b (Escape) */ - { .altcode = "" }, /* 0xff1c */ - { .altcode = "" }, /* 0xff1d */ - { .altcode = "" }, /* 0xff1e */ - { .altcode = "" }, /* 0xff1f */ - { .altcode = "" }, /* 0xff20 (Multi_key) */ - { .altcode = "" }, /* 0xff21 (Kanji) */ - { .altcode = "" }, /* 0xff22 (Muhenkan) */ - { .altcode = "" }, /* 0xff23 (Henkan) */ - { .altcode = "" }, /* 0xff24 (Romaji) */ - { .altcode = "" }, /* 0xff25 (Hiragana) */ - { .altcode = "" }, /* 0xff26 (Katakana) */ - { .altcode = "" }, /* 0xff27 (Hiragana_Katakana) */ - { .altcode = "" }, /* 0xff28 (Zenkaku) */ - { .altcode = "" }, /* 0xff29 (Hankaku) */ - { .altcode = "" }, /* 0xff2a (Zenkaku_Hankaku) */ - { .altcode = "" }, /* 0xff2b (Touroku) */ - { .altcode = "" }, /* 0xff2c (Massyo) */ - { .altcode = "" }, /* 0xff2d (Kana_Lock) */ - { .altcode = "" }, /* 0xff2e (Kana_Shift) */ - { .altcode = "" }, /* 0xff2f (Eisu_Shift) */ - { .altcode = "" }, /* 0xff30 (Eisu_toggle) */ - { .altcode = "" }, /* 0xff31 (Hangul) */ - { .altcode = "" }, /* 0xff32 (Hangul_Start) */ - { .altcode = "" }, /* 0xff33 (Hangul_End) */ - { .altcode = "" }, /* 0xff34 (Hangul_Hanja) */ - { .altcode = "" }, /* 0xff35 (Hangul_Jamo) */ - { .altcode = "" }, /* 0xff36 (Hangul_Romaja) */ - { .altcode = "" }, /* 0xff37 (Hangul_Codeinput) */ - { .altcode = "" }, /* 0xff38 (Hangul_Jeonja) */ - { .altcode = "" }, /* 0xff39 (Hangul_Banja) */ - { .altcode = "" }, /* 0xff3a (Hangul_PreHanja) */ - { .altcode = "" }, /* 0xff3b (Hangul_PostHanja) */ - { .altcode = "" }, /* 0xff3c (Hangul_SingleCandidate) */ - { .altcode = "" }, /* 0xff3d (Hangul_MultipleCandidate) */ - { .altcode = "" }, /* 0xff3e (Hangul_PreviousCandidate) */ - { .altcode = "" }, /* 0xff3f (Hangul_Special) */ - { .altcode = "" }, /* 0xff40 */ - { .altcode = "" }, /* 0xff41 */ - { .altcode = "" }, /* 0xff42 */ - { .altcode = "" }, /* 0xff43 */ - { .altcode = "" }, /* 0xff44 */ - { .altcode = "" }, /* 0xff45 */ - { .altcode = "" }, /* 0xff46 */ - { .altcode = "" }, /* 0xff47 */ - { .altcode = "" }, /* 0xff48 */ - { .altcode = "" }, /* 0xff49 */ - { .altcode = "" }, /* 0xff4a */ - { .altcode = "" }, /* 0xff4b */ - { .altcode = "" }, /* 0xff4c */ - { .altcode = "" }, /* 0xff4d */ - { .altcode = "" }, /* 0xff4e */ - { .altcode = "" }, /* 0xff4f */ - { .altcode = "" }, /* 0xff50 (Home) */ - { .altcode = "" }, /* 0xff51 (Left) */ - { .altcode = "" }, /* 0xff52 (Up) */ - { .altcode = "" }, /* 0xff53 (Right) */ - { .altcode = "" }, /* 0xff54 (Down) */ - { .altcode = "" }, /* 0xff55 (Page_Up) */ - { .altcode = "" }, /* 0xff56 (Page_Down) */ - { .altcode = "" }, /* 0xff57 (End) */ - { .altcode = "" }, /* 0xff58 (Begin) */ - { .altcode = "" }, /* 0xff59 */ - { .altcode = "" }, /* 0xff5a */ - { .altcode = "" }, /* 0xff5b */ - { .altcode = "" }, /* 0xff5c */ - { .altcode = "" }, /* 0xff5d */ - { .altcode = "" }, /* 0xff5e */ - { .altcode = "" }, /* 0xff5f */ - { .altcode = "" }, /* 0xff60 (Select) */ - { .altcode = "" }, /* 0xff61 (Print) */ - { .altcode = "" }, /* 0xff62 (Execute) */ - { .altcode = "" }, /* 0xff63 (Insert) */ - { .altcode = "" }, /* 0xff64 */ - { .altcode = "" }, /* 0xff65 (Undo) */ - { .altcode = "" }, /* 0xff66 (Redo) */ - { .altcode = "" }, /* 0xff67 (Menu) */ - { .altcode = "" }, /* 0xff68 (Find) */ - { .altcode = "" }, /* 0xff69 (Cancel) */ - { .altcode = "" }, /* 0xff6a (Help) */ - { .altcode = "" }, /* 0xff6b (Break) */ - { .altcode = "" }, /* 0xff6c */ - { .altcode = "" }, /* 0xff6d */ - { .altcode = "" }, /* 0xff6e */ - { .altcode = "" }, /* 0xff6f */ - { .altcode = "" }, /* 0xff70 */ - { .altcode = "" }, /* 0xff71 */ - { .altcode = "" }, /* 0xff72 */ - { .altcode = "" }, /* 0xff73 */ - { .altcode = "" }, /* 0xff74 */ - { .altcode = "" }, /* 0xff75 */ - { .altcode = "" }, /* 0xff76 */ - { .altcode = "" }, /* 0xff77 */ - { .altcode = "" }, /* 0xff78 */ - { .altcode = "" }, /* 0xff79 */ - { .altcode = "" }, /* 0xff7a */ - { .altcode = "" }, /* 0xff7b */ - { .altcode = "" }, /* 0xff7c */ - { .altcode = "" }, /* 0xff7d */ - { .altcode = "" }, /* 0xff7e (Hangul_switch) */ - { .altcode = "" }, /* 0xff7f (Num_Lock) */ - { .altcode = "" }, /* 0xff80 (KP_Space) */ - { .altcode = "" }, /* 0xff81 */ - { .altcode = "" }, /* 0xff82 */ - { .altcode = "" }, /* 0xff83 */ - { .altcode = "" }, /* 0xff84 */ - { .altcode = "" }, /* 0xff85 */ - { .altcode = "" }, /* 0xff86 */ - { .altcode = "" }, /* 0xff87 */ - { .altcode = "" }, /* 0xff88 */ - { .altcode = "" }, /* 0xff89 (KP_Tab) */ - { .altcode = "" }, /* 0xff8a */ - { .altcode = "" }, /* 0xff8b */ - { .altcode = "" }, /* 0xff8c */ - { .altcode = "" }, /* 0xff8d (KP_Enter) */ - { .altcode = "" }, /* 0xff8e */ - { .altcode = "" }, /* 0xff8f */ - { .altcode = "" }, /* 0xff90 */ - { .altcode = "" }, /* 0xff91 (KP_F1) */ - { .altcode = "" }, /* 0xff92 (KP_F2) */ - { .altcode = "" }, /* 0xff93 (KP_F3) */ - { .altcode = "" }, /* 0xff94 (KP_F4) */ - { .altcode = "" }, /* 0xff95 (KP_Home) */ - { .altcode = "" }, /* 0xff96 (KP_Left) */ - { .altcode = "" }, /* 0xff97 (KP_Up) */ - { .altcode = "" }, /* 0xff98 (KP_Right) */ - { .altcode = "" }, /* 0xff99 (KP_Down) */ - { .altcode = "" }, /* 0xff9a (KP_Page_Up) */ - { .altcode = "" }, /* 0xff9b (KP_Page_Down) */ - { .altcode = "" }, /* 0xff9c (KP_End) */ - { .altcode = "" }, /* 0xff9d (KP_Begin) */ - { .altcode = "" }, /* 0xff9e (KP_Insert) */ - { .altcode = "" }, /* 0xff9f (KP_Delete) */ - { .altcode = "" }, /* 0xffa0 */ - { .altcode = "" }, /* 0xffa1 */ - { .altcode = "" }, /* 0xffa2 */ - { .altcode = "" }, /* 0xffa3 */ - { .altcode = "" }, /* 0xffa4 */ - { .altcode = "" }, /* 0xffa5 */ - { .altcode = "" }, /* 0xffa6 */ - { .altcode = "" }, /* 0xffa7 */ - { .altcode = "" }, /* 0xffa8 */ - { .altcode = "" }, /* 0xffa9 */ - { .altcode = "" }, /* 0xffaa (KP_Multiply) */ - { .altcode = "" }, /* 0xffab (KP_Add) */ - { .altcode = "" }, /* 0xffac (KP_Separator) */ - { .altcode = "" }, /* 0xffad (KP_Subtract) */ - { .altcode = "" }, /* 0xffae (KP_Decimal) */ - { .altcode = "" }, /* 0xffaf (KP_Divide) */ - { .altcode = "" }, /* 0xffb0 (KP_0) */ - { .altcode = "" }, /* 0xffb1 (KP_1) */ - { .altcode = "" }, /* 0xffb2 (KP_2) */ - { .altcode = "" }, /* 0xffb3 (KP_3) */ - { .altcode = "" }, /* 0xffb4 (KP_4) */ - { .altcode = "" }, /* 0xffb5 (KP_5) */ - { .altcode = "" }, /* 0xffb6 (KP_6) */ - { .altcode = "" }, /* 0xffb7 (KP_7) */ - { .altcode = "" }, /* 0xffb8 (KP_8) */ - { .altcode = "" }, /* 0xffb9 (KP_9) */ - { .altcode = "" }, /* 0xffba */ - { .altcode = "" }, /* 0xffbb */ - { .altcode = "" }, /* 0xffbc */ - { .altcode = "" }, /* 0xffbd (KP_Equal) */ - { .altcode = "" }, /* 0xffbe (F1) */ - { .altcode = "" }, /* 0xffbf (F2) */ - { .altcode = "" }, /* 0xffc0 (F3) */ - { .altcode = "" }, /* 0xffc1 (F4) */ - { .altcode = "" }, /* 0xffc2 (F5) */ - { .altcode = "" }, /* 0xffc3 (F6) */ - { .altcode = "" }, /* 0xffc4 (F7) */ - { .altcode = "" }, /* 0xffc5 (F8) */ - { .altcode = "" }, /* 0xffc6 (F9) */ - { .altcode = "" }, /* 0xffc7 (F10) */ - { .altcode = "" }, /* 0xffc8 (L1) */ - { .altcode = "" }, /* 0xffc9 (L2) */ - { .altcode = "" }, /* 0xffca (L3) */ - { .altcode = "" }, /* 0xffcb (L4) */ - { .altcode = "" }, /* 0xffcc (L5) */ - { .altcode = "" }, /* 0xffcd (L6) */ - { .altcode = "" }, /* 0xffce (L7) */ - { .altcode = "" }, /* 0xffcf (L8) */ - { .altcode = "" }, /* 0xffd0 (L9) */ - { .altcode = "" }, /* 0xffd1 (L10) */ - { .altcode = "" }, /* 0xffd2 (R1) */ - { .altcode = "" }, /* 0xffd3 (R2) */ - { .altcode = "" }, /* 0xffd4 (R3) */ - { .altcode = "" }, /* 0xffd5 (R4) */ - { .altcode = "" }, /* 0xffd6 (R5) */ - { .altcode = "" }, /* 0xffd7 (R6) */ - { .altcode = "" }, /* 0xffd8 (R7) */ - { .altcode = "" }, /* 0xffd9 (R8) */ - { .altcode = "" }, /* 0xffda (R9) */ - { .altcode = "" }, /* 0xffdb (R10) */ - { .altcode = "" }, /* 0xffdc (R11) */ - { .altcode = "" }, /* 0xffdd (R12) */ - { .altcode = "" }, /* 0xffde (R13) */ - { .altcode = "" }, /* 0xffdf (R14) */ - { .altcode = "" }, /* 0xffe0 (R15) */ - { .altcode = "" }, /* 0xffe1 (Shift_L) */ - { .altcode = "" }, /* 0xffe2 (Shift_R) */ - { .altcode = "" }, /* 0xffe3 (Control_L) */ - { .altcode = "" }, /* 0xffe4 (Control_R) */ - { .altcode = "" }, /* 0xffe5 (Caps_Lock) */ - { .altcode = "" }, /* 0xffe6 (Shift_Lock) */ - { .altcode = "" }, /* 0xffe7 (Meta_L) */ - { .altcode = "" }, /* 0xffe8 (Meta_R) */ - { .altcode = "" }, /* 0xffe9 (Alt_L) */ - { .altcode = "" }, /* 0xffea (Alt_R) */ - { .altcode = "" }, /* 0xffeb (Super_L) */ - { .altcode = "" }, /* 0xffec (Super_R) */ - { .altcode = "" }, /* 0xffed (Hyper_L) */ - { .altcode = "" }, /* 0xffee (Hyper_R) */ - { .altcode = "" }, /* 0xffef */ - { .altcode = "" }, /* 0xfff0 */ - { .altcode = "" }, /* 0xfff1 (braille_dot_1) */ - { .altcode = "" }, /* 0xfff2 (braille_dot_2) */ - { .altcode = "" }, /* 0xfff3 (braille_dot_3) */ - { .altcode = "" }, /* 0xfff4 (braille_dot_4) */ - { .altcode = "" }, /* 0xfff5 (braille_dot_5) */ - { .altcode = "" }, /* 0xfff6 (braille_dot_6) */ - { .altcode = "" }, /* 0xfff7 (braille_dot_7) */ - { .altcode = "" }, /* 0xfff8 (braille_dot_8) */ - { .altcode = "" }, /* 0xfff9 (braille_dot_9) */ - { .altcode = "" }, /* 0xfffa (braille_dot_10) */ - { .altcode = "" }, /* 0xfffb */ - { .altcode = "" }, /* 0xfffc */ - { .altcode = "" }, /* 0xfffd */ - { .altcode = "" }, /* 0xfffe */ - { .altcode = "" }, /* 0xffff (Delete) */ + { .altcode = NULL }, /* 0xff00 */ + { .altcode = NULL }, /* 0xff01 */ + { .altcode = NULL }, /* 0xff02 */ + { .altcode = NULL }, /* 0xff03 */ + { .altcode = NULL }, /* 0xff04 */ + { .altcode = NULL }, /* 0xff05 */ + { .altcode = NULL }, /* 0xff06 */ + { .altcode = NULL }, /* 0xff07 */ + { .altcode = NULL }, /* 0xff08 (BackSpace) */ + { .altcode = NULL }, /* 0xff09 (Tab) */ + { .altcode = NULL }, /* 0xff0a (Linefeed) */ + { .altcode = NULL }, /* 0xff0b (Clear) */ + { .altcode = NULL }, /* 0xff0c */ + { .altcode = NULL }, /* 0xff0d (Return) */ + { .altcode = NULL }, /* 0xff0e */ + { .altcode = NULL }, /* 0xff0f */ + { .altcode = NULL }, /* 0xff10 */ + { .altcode = NULL }, /* 0xff11 */ + { .altcode = NULL }, /* 0xff12 */ + { .altcode = NULL }, /* 0xff13 (Pause) */ + { .altcode = NULL }, /* 0xff14 (Scroll_Lock) */ + { .altcode = NULL }, /* 0xff15 (Sys_Req) */ + { .altcode = NULL }, /* 0xff16 */ + { .altcode = NULL }, /* 0xff17 */ + { .altcode = NULL }, /* 0xff18 */ + { .altcode = NULL }, /* 0xff19 */ + { .altcode = NULL }, /* 0xff1a */ + { .altcode = NULL }, /* 0xff1b (Escape) */ + { .altcode = NULL }, /* 0xff1c */ + { .altcode = NULL }, /* 0xff1d */ + { .altcode = NULL }, /* 0xff1e */ + { .altcode = NULL }, /* 0xff1f */ + { .altcode = NULL }, /* 0xff20 (Multi_key) */ + { .altcode = NULL }, /* 0xff21 (Kanji) */ + { .altcode = NULL }, /* 0xff22 (Muhenkan) */ + { .altcode = NULL }, /* 0xff23 (Henkan) */ + { .altcode = NULL }, /* 0xff24 (Romaji) */ + { .altcode = NULL }, /* 0xff25 (Hiragana) */ + { .altcode = NULL }, /* 0xff26 (Katakana) */ + { .altcode = NULL }, /* 0xff27 (Hiragana_Katakana) */ + { .altcode = NULL }, /* 0xff28 (Zenkaku) */ + { .altcode = NULL }, /* 0xff29 (Hankaku) */ + { .altcode = NULL }, /* 0xff2a (Zenkaku_Hankaku) */ + { .altcode = NULL }, /* 0xff2b (Touroku) */ + { .altcode = NULL }, /* 0xff2c (Massyo) */ + { .altcode = NULL }, /* 0xff2d (Kana_Lock) */ + { .altcode = NULL }, /* 0xff2e (Kana_Shift) */ + { .altcode = NULL }, /* 0xff2f (Eisu_Shift) */ + { .altcode = NULL }, /* 0xff30 (Eisu_toggle) */ + { .altcode = NULL }, /* 0xff31 (Hangul) */ + { .altcode = NULL }, /* 0xff32 (Hangul_Start) */ + { .altcode = NULL }, /* 0xff33 (Hangul_End) */ + { .altcode = NULL }, /* 0xff34 (Hangul_Hanja) */ + { .altcode = NULL }, /* 0xff35 (Hangul_Jamo) */ + { .altcode = NULL }, /* 0xff36 (Hangul_Romaja) */ + { .altcode = NULL }, /* 0xff37 (Hangul_Codeinput) */ + { .altcode = NULL }, /* 0xff38 (Hangul_Jeonja) */ + { .altcode = NULL }, /* 0xff39 (Hangul_Banja) */ + { .altcode = NULL }, /* 0xff3a (Hangul_PreHanja) */ + { .altcode = NULL }, /* 0xff3b (Hangul_PostHanja) */ + { .altcode = NULL }, /* 0xff3c (Hangul_SingleCandidate) */ + { .altcode = NULL }, /* 0xff3d (Hangul_MultipleCandidate) */ + { .altcode = NULL }, /* 0xff3e (Hangul_PreviousCandidate) */ + { .altcode = NULL }, /* 0xff3f (Hangul_Special) */ + { .altcode = NULL }, /* 0xff40 */ + { .altcode = NULL }, /* 0xff41 */ + { .altcode = NULL }, /* 0xff42 */ + { .altcode = NULL }, /* 0xff43 */ + { .altcode = NULL }, /* 0xff44 */ + { .altcode = NULL }, /* 0xff45 */ + { .altcode = NULL }, /* 0xff46 */ + { .altcode = NULL }, /* 0xff47 */ + { .altcode = NULL }, /* 0xff48 */ + { .altcode = NULL }, /* 0xff49 */ + { .altcode = NULL }, /* 0xff4a */ + { .altcode = NULL }, /* 0xff4b */ + { .altcode = NULL }, /* 0xff4c */ + { .altcode = NULL }, /* 0xff4d */ + { .altcode = NULL }, /* 0xff4e */ + { .altcode = NULL }, /* 0xff4f */ + { .altcode = NULL }, /* 0xff50 (Home) */ + { .altcode = NULL }, /* 0xff51 (Left) */ + { .altcode = NULL }, /* 0xff52 (Up) */ + { .altcode = NULL }, /* 0xff53 (Right) */ + { .altcode = NULL }, /* 0xff54 (Down) */ + { .altcode = NULL }, /* 0xff55 (Page_Up) */ + { .altcode = NULL }, /* 0xff56 (Page_Down) */ + { .altcode = NULL }, /* 0xff57 (End) */ + { .altcode = NULL }, /* 0xff58 (Begin) */ + { .altcode = NULL }, /* 0xff59 */ + { .altcode = NULL }, /* 0xff5a */ + { .altcode = NULL }, /* 0xff5b */ + { .altcode = NULL }, /* 0xff5c */ + { .altcode = NULL }, /* 0xff5d */ + { .altcode = NULL }, /* 0xff5e */ + { .altcode = NULL }, /* 0xff5f */ + { .altcode = NULL }, /* 0xff60 (Select) */ + { .altcode = NULL }, /* 0xff61 (Print) */ + { .altcode = NULL }, /* 0xff62 (Execute) */ + { .altcode = NULL }, /* 0xff63 (Insert) */ + { .altcode = NULL }, /* 0xff64 */ + { .altcode = NULL }, /* 0xff65 (Undo) */ + { .altcode = NULL }, /* 0xff66 (Redo) */ + { .altcode = NULL }, /* 0xff67 (Menu) */ + { .altcode = NULL }, /* 0xff68 (Find) */ + { .altcode = NULL }, /* 0xff69 (Cancel) */ + { .altcode = NULL }, /* 0xff6a (Help) */ + { .altcode = NULL }, /* 0xff6b (Break) */ + { .altcode = NULL }, /* 0xff6c */ + { .altcode = NULL }, /* 0xff6d */ + { .altcode = NULL }, /* 0xff6e */ + { .altcode = NULL }, /* 0xff6f */ + { .altcode = NULL }, /* 0xff70 */ + { .altcode = NULL }, /* 0xff71 */ + { .altcode = NULL }, /* 0xff72 */ + { .altcode = NULL }, /* 0xff73 */ + { .altcode = NULL }, /* 0xff74 */ + { .altcode = NULL }, /* 0xff75 */ + { .altcode = NULL }, /* 0xff76 */ + { .altcode = NULL }, /* 0xff77 */ + { .altcode = NULL }, /* 0xff78 */ + { .altcode = NULL }, /* 0xff79 */ + { .altcode = NULL }, /* 0xff7a */ + { .altcode = NULL }, /* 0xff7b */ + { .altcode = NULL }, /* 0xff7c */ + { .altcode = NULL }, /* 0xff7d */ + { .altcode = NULL }, /* 0xff7e (Hangul_switch) */ + { .altcode = NULL }, /* 0xff7f (Num_Lock) */ + { .altcode = NULL }, /* 0xff80 (KP_Space) */ + { .altcode = NULL }, /* 0xff81 */ + { .altcode = NULL }, /* 0xff82 */ + { .altcode = NULL }, /* 0xff83 */ + { .altcode = NULL }, /* 0xff84 */ + { .altcode = NULL }, /* 0xff85 */ + { .altcode = NULL }, /* 0xff86 */ + { .altcode = NULL }, /* 0xff87 */ + { .altcode = NULL }, /* 0xff88 */ + { .altcode = NULL }, /* 0xff89 (KP_Tab) */ + { .altcode = NULL }, /* 0xff8a */ + { .altcode = NULL }, /* 0xff8b */ + { .altcode = NULL }, /* 0xff8c */ + { .altcode = NULL }, /* 0xff8d (KP_Enter) */ + { .altcode = NULL }, /* 0xff8e */ + { .altcode = NULL }, /* 0xff8f */ + { .altcode = NULL }, /* 0xff90 */ + { .altcode = NULL }, /* 0xff91 (KP_F1) */ + { .altcode = NULL }, /* 0xff92 (KP_F2) */ + { .altcode = NULL }, /* 0xff93 (KP_F3) */ + { .altcode = NULL }, /* 0xff94 (KP_F4) */ + { .altcode = NULL }, /* 0xff95 (KP_Home) */ + { .altcode = NULL }, /* 0xff96 (KP_Left) */ + { .altcode = NULL }, /* 0xff97 (KP_Up) */ + { .altcode = NULL }, /* 0xff98 (KP_Right) */ + { .altcode = NULL }, /* 0xff99 (KP_Down) */ + { .altcode = NULL }, /* 0xff9a (KP_Page_Up) */ + { .altcode = NULL }, /* 0xff9b (KP_Page_Down) */ + { .altcode = NULL }, /* 0xff9c (KP_End) */ + { .altcode = NULL }, /* 0xff9d (KP_Begin) */ + { .altcode = NULL }, /* 0xff9e (KP_Insert) */ + { .altcode = NULL }, /* 0xff9f (KP_Delete) */ + { .altcode = NULL }, /* 0xffa0 */ + { .altcode = NULL }, /* 0xffa1 */ + { .altcode = NULL }, /* 0xffa2 */ + { .altcode = NULL }, /* 0xffa3 */ + { .altcode = NULL }, /* 0xffa4 */ + { .altcode = NULL }, /* 0xffa5 */ + { .altcode = NULL }, /* 0xffa6 */ + { .altcode = NULL }, /* 0xffa7 */ + { .altcode = NULL }, /* 0xffa8 */ + { .altcode = NULL }, /* 0xffa9 */ + { .altcode = NULL }, /* 0xffaa (KP_Multiply) */ + { .altcode = NULL }, /* 0xffab (KP_Add) */ + { .altcode = NULL }, /* 0xffac (KP_Separator) */ + { .altcode = NULL }, /* 0xffad (KP_Subtract) */ + { .altcode = NULL }, /* 0xffae (KP_Decimal) */ + { .altcode = NULL }, /* 0xffaf (KP_Divide) */ + { .altcode = NULL }, /* 0xffb0 (KP_0) */ + { .altcode = NULL }, /* 0xffb1 (KP_1) */ + { .altcode = NULL }, /* 0xffb2 (KP_2) */ + { .altcode = NULL }, /* 0xffb3 (KP_3) */ + { .altcode = NULL }, /* 0xffb4 (KP_4) */ + { .altcode = NULL }, /* 0xffb5 (KP_5) */ + { .altcode = NULL }, /* 0xffb6 (KP_6) */ + { .altcode = NULL }, /* 0xffb7 (KP_7) */ + { .altcode = NULL }, /* 0xffb8 (KP_8) */ + { .altcode = NULL }, /* 0xffb9 (KP_9) */ + { .altcode = NULL }, /* 0xffba */ + { .altcode = NULL }, /* 0xffbb */ + { .altcode = NULL }, /* 0xffbc */ + { .altcode = NULL }, /* 0xffbd (KP_Equal) */ + { .altcode = NULL }, /* 0xffbe (F1) */ + { .altcode = NULL }, /* 0xffbf (F2) */ + { .altcode = NULL }, /* 0xffc0 (F3) */ + { .altcode = NULL }, /* 0xffc1 (F4) */ + { .altcode = NULL }, /* 0xffc2 (F5) */ + { .altcode = NULL }, /* 0xffc3 (F6) */ + { .altcode = NULL }, /* 0xffc4 (F7) */ + { .altcode = NULL }, /* 0xffc5 (F8) */ + { .altcode = NULL }, /* 0xffc6 (F9) */ + { .altcode = NULL }, /* 0xffc7 (F10) */ + { .altcode = NULL }, /* 0xffc8 (L1) */ + { .altcode = NULL }, /* 0xffc9 (L2) */ + { .altcode = NULL }, /* 0xffca (L3) */ + { .altcode = NULL }, /* 0xffcb (L4) */ + { .altcode = NULL }, /* 0xffcc (L5) */ + { .altcode = NULL }, /* 0xffcd (L6) */ + { .altcode = NULL }, /* 0xffce (L7) */ + { .altcode = NULL }, /* 0xffcf (L8) */ + { .altcode = NULL }, /* 0xffd0 (L9) */ + { .altcode = NULL }, /* 0xffd1 (L10) */ + { .altcode = NULL }, /* 0xffd2 (R1) */ + { .altcode = NULL }, /* 0xffd3 (R2) */ + { .altcode = NULL }, /* 0xffd4 (R3) */ + { .altcode = NULL }, /* 0xffd5 (R4) */ + { .altcode = NULL }, /* 0xffd6 (R5) */ + { .altcode = NULL }, /* 0xffd7 (R6) */ + { .altcode = NULL }, /* 0xffd8 (R7) */ + { .altcode = NULL }, /* 0xffd9 (R8) */ + { .altcode = NULL }, /* 0xffda (R9) */ + { .altcode = NULL }, /* 0xffdb (R10) */ + { .altcode = NULL }, /* 0xffdc (R11) */ + { .altcode = NULL }, /* 0xffdd (R12) */ + { .altcode = NULL }, /* 0xffde (R13) */ + { .altcode = NULL }, /* 0xffdf (R14) */ + { .altcode = NULL }, /* 0xffe0 (R15) */ + { .altcode = NULL }, /* 0xffe1 (Shift_L) */ + { .altcode = NULL }, /* 0xffe2 (Shift_R) */ + { .altcode = NULL }, /* 0xffe3 (Control_L) */ + { .altcode = NULL }, /* 0xffe4 (Control_R) */ + { .altcode = NULL }, /* 0xffe5 (Caps_Lock) */ + { .altcode = NULL }, /* 0xffe6 (Shift_Lock) */ + { .altcode = NULL }, /* 0xffe7 (Meta_L) */ + { .altcode = NULL }, /* 0xffe8 (Meta_R) */ + { .altcode = NULL }, /* 0xffe9 (Alt_L) */ + { .altcode = NULL }, /* 0xffea (Alt_R) */ + { .altcode = NULL }, /* 0xffeb (Super_L) */ + { .altcode = NULL }, /* 0xffec (Super_R) */ + { .altcode = NULL }, /* 0xffed (Hyper_L) */ + { .altcode = NULL }, /* 0xffee (Hyper_R) */ + { .altcode = NULL }, /* 0xffef */ + { .altcode = NULL }, /* 0xfff0 */ + { .altcode = NULL }, /* 0xfff1 (braille_dot_1) */ + { .altcode = NULL }, /* 0xfff2 (braille_dot_2) */ + { .altcode = NULL }, /* 0xfff3 (braille_dot_3) */ + { .altcode = NULL }, /* 0xfff4 (braille_dot_4) */ + { .altcode = NULL }, /* 0xfff5 (braille_dot_5) */ + { .altcode = NULL }, /* 0xfff6 (braille_dot_6) */ + { .altcode = NULL }, /* 0xfff7 (braille_dot_7) */ + { .altcode = NULL }, /* 0xfff8 (braille_dot_8) */ + { .altcode = NULL }, /* 0xfff9 (braille_dot_9) */ + { .altcode = NULL }, /* 0xfffa (braille_dot_10) */ + { .altcode = NULL }, /* 0xfffb */ + { .altcode = NULL }, /* 0xfffc */ + { .altcode = NULL }, /* 0xfffd */ + { .altcode = NULL }, /* 0xfffe */ + { .altcode = NULL }, /* 0xffff (Delete) */ }, }; From 8d2f658bf74e4af40f2453c6c5b27aaf561fa8f6 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Tue, 20 Mar 2012 16:38:02 -0700 Subject: [PATCH 104/253] Add scancodes for keypad numbers. --- protocols/rdp/src/rdp_keymap_en_us.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/protocols/rdp/src/rdp_keymap_en_us.c b/protocols/rdp/src/rdp_keymap_en_us.c index 9dbae407..78de9043 100644 --- a/protocols/rdp/src/rdp_keymap_en_us.c +++ b/protocols/rdp/src/rdp_keymap_en_us.c @@ -5356,16 +5356,16 @@ const guac_rdp_keysym_scancode_map guac_rdp_keysym_scancode_en_us = { { .scancode = 0x00, .flags = 0x00 }, /* 0xffad (KP_Subtract) */ { .scancode = 0x00, .flags = 0x00 }, /* 0xffae (KP_Decimal) */ { .scancode = 0x00, .flags = 0x00 }, /* 0xffaf (KP_Divide) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xffb0 (KP_0) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xffb1 (KP_1) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xffb2 (KP_2) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xffb3 (KP_3) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xffb4 (KP_4) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xffb5 (KP_5) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xffb6 (KP_6) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xffb7 (KP_7) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xffb8 (KP_8) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xffb9 (KP_9) */ + { .scancode = 0x52, .flags = 0x00 }, /* 0xffb0 (KP_0) */ + { .scancode = 0x4F, .flags = 0x00 }, /* 0xffb1 (KP_1) */ + { .scancode = 0x50, .flags = 0x00 }, /* 0xffb2 (KP_2) */ + { .scancode = 0x51, .flags = 0x00 }, /* 0xffb3 (KP_3) */ + { .scancode = 0x4B, .flags = 0x00 }, /* 0xffb4 (KP_4) */ + { .scancode = 0x4C, .flags = 0x00 }, /* 0xffb5 (KP_5) */ + { .scancode = 0x4D, .flags = 0x00 }, /* 0xffb6 (KP_6) */ + { .scancode = 0x47, .flags = 0x00 }, /* 0xffb7 (KP_7) */ + { .scancode = 0x48, .flags = 0x00 }, /* 0xffb8 (KP_8) */ + { .scancode = 0x49, .flags = 0x00 }, /* 0xffb9 (KP_9) */ { .scancode = 0x00, .flags = 0x00 }, /* 0xffba */ { .scancode = 0x00, .flags = 0x00 }, /* 0xffbb */ { .scancode = 0x00, .flags = 0x00 }, /* 0xffbc */ From 9030d675b70af9d6f231b8a6d0a3d166bcc7ce60 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Tue, 20 Mar 2012 16:39:00 -0700 Subject: [PATCH 105/253] Add function for sending Alt-codes. Send Alt-code if scancode undefined. Beware that the current status of Alt is ignored... if it's already pressed, it will be pressed again, and then released. --- protocols/rdp/src/guac_handlers.c | 54 +++++++++++++++++++++++++++++-- 1 file changed, 52 insertions(+), 2 deletions(-) diff --git a/protocols/rdp/src/guac_handlers.c b/protocols/rdp/src/guac_handlers.c index 3236c8a2..b95ad7fb 100644 --- a/protocols/rdp/src/guac_handlers.c +++ b/protocols/rdp/src/guac_handlers.c @@ -223,6 +223,40 @@ int rdp_guac_client_mouse_handler(guac_client* client, int x, int y, int mask) { return 0; } +void __guac_rdp_send_altcode(guac_client* client, const char* altcode) { + + rdp_guac_client_data* guac_client_data = (rdp_guac_client_data*) client->data; + freerdp* rdp_inst = guac_client_data->rdp_inst; + const guac_rdp_keysym_scancode_map* keysym_scancodes = guac_client_data->keysym_scancodes; + + /* Lookup scancode for Alt */ + int alt = GUAC_RDP_KEYSYM_LOOKUP(*keysym_scancodes, 0xFFE9 /* Alt_L */)->scancode; + guac_client_log_info(client, "ALTCODE: alt=%i", alt); + + /* Press Alt */ + rdp_inst->input->KeyboardEvent(rdp_inst->input, KBD_FLAGS_DOWN, alt); + + /* For each character in Alt-code ... */ + while (*altcode != '\0') { + + /* Get scancode of keypad digit */ + int scancode = GUAC_RDP_KEYSYM_LOOKUP(*keysym_scancodes, 0xFFB0 + (*altcode) - '0')->scancode; + + /* Press and release digit */ + rdp_inst->input->KeyboardEvent(rdp_inst->input, KBD_FLAGS_DOWN, scancode); + rdp_inst->input->KeyboardEvent(rdp_inst->input, KBD_FLAGS_RELEASE, scancode); + guac_client_log_info(client, "ALTCODE: scan=%i", scancode); + + /* Next character */ + altcode++; + } + + /* Release Alt */ + rdp_inst->input->KeyboardEvent(rdp_inst->input, KBD_FLAGS_RELEASE, alt); + guac_client_log_info(client, "ALTCODE: done"); + +} + int rdp_guac_client_key_handler(guac_client* client, int keysym, int pressed) { rdp_guac_client_data* guac_client_data = (rdp_guac_client_data*) client->data; @@ -242,8 +276,24 @@ int rdp_guac_client_key_handler(guac_client* client, int keysym, int pressed) { scancode_map->flags | (pressed ? KBD_FLAGS_DOWN : KBD_FLAGS_RELEASE), scancode_map->scancode); - else - guac_client_log_info(client, "unmapped keysym: 0x%x", keysym); + + /* If undefined, try to type using Alt-code */ + else { + + const guac_rdp_altcode_map* altcode_map = GUAC_RDP_KEYSYM_LOOKUP(guac_rdp_keysym_altcode, keysym); + if (altcode_map->altcode != NULL) { + + /* Only send Alt-code on press */ + if (pressed) + __guac_rdp_send_altcode(client, altcode_map->altcode); + + } + + /* If no defined Alt-code, log warning */ + else + guac_client_log_info(client, "unmapped keysym: 0x%x", keysym); + + } } From 29e479c845e4ce5158525cd513f96c80476143cf Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Tue, 20 Mar 2012 18:57:35 -0700 Subject: [PATCH 106/253] Implement initial sending of keysym strings - beware this still does not track the current state of keysyms. --- protocols/rdp/src/guac_handlers.c | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/protocols/rdp/src/guac_handlers.c b/protocols/rdp/src/guac_handlers.c index b95ad7fb..1c08118a 100644 --- a/protocols/rdp/src/guac_handlers.c +++ b/protocols/rdp/src/guac_handlers.c @@ -231,7 +231,6 @@ void __guac_rdp_send_altcode(guac_client* client, const char* altcode) { /* Lookup scancode for Alt */ int alt = GUAC_RDP_KEYSYM_LOOKUP(*keysym_scancodes, 0xFFE9 /* Alt_L */)->scancode; - guac_client_log_info(client, "ALTCODE: alt=%i", alt); /* Press Alt */ rdp_inst->input->KeyboardEvent(rdp_inst->input, KBD_FLAGS_DOWN, alt); @@ -245,7 +244,6 @@ void __guac_rdp_send_altcode(guac_client* client, const char* altcode) { /* Press and release digit */ rdp_inst->input->KeyboardEvent(rdp_inst->input, KBD_FLAGS_DOWN, scancode); rdp_inst->input->KeyboardEvent(rdp_inst->input, KBD_FLAGS_RELEASE, scancode); - guac_client_log_info(client, "ALTCODE: scan=%i", scancode); /* Next character */ altcode++; @@ -253,7 +251,14 @@ void __guac_rdp_send_altcode(guac_client* client, const char* altcode) { /* Release Alt */ rdp_inst->input->KeyboardEvent(rdp_inst->input, KBD_FLAGS_RELEASE, alt); - guac_client_log_info(client, "ALTCODE: done"); + +} + +void __rdp_guac_client_send_keysym_string(guac_client* client, int* keysym_string, int pressed) { + + /* Send all keysyms in string, NULL terminated */ + while (*keysym_string != 0) + rdp_guac_client_key_handler(client, *(keysym_string++), pressed); } @@ -270,13 +275,25 @@ int rdp_guac_client_key_handler(guac_client* client, int keysym, int pressed) { const guac_rdp_scancode_map* scancode_map = GUAC_RDP_KEYSYM_LOOKUP(*keysym_scancodes, keysym); /* If defined, send event */ - if (scancode_map->scancode != 0) + if (scancode_map->scancode != 0) { + + /* If defined, send any prerequesite keys */ + if (scancode_map->set_keysyms != NULL) + __rdp_guac_client_send_keysym_string(client, scancode_map->set_keysyms, 1); + + /* Send actual key */ rdp_inst->input->KeyboardEvent( rdp_inst->input, scancode_map->flags | (pressed ? KBD_FLAGS_DOWN : KBD_FLAGS_RELEASE), scancode_map->scancode); + /* If defined, release any prerequesite keys */ + if (scancode_map->set_keysyms != NULL) + __rdp_guac_client_send_keysym_string(client, scancode_map->set_keysyms, 0); + + } + /* If undefined, try to type using Alt-code */ else { From e347aad3dc6d5693a29fac70f7886c4549b9a3ec Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Tue, 20 Mar 2012 19:13:17 -0700 Subject: [PATCH 107/253] Add keysym string to $ for testing. --- protocols/rdp/Makefile.am | 1 + protocols/rdp/include/rdp_keymap.h | 9 ++++-- protocols/rdp/src/guac_handlers.c | 2 +- protocols/rdp/src/rdp_keymap.c | 41 ++++++++++++++++++++++++++++ protocols/rdp/src/rdp_keymap_en_us.c | 3 +- 5 files changed, 52 insertions(+), 4 deletions(-) create mode 100644 protocols/rdp/src/rdp_keymap.c diff --git a/protocols/rdp/Makefile.am b/protocols/rdp/Makefile.am index 3debd4f3..f8406d94 100644 --- a/protocols/rdp/Makefile.am +++ b/protocols/rdp/Makefile.am @@ -42,6 +42,7 @@ AM_CFLAGS = -Werror -Wall -pedantic -Iinclude lib_LTLIBRARIES = libguac-client-rdp.la libguac_client_rdp_la_SOURCES = src/client.c src/rdp_bitmap.c src/rdp_glyph.c src/rdp_pointer.c src/rdp_gdi.c src/guac_handlers.c \ + src/rdp_keymap.c \ src/rdp_keymap_en_us.c \ src/rdp_keymap_alt.c diff --git a/protocols/rdp/include/rdp_keymap.h b/protocols/rdp/include/rdp_keymap.h index c7a7b89c..1970889e 100644 --- a/protocols/rdp/include/rdp_keymap.h +++ b/protocols/rdp/include/rdp_keymap.h @@ -58,13 +58,13 @@ typedef struct guac_rdp_scancode_map { * Null-terminated list of keysyms which must be down for this keysym * to be properly typed. */ - int* set_keysyms; + const int* set_keysyms; /** * Null-terminated list of keysyms which must be up for this keysym * to be properly typed. */ - int* clear_keysyms; + const int* clear_keysyms; } guac_rdp_scancode_map; @@ -108,5 +108,10 @@ extern const guac_rdp_keysym_altcode_map guac_rdp_keysym_altcode; */ #define GUAC_RDP_KEYSYM_LOOKUP(keysym_mapping, keysym) (&((keysym_mapping)[((keysym) & 0xFF00) >> 8][(keysym) & 0xFF])) +/** + * Keysym string containing only the left "shift" key. + */ +extern const int GUAC_KEYSYMS_SHIFT[]; + #endif diff --git a/protocols/rdp/src/guac_handlers.c b/protocols/rdp/src/guac_handlers.c index 1c08118a..8a7f334b 100644 --- a/protocols/rdp/src/guac_handlers.c +++ b/protocols/rdp/src/guac_handlers.c @@ -254,7 +254,7 @@ void __guac_rdp_send_altcode(guac_client* client, const char* altcode) { } -void __rdp_guac_client_send_keysym_string(guac_client* client, int* keysym_string, int pressed) { +void __rdp_guac_client_send_keysym_string(guac_client* client, const int* keysym_string, int pressed) { /* Send all keysyms in string, NULL terminated */ while (*keysym_string != 0) diff --git a/protocols/rdp/src/rdp_keymap.c b/protocols/rdp/src/rdp_keymap.c new file mode 100644 index 00000000..e50c808b --- /dev/null +++ b/protocols/rdp/src/rdp_keymap.c @@ -0,0 +1,41 @@ + +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is libguac-client-rdp. + * + * The Initial Developer of the Original Code is + * Michael Jumper. + * Portions created by the Initial Developer are Copyright (C) 2011 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#include "rdp_keymap.h" + +const int GUAC_KEYSYMS_SHIFT[] = {0xFFE1, 0}; + diff --git a/protocols/rdp/src/rdp_keymap_en_us.c b/protocols/rdp/src/rdp_keymap_en_us.c index 78de9043..10d86de0 100644 --- a/protocols/rdp/src/rdp_keymap_en_us.c +++ b/protocols/rdp/src/rdp_keymap_en_us.c @@ -78,7 +78,8 @@ const guac_rdp_keysym_scancode_map guac_rdp_keysym_scancode_en_us = { { .scancode = 0x02, .flags = 0x00 }, /* 0x0021 (exclam) */ { .scancode = 0x28, .flags = 0x00 }, /* 0x0022 (quotedbl) */ { .scancode = 0x04, .flags = 0x00 }, /* 0x0023 (numbersign) */ - { .scancode = 0x05, .flags = 0x00 }, /* 0x0024 (dollar) */ + { .scancode = 0x05, .flags = 0x00, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* 0x0024 (dollar) */ { .scancode = 0x06, .flags = 0x00 }, /* 0x0025 (percent) */ { .scancode = 0x08, .flags = 0x00 }, /* 0x0026 (ampersand) */ { .scancode = 0x28, .flags = 0x00 }, /* 0x0027 (quoteright) */ From 0b65bec8cc3bbb55c0025f70763cb2c49f1c3a04 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Tue, 20 Mar 2012 19:26:23 -0700 Subject: [PATCH 108/253] Rearrange into private key functions. --- protocols/rdp/src/guac_handlers.c | 32 ++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/protocols/rdp/src/guac_handlers.c b/protocols/rdp/src/guac_handlers.c index 8a7f334b..1f986cbc 100644 --- a/protocols/rdp/src/guac_handlers.c +++ b/protocols/rdp/src/guac_handlers.c @@ -54,6 +54,10 @@ #include "rdp_keymap.h" #include "guac_handlers.h" +void __guac_rdp_send_keysym_string(guac_client* client, const int* keysym_string, int pressed); +int __guac_rdp_send_keysym(guac_client* client, int keysym, int pressed); +void __guac_rdp_send_altcode(guac_client* client, const char* altcode); + int rdp_guac_client_free_handler(guac_client* client) { /* STUB */ @@ -254,15 +258,7 @@ void __guac_rdp_send_altcode(guac_client* client, const char* altcode) { } -void __rdp_guac_client_send_keysym_string(guac_client* client, const int* keysym_string, int pressed) { - - /* Send all keysyms in string, NULL terminated */ - while (*keysym_string != 0) - rdp_guac_client_key_handler(client, *(keysym_string++), pressed); - -} - -int rdp_guac_client_key_handler(guac_client* client, int keysym, int pressed) { +int __guac_rdp_send_keysym(guac_client* client, int keysym, int pressed) { rdp_guac_client_data* guac_client_data = (rdp_guac_client_data*) client->data; freerdp* rdp_inst = guac_client_data->rdp_inst; @@ -279,7 +275,7 @@ int rdp_guac_client_key_handler(guac_client* client, int keysym, int pressed) { /* If defined, send any prerequesite keys */ if (scancode_map->set_keysyms != NULL) - __rdp_guac_client_send_keysym_string(client, scancode_map->set_keysyms, 1); + __guac_rdp_send_keysym_string(client, scancode_map->set_keysyms, 1); /* Send actual key */ rdp_inst->input->KeyboardEvent( @@ -290,7 +286,7 @@ int rdp_guac_client_key_handler(guac_client* client, int keysym, int pressed) { /* If defined, release any prerequesite keys */ if (scancode_map->set_keysyms != NULL) - __rdp_guac_client_send_keysym_string(client, scancode_map->set_keysyms, 0); + __guac_rdp_send_keysym_string(client, scancode_map->set_keysyms, 0); } @@ -317,3 +313,17 @@ int rdp_guac_client_key_handler(guac_client* client, int keysym, int pressed) { return 0; } +void __guac_rdp_send_keysym_string(guac_client* client, const int* keysym_string, int pressed) { + + /* Send all keysyms in string, NULL terminated */ + while (*keysym_string != 0) + __guac_rdp_send_keysym(client, *(keysym_string++), pressed); + +} + +int rdp_guac_client_key_handler(guac_client* client, int keysym, int pressed) { + + return __guac_rdp_send_keysym(client, keysym, pressed);; + +} + From d5c00f628ced4db19af1d4b681296c539e9fe35f Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Tue, 20 Mar 2012 19:43:40 -0700 Subject: [PATCH 109/253] Add per-client keysym state mapping. --- protocols/rdp/include/client.h | 2 ++ protocols/rdp/include/rdp_keymap.h | 5 +++++ protocols/rdp/src/client.c | 3 +++ 3 files changed, 10 insertions(+) diff --git a/protocols/rdp/include/client.h b/protocols/rdp/include/client.h index e56dbb6a..1a13feef 100644 --- a/protocols/rdp/include/client.h +++ b/protocols/rdp/include/client.h @@ -67,6 +67,8 @@ typedef struct rdp_guac_client_data { const guac_rdp_keysym_scancode_map* keysym_scancodes; + guac_rdp_keysym_state_map keysym_state; + } rdp_guac_client_data; typedef struct rdp_freerdp_context { diff --git a/protocols/rdp/include/rdp_keymap.h b/protocols/rdp/include/rdp_keymap.h index 1970889e..39c9be4c 100644 --- a/protocols/rdp/include/rdp_keymap.h +++ b/protocols/rdp/include/rdp_keymap.h @@ -83,6 +83,11 @@ typedef struct guac_rdp_altcode_map { } guac_rdp_altcode_map; +/** + * Mapping from keysym to current state + */ +typedef int guac_rdp_keysym_state_map[256][256]; + /** * Static mapping from keysyms to scancodes. */ diff --git a/protocols/rdp/src/client.c b/protocols/rdp/src/client.c index dc6a081a..365bfa4c 100644 --- a/protocols/rdp/src/client.c +++ b/protocols/rdp/src/client.c @@ -325,6 +325,9 @@ int guac_client_init(guac_client* client, int argc, char** argv) { guac_client_data->current_surface = GUAC_DEFAULT_LAYER; guac_client_data->keysym_scancodes = &guac_rdp_keysym_scancode_en_us; + /* Clear keysym state mapping */ + memset(guac_client_data->keysym_state, 0, sizeof(guac_rdp_keysym_state_map)); + ((rdp_freerdp_context*) rdp_inst->context)->client = client; client->data = guac_client_data; From 1fc7a9a8cdfe513f5647c19803b3bf036b7411b0 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Tue, 20 Mar 2012 19:47:41 -0700 Subject: [PATCH 110/253] Do not use addressof in lookup macro. Update keysym state in event handler. --- protocols/rdp/include/rdp_keymap.h | 2 +- protocols/rdp/src/guac_handlers.c | 15 ++++++++++----- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/protocols/rdp/include/rdp_keymap.h b/protocols/rdp/include/rdp_keymap.h index 39c9be4c..85eb8f41 100644 --- a/protocols/rdp/include/rdp_keymap.h +++ b/protocols/rdp/include/rdp_keymap.h @@ -111,7 +111,7 @@ extern const guac_rdp_keysym_altcode_map guac_rdp_keysym_altcode; /** * Simple macro for referencing the mapped value of an altcode or scancode for a given keysym. */ -#define GUAC_RDP_KEYSYM_LOOKUP(keysym_mapping, keysym) (&((keysym_mapping)[((keysym) & 0xFF00) >> 8][(keysym) & 0xFF])) +#define GUAC_RDP_KEYSYM_LOOKUP(keysym_mapping, keysym) ((keysym_mapping)[((keysym) & 0xFF00) >> 8][(keysym) & 0xFF]) /** * Keysym string containing only the left "shift" key. diff --git a/protocols/rdp/src/guac_handlers.c b/protocols/rdp/src/guac_handlers.c index 1f986cbc..488af41a 100644 --- a/protocols/rdp/src/guac_handlers.c +++ b/protocols/rdp/src/guac_handlers.c @@ -234,7 +234,7 @@ void __guac_rdp_send_altcode(guac_client* client, const char* altcode) { const guac_rdp_keysym_scancode_map* keysym_scancodes = guac_client_data->keysym_scancodes; /* Lookup scancode for Alt */ - int alt = GUAC_RDP_KEYSYM_LOOKUP(*keysym_scancodes, 0xFFE9 /* Alt_L */)->scancode; + int alt = GUAC_RDP_KEYSYM_LOOKUP(*keysym_scancodes, 0xFFE9 /* Alt_L */).scancode; /* Press Alt */ rdp_inst->input->KeyboardEvent(rdp_inst->input, KBD_FLAGS_DOWN, alt); @@ -243,7 +243,7 @@ void __guac_rdp_send_altcode(guac_client* client, const char* altcode) { while (*altcode != '\0') { /* Get scancode of keypad digit */ - int scancode = GUAC_RDP_KEYSYM_LOOKUP(*keysym_scancodes, 0xFFB0 + (*altcode) - '0')->scancode; + int scancode = GUAC_RDP_KEYSYM_LOOKUP(*keysym_scancodes, 0xFFB0 + (*altcode) - '0').scancode; /* Press and release digit */ rdp_inst->input->KeyboardEvent(rdp_inst->input, KBD_FLAGS_DOWN, scancode); @@ -268,7 +268,7 @@ int __guac_rdp_send_keysym(guac_client* client, int keysym, int pressed) { if (keysym <= 0xFFFF) { /* Look up scancode mapping */ - const guac_rdp_scancode_map* scancode_map = GUAC_RDP_KEYSYM_LOOKUP(*keysym_scancodes, keysym); + const guac_rdp_scancode_map* scancode_map = &GUAC_RDP_KEYSYM_LOOKUP(*keysym_scancodes, keysym); /* If defined, send event */ if (scancode_map->scancode != 0) { @@ -293,7 +293,7 @@ int __guac_rdp_send_keysym(guac_client* client, int keysym, int pressed) { /* If undefined, try to type using Alt-code */ else { - const guac_rdp_altcode_map* altcode_map = GUAC_RDP_KEYSYM_LOOKUP(guac_rdp_keysym_altcode, keysym); + const guac_rdp_altcode_map* altcode_map = &GUAC_RDP_KEYSYM_LOOKUP(guac_rdp_keysym_altcode, keysym); if (altcode_map->altcode != NULL) { /* Only send Alt-code on press */ @@ -323,7 +323,12 @@ void __guac_rdp_send_keysym_string(guac_client* client, const int* keysym_string int rdp_guac_client_key_handler(guac_client* client, int keysym, int pressed) { - return __guac_rdp_send_keysym(client, keysym, pressed);; + rdp_guac_client_data* guac_client_data = (rdp_guac_client_data*) client->data; + + /* Update keysym state */ + GUAC_RDP_KEYSYM_LOOKUP(guac_client_data->keysym_state, keysym) = pressed; + + return __guac_rdp_send_keysym(client, keysym, pressed); } From 9f94d48c65095722e0ee02069cb32400e698aca6 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Tue, 20 Mar 2012 20:03:51 -0700 Subject: [PATCH 111/253] Automatically clear/set keysyms depending on original state for scancode prereqs. --- protocols/rdp/src/guac_handlers.c | 35 ++++++++++++++++++++++++------- 1 file changed, 27 insertions(+), 8 deletions(-) diff --git a/protocols/rdp/src/guac_handlers.c b/protocols/rdp/src/guac_handlers.c index 488af41a..7aee4dac 100644 --- a/protocols/rdp/src/guac_handlers.c +++ b/protocols/rdp/src/guac_handlers.c @@ -54,7 +54,7 @@ #include "rdp_keymap.h" #include "guac_handlers.h" -void __guac_rdp_send_keysym_string(guac_client* client, const int* keysym_string, int pressed); +void __guac_rdp_update_keysyms(guac_client* client, const int* keysym_string, int from, int to); int __guac_rdp_send_keysym(guac_client* client, int keysym, int pressed); void __guac_rdp_send_altcode(guac_client* client, const char* altcode); @@ -273,9 +273,13 @@ int __guac_rdp_send_keysym(guac_client* client, int keysym, int pressed) { /* If defined, send event */ if (scancode_map->scancode != 0) { - /* If defined, send any prerequesite keys */ + /* If defined, send any prerequesite keys that must be set */ if (scancode_map->set_keysyms != NULL) - __guac_rdp_send_keysym_string(client, scancode_map->set_keysyms, 1); + __guac_rdp_update_keysyms(client, scancode_map->set_keysyms, 0, 1); + + /* If defined, release any keys that must be cleared */ + if (scancode_map->clear_keysyms != NULL) + __guac_rdp_update_keysyms(client, scancode_map->clear_keysyms, 1, 0); /* Send actual key */ rdp_inst->input->KeyboardEvent( @@ -284,9 +288,13 @@ int __guac_rdp_send_keysym(guac_client* client, int keysym, int pressed) { | (pressed ? KBD_FLAGS_DOWN : KBD_FLAGS_RELEASE), scancode_map->scancode); - /* If defined, release any prerequesite keys */ + /* If defined, release any keys that were originally released */ if (scancode_map->set_keysyms != NULL) - __guac_rdp_send_keysym_string(client, scancode_map->set_keysyms, 0); + __guac_rdp_update_keysyms(client, scancode_map->set_keysyms, 0, 0); + + /* If defined, send any keys that were originally set */ + if (scancode_map->clear_keysyms != NULL) + __guac_rdp_update_keysyms(client, scancode_map->clear_keysyms, 1, 1); } @@ -313,11 +321,22 @@ int __guac_rdp_send_keysym(guac_client* client, int keysym, int pressed) { return 0; } -void __guac_rdp_send_keysym_string(guac_client* client, const int* keysym_string, int pressed) { +void __guac_rdp_update_keysyms(guac_client* client, const int* keysym_string, int from, int to) { + + rdp_guac_client_data* guac_client_data = (rdp_guac_client_data*) client->data; + int keysym; /* Send all keysyms in string, NULL terminated */ - while (*keysym_string != 0) - __guac_rdp_send_keysym(client, *(keysym_string++), pressed); + while ((keysym = *keysym_string) != 0) { + + /* Get current keysym state */ + int current_state = GUAC_RDP_KEYSYM_LOOKUP(guac_client_data->keysym_state, keysym); + + /* If key is currently in given state, send event for changing it to specified "to" state */ + if (current_state == from) + __guac_rdp_send_keysym(client, *keysym_string, to); + + } } From 7290c2fe8942816ed96f295082bf3d8aad70f1c4 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Tue, 20 Mar 2012 20:10:22 -0700 Subject: [PATCH 112/253] Forgot to restore the increment of current keysym. --- protocols/rdp/src/guac_handlers.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/protocols/rdp/src/guac_handlers.c b/protocols/rdp/src/guac_handlers.c index 7aee4dac..bfb7bda6 100644 --- a/protocols/rdp/src/guac_handlers.c +++ b/protocols/rdp/src/guac_handlers.c @@ -336,6 +336,9 @@ void __guac_rdp_update_keysyms(guac_client* client, const int* keysym_string, in if (current_state == from) __guac_rdp_send_keysym(client, *keysym_string, to); + /* Next keysym */ + keysym_string++; + } } From b9a1652049be3899844cb96a6966cf7504b24c58 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Tue, 20 Mar 2012 21:03:34 -0700 Subject: [PATCH 113/253] Added keysym strings for alt and all modifiers. --- protocols/rdp/include/rdp_keymap.h | 10 ++++++++++ protocols/rdp/src/rdp_keymap.c | 9 +++++++++ 2 files changed, 19 insertions(+) diff --git a/protocols/rdp/include/rdp_keymap.h b/protocols/rdp/include/rdp_keymap.h index 85eb8f41..0aaa19da 100644 --- a/protocols/rdp/include/rdp_keymap.h +++ b/protocols/rdp/include/rdp_keymap.h @@ -118,5 +118,15 @@ extern const guac_rdp_keysym_altcode_map guac_rdp_keysym_altcode; */ extern const int GUAC_KEYSYMS_SHIFT[]; +/** + * Keysym string containing only the left "alt" key. + */ +extern const int GUAC_KEYSYMS_ALT[]; + +/** + * Keysym string containing all modifier keys. + */ +extern const int GUAC_KEYSYMS_ALL_MODIFIERS[]; + #endif diff --git a/protocols/rdp/src/rdp_keymap.c b/protocols/rdp/src/rdp_keymap.c index e50c808b..a1a8388d 100644 --- a/protocols/rdp/src/rdp_keymap.c +++ b/protocols/rdp/src/rdp_keymap.c @@ -39,3 +39,12 @@ const int GUAC_KEYSYMS_SHIFT[] = {0xFFE1, 0}; +const int GUAC_KEYSYMS_ALT[] = {0xFFE9, 0}; + +const int GUAC_KEYSYMS_ALL_MODIFIERS[] = { + 0xFFE1, 0xFFE2, /* Left and right shift */ + 0xFFE3, 0xFFE4, /* Left and right control */ + 0xFFE9, 0xFFEA, /* Left and right alt */ + 0 +}; + From f278bacfa03f427b82bc29213b0cfc25c5187208 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Tue, 20 Mar 2012 21:06:18 -0700 Subject: [PATCH 114/253] Automatically release and re-press any active modifier keys before sending Alt-codes. --- protocols/rdp/src/guac_handlers.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/protocols/rdp/src/guac_handlers.c b/protocols/rdp/src/guac_handlers.c index bfb7bda6..051166a2 100644 --- a/protocols/rdp/src/guac_handlers.c +++ b/protocols/rdp/src/guac_handlers.c @@ -236,6 +236,9 @@ void __guac_rdp_send_altcode(guac_client* client, const char* altcode) { /* Lookup scancode for Alt */ int alt = GUAC_RDP_KEYSYM_LOOKUP(*keysym_scancodes, 0xFFE9 /* Alt_L */).scancode; + /* Release all pressed modifiers */ + __guac_rdp_update_keysyms(client, GUAC_KEYSYMS_ALL_MODIFIERS, 1, 0); + /* Press Alt */ rdp_inst->input->KeyboardEvent(rdp_inst->input, KBD_FLAGS_DOWN, alt); @@ -256,6 +259,9 @@ void __guac_rdp_send_altcode(guac_client* client, const char* altcode) { /* Release Alt */ rdp_inst->input->KeyboardEvent(rdp_inst->input, KBD_FLAGS_RELEASE, alt); + /* Press all originally pressed modifiers */ + __guac_rdp_update_keysyms(client, GUAC_KEYSYMS_ALL_MODIFIERS, 1, 1); + } int __guac_rdp_send_keysym(guac_client* client, int keysym, int pressed) { From c6b4967877ac5340903265de5d24e25279cb5204 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Tue, 20 Mar 2012 21:09:16 -0700 Subject: [PATCH 115/253] Add padding after NULLs for sake of formatting when Alt-codes are added. --- protocols/rdp/src/rdp_keymap_alt.c | 10712 +++++++++++++-------------- 1 file changed, 5356 insertions(+), 5356 deletions(-) diff --git a/protocols/rdp/src/rdp_keymap_alt.c b/protocols/rdp/src/rdp_keymap_alt.c index 2ffa7e76..70b5a805 100644 --- a/protocols/rdp/src/rdp_keymap_alt.c +++ b/protocols/rdp/src/rdp_keymap_alt.c @@ -42,5400 +42,5400 @@ const guac_rdp_keysym_altcode_map guac_rdp_keysym_altcode = { { /* 0x00?? */ - { .altcode = NULL }, /* 0x0000 */ - { .altcode = NULL }, /* 0x0001 */ - { .altcode = NULL }, /* 0x0002 */ - { .altcode = NULL }, /* 0x0003 */ - { .altcode = NULL }, /* 0x0004 */ - { .altcode = NULL }, /* 0x0005 */ - { .altcode = NULL }, /* 0x0006 */ - { .altcode = NULL }, /* 0x0007 */ - { .altcode = NULL }, /* 0x0008 */ - { .altcode = NULL }, /* 0x0009 */ - { .altcode = NULL }, /* 0x000a */ - { .altcode = NULL }, /* 0x000b */ - { .altcode = NULL }, /* 0x000c */ - { .altcode = NULL }, /* 0x000d */ - { .altcode = NULL }, /* 0x000e */ - { .altcode = NULL }, /* 0x000f */ - { .altcode = NULL }, /* 0x0010 */ - { .altcode = NULL }, /* 0x0011 */ - { .altcode = NULL }, /* 0x0012 */ - { .altcode = NULL }, /* 0x0013 */ - { .altcode = NULL }, /* 0x0014 */ - { .altcode = NULL }, /* 0x0015 */ - { .altcode = NULL }, /* 0x0016 */ - { .altcode = NULL }, /* 0x0017 */ - { .altcode = NULL }, /* 0x0018 */ - { .altcode = NULL }, /* 0x0019 */ - { .altcode = NULL }, /* 0x001a */ - { .altcode = NULL }, /* 0x001b */ - { .altcode = NULL }, /* 0x001c */ - { .altcode = NULL }, /* 0x001d */ - { .altcode = NULL }, /* 0x001e */ - { .altcode = NULL }, /* 0x001f */ - { .altcode = NULL }, /* 0x0020 (space) */ - { .altcode = NULL }, /* 0x0021 (exclam) */ - { .altcode = NULL }, /* 0x0022 (quotedbl) */ - { .altcode = NULL }, /* 0x0023 (numbersign) */ - { .altcode = NULL }, /* 0x0024 (dollar) */ - { .altcode = NULL }, /* 0x0025 (percent) */ - { .altcode = NULL }, /* 0x0026 (ampersand) */ - { .altcode = NULL }, /* 0x0027 (quoteright) */ - { .altcode = NULL }, /* 0x0028 (parenleft) */ - { .altcode = NULL }, /* 0x0029 (parenright) */ - { .altcode = NULL }, /* 0x002a (asterisk) */ - { .altcode = NULL }, /* 0x002b (plus) */ - { .altcode = NULL }, /* 0x002c (comma) */ - { .altcode = NULL }, /* 0x002d (minus) */ - { .altcode = NULL }, /* 0x002e (period) */ - { .altcode = NULL }, /* 0x002f (slash) */ - { .altcode = NULL }, /* 0x0030 (0) */ - { .altcode = NULL }, /* 0x0031 (1) */ - { .altcode = NULL }, /* 0x0032 (2) */ - { .altcode = NULL }, /* 0x0033 (3) */ - { .altcode = NULL }, /* 0x0034 (4) */ - { .altcode = NULL }, /* 0x0035 (5) */ - { .altcode = NULL }, /* 0x0036 (6) */ - { .altcode = NULL }, /* 0x0037 (7) */ - { .altcode = NULL }, /* 0x0038 (8) */ - { .altcode = NULL }, /* 0x0039 (9) */ - { .altcode = NULL }, /* 0x003a (colon) */ - { .altcode = NULL }, /* 0x003b (semicolon) */ - { .altcode = NULL }, /* 0x003c (less) */ - { .altcode = NULL }, /* 0x003d (equal) */ - { .altcode = NULL }, /* 0x003e (greater) */ - { .altcode = NULL }, /* 0x003f (question) */ - { .altcode = NULL }, /* 0x0040 (at) */ - { .altcode = NULL }, /* 0x0041 (A) */ - { .altcode = NULL }, /* 0x0042 (B) */ - { .altcode = NULL }, /* 0x0043 (C) */ - { .altcode = NULL }, /* 0x0044 (D) */ - { .altcode = NULL }, /* 0x0045 (E) */ - { .altcode = NULL }, /* 0x0046 (F) */ - { .altcode = NULL }, /* 0x0047 (G) */ - { .altcode = NULL }, /* 0x0048 (H) */ - { .altcode = NULL }, /* 0x0049 (I) */ - { .altcode = NULL }, /* 0x004a (J) */ - { .altcode = NULL }, /* 0x004b (K) */ - { .altcode = NULL }, /* 0x004c (L) */ - { .altcode = NULL }, /* 0x004d (M) */ - { .altcode = NULL }, /* 0x004e (N) */ - { .altcode = NULL }, /* 0x004f (O) */ - { .altcode = NULL }, /* 0x0050 (P) */ - { .altcode = NULL }, /* 0x0051 (Q) */ - { .altcode = NULL }, /* 0x0052 (R) */ - { .altcode = NULL }, /* 0x0053 (S) */ - { .altcode = NULL }, /* 0x0054 (T) */ - { .altcode = NULL }, /* 0x0055 (U) */ - { .altcode = NULL }, /* 0x0056 (V) */ - { .altcode = NULL }, /* 0x0057 (W) */ - { .altcode = NULL }, /* 0x0058 (X) */ - { .altcode = NULL }, /* 0x0059 (Y) */ - { .altcode = NULL }, /* 0x005a (Z) */ - { .altcode = NULL }, /* 0x005b (bracketleft) */ - { .altcode = NULL }, /* 0x005c (backslash) */ - { .altcode = NULL }, /* 0x005d (bracketright) */ - { .altcode = NULL }, /* 0x005e (asciicircum) */ - { .altcode = NULL }, /* 0x005f (underscore) */ - { .altcode = NULL }, /* 0x0060 (quoteleft) */ - { .altcode = NULL }, /* 0x0061 (a) */ - { .altcode = NULL }, /* 0x0062 (b) */ - { .altcode = NULL }, /* 0x0063 (c) */ - { .altcode = NULL }, /* 0x0064 (d) */ - { .altcode = NULL }, /* 0x0065 (e) */ - { .altcode = NULL }, /* 0x0066 (f) */ - { .altcode = NULL }, /* 0x0067 (g) */ - { .altcode = NULL }, /* 0x0068 (h) */ - { .altcode = NULL }, /* 0x0069 (i) */ - { .altcode = NULL }, /* 0x006a (j) */ - { .altcode = NULL }, /* 0x006b (k) */ - { .altcode = NULL }, /* 0x006c (l) */ - { .altcode = NULL }, /* 0x006d (m) */ - { .altcode = NULL }, /* 0x006e (n) */ - { .altcode = NULL }, /* 0x006f (o) */ - { .altcode = NULL }, /* 0x0070 (p) */ - { .altcode = NULL }, /* 0x0071 (q) */ - { .altcode = NULL }, /* 0x0072 (r) */ - { .altcode = NULL }, /* 0x0073 (s) */ - { .altcode = NULL }, /* 0x0074 (t) */ - { .altcode = NULL }, /* 0x0075 (u) */ - { .altcode = NULL }, /* 0x0076 (v) */ - { .altcode = NULL }, /* 0x0077 (w) */ - { .altcode = NULL }, /* 0x0078 (x) */ - { .altcode = NULL }, /* 0x0079 (y) */ - { .altcode = NULL }, /* 0x007a (z) */ - { .altcode = NULL }, /* 0x007b (braceleft) */ - { .altcode = NULL }, /* 0x007c (bar) */ - { .altcode = NULL }, /* 0x007d (braceright) */ - { .altcode = NULL }, /* 0x007e (asciitilde) */ - { .altcode = NULL }, /* 0x007f */ - { .altcode = NULL }, /* 0x0080 */ - { .altcode = NULL }, /* 0x0081 */ - { .altcode = NULL }, /* 0x0082 */ - { .altcode = NULL }, /* 0x0083 */ - { .altcode = NULL }, /* 0x0084 */ - { .altcode = NULL }, /* 0x0085 */ - { .altcode = NULL }, /* 0x0086 */ - { .altcode = NULL }, /* 0x0087 */ - { .altcode = NULL }, /* 0x0088 */ - { .altcode = NULL }, /* 0x0089 */ - { .altcode = NULL }, /* 0x008a */ - { .altcode = NULL }, /* 0x008b */ - { .altcode = NULL }, /* 0x008c */ - { .altcode = NULL }, /* 0x008d */ - { .altcode = NULL }, /* 0x008e */ - { .altcode = NULL }, /* 0x008f */ - { .altcode = NULL }, /* 0x0090 */ - { .altcode = NULL }, /* 0x0091 */ - { .altcode = NULL }, /* 0x0092 */ - { .altcode = NULL }, /* 0x0093 */ - { .altcode = NULL }, /* 0x0094 */ - { .altcode = NULL }, /* 0x0095 */ - { .altcode = NULL }, /* 0x0096 */ - { .altcode = NULL }, /* 0x0097 */ - { .altcode = NULL }, /* 0x0098 */ - { .altcode = NULL }, /* 0x0099 */ - { .altcode = NULL }, /* 0x009a */ - { .altcode = NULL }, /* 0x009b */ - { .altcode = NULL }, /* 0x009c */ - { .altcode = NULL }, /* 0x009d */ - { .altcode = NULL }, /* 0x009e */ - { .altcode = NULL }, /* 0x009f */ - { .altcode = NULL }, /* 0x00a0 (nobreakspace) */ - { .altcode = NULL }, /* 0x00a1 (exclamdown) */ - { .altcode = NULL }, /* 0x00a2 (cent) */ - { .altcode = NULL }, /* 0x00a3 (sterling) */ - { .altcode = NULL }, /* 0x00a4 (currency) */ - { .altcode = NULL }, /* 0x00a5 (yen) */ - { .altcode = NULL }, /* 0x00a6 (brokenbar) */ - { .altcode = NULL }, /* 0x00a7 (section) */ - { .altcode = NULL }, /* 0x00a8 (diaeresis) */ - { .altcode = NULL }, /* 0x00a9 (copyright) */ - { .altcode = NULL }, /* 0x00aa (ordfeminine) */ - { .altcode = NULL }, /* 0x00ab (guillemotleft) */ - { .altcode = NULL }, /* 0x00ac (notsign) */ - { .altcode = NULL }, /* 0x00ad (hyphen) */ - { .altcode = NULL }, /* 0x00ae (registered) */ - { .altcode = NULL }, /* 0x00af (macron) */ - { .altcode = NULL }, /* 0x00b0 (degree) */ - { .altcode = NULL }, /* 0x00b1 (plusminus) */ - { .altcode = NULL }, /* 0x00b2 (twosuperior) */ - { .altcode = NULL }, /* 0x00b3 (threesuperior) */ - { .altcode = NULL }, /* 0x00b4 (acute) */ - { .altcode = NULL }, /* 0x00b5 (mu) */ - { .altcode = NULL }, /* 0x00b6 (paragraph) */ - { .altcode = NULL }, /* 0x00b7 (periodcentered) */ - { .altcode = NULL }, /* 0x00b8 (cedilla) */ - { .altcode = NULL }, /* 0x00b9 (onesuperior) */ - { .altcode = NULL }, /* 0x00ba (masculine) */ - { .altcode = NULL }, /* 0x00bb (guillemotright) */ - { .altcode = NULL }, /* 0x00bc (onequarter) */ - { .altcode = NULL }, /* 0x00bd (onehalf) */ - { .altcode = NULL }, /* 0x00be (threequarters) */ - { .altcode = NULL }, /* 0x00bf (questiondown) */ - { .altcode = NULL }, /* 0x00c0 (Agrave) */ - { .altcode = NULL }, /* 0x00c1 (Aacute) */ - { .altcode = NULL }, /* 0x00c2 (Acircumflex) */ - { .altcode = NULL }, /* 0x00c3 (Atilde) */ - { .altcode = NULL }, /* 0x00c4 (Adiaeresis) */ - { .altcode = NULL }, /* 0x00c5 (Aring) */ - { .altcode = NULL }, /* 0x00c6 (AE) */ - { .altcode = NULL }, /* 0x00c7 (Ccedilla) */ - { .altcode = NULL }, /* 0x00c8 (Egrave) */ - { .altcode = NULL }, /* 0x00c9 (Eacute) */ - { .altcode = NULL }, /* 0x00ca (Ecircumflex) */ - { .altcode = NULL }, /* 0x00cb (Ediaeresis) */ - { .altcode = NULL }, /* 0x00cc (Igrave) */ - { .altcode = NULL }, /* 0x00cd (Iacute) */ - { .altcode = NULL }, /* 0x00ce (Icircumflex) */ - { .altcode = NULL }, /* 0x00cf (Idiaeresis) */ - { .altcode = NULL }, /* 0x00d0 (Eth) */ - { .altcode = NULL }, /* 0x00d1 (Ntilde) */ - { .altcode = NULL }, /* 0x00d2 (Ograve) */ - { .altcode = NULL }, /* 0x00d3 (Oacute) */ - { .altcode = NULL }, /* 0x00d4 (Ocircumflex) */ - { .altcode = NULL }, /* 0x00d5 (Otilde) */ - { .altcode = NULL }, /* 0x00d6 (Odiaeresis) */ - { .altcode = NULL }, /* 0x00d7 (multiply) */ - { .altcode = NULL }, /* 0x00d8 (Ooblique) */ - { .altcode = NULL }, /* 0x00d9 (Ugrave) */ - { .altcode = NULL }, /* 0x00da (Uacute) */ - { .altcode = NULL }, /* 0x00db (Ucircumflex) */ - { .altcode = NULL }, /* 0x00dc (Udiaeresis) */ - { .altcode = NULL }, /* 0x00dd (Yacute) */ - { .altcode = NULL }, /* 0x00de (Thorn) */ - { .altcode = NULL }, /* 0x00df (ssharp) */ - { .altcode = NULL }, /* 0x00e0 (agrave) */ - { .altcode = NULL }, /* 0x00e1 (aacute) */ - { .altcode = NULL }, /* 0x00e2 (acircumflex) */ - { .altcode = NULL }, /* 0x00e3 (atilde) */ - { .altcode = NULL }, /* 0x00e4 (adiaeresis) */ - { .altcode = NULL }, /* 0x00e5 (aring) */ - { .altcode = NULL }, /* 0x00e6 (ae) */ - { .altcode = NULL }, /* 0x00e7 (ccedilla) */ - { .altcode = NULL }, /* 0x00e8 (egrave) */ - { .altcode = NULL }, /* 0x00e9 (eacute) */ - { .altcode = NULL }, /* 0x00ea (ecircumflex) */ - { .altcode = NULL }, /* 0x00eb (ediaeresis) */ - { .altcode = NULL }, /* 0x00ec (igrave) */ - { .altcode = NULL }, /* 0x00ed (iacute) */ - { .altcode = NULL }, /* 0x00ee (icircumflex) */ - { .altcode = NULL }, /* 0x00ef (idiaeresis) */ - { .altcode = NULL }, /* 0x00f0 (eth) */ - { .altcode = NULL }, /* 0x00f1 (ntilde) */ - { .altcode = NULL }, /* 0x00f2 (ograve) */ - { .altcode = NULL }, /* 0x00f3 (oacute) */ - { .altcode = NULL }, /* 0x00f4 (ocircumflex) */ - { .altcode = NULL }, /* 0x00f5 (otilde) */ - { .altcode = NULL }, /* 0x00f6 (odiaeresis) */ - { .altcode = NULL }, /* 0x00f7 (division) */ - { .altcode = NULL }, /* 0x00f8 (ooblique) */ - { .altcode = NULL }, /* 0x00f9 (ugrave) */ - { .altcode = NULL }, /* 0x00fa (uacute) */ - { .altcode = NULL }, /* 0x00fb (ucircumflex) */ - { .altcode = NULL }, /* 0x00fc (udiaeresis) */ - { .altcode = NULL }, /* 0x00fd (yacute) */ - { .altcode = NULL }, /* 0x00fe (thorn) */ - { .altcode = NULL }, /* 0x00ff (ydiaeresis) */ + { .altcode = NULL }, /* 0x0000 */ + { .altcode = NULL }, /* 0x0001 */ + { .altcode = NULL }, /* 0x0002 */ + { .altcode = NULL }, /* 0x0003 */ + { .altcode = NULL }, /* 0x0004 */ + { .altcode = NULL }, /* 0x0005 */ + { .altcode = NULL }, /* 0x0006 */ + { .altcode = NULL }, /* 0x0007 */ + { .altcode = NULL }, /* 0x0008 */ + { .altcode = NULL }, /* 0x0009 */ + { .altcode = NULL }, /* 0x000a */ + { .altcode = NULL }, /* 0x000b */ + { .altcode = NULL }, /* 0x000c */ + { .altcode = NULL }, /* 0x000d */ + { .altcode = NULL }, /* 0x000e */ + { .altcode = NULL }, /* 0x000f */ + { .altcode = NULL }, /* 0x0010 */ + { .altcode = NULL }, /* 0x0011 */ + { .altcode = NULL }, /* 0x0012 */ + { .altcode = NULL }, /* 0x0013 */ + { .altcode = NULL }, /* 0x0014 */ + { .altcode = NULL }, /* 0x0015 */ + { .altcode = NULL }, /* 0x0016 */ + { .altcode = NULL }, /* 0x0017 */ + { .altcode = NULL }, /* 0x0018 */ + { .altcode = NULL }, /* 0x0019 */ + { .altcode = NULL }, /* 0x001a */ + { .altcode = NULL }, /* 0x001b */ + { .altcode = NULL }, /* 0x001c */ + { .altcode = NULL }, /* 0x001d */ + { .altcode = NULL }, /* 0x001e */ + { .altcode = NULL }, /* 0x001f */ + { .altcode = NULL }, /* 0x0020 (space) */ + { .altcode = NULL }, /* 0x0021 (exclam) */ + { .altcode = NULL }, /* 0x0022 (quotedbl) */ + { .altcode = NULL }, /* 0x0023 (numbersign) */ + { .altcode = NULL }, /* 0x0024 (dollar) */ + { .altcode = NULL }, /* 0x0025 (percent) */ + { .altcode = NULL }, /* 0x0026 (ampersand) */ + { .altcode = NULL }, /* 0x0027 (quoteright) */ + { .altcode = NULL }, /* 0x0028 (parenleft) */ + { .altcode = NULL }, /* 0x0029 (parenright) */ + { .altcode = NULL }, /* 0x002a (asterisk) */ + { .altcode = NULL }, /* 0x002b (plus) */ + { .altcode = NULL }, /* 0x002c (comma) */ + { .altcode = NULL }, /* 0x002d (minus) */ + { .altcode = NULL }, /* 0x002e (period) */ + { .altcode = NULL }, /* 0x002f (slash) */ + { .altcode = NULL }, /* 0x0030 (0) */ + { .altcode = NULL }, /* 0x0031 (1) */ + { .altcode = NULL }, /* 0x0032 (2) */ + { .altcode = NULL }, /* 0x0033 (3) */ + { .altcode = NULL }, /* 0x0034 (4) */ + { .altcode = NULL }, /* 0x0035 (5) */ + { .altcode = NULL }, /* 0x0036 (6) */ + { .altcode = NULL }, /* 0x0037 (7) */ + { .altcode = NULL }, /* 0x0038 (8) */ + { .altcode = NULL }, /* 0x0039 (9) */ + { .altcode = NULL }, /* 0x003a (colon) */ + { .altcode = NULL }, /* 0x003b (semicolon) */ + { .altcode = NULL }, /* 0x003c (less) */ + { .altcode = NULL }, /* 0x003d (equal) */ + { .altcode = NULL }, /* 0x003e (greater) */ + { .altcode = NULL }, /* 0x003f (question) */ + { .altcode = NULL }, /* 0x0040 (at) */ + { .altcode = NULL }, /* 0x0041 (A) */ + { .altcode = NULL }, /* 0x0042 (B) */ + { .altcode = NULL }, /* 0x0043 (C) */ + { .altcode = NULL }, /* 0x0044 (D) */ + { .altcode = NULL }, /* 0x0045 (E) */ + { .altcode = NULL }, /* 0x0046 (F) */ + { .altcode = NULL }, /* 0x0047 (G) */ + { .altcode = NULL }, /* 0x0048 (H) */ + { .altcode = NULL }, /* 0x0049 (I) */ + { .altcode = NULL }, /* 0x004a (J) */ + { .altcode = NULL }, /* 0x004b (K) */ + { .altcode = NULL }, /* 0x004c (L) */ + { .altcode = NULL }, /* 0x004d (M) */ + { .altcode = NULL }, /* 0x004e (N) */ + { .altcode = NULL }, /* 0x004f (O) */ + { .altcode = NULL }, /* 0x0050 (P) */ + { .altcode = NULL }, /* 0x0051 (Q) */ + { .altcode = NULL }, /* 0x0052 (R) */ + { .altcode = NULL }, /* 0x0053 (S) */ + { .altcode = NULL }, /* 0x0054 (T) */ + { .altcode = NULL }, /* 0x0055 (U) */ + { .altcode = NULL }, /* 0x0056 (V) */ + { .altcode = NULL }, /* 0x0057 (W) */ + { .altcode = NULL }, /* 0x0058 (X) */ + { .altcode = NULL }, /* 0x0059 (Y) */ + { .altcode = NULL }, /* 0x005a (Z) */ + { .altcode = NULL }, /* 0x005b (bracketleft) */ + { .altcode = NULL }, /* 0x005c (backslash) */ + { .altcode = NULL }, /* 0x005d (bracketright) */ + { .altcode = NULL }, /* 0x005e (asciicircum) */ + { .altcode = NULL }, /* 0x005f (underscore) */ + { .altcode = NULL }, /* 0x0060 (quoteleft) */ + { .altcode = NULL }, /* 0x0061 (a) */ + { .altcode = NULL }, /* 0x0062 (b) */ + { .altcode = NULL }, /* 0x0063 (c) */ + { .altcode = NULL }, /* 0x0064 (d) */ + { .altcode = NULL }, /* 0x0065 (e) */ + { .altcode = NULL }, /* 0x0066 (f) */ + { .altcode = NULL }, /* 0x0067 (g) */ + { .altcode = NULL }, /* 0x0068 (h) */ + { .altcode = NULL }, /* 0x0069 (i) */ + { .altcode = NULL }, /* 0x006a (j) */ + { .altcode = NULL }, /* 0x006b (k) */ + { .altcode = NULL }, /* 0x006c (l) */ + { .altcode = NULL }, /* 0x006d (m) */ + { .altcode = NULL }, /* 0x006e (n) */ + { .altcode = NULL }, /* 0x006f (o) */ + { .altcode = NULL }, /* 0x0070 (p) */ + { .altcode = NULL }, /* 0x0071 (q) */ + { .altcode = NULL }, /* 0x0072 (r) */ + { .altcode = NULL }, /* 0x0073 (s) */ + { .altcode = NULL }, /* 0x0074 (t) */ + { .altcode = NULL }, /* 0x0075 (u) */ + { .altcode = NULL }, /* 0x0076 (v) */ + { .altcode = NULL }, /* 0x0077 (w) */ + { .altcode = NULL }, /* 0x0078 (x) */ + { .altcode = NULL }, /* 0x0079 (y) */ + { .altcode = NULL }, /* 0x007a (z) */ + { .altcode = NULL }, /* 0x007b (braceleft) */ + { .altcode = NULL }, /* 0x007c (bar) */ + { .altcode = NULL }, /* 0x007d (braceright) */ + { .altcode = NULL }, /* 0x007e (asciitilde) */ + { .altcode = NULL }, /* 0x007f */ + { .altcode = NULL }, /* 0x0080 */ + { .altcode = NULL }, /* 0x0081 */ + { .altcode = NULL }, /* 0x0082 */ + { .altcode = NULL }, /* 0x0083 */ + { .altcode = NULL }, /* 0x0084 */ + { .altcode = NULL }, /* 0x0085 */ + { .altcode = NULL }, /* 0x0086 */ + { .altcode = NULL }, /* 0x0087 */ + { .altcode = NULL }, /* 0x0088 */ + { .altcode = NULL }, /* 0x0089 */ + { .altcode = NULL }, /* 0x008a */ + { .altcode = NULL }, /* 0x008b */ + { .altcode = NULL }, /* 0x008c */ + { .altcode = NULL }, /* 0x008d */ + { .altcode = NULL }, /* 0x008e */ + { .altcode = NULL }, /* 0x008f */ + { .altcode = NULL }, /* 0x0090 */ + { .altcode = NULL }, /* 0x0091 */ + { .altcode = NULL }, /* 0x0092 */ + { .altcode = NULL }, /* 0x0093 */ + { .altcode = NULL }, /* 0x0094 */ + { .altcode = NULL }, /* 0x0095 */ + { .altcode = NULL }, /* 0x0096 */ + { .altcode = NULL }, /* 0x0097 */ + { .altcode = NULL }, /* 0x0098 */ + { .altcode = NULL }, /* 0x0099 */ + { .altcode = NULL }, /* 0x009a */ + { .altcode = NULL }, /* 0x009b */ + { .altcode = NULL }, /* 0x009c */ + { .altcode = NULL }, /* 0x009d */ + { .altcode = NULL }, /* 0x009e */ + { .altcode = NULL }, /* 0x009f */ + { .altcode = NULL }, /* 0x00a0 (nobreakspace) */ + { .altcode = NULL }, /* 0x00a1 (exclamdown) */ + { .altcode = NULL }, /* 0x00a2 (cent) */ + { .altcode = NULL }, /* 0x00a3 (sterling) */ + { .altcode = NULL }, /* 0x00a4 (currency) */ + { .altcode = NULL }, /* 0x00a5 (yen) */ + { .altcode = NULL }, /* 0x00a6 (brokenbar) */ + { .altcode = NULL }, /* 0x00a7 (section) */ + { .altcode = NULL }, /* 0x00a8 (diaeresis) */ + { .altcode = NULL }, /* 0x00a9 (copyright) */ + { .altcode = NULL }, /* 0x00aa (ordfeminine) */ + { .altcode = NULL }, /* 0x00ab (guillemotleft) */ + { .altcode = NULL }, /* 0x00ac (notsign) */ + { .altcode = NULL }, /* 0x00ad (hyphen) */ + { .altcode = NULL }, /* 0x00ae (registered) */ + { .altcode = NULL }, /* 0x00af (macron) */ + { .altcode = NULL }, /* 0x00b0 (degree) */ + { .altcode = NULL }, /* 0x00b1 (plusminus) */ + { .altcode = NULL }, /* 0x00b2 (twosuperior) */ + { .altcode = NULL }, /* 0x00b3 (threesuperior) */ + { .altcode = NULL }, /* 0x00b4 (acute) */ + { .altcode = NULL }, /* 0x00b5 (mu) */ + { .altcode = NULL }, /* 0x00b6 (paragraph) */ + { .altcode = NULL }, /* 0x00b7 (periodcentered) */ + { .altcode = NULL }, /* 0x00b8 (cedilla) */ + { .altcode = NULL }, /* 0x00b9 (onesuperior) */ + { .altcode = NULL }, /* 0x00ba (masculine) */ + { .altcode = NULL }, /* 0x00bb (guillemotright) */ + { .altcode = NULL }, /* 0x00bc (onequarter) */ + { .altcode = NULL }, /* 0x00bd (onehalf) */ + { .altcode = NULL }, /* 0x00be (threequarters) */ + { .altcode = NULL }, /* 0x00bf (questiondown) */ + { .altcode = NULL }, /* 0x00c0 (Agrave) */ + { .altcode = NULL }, /* 0x00c1 (Aacute) */ + { .altcode = NULL }, /* 0x00c2 (Acircumflex) */ + { .altcode = NULL }, /* 0x00c3 (Atilde) */ + { .altcode = NULL }, /* 0x00c4 (Adiaeresis) */ + { .altcode = NULL }, /* 0x00c5 (Aring) */ + { .altcode = NULL }, /* 0x00c6 (AE) */ + { .altcode = NULL }, /* 0x00c7 (Ccedilla) */ + { .altcode = NULL }, /* 0x00c8 (Egrave) */ + { .altcode = NULL }, /* 0x00c9 (Eacute) */ + { .altcode = NULL }, /* 0x00ca (Ecircumflex) */ + { .altcode = NULL }, /* 0x00cb (Ediaeresis) */ + { .altcode = NULL }, /* 0x00cc (Igrave) */ + { .altcode = NULL }, /* 0x00cd (Iacute) */ + { .altcode = NULL }, /* 0x00ce (Icircumflex) */ + { .altcode = NULL }, /* 0x00cf (Idiaeresis) */ + { .altcode = NULL }, /* 0x00d0 (Eth) */ + { .altcode = NULL }, /* 0x00d1 (Ntilde) */ + { .altcode = NULL }, /* 0x00d2 (Ograve) */ + { .altcode = NULL }, /* 0x00d3 (Oacute) */ + { .altcode = NULL }, /* 0x00d4 (Ocircumflex) */ + { .altcode = NULL }, /* 0x00d5 (Otilde) */ + { .altcode = NULL }, /* 0x00d6 (Odiaeresis) */ + { .altcode = NULL }, /* 0x00d7 (multiply) */ + { .altcode = NULL }, /* 0x00d8 (Ooblique) */ + { .altcode = NULL }, /* 0x00d9 (Ugrave) */ + { .altcode = NULL }, /* 0x00da (Uacute) */ + { .altcode = NULL }, /* 0x00db (Ucircumflex) */ + { .altcode = NULL }, /* 0x00dc (Udiaeresis) */ + { .altcode = NULL }, /* 0x00dd (Yacute) */ + { .altcode = NULL }, /* 0x00de (Thorn) */ + { .altcode = NULL }, /* 0x00df (ssharp) */ + { .altcode = NULL }, /* 0x00e0 (agrave) */ + { .altcode = NULL }, /* 0x00e1 (aacute) */ + { .altcode = NULL }, /* 0x00e2 (acircumflex) */ + { .altcode = NULL }, /* 0x00e3 (atilde) */ + { .altcode = NULL }, /* 0x00e4 (adiaeresis) */ + { .altcode = NULL }, /* 0x00e5 (aring) */ + { .altcode = NULL }, /* 0x00e6 (ae) */ + { .altcode = NULL }, /* 0x00e7 (ccedilla) */ + { .altcode = NULL }, /* 0x00e8 (egrave) */ + { .altcode = NULL }, /* 0x00e9 (eacute) */ + { .altcode = NULL }, /* 0x00ea (ecircumflex) */ + { .altcode = NULL }, /* 0x00eb (ediaeresis) */ + { .altcode = NULL }, /* 0x00ec (igrave) */ + { .altcode = NULL }, /* 0x00ed (iacute) */ + { .altcode = NULL }, /* 0x00ee (icircumflex) */ + { .altcode = NULL }, /* 0x00ef (idiaeresis) */ + { .altcode = NULL }, /* 0x00f0 (eth) */ + { .altcode = NULL }, /* 0x00f1 (ntilde) */ + { .altcode = NULL }, /* 0x00f2 (ograve) */ + { .altcode = NULL }, /* 0x00f3 (oacute) */ + { .altcode = NULL }, /* 0x00f4 (ocircumflex) */ + { .altcode = NULL }, /* 0x00f5 (otilde) */ + { .altcode = NULL }, /* 0x00f6 (odiaeresis) */ + { .altcode = NULL }, /* 0x00f7 (division) */ + { .altcode = NULL }, /* 0x00f8 (ooblique) */ + { .altcode = NULL }, /* 0x00f9 (ugrave) */ + { .altcode = NULL }, /* 0x00fa (uacute) */ + { .altcode = NULL }, /* 0x00fb (ucircumflex) */ + { .altcode = NULL }, /* 0x00fc (udiaeresis) */ + { .altcode = NULL }, /* 0x00fd (yacute) */ + { .altcode = NULL }, /* 0x00fe (thorn) */ + { .altcode = NULL }, /* 0x00ff (ydiaeresis) */ }, { /* 0x01?? */ - { .altcode = NULL }, /* 0x0100 */ - { .altcode = NULL }, /* 0x0101 */ - { .altcode = NULL }, /* 0x0102 */ - { .altcode = NULL }, /* 0x0103 */ - { .altcode = NULL }, /* 0x0104 */ - { .altcode = NULL }, /* 0x0105 */ - { .altcode = NULL }, /* 0x0106 */ - { .altcode = NULL }, /* 0x0107 */ - { .altcode = NULL }, /* 0x0108 */ - { .altcode = NULL }, /* 0x0109 */ - { .altcode = NULL }, /* 0x010a */ - { .altcode = NULL }, /* 0x010b */ - { .altcode = NULL }, /* 0x010c */ - { .altcode = NULL }, /* 0x010d */ - { .altcode = NULL }, /* 0x010e */ - { .altcode = NULL }, /* 0x010f */ - { .altcode = NULL }, /* 0x0110 */ - { .altcode = NULL }, /* 0x0111 */ - { .altcode = NULL }, /* 0x0112 */ - { .altcode = NULL }, /* 0x0113 */ - { .altcode = NULL }, /* 0x0114 */ - { .altcode = NULL }, /* 0x0115 */ - { .altcode = NULL }, /* 0x0116 */ - { .altcode = NULL }, /* 0x0117 */ - { .altcode = NULL }, /* 0x0118 */ - { .altcode = NULL }, /* 0x0119 */ - { .altcode = NULL }, /* 0x011a */ - { .altcode = NULL }, /* 0x011b */ - { .altcode = NULL }, /* 0x011c */ - { .altcode = NULL }, /* 0x011d */ - { .altcode = NULL }, /* 0x011e */ - { .altcode = NULL }, /* 0x011f */ - { .altcode = NULL }, /* 0x0120 */ - { .altcode = NULL }, /* 0x0121 */ - { .altcode = NULL }, /* 0x0122 */ - { .altcode = NULL }, /* 0x0123 */ - { .altcode = NULL }, /* 0x0124 */ - { .altcode = NULL }, /* 0x0125 */ - { .altcode = NULL }, /* 0x0126 */ - { .altcode = NULL }, /* 0x0127 */ - { .altcode = NULL }, /* 0x0128 */ - { .altcode = NULL }, /* 0x0129 */ - { .altcode = NULL }, /* 0x012a */ - { .altcode = NULL }, /* 0x012b */ - { .altcode = NULL }, /* 0x012c */ - { .altcode = NULL }, /* 0x012d */ - { .altcode = NULL }, /* 0x012e */ - { .altcode = NULL }, /* 0x012f */ - { .altcode = NULL }, /* 0x0130 */ - { .altcode = NULL }, /* 0x0131 */ - { .altcode = NULL }, /* 0x0132 */ - { .altcode = NULL }, /* 0x0133 */ - { .altcode = NULL }, /* 0x0134 */ - { .altcode = NULL }, /* 0x0135 */ - { .altcode = NULL }, /* 0x0136 */ - { .altcode = NULL }, /* 0x0137 */ - { .altcode = NULL }, /* 0x0138 */ - { .altcode = NULL }, /* 0x0139 */ - { .altcode = NULL }, /* 0x013a */ - { .altcode = NULL }, /* 0x013b */ - { .altcode = NULL }, /* 0x013c */ - { .altcode = NULL }, /* 0x013d */ - { .altcode = NULL }, /* 0x013e */ - { .altcode = NULL }, /* 0x013f */ - { .altcode = NULL }, /* 0x0140 */ - { .altcode = NULL }, /* 0x0141 */ - { .altcode = NULL }, /* 0x0142 */ - { .altcode = NULL }, /* 0x0143 */ - { .altcode = NULL }, /* 0x0144 */ - { .altcode = NULL }, /* 0x0145 */ - { .altcode = NULL }, /* 0x0146 */ - { .altcode = NULL }, /* 0x0147 */ - { .altcode = NULL }, /* 0x0148 */ - { .altcode = NULL }, /* 0x0149 */ - { .altcode = NULL }, /* 0x014a */ - { .altcode = NULL }, /* 0x014b */ - { .altcode = NULL }, /* 0x014c */ - { .altcode = NULL }, /* 0x014d */ - { .altcode = NULL }, /* 0x014e */ - { .altcode = NULL }, /* 0x014f */ - { .altcode = NULL }, /* 0x0150 */ - { .altcode = NULL }, /* 0x0151 */ - { .altcode = NULL }, /* 0x0152 */ - { .altcode = NULL }, /* 0x0153 */ - { .altcode = NULL }, /* 0x0154 */ - { .altcode = NULL }, /* 0x0155 */ - { .altcode = NULL }, /* 0x0156 */ - { .altcode = NULL }, /* 0x0157 */ - { .altcode = NULL }, /* 0x0158 */ - { .altcode = NULL }, /* 0x0159 */ - { .altcode = NULL }, /* 0x015a */ - { .altcode = NULL }, /* 0x015b */ - { .altcode = NULL }, /* 0x015c */ - { .altcode = NULL }, /* 0x015d */ - { .altcode = NULL }, /* 0x015e */ - { .altcode = NULL }, /* 0x015f */ - { .altcode = NULL }, /* 0x0160 */ - { .altcode = NULL }, /* 0x0161 */ - { .altcode = NULL }, /* 0x0162 */ - { .altcode = NULL }, /* 0x0163 */ - { .altcode = NULL }, /* 0x0164 */ - { .altcode = NULL }, /* 0x0165 */ - { .altcode = NULL }, /* 0x0166 */ - { .altcode = NULL }, /* 0x0167 */ - { .altcode = NULL }, /* 0x0168 */ - { .altcode = NULL }, /* 0x0169 */ - { .altcode = NULL }, /* 0x016a */ - { .altcode = NULL }, /* 0x016b */ - { .altcode = NULL }, /* 0x016c */ - { .altcode = NULL }, /* 0x016d */ - { .altcode = NULL }, /* 0x016e */ - { .altcode = NULL }, /* 0x016f */ - { .altcode = NULL }, /* 0x0170 */ - { .altcode = NULL }, /* 0x0171 */ - { .altcode = NULL }, /* 0x0172 */ - { .altcode = NULL }, /* 0x0173 */ - { .altcode = NULL }, /* 0x0174 */ - { .altcode = NULL }, /* 0x0175 */ - { .altcode = NULL }, /* 0x0176 */ - { .altcode = NULL }, /* 0x0177 */ - { .altcode = NULL }, /* 0x0178 */ - { .altcode = NULL }, /* 0x0179 */ - { .altcode = NULL }, /* 0x017a */ - { .altcode = NULL }, /* 0x017b */ - { .altcode = NULL }, /* 0x017c */ - { .altcode = NULL }, /* 0x017d */ - { .altcode = NULL }, /* 0x017e */ - { .altcode = NULL }, /* 0x017f */ - { .altcode = NULL }, /* 0x0180 */ - { .altcode = NULL }, /* 0x0181 */ - { .altcode = NULL }, /* 0x0182 */ - { .altcode = NULL }, /* 0x0183 */ - { .altcode = NULL }, /* 0x0184 */ - { .altcode = NULL }, /* 0x0185 */ - { .altcode = NULL }, /* 0x0186 */ - { .altcode = NULL }, /* 0x0187 */ - { .altcode = NULL }, /* 0x0188 */ - { .altcode = NULL }, /* 0x0189 */ - { .altcode = NULL }, /* 0x018a */ - { .altcode = NULL }, /* 0x018b */ - { .altcode = NULL }, /* 0x018c */ - { .altcode = NULL }, /* 0x018d */ - { .altcode = NULL }, /* 0x018e */ - { .altcode = NULL }, /* 0x018f */ - { .altcode = NULL }, /* 0x0190 */ - { .altcode = NULL }, /* 0x0191 */ - { .altcode = NULL }, /* 0x0192 */ - { .altcode = NULL }, /* 0x0193 */ - { .altcode = NULL }, /* 0x0194 */ - { .altcode = NULL }, /* 0x0195 */ - { .altcode = NULL }, /* 0x0196 */ - { .altcode = NULL }, /* 0x0197 */ - { .altcode = NULL }, /* 0x0198 */ - { .altcode = NULL }, /* 0x0199 */ - { .altcode = NULL }, /* 0x019a */ - { .altcode = NULL }, /* 0x019b */ - { .altcode = NULL }, /* 0x019c */ - { .altcode = NULL }, /* 0x019d */ - { .altcode = NULL }, /* 0x019e */ - { .altcode = NULL }, /* 0x019f */ - { .altcode = NULL }, /* 0x01a0 */ - { .altcode = NULL }, /* 0x01a1 (Aogonek) */ - { .altcode = NULL }, /* 0x01a2 (breve) */ - { .altcode = NULL }, /* 0x01a3 (Lstroke) */ - { .altcode = NULL }, /* 0x01a4 */ - { .altcode = NULL }, /* 0x01a5 (Lcaron) */ - { .altcode = NULL }, /* 0x01a6 (Sacute) */ - { .altcode = NULL }, /* 0x01a7 */ - { .altcode = NULL }, /* 0x01a8 */ - { .altcode = NULL }, /* 0x01a9 (Scaron) */ - { .altcode = NULL }, /* 0x01aa (Scedilla) */ - { .altcode = NULL }, /* 0x01ab (Tcaron) */ - { .altcode = NULL }, /* 0x01ac (Zacute) */ - { .altcode = NULL }, /* 0x01ad */ - { .altcode = NULL }, /* 0x01ae (Zcaron) */ - { .altcode = NULL }, /* 0x01af (Zabovedot) */ - { .altcode = NULL }, /* 0x01b0 */ - { .altcode = NULL }, /* 0x01b1 (aogonek) */ - { .altcode = NULL }, /* 0x01b2 (ogonek) */ - { .altcode = NULL }, /* 0x01b3 (lstroke) */ - { .altcode = NULL }, /* 0x01b4 */ - { .altcode = NULL }, /* 0x01b5 (lcaron) */ - { .altcode = NULL }, /* 0x01b6 (sacute) */ - { .altcode = NULL }, /* 0x01b7 (caron) */ - { .altcode = NULL }, /* 0x01b8 */ - { .altcode = NULL }, /* 0x01b9 (scaron) */ - { .altcode = NULL }, /* 0x01ba (scedilla) */ - { .altcode = NULL }, /* 0x01bb (tcaron) */ - { .altcode = NULL }, /* 0x01bc (zacute) */ - { .altcode = NULL }, /* 0x01bd (doubleacute) */ - { .altcode = NULL }, /* 0x01be (zcaron) */ - { .altcode = NULL }, /* 0x01bf (zabovedot) */ - { .altcode = NULL }, /* 0x01c0 (Racute) */ - { .altcode = NULL }, /* 0x01c1 */ - { .altcode = NULL }, /* 0x01c2 */ - { .altcode = NULL }, /* 0x01c3 (Abreve) */ - { .altcode = NULL }, /* 0x01c4 */ - { .altcode = NULL }, /* 0x01c5 (Lacute) */ - { .altcode = NULL }, /* 0x01c6 (Cacute) */ - { .altcode = NULL }, /* 0x01c7 */ - { .altcode = NULL }, /* 0x01c8 (Ccaron) */ - { .altcode = NULL }, /* 0x01c9 */ - { .altcode = NULL }, /* 0x01ca (Eogonek) */ - { .altcode = NULL }, /* 0x01cb */ - { .altcode = NULL }, /* 0x01cc (Ecaron) */ - { .altcode = NULL }, /* 0x01cd */ - { .altcode = NULL }, /* 0x01ce */ - { .altcode = NULL }, /* 0x01cf (Dcaron) */ - { .altcode = NULL }, /* 0x01d0 (Dstroke) */ - { .altcode = NULL }, /* 0x01d1 (Nacute) */ - { .altcode = NULL }, /* 0x01d2 (Ncaron) */ - { .altcode = NULL }, /* 0x01d3 */ - { .altcode = NULL }, /* 0x01d4 */ - { .altcode = NULL }, /* 0x01d5 (Odoubleacute) */ - { .altcode = NULL }, /* 0x01d6 */ - { .altcode = NULL }, /* 0x01d7 */ - { .altcode = NULL }, /* 0x01d8 (Rcaron) */ - { .altcode = NULL }, /* 0x01d9 (Uring) */ - { .altcode = NULL }, /* 0x01da */ - { .altcode = NULL }, /* 0x01db (Udoubleacute) */ - { .altcode = NULL }, /* 0x01dc */ - { .altcode = NULL }, /* 0x01dd */ - { .altcode = NULL }, /* 0x01de (Tcedilla) */ - { .altcode = NULL }, /* 0x01df */ - { .altcode = NULL }, /* 0x01e0 (racute) */ - { .altcode = NULL }, /* 0x01e1 */ - { .altcode = NULL }, /* 0x01e2 */ - { .altcode = NULL }, /* 0x01e3 (abreve) */ - { .altcode = NULL }, /* 0x01e4 */ - { .altcode = NULL }, /* 0x01e5 (lacute) */ - { .altcode = NULL }, /* 0x01e6 (cacute) */ - { .altcode = NULL }, /* 0x01e7 */ - { .altcode = NULL }, /* 0x01e8 (ccaron) */ - { .altcode = NULL }, /* 0x01e9 */ - { .altcode = NULL }, /* 0x01ea (eogonek) */ - { .altcode = NULL }, /* 0x01eb */ - { .altcode = NULL }, /* 0x01ec (ecaron) */ - { .altcode = NULL }, /* 0x01ed */ - { .altcode = NULL }, /* 0x01ee */ - { .altcode = NULL }, /* 0x01ef (dcaron) */ - { .altcode = NULL }, /* 0x01f0 (dstroke) */ - { .altcode = NULL }, /* 0x01f1 (nacute) */ - { .altcode = NULL }, /* 0x01f2 (ncaron) */ - { .altcode = NULL }, /* 0x01f3 */ - { .altcode = NULL }, /* 0x01f4 */ - { .altcode = NULL }, /* 0x01f5 (odoubleacute) */ - { .altcode = NULL }, /* 0x01f6 */ - { .altcode = NULL }, /* 0x01f7 */ - { .altcode = NULL }, /* 0x01f8 (rcaron) */ - { .altcode = NULL }, /* 0x01f9 (uring) */ - { .altcode = NULL }, /* 0x01fa */ - { .altcode = NULL }, /* 0x01fb (udoubleacute) */ - { .altcode = NULL }, /* 0x01fc */ - { .altcode = NULL }, /* 0x01fd */ - { .altcode = NULL }, /* 0x01fe (tcedilla) */ - { .altcode = NULL }, /* 0x01ff (abovedot) */ + { .altcode = NULL }, /* 0x0100 */ + { .altcode = NULL }, /* 0x0101 */ + { .altcode = NULL }, /* 0x0102 */ + { .altcode = NULL }, /* 0x0103 */ + { .altcode = NULL }, /* 0x0104 */ + { .altcode = NULL }, /* 0x0105 */ + { .altcode = NULL }, /* 0x0106 */ + { .altcode = NULL }, /* 0x0107 */ + { .altcode = NULL }, /* 0x0108 */ + { .altcode = NULL }, /* 0x0109 */ + { .altcode = NULL }, /* 0x010a */ + { .altcode = NULL }, /* 0x010b */ + { .altcode = NULL }, /* 0x010c */ + { .altcode = NULL }, /* 0x010d */ + { .altcode = NULL }, /* 0x010e */ + { .altcode = NULL }, /* 0x010f */ + { .altcode = NULL }, /* 0x0110 */ + { .altcode = NULL }, /* 0x0111 */ + { .altcode = NULL }, /* 0x0112 */ + { .altcode = NULL }, /* 0x0113 */ + { .altcode = NULL }, /* 0x0114 */ + { .altcode = NULL }, /* 0x0115 */ + { .altcode = NULL }, /* 0x0116 */ + { .altcode = NULL }, /* 0x0117 */ + { .altcode = NULL }, /* 0x0118 */ + { .altcode = NULL }, /* 0x0119 */ + { .altcode = NULL }, /* 0x011a */ + { .altcode = NULL }, /* 0x011b */ + { .altcode = NULL }, /* 0x011c */ + { .altcode = NULL }, /* 0x011d */ + { .altcode = NULL }, /* 0x011e */ + { .altcode = NULL }, /* 0x011f */ + { .altcode = NULL }, /* 0x0120 */ + { .altcode = NULL }, /* 0x0121 */ + { .altcode = NULL }, /* 0x0122 */ + { .altcode = NULL }, /* 0x0123 */ + { .altcode = NULL }, /* 0x0124 */ + { .altcode = NULL }, /* 0x0125 */ + { .altcode = NULL }, /* 0x0126 */ + { .altcode = NULL }, /* 0x0127 */ + { .altcode = NULL }, /* 0x0128 */ + { .altcode = NULL }, /* 0x0129 */ + { .altcode = NULL }, /* 0x012a */ + { .altcode = NULL }, /* 0x012b */ + { .altcode = NULL }, /* 0x012c */ + { .altcode = NULL }, /* 0x012d */ + { .altcode = NULL }, /* 0x012e */ + { .altcode = NULL }, /* 0x012f */ + { .altcode = NULL }, /* 0x0130 */ + { .altcode = NULL }, /* 0x0131 */ + { .altcode = NULL }, /* 0x0132 */ + { .altcode = NULL }, /* 0x0133 */ + { .altcode = NULL }, /* 0x0134 */ + { .altcode = NULL }, /* 0x0135 */ + { .altcode = NULL }, /* 0x0136 */ + { .altcode = NULL }, /* 0x0137 */ + { .altcode = NULL }, /* 0x0138 */ + { .altcode = NULL }, /* 0x0139 */ + { .altcode = NULL }, /* 0x013a */ + { .altcode = NULL }, /* 0x013b */ + { .altcode = NULL }, /* 0x013c */ + { .altcode = NULL }, /* 0x013d */ + { .altcode = NULL }, /* 0x013e */ + { .altcode = NULL }, /* 0x013f */ + { .altcode = NULL }, /* 0x0140 */ + { .altcode = NULL }, /* 0x0141 */ + { .altcode = NULL }, /* 0x0142 */ + { .altcode = NULL }, /* 0x0143 */ + { .altcode = NULL }, /* 0x0144 */ + { .altcode = NULL }, /* 0x0145 */ + { .altcode = NULL }, /* 0x0146 */ + { .altcode = NULL }, /* 0x0147 */ + { .altcode = NULL }, /* 0x0148 */ + { .altcode = NULL }, /* 0x0149 */ + { .altcode = NULL }, /* 0x014a */ + { .altcode = NULL }, /* 0x014b */ + { .altcode = NULL }, /* 0x014c */ + { .altcode = NULL }, /* 0x014d */ + { .altcode = NULL }, /* 0x014e */ + { .altcode = NULL }, /* 0x014f */ + { .altcode = NULL }, /* 0x0150 */ + { .altcode = NULL }, /* 0x0151 */ + { .altcode = NULL }, /* 0x0152 */ + { .altcode = NULL }, /* 0x0153 */ + { .altcode = NULL }, /* 0x0154 */ + { .altcode = NULL }, /* 0x0155 */ + { .altcode = NULL }, /* 0x0156 */ + { .altcode = NULL }, /* 0x0157 */ + { .altcode = NULL }, /* 0x0158 */ + { .altcode = NULL }, /* 0x0159 */ + { .altcode = NULL }, /* 0x015a */ + { .altcode = NULL }, /* 0x015b */ + { .altcode = NULL }, /* 0x015c */ + { .altcode = NULL }, /* 0x015d */ + { .altcode = NULL }, /* 0x015e */ + { .altcode = NULL }, /* 0x015f */ + { .altcode = NULL }, /* 0x0160 */ + { .altcode = NULL }, /* 0x0161 */ + { .altcode = NULL }, /* 0x0162 */ + { .altcode = NULL }, /* 0x0163 */ + { .altcode = NULL }, /* 0x0164 */ + { .altcode = NULL }, /* 0x0165 */ + { .altcode = NULL }, /* 0x0166 */ + { .altcode = NULL }, /* 0x0167 */ + { .altcode = NULL }, /* 0x0168 */ + { .altcode = NULL }, /* 0x0169 */ + { .altcode = NULL }, /* 0x016a */ + { .altcode = NULL }, /* 0x016b */ + { .altcode = NULL }, /* 0x016c */ + { .altcode = NULL }, /* 0x016d */ + { .altcode = NULL }, /* 0x016e */ + { .altcode = NULL }, /* 0x016f */ + { .altcode = NULL }, /* 0x0170 */ + { .altcode = NULL }, /* 0x0171 */ + { .altcode = NULL }, /* 0x0172 */ + { .altcode = NULL }, /* 0x0173 */ + { .altcode = NULL }, /* 0x0174 */ + { .altcode = NULL }, /* 0x0175 */ + { .altcode = NULL }, /* 0x0176 */ + { .altcode = NULL }, /* 0x0177 */ + { .altcode = NULL }, /* 0x0178 */ + { .altcode = NULL }, /* 0x0179 */ + { .altcode = NULL }, /* 0x017a */ + { .altcode = NULL }, /* 0x017b */ + { .altcode = NULL }, /* 0x017c */ + { .altcode = NULL }, /* 0x017d */ + { .altcode = NULL }, /* 0x017e */ + { .altcode = NULL }, /* 0x017f */ + { .altcode = NULL }, /* 0x0180 */ + { .altcode = NULL }, /* 0x0181 */ + { .altcode = NULL }, /* 0x0182 */ + { .altcode = NULL }, /* 0x0183 */ + { .altcode = NULL }, /* 0x0184 */ + { .altcode = NULL }, /* 0x0185 */ + { .altcode = NULL }, /* 0x0186 */ + { .altcode = NULL }, /* 0x0187 */ + { .altcode = NULL }, /* 0x0188 */ + { .altcode = NULL }, /* 0x0189 */ + { .altcode = NULL }, /* 0x018a */ + { .altcode = NULL }, /* 0x018b */ + { .altcode = NULL }, /* 0x018c */ + { .altcode = NULL }, /* 0x018d */ + { .altcode = NULL }, /* 0x018e */ + { .altcode = NULL }, /* 0x018f */ + { .altcode = NULL }, /* 0x0190 */ + { .altcode = NULL }, /* 0x0191 */ + { .altcode = NULL }, /* 0x0192 */ + { .altcode = NULL }, /* 0x0193 */ + { .altcode = NULL }, /* 0x0194 */ + { .altcode = NULL }, /* 0x0195 */ + { .altcode = NULL }, /* 0x0196 */ + { .altcode = NULL }, /* 0x0197 */ + { .altcode = NULL }, /* 0x0198 */ + { .altcode = NULL }, /* 0x0199 */ + { .altcode = NULL }, /* 0x019a */ + { .altcode = NULL }, /* 0x019b */ + { .altcode = NULL }, /* 0x019c */ + { .altcode = NULL }, /* 0x019d */ + { .altcode = NULL }, /* 0x019e */ + { .altcode = NULL }, /* 0x019f */ + { .altcode = NULL }, /* 0x01a0 */ + { .altcode = NULL }, /* 0x01a1 (Aogonek) */ + { .altcode = NULL }, /* 0x01a2 (breve) */ + { .altcode = NULL }, /* 0x01a3 (Lstroke) */ + { .altcode = NULL }, /* 0x01a4 */ + { .altcode = NULL }, /* 0x01a5 (Lcaron) */ + { .altcode = NULL }, /* 0x01a6 (Sacute) */ + { .altcode = NULL }, /* 0x01a7 */ + { .altcode = NULL }, /* 0x01a8 */ + { .altcode = NULL }, /* 0x01a9 (Scaron) */ + { .altcode = NULL }, /* 0x01aa (Scedilla) */ + { .altcode = NULL }, /* 0x01ab (Tcaron) */ + { .altcode = NULL }, /* 0x01ac (Zacute) */ + { .altcode = NULL }, /* 0x01ad */ + { .altcode = NULL }, /* 0x01ae (Zcaron) */ + { .altcode = NULL }, /* 0x01af (Zabovedot) */ + { .altcode = NULL }, /* 0x01b0 */ + { .altcode = NULL }, /* 0x01b1 (aogonek) */ + { .altcode = NULL }, /* 0x01b2 (ogonek) */ + { .altcode = NULL }, /* 0x01b3 (lstroke) */ + { .altcode = NULL }, /* 0x01b4 */ + { .altcode = NULL }, /* 0x01b5 (lcaron) */ + { .altcode = NULL }, /* 0x01b6 (sacute) */ + { .altcode = NULL }, /* 0x01b7 (caron) */ + { .altcode = NULL }, /* 0x01b8 */ + { .altcode = NULL }, /* 0x01b9 (scaron) */ + { .altcode = NULL }, /* 0x01ba (scedilla) */ + { .altcode = NULL }, /* 0x01bb (tcaron) */ + { .altcode = NULL }, /* 0x01bc (zacute) */ + { .altcode = NULL }, /* 0x01bd (doubleacute) */ + { .altcode = NULL }, /* 0x01be (zcaron) */ + { .altcode = NULL }, /* 0x01bf (zabovedot) */ + { .altcode = NULL }, /* 0x01c0 (Racute) */ + { .altcode = NULL }, /* 0x01c1 */ + { .altcode = NULL }, /* 0x01c2 */ + { .altcode = NULL }, /* 0x01c3 (Abreve) */ + { .altcode = NULL }, /* 0x01c4 */ + { .altcode = NULL }, /* 0x01c5 (Lacute) */ + { .altcode = NULL }, /* 0x01c6 (Cacute) */ + { .altcode = NULL }, /* 0x01c7 */ + { .altcode = NULL }, /* 0x01c8 (Ccaron) */ + { .altcode = NULL }, /* 0x01c9 */ + { .altcode = NULL }, /* 0x01ca (Eogonek) */ + { .altcode = NULL }, /* 0x01cb */ + { .altcode = NULL }, /* 0x01cc (Ecaron) */ + { .altcode = NULL }, /* 0x01cd */ + { .altcode = NULL }, /* 0x01ce */ + { .altcode = NULL }, /* 0x01cf (Dcaron) */ + { .altcode = NULL }, /* 0x01d0 (Dstroke) */ + { .altcode = NULL }, /* 0x01d1 (Nacute) */ + { .altcode = NULL }, /* 0x01d2 (Ncaron) */ + { .altcode = NULL }, /* 0x01d3 */ + { .altcode = NULL }, /* 0x01d4 */ + { .altcode = NULL }, /* 0x01d5 (Odoubleacute) */ + { .altcode = NULL }, /* 0x01d6 */ + { .altcode = NULL }, /* 0x01d7 */ + { .altcode = NULL }, /* 0x01d8 (Rcaron) */ + { .altcode = NULL }, /* 0x01d9 (Uring) */ + { .altcode = NULL }, /* 0x01da */ + { .altcode = NULL }, /* 0x01db (Udoubleacute) */ + { .altcode = NULL }, /* 0x01dc */ + { .altcode = NULL }, /* 0x01dd */ + { .altcode = NULL }, /* 0x01de (Tcedilla) */ + { .altcode = NULL }, /* 0x01df */ + { .altcode = NULL }, /* 0x01e0 (racute) */ + { .altcode = NULL }, /* 0x01e1 */ + { .altcode = NULL }, /* 0x01e2 */ + { .altcode = NULL }, /* 0x01e3 (abreve) */ + { .altcode = NULL }, /* 0x01e4 */ + { .altcode = NULL }, /* 0x01e5 (lacute) */ + { .altcode = NULL }, /* 0x01e6 (cacute) */ + { .altcode = NULL }, /* 0x01e7 */ + { .altcode = NULL }, /* 0x01e8 (ccaron) */ + { .altcode = NULL }, /* 0x01e9 */ + { .altcode = NULL }, /* 0x01ea (eogonek) */ + { .altcode = NULL }, /* 0x01eb */ + { .altcode = NULL }, /* 0x01ec (ecaron) */ + { .altcode = NULL }, /* 0x01ed */ + { .altcode = NULL }, /* 0x01ee */ + { .altcode = NULL }, /* 0x01ef (dcaron) */ + { .altcode = NULL }, /* 0x01f0 (dstroke) */ + { .altcode = NULL }, /* 0x01f1 (nacute) */ + { .altcode = NULL }, /* 0x01f2 (ncaron) */ + { .altcode = NULL }, /* 0x01f3 */ + { .altcode = NULL }, /* 0x01f4 */ + { .altcode = NULL }, /* 0x01f5 (odoubleacute) */ + { .altcode = NULL }, /* 0x01f6 */ + { .altcode = NULL }, /* 0x01f7 */ + { .altcode = NULL }, /* 0x01f8 (rcaron) */ + { .altcode = NULL }, /* 0x01f9 (uring) */ + { .altcode = NULL }, /* 0x01fa */ + { .altcode = NULL }, /* 0x01fb (udoubleacute) */ + { .altcode = NULL }, /* 0x01fc */ + { .altcode = NULL }, /* 0x01fd */ + { .altcode = NULL }, /* 0x01fe (tcedilla) */ + { .altcode = NULL }, /* 0x01ff (abovedot) */ }, { /* 0x02?? */ - { .altcode = NULL }, /* 0x0200 */ - { .altcode = NULL }, /* 0x0201 */ - { .altcode = NULL }, /* 0x0202 */ - { .altcode = NULL }, /* 0x0203 */ - { .altcode = NULL }, /* 0x0204 */ - { .altcode = NULL }, /* 0x0205 */ - { .altcode = NULL }, /* 0x0206 */ - { .altcode = NULL }, /* 0x0207 */ - { .altcode = NULL }, /* 0x0208 */ - { .altcode = NULL }, /* 0x0209 */ - { .altcode = NULL }, /* 0x020a */ - { .altcode = NULL }, /* 0x020b */ - { .altcode = NULL }, /* 0x020c */ - { .altcode = NULL }, /* 0x020d */ - { .altcode = NULL }, /* 0x020e */ - { .altcode = NULL }, /* 0x020f */ - { .altcode = NULL }, /* 0x0210 */ - { .altcode = NULL }, /* 0x0211 */ - { .altcode = NULL }, /* 0x0212 */ - { .altcode = NULL }, /* 0x0213 */ - { .altcode = NULL }, /* 0x0214 */ - { .altcode = NULL }, /* 0x0215 */ - { .altcode = NULL }, /* 0x0216 */ - { .altcode = NULL }, /* 0x0217 */ - { .altcode = NULL }, /* 0x0218 */ - { .altcode = NULL }, /* 0x0219 */ - { .altcode = NULL }, /* 0x021a */ - { .altcode = NULL }, /* 0x021b */ - { .altcode = NULL }, /* 0x021c */ - { .altcode = NULL }, /* 0x021d */ - { .altcode = NULL }, /* 0x021e */ - { .altcode = NULL }, /* 0x021f */ - { .altcode = NULL }, /* 0x0220 */ - { .altcode = NULL }, /* 0x0221 */ - { .altcode = NULL }, /* 0x0222 */ - { .altcode = NULL }, /* 0x0223 */ - { .altcode = NULL }, /* 0x0224 */ - { .altcode = NULL }, /* 0x0225 */ - { .altcode = NULL }, /* 0x0226 */ - { .altcode = NULL }, /* 0x0227 */ - { .altcode = NULL }, /* 0x0228 */ - { .altcode = NULL }, /* 0x0229 */ - { .altcode = NULL }, /* 0x022a */ - { .altcode = NULL }, /* 0x022b */ - { .altcode = NULL }, /* 0x022c */ - { .altcode = NULL }, /* 0x022d */ - { .altcode = NULL }, /* 0x022e */ - { .altcode = NULL }, /* 0x022f */ - { .altcode = NULL }, /* 0x0230 */ - { .altcode = NULL }, /* 0x0231 */ - { .altcode = NULL }, /* 0x0232 */ - { .altcode = NULL }, /* 0x0233 */ - { .altcode = NULL }, /* 0x0234 */ - { .altcode = NULL }, /* 0x0235 */ - { .altcode = NULL }, /* 0x0236 */ - { .altcode = NULL }, /* 0x0237 */ - { .altcode = NULL }, /* 0x0238 */ - { .altcode = NULL }, /* 0x0239 */ - { .altcode = NULL }, /* 0x023a */ - { .altcode = NULL }, /* 0x023b */ - { .altcode = NULL }, /* 0x023c */ - { .altcode = NULL }, /* 0x023d */ - { .altcode = NULL }, /* 0x023e */ - { .altcode = NULL }, /* 0x023f */ - { .altcode = NULL }, /* 0x0240 */ - { .altcode = NULL }, /* 0x0241 */ - { .altcode = NULL }, /* 0x0242 */ - { .altcode = NULL }, /* 0x0243 */ - { .altcode = NULL }, /* 0x0244 */ - { .altcode = NULL }, /* 0x0245 */ - { .altcode = NULL }, /* 0x0246 */ - { .altcode = NULL }, /* 0x0247 */ - { .altcode = NULL }, /* 0x0248 */ - { .altcode = NULL }, /* 0x0249 */ - { .altcode = NULL }, /* 0x024a */ - { .altcode = NULL }, /* 0x024b */ - { .altcode = NULL }, /* 0x024c */ - { .altcode = NULL }, /* 0x024d */ - { .altcode = NULL }, /* 0x024e */ - { .altcode = NULL }, /* 0x024f */ - { .altcode = NULL }, /* 0x0250 */ - { .altcode = NULL }, /* 0x0251 */ - { .altcode = NULL }, /* 0x0252 */ - { .altcode = NULL }, /* 0x0253 */ - { .altcode = NULL }, /* 0x0254 */ - { .altcode = NULL }, /* 0x0255 */ - { .altcode = NULL }, /* 0x0256 */ - { .altcode = NULL }, /* 0x0257 */ - { .altcode = NULL }, /* 0x0258 */ - { .altcode = NULL }, /* 0x0259 */ - { .altcode = NULL }, /* 0x025a */ - { .altcode = NULL }, /* 0x025b */ - { .altcode = NULL }, /* 0x025c */ - { .altcode = NULL }, /* 0x025d */ - { .altcode = NULL }, /* 0x025e */ - { .altcode = NULL }, /* 0x025f */ - { .altcode = NULL }, /* 0x0260 */ - { .altcode = NULL }, /* 0x0261 */ - { .altcode = NULL }, /* 0x0262 */ - { .altcode = NULL }, /* 0x0263 */ - { .altcode = NULL }, /* 0x0264 */ - { .altcode = NULL }, /* 0x0265 */ - { .altcode = NULL }, /* 0x0266 */ - { .altcode = NULL }, /* 0x0267 */ - { .altcode = NULL }, /* 0x0268 */ - { .altcode = NULL }, /* 0x0269 */ - { .altcode = NULL }, /* 0x026a */ - { .altcode = NULL }, /* 0x026b */ - { .altcode = NULL }, /* 0x026c */ - { .altcode = NULL }, /* 0x026d */ - { .altcode = NULL }, /* 0x026e */ - { .altcode = NULL }, /* 0x026f */ - { .altcode = NULL }, /* 0x0270 */ - { .altcode = NULL }, /* 0x0271 */ - { .altcode = NULL }, /* 0x0272 */ - { .altcode = NULL }, /* 0x0273 */ - { .altcode = NULL }, /* 0x0274 */ - { .altcode = NULL }, /* 0x0275 */ - { .altcode = NULL }, /* 0x0276 */ - { .altcode = NULL }, /* 0x0277 */ - { .altcode = NULL }, /* 0x0278 */ - { .altcode = NULL }, /* 0x0279 */ - { .altcode = NULL }, /* 0x027a */ - { .altcode = NULL }, /* 0x027b */ - { .altcode = NULL }, /* 0x027c */ - { .altcode = NULL }, /* 0x027d */ - { .altcode = NULL }, /* 0x027e */ - { .altcode = NULL }, /* 0x027f */ - { .altcode = NULL }, /* 0x0280 */ - { .altcode = NULL }, /* 0x0281 */ - { .altcode = NULL }, /* 0x0282 */ - { .altcode = NULL }, /* 0x0283 */ - { .altcode = NULL }, /* 0x0284 */ - { .altcode = NULL }, /* 0x0285 */ - { .altcode = NULL }, /* 0x0286 */ - { .altcode = NULL }, /* 0x0287 */ - { .altcode = NULL }, /* 0x0288 */ - { .altcode = NULL }, /* 0x0289 */ - { .altcode = NULL }, /* 0x028a */ - { .altcode = NULL }, /* 0x028b */ - { .altcode = NULL }, /* 0x028c */ - { .altcode = NULL }, /* 0x028d */ - { .altcode = NULL }, /* 0x028e */ - { .altcode = NULL }, /* 0x028f */ - { .altcode = NULL }, /* 0x0290 */ - { .altcode = NULL }, /* 0x0291 */ - { .altcode = NULL }, /* 0x0292 */ - { .altcode = NULL }, /* 0x0293 */ - { .altcode = NULL }, /* 0x0294 */ - { .altcode = NULL }, /* 0x0295 */ - { .altcode = NULL }, /* 0x0296 */ - { .altcode = NULL }, /* 0x0297 */ - { .altcode = NULL }, /* 0x0298 */ - { .altcode = NULL }, /* 0x0299 */ - { .altcode = NULL }, /* 0x029a */ - { .altcode = NULL }, /* 0x029b */ - { .altcode = NULL }, /* 0x029c */ - { .altcode = NULL }, /* 0x029d */ - { .altcode = NULL }, /* 0x029e */ - { .altcode = NULL }, /* 0x029f */ - { .altcode = NULL }, /* 0x02a0 */ - { .altcode = NULL }, /* 0x02a1 (Hstroke) */ - { .altcode = NULL }, /* 0x02a2 */ - { .altcode = NULL }, /* 0x02a3 */ - { .altcode = NULL }, /* 0x02a4 */ - { .altcode = NULL }, /* 0x02a5 */ - { .altcode = NULL }, /* 0x02a6 (Hcircumflex) */ - { .altcode = NULL }, /* 0x02a7 */ - { .altcode = NULL }, /* 0x02a8 */ - { .altcode = NULL }, /* 0x02a9 (Iabovedot) */ - { .altcode = NULL }, /* 0x02aa */ - { .altcode = NULL }, /* 0x02ab (Gbreve) */ - { .altcode = NULL }, /* 0x02ac (Jcircumflex) */ - { .altcode = NULL }, /* 0x02ad */ - { .altcode = NULL }, /* 0x02ae */ - { .altcode = NULL }, /* 0x02af */ - { .altcode = NULL }, /* 0x02b0 */ - { .altcode = NULL }, /* 0x02b1 (hstroke) */ - { .altcode = NULL }, /* 0x02b2 */ - { .altcode = NULL }, /* 0x02b3 */ - { .altcode = NULL }, /* 0x02b4 */ - { .altcode = NULL }, /* 0x02b5 */ - { .altcode = NULL }, /* 0x02b6 (hcircumflex) */ - { .altcode = NULL }, /* 0x02b7 */ - { .altcode = NULL }, /* 0x02b8 */ - { .altcode = NULL }, /* 0x02b9 (idotless) */ - { .altcode = NULL }, /* 0x02ba */ - { .altcode = NULL }, /* 0x02bb (gbreve) */ - { .altcode = NULL }, /* 0x02bc (jcircumflex) */ - { .altcode = NULL }, /* 0x02bd */ - { .altcode = NULL }, /* 0x02be */ - { .altcode = NULL }, /* 0x02bf */ - { .altcode = NULL }, /* 0x02c0 */ - { .altcode = NULL }, /* 0x02c1 */ - { .altcode = NULL }, /* 0x02c2 */ - { .altcode = NULL }, /* 0x02c3 */ - { .altcode = NULL }, /* 0x02c4 */ - { .altcode = NULL }, /* 0x02c5 (Cabovedot) */ - { .altcode = NULL }, /* 0x02c6 (Ccircumflex) */ - { .altcode = NULL }, /* 0x02c7 */ - { .altcode = NULL }, /* 0x02c8 */ - { .altcode = NULL }, /* 0x02c9 */ - { .altcode = NULL }, /* 0x02ca */ - { .altcode = NULL }, /* 0x02cb */ - { .altcode = NULL }, /* 0x02cc */ - { .altcode = NULL }, /* 0x02cd */ - { .altcode = NULL }, /* 0x02ce */ - { .altcode = NULL }, /* 0x02cf */ - { .altcode = NULL }, /* 0x02d0 */ - { .altcode = NULL }, /* 0x02d1 */ - { .altcode = NULL }, /* 0x02d2 */ - { .altcode = NULL }, /* 0x02d3 */ - { .altcode = NULL }, /* 0x02d4 */ - { .altcode = NULL }, /* 0x02d5 (Gabovedot) */ - { .altcode = NULL }, /* 0x02d6 */ - { .altcode = NULL }, /* 0x02d7 */ - { .altcode = NULL }, /* 0x02d8 (Gcircumflex) */ - { .altcode = NULL }, /* 0x02d9 */ - { .altcode = NULL }, /* 0x02da */ - { .altcode = NULL }, /* 0x02db */ - { .altcode = NULL }, /* 0x02dc */ - { .altcode = NULL }, /* 0x02dd (Ubreve) */ - { .altcode = NULL }, /* 0x02de (Scircumflex) */ - { .altcode = NULL }, /* 0x02df */ - { .altcode = NULL }, /* 0x02e0 */ - { .altcode = NULL }, /* 0x02e1 */ - { .altcode = NULL }, /* 0x02e2 */ - { .altcode = NULL }, /* 0x02e3 */ - { .altcode = NULL }, /* 0x02e4 */ - { .altcode = NULL }, /* 0x02e5 (cabovedot) */ - { .altcode = NULL }, /* 0x02e6 (ccircumflex) */ - { .altcode = NULL }, /* 0x02e7 */ - { .altcode = NULL }, /* 0x02e8 */ - { .altcode = NULL }, /* 0x02e9 */ - { .altcode = NULL }, /* 0x02ea */ - { .altcode = NULL }, /* 0x02eb */ - { .altcode = NULL }, /* 0x02ec */ - { .altcode = NULL }, /* 0x02ed */ - { .altcode = NULL }, /* 0x02ee */ - { .altcode = NULL }, /* 0x02ef */ - { .altcode = NULL }, /* 0x02f0 */ - { .altcode = NULL }, /* 0x02f1 */ - { .altcode = NULL }, /* 0x02f2 */ - { .altcode = NULL }, /* 0x02f3 */ - { .altcode = NULL }, /* 0x02f4 */ - { .altcode = NULL }, /* 0x02f5 (gabovedot) */ - { .altcode = NULL }, /* 0x02f6 */ - { .altcode = NULL }, /* 0x02f7 */ - { .altcode = NULL }, /* 0x02f8 (gcircumflex) */ - { .altcode = NULL }, /* 0x02f9 */ - { .altcode = NULL }, /* 0x02fa */ - { .altcode = NULL }, /* 0x02fb */ - { .altcode = NULL }, /* 0x02fc */ - { .altcode = NULL }, /* 0x02fd (ubreve) */ - { .altcode = NULL }, /* 0x02fe (scircumflex) */ - { .altcode = NULL }, /* 0x02ff */ + { .altcode = NULL }, /* 0x0200 */ + { .altcode = NULL }, /* 0x0201 */ + { .altcode = NULL }, /* 0x0202 */ + { .altcode = NULL }, /* 0x0203 */ + { .altcode = NULL }, /* 0x0204 */ + { .altcode = NULL }, /* 0x0205 */ + { .altcode = NULL }, /* 0x0206 */ + { .altcode = NULL }, /* 0x0207 */ + { .altcode = NULL }, /* 0x0208 */ + { .altcode = NULL }, /* 0x0209 */ + { .altcode = NULL }, /* 0x020a */ + { .altcode = NULL }, /* 0x020b */ + { .altcode = NULL }, /* 0x020c */ + { .altcode = NULL }, /* 0x020d */ + { .altcode = NULL }, /* 0x020e */ + { .altcode = NULL }, /* 0x020f */ + { .altcode = NULL }, /* 0x0210 */ + { .altcode = NULL }, /* 0x0211 */ + { .altcode = NULL }, /* 0x0212 */ + { .altcode = NULL }, /* 0x0213 */ + { .altcode = NULL }, /* 0x0214 */ + { .altcode = NULL }, /* 0x0215 */ + { .altcode = NULL }, /* 0x0216 */ + { .altcode = NULL }, /* 0x0217 */ + { .altcode = NULL }, /* 0x0218 */ + { .altcode = NULL }, /* 0x0219 */ + { .altcode = NULL }, /* 0x021a */ + { .altcode = NULL }, /* 0x021b */ + { .altcode = NULL }, /* 0x021c */ + { .altcode = NULL }, /* 0x021d */ + { .altcode = NULL }, /* 0x021e */ + { .altcode = NULL }, /* 0x021f */ + { .altcode = NULL }, /* 0x0220 */ + { .altcode = NULL }, /* 0x0221 */ + { .altcode = NULL }, /* 0x0222 */ + { .altcode = NULL }, /* 0x0223 */ + { .altcode = NULL }, /* 0x0224 */ + { .altcode = NULL }, /* 0x0225 */ + { .altcode = NULL }, /* 0x0226 */ + { .altcode = NULL }, /* 0x0227 */ + { .altcode = NULL }, /* 0x0228 */ + { .altcode = NULL }, /* 0x0229 */ + { .altcode = NULL }, /* 0x022a */ + { .altcode = NULL }, /* 0x022b */ + { .altcode = NULL }, /* 0x022c */ + { .altcode = NULL }, /* 0x022d */ + { .altcode = NULL }, /* 0x022e */ + { .altcode = NULL }, /* 0x022f */ + { .altcode = NULL }, /* 0x0230 */ + { .altcode = NULL }, /* 0x0231 */ + { .altcode = NULL }, /* 0x0232 */ + { .altcode = NULL }, /* 0x0233 */ + { .altcode = NULL }, /* 0x0234 */ + { .altcode = NULL }, /* 0x0235 */ + { .altcode = NULL }, /* 0x0236 */ + { .altcode = NULL }, /* 0x0237 */ + { .altcode = NULL }, /* 0x0238 */ + { .altcode = NULL }, /* 0x0239 */ + { .altcode = NULL }, /* 0x023a */ + { .altcode = NULL }, /* 0x023b */ + { .altcode = NULL }, /* 0x023c */ + { .altcode = NULL }, /* 0x023d */ + { .altcode = NULL }, /* 0x023e */ + { .altcode = NULL }, /* 0x023f */ + { .altcode = NULL }, /* 0x0240 */ + { .altcode = NULL }, /* 0x0241 */ + { .altcode = NULL }, /* 0x0242 */ + { .altcode = NULL }, /* 0x0243 */ + { .altcode = NULL }, /* 0x0244 */ + { .altcode = NULL }, /* 0x0245 */ + { .altcode = NULL }, /* 0x0246 */ + { .altcode = NULL }, /* 0x0247 */ + { .altcode = NULL }, /* 0x0248 */ + { .altcode = NULL }, /* 0x0249 */ + { .altcode = NULL }, /* 0x024a */ + { .altcode = NULL }, /* 0x024b */ + { .altcode = NULL }, /* 0x024c */ + { .altcode = NULL }, /* 0x024d */ + { .altcode = NULL }, /* 0x024e */ + { .altcode = NULL }, /* 0x024f */ + { .altcode = NULL }, /* 0x0250 */ + { .altcode = NULL }, /* 0x0251 */ + { .altcode = NULL }, /* 0x0252 */ + { .altcode = NULL }, /* 0x0253 */ + { .altcode = NULL }, /* 0x0254 */ + { .altcode = NULL }, /* 0x0255 */ + { .altcode = NULL }, /* 0x0256 */ + { .altcode = NULL }, /* 0x0257 */ + { .altcode = NULL }, /* 0x0258 */ + { .altcode = NULL }, /* 0x0259 */ + { .altcode = NULL }, /* 0x025a */ + { .altcode = NULL }, /* 0x025b */ + { .altcode = NULL }, /* 0x025c */ + { .altcode = NULL }, /* 0x025d */ + { .altcode = NULL }, /* 0x025e */ + { .altcode = NULL }, /* 0x025f */ + { .altcode = NULL }, /* 0x0260 */ + { .altcode = NULL }, /* 0x0261 */ + { .altcode = NULL }, /* 0x0262 */ + { .altcode = NULL }, /* 0x0263 */ + { .altcode = NULL }, /* 0x0264 */ + { .altcode = NULL }, /* 0x0265 */ + { .altcode = NULL }, /* 0x0266 */ + { .altcode = NULL }, /* 0x0267 */ + { .altcode = NULL }, /* 0x0268 */ + { .altcode = NULL }, /* 0x0269 */ + { .altcode = NULL }, /* 0x026a */ + { .altcode = NULL }, /* 0x026b */ + { .altcode = NULL }, /* 0x026c */ + { .altcode = NULL }, /* 0x026d */ + { .altcode = NULL }, /* 0x026e */ + { .altcode = NULL }, /* 0x026f */ + { .altcode = NULL }, /* 0x0270 */ + { .altcode = NULL }, /* 0x0271 */ + { .altcode = NULL }, /* 0x0272 */ + { .altcode = NULL }, /* 0x0273 */ + { .altcode = NULL }, /* 0x0274 */ + { .altcode = NULL }, /* 0x0275 */ + { .altcode = NULL }, /* 0x0276 */ + { .altcode = NULL }, /* 0x0277 */ + { .altcode = NULL }, /* 0x0278 */ + { .altcode = NULL }, /* 0x0279 */ + { .altcode = NULL }, /* 0x027a */ + { .altcode = NULL }, /* 0x027b */ + { .altcode = NULL }, /* 0x027c */ + { .altcode = NULL }, /* 0x027d */ + { .altcode = NULL }, /* 0x027e */ + { .altcode = NULL }, /* 0x027f */ + { .altcode = NULL }, /* 0x0280 */ + { .altcode = NULL }, /* 0x0281 */ + { .altcode = NULL }, /* 0x0282 */ + { .altcode = NULL }, /* 0x0283 */ + { .altcode = NULL }, /* 0x0284 */ + { .altcode = NULL }, /* 0x0285 */ + { .altcode = NULL }, /* 0x0286 */ + { .altcode = NULL }, /* 0x0287 */ + { .altcode = NULL }, /* 0x0288 */ + { .altcode = NULL }, /* 0x0289 */ + { .altcode = NULL }, /* 0x028a */ + { .altcode = NULL }, /* 0x028b */ + { .altcode = NULL }, /* 0x028c */ + { .altcode = NULL }, /* 0x028d */ + { .altcode = NULL }, /* 0x028e */ + { .altcode = NULL }, /* 0x028f */ + { .altcode = NULL }, /* 0x0290 */ + { .altcode = NULL }, /* 0x0291 */ + { .altcode = NULL }, /* 0x0292 */ + { .altcode = NULL }, /* 0x0293 */ + { .altcode = NULL }, /* 0x0294 */ + { .altcode = NULL }, /* 0x0295 */ + { .altcode = NULL }, /* 0x0296 */ + { .altcode = NULL }, /* 0x0297 */ + { .altcode = NULL }, /* 0x0298 */ + { .altcode = NULL }, /* 0x0299 */ + { .altcode = NULL }, /* 0x029a */ + { .altcode = NULL }, /* 0x029b */ + { .altcode = NULL }, /* 0x029c */ + { .altcode = NULL }, /* 0x029d */ + { .altcode = NULL }, /* 0x029e */ + { .altcode = NULL }, /* 0x029f */ + { .altcode = NULL }, /* 0x02a0 */ + { .altcode = NULL }, /* 0x02a1 (Hstroke) */ + { .altcode = NULL }, /* 0x02a2 */ + { .altcode = NULL }, /* 0x02a3 */ + { .altcode = NULL }, /* 0x02a4 */ + { .altcode = NULL }, /* 0x02a5 */ + { .altcode = NULL }, /* 0x02a6 (Hcircumflex) */ + { .altcode = NULL }, /* 0x02a7 */ + { .altcode = NULL }, /* 0x02a8 */ + { .altcode = NULL }, /* 0x02a9 (Iabovedot) */ + { .altcode = NULL }, /* 0x02aa */ + { .altcode = NULL }, /* 0x02ab (Gbreve) */ + { .altcode = NULL }, /* 0x02ac (Jcircumflex) */ + { .altcode = NULL }, /* 0x02ad */ + { .altcode = NULL }, /* 0x02ae */ + { .altcode = NULL }, /* 0x02af */ + { .altcode = NULL }, /* 0x02b0 */ + { .altcode = NULL }, /* 0x02b1 (hstroke) */ + { .altcode = NULL }, /* 0x02b2 */ + { .altcode = NULL }, /* 0x02b3 */ + { .altcode = NULL }, /* 0x02b4 */ + { .altcode = NULL }, /* 0x02b5 */ + { .altcode = NULL }, /* 0x02b6 (hcircumflex) */ + { .altcode = NULL }, /* 0x02b7 */ + { .altcode = NULL }, /* 0x02b8 */ + { .altcode = NULL }, /* 0x02b9 (idotless) */ + { .altcode = NULL }, /* 0x02ba */ + { .altcode = NULL }, /* 0x02bb (gbreve) */ + { .altcode = NULL }, /* 0x02bc (jcircumflex) */ + { .altcode = NULL }, /* 0x02bd */ + { .altcode = NULL }, /* 0x02be */ + { .altcode = NULL }, /* 0x02bf */ + { .altcode = NULL }, /* 0x02c0 */ + { .altcode = NULL }, /* 0x02c1 */ + { .altcode = NULL }, /* 0x02c2 */ + { .altcode = NULL }, /* 0x02c3 */ + { .altcode = NULL }, /* 0x02c4 */ + { .altcode = NULL }, /* 0x02c5 (Cabovedot) */ + { .altcode = NULL }, /* 0x02c6 (Ccircumflex) */ + { .altcode = NULL }, /* 0x02c7 */ + { .altcode = NULL }, /* 0x02c8 */ + { .altcode = NULL }, /* 0x02c9 */ + { .altcode = NULL }, /* 0x02ca */ + { .altcode = NULL }, /* 0x02cb */ + { .altcode = NULL }, /* 0x02cc */ + { .altcode = NULL }, /* 0x02cd */ + { .altcode = NULL }, /* 0x02ce */ + { .altcode = NULL }, /* 0x02cf */ + { .altcode = NULL }, /* 0x02d0 */ + { .altcode = NULL }, /* 0x02d1 */ + { .altcode = NULL }, /* 0x02d2 */ + { .altcode = NULL }, /* 0x02d3 */ + { .altcode = NULL }, /* 0x02d4 */ + { .altcode = NULL }, /* 0x02d5 (Gabovedot) */ + { .altcode = NULL }, /* 0x02d6 */ + { .altcode = NULL }, /* 0x02d7 */ + { .altcode = NULL }, /* 0x02d8 (Gcircumflex) */ + { .altcode = NULL }, /* 0x02d9 */ + { .altcode = NULL }, /* 0x02da */ + { .altcode = NULL }, /* 0x02db */ + { .altcode = NULL }, /* 0x02dc */ + { .altcode = NULL }, /* 0x02dd (Ubreve) */ + { .altcode = NULL }, /* 0x02de (Scircumflex) */ + { .altcode = NULL }, /* 0x02df */ + { .altcode = NULL }, /* 0x02e0 */ + { .altcode = NULL }, /* 0x02e1 */ + { .altcode = NULL }, /* 0x02e2 */ + { .altcode = NULL }, /* 0x02e3 */ + { .altcode = NULL }, /* 0x02e4 */ + { .altcode = NULL }, /* 0x02e5 (cabovedot) */ + { .altcode = NULL }, /* 0x02e6 (ccircumflex) */ + { .altcode = NULL }, /* 0x02e7 */ + { .altcode = NULL }, /* 0x02e8 */ + { .altcode = NULL }, /* 0x02e9 */ + { .altcode = NULL }, /* 0x02ea */ + { .altcode = NULL }, /* 0x02eb */ + { .altcode = NULL }, /* 0x02ec */ + { .altcode = NULL }, /* 0x02ed */ + { .altcode = NULL }, /* 0x02ee */ + { .altcode = NULL }, /* 0x02ef */ + { .altcode = NULL }, /* 0x02f0 */ + { .altcode = NULL }, /* 0x02f1 */ + { .altcode = NULL }, /* 0x02f2 */ + { .altcode = NULL }, /* 0x02f3 */ + { .altcode = NULL }, /* 0x02f4 */ + { .altcode = NULL }, /* 0x02f5 (gabovedot) */ + { .altcode = NULL }, /* 0x02f6 */ + { .altcode = NULL }, /* 0x02f7 */ + { .altcode = NULL }, /* 0x02f8 (gcircumflex) */ + { .altcode = NULL }, /* 0x02f9 */ + { .altcode = NULL }, /* 0x02fa */ + { .altcode = NULL }, /* 0x02fb */ + { .altcode = NULL }, /* 0x02fc */ + { .altcode = NULL }, /* 0x02fd (ubreve) */ + { .altcode = NULL }, /* 0x02fe (scircumflex) */ + { .altcode = NULL }, /* 0x02ff */ }, { /* 0x03?? */ - { .altcode = NULL }, /* 0x0300 */ - { .altcode = NULL }, /* 0x0301 */ - { .altcode = NULL }, /* 0x0302 */ - { .altcode = NULL }, /* 0x0303 */ - { .altcode = NULL }, /* 0x0304 */ - { .altcode = NULL }, /* 0x0305 */ - { .altcode = NULL }, /* 0x0306 */ - { .altcode = NULL }, /* 0x0307 */ - { .altcode = NULL }, /* 0x0308 */ - { .altcode = NULL }, /* 0x0309 */ - { .altcode = NULL }, /* 0x030a */ - { .altcode = NULL }, /* 0x030b */ - { .altcode = NULL }, /* 0x030c */ - { .altcode = NULL }, /* 0x030d */ - { .altcode = NULL }, /* 0x030e */ - { .altcode = NULL }, /* 0x030f */ - { .altcode = NULL }, /* 0x0310 */ - { .altcode = NULL }, /* 0x0311 */ - { .altcode = NULL }, /* 0x0312 */ - { .altcode = NULL }, /* 0x0313 */ - { .altcode = NULL }, /* 0x0314 */ - { .altcode = NULL }, /* 0x0315 */ - { .altcode = NULL }, /* 0x0316 */ - { .altcode = NULL }, /* 0x0317 */ - { .altcode = NULL }, /* 0x0318 */ - { .altcode = NULL }, /* 0x0319 */ - { .altcode = NULL }, /* 0x031a */ - { .altcode = NULL }, /* 0x031b */ - { .altcode = NULL }, /* 0x031c */ - { .altcode = NULL }, /* 0x031d */ - { .altcode = NULL }, /* 0x031e */ - { .altcode = NULL }, /* 0x031f */ - { .altcode = NULL }, /* 0x0320 */ - { .altcode = NULL }, /* 0x0321 */ - { .altcode = NULL }, /* 0x0322 */ - { .altcode = NULL }, /* 0x0323 */ - { .altcode = NULL }, /* 0x0324 */ - { .altcode = NULL }, /* 0x0325 */ - { .altcode = NULL }, /* 0x0326 */ - { .altcode = NULL }, /* 0x0327 */ - { .altcode = NULL }, /* 0x0328 */ - { .altcode = NULL }, /* 0x0329 */ - { .altcode = NULL }, /* 0x032a */ - { .altcode = NULL }, /* 0x032b */ - { .altcode = NULL }, /* 0x032c */ - { .altcode = NULL }, /* 0x032d */ - { .altcode = NULL }, /* 0x032e */ - { .altcode = NULL }, /* 0x032f */ - { .altcode = NULL }, /* 0x0330 */ - { .altcode = NULL }, /* 0x0331 */ - { .altcode = NULL }, /* 0x0332 */ - { .altcode = NULL }, /* 0x0333 */ - { .altcode = NULL }, /* 0x0334 */ - { .altcode = NULL }, /* 0x0335 */ - { .altcode = NULL }, /* 0x0336 */ - { .altcode = NULL }, /* 0x0337 */ - { .altcode = NULL }, /* 0x0338 */ - { .altcode = NULL }, /* 0x0339 */ - { .altcode = NULL }, /* 0x033a */ - { .altcode = NULL }, /* 0x033b */ - { .altcode = NULL }, /* 0x033c */ - { .altcode = NULL }, /* 0x033d */ - { .altcode = NULL }, /* 0x033e */ - { .altcode = NULL }, /* 0x033f */ - { .altcode = NULL }, /* 0x0340 */ - { .altcode = NULL }, /* 0x0341 */ - { .altcode = NULL }, /* 0x0342 */ - { .altcode = NULL }, /* 0x0343 */ - { .altcode = NULL }, /* 0x0344 */ - { .altcode = NULL }, /* 0x0345 */ - { .altcode = NULL }, /* 0x0346 */ - { .altcode = NULL }, /* 0x0347 */ - { .altcode = NULL }, /* 0x0348 */ - { .altcode = NULL }, /* 0x0349 */ - { .altcode = NULL }, /* 0x034a */ - { .altcode = NULL }, /* 0x034b */ - { .altcode = NULL }, /* 0x034c */ - { .altcode = NULL }, /* 0x034d */ - { .altcode = NULL }, /* 0x034e */ - { .altcode = NULL }, /* 0x034f */ - { .altcode = NULL }, /* 0x0350 */ - { .altcode = NULL }, /* 0x0351 */ - { .altcode = NULL }, /* 0x0352 */ - { .altcode = NULL }, /* 0x0353 */ - { .altcode = NULL }, /* 0x0354 */ - { .altcode = NULL }, /* 0x0355 */ - { .altcode = NULL }, /* 0x0356 */ - { .altcode = NULL }, /* 0x0357 */ - { .altcode = NULL }, /* 0x0358 */ - { .altcode = NULL }, /* 0x0359 */ - { .altcode = NULL }, /* 0x035a */ - { .altcode = NULL }, /* 0x035b */ - { .altcode = NULL }, /* 0x035c */ - { .altcode = NULL }, /* 0x035d */ - { .altcode = NULL }, /* 0x035e */ - { .altcode = NULL }, /* 0x035f */ - { .altcode = NULL }, /* 0x0360 */ - { .altcode = NULL }, /* 0x0361 */ - { .altcode = NULL }, /* 0x0362 */ - { .altcode = NULL }, /* 0x0363 */ - { .altcode = NULL }, /* 0x0364 */ - { .altcode = NULL }, /* 0x0365 */ - { .altcode = NULL }, /* 0x0366 */ - { .altcode = NULL }, /* 0x0367 */ - { .altcode = NULL }, /* 0x0368 */ - { .altcode = NULL }, /* 0x0369 */ - { .altcode = NULL }, /* 0x036a */ - { .altcode = NULL }, /* 0x036b */ - { .altcode = NULL }, /* 0x036c */ - { .altcode = NULL }, /* 0x036d */ - { .altcode = NULL }, /* 0x036e */ - { .altcode = NULL }, /* 0x036f */ - { .altcode = NULL }, /* 0x0370 */ - { .altcode = NULL }, /* 0x0371 */ - { .altcode = NULL }, /* 0x0372 */ - { .altcode = NULL }, /* 0x0373 */ - { .altcode = NULL }, /* 0x0374 */ - { .altcode = NULL }, /* 0x0375 */ - { .altcode = NULL }, /* 0x0376 */ - { .altcode = NULL }, /* 0x0377 */ - { .altcode = NULL }, /* 0x0378 */ - { .altcode = NULL }, /* 0x0379 */ - { .altcode = NULL }, /* 0x037a */ - { .altcode = NULL }, /* 0x037b */ - { .altcode = NULL }, /* 0x037c */ - { .altcode = NULL }, /* 0x037d */ - { .altcode = NULL }, /* 0x037e */ - { .altcode = NULL }, /* 0x037f */ - { .altcode = NULL }, /* 0x0380 */ - { .altcode = NULL }, /* 0x0381 */ - { .altcode = NULL }, /* 0x0382 */ - { .altcode = NULL }, /* 0x0383 */ - { .altcode = NULL }, /* 0x0384 */ - { .altcode = NULL }, /* 0x0385 */ - { .altcode = NULL }, /* 0x0386 */ - { .altcode = NULL }, /* 0x0387 */ - { .altcode = NULL }, /* 0x0388 */ - { .altcode = NULL }, /* 0x0389 */ - { .altcode = NULL }, /* 0x038a */ - { .altcode = NULL }, /* 0x038b */ - { .altcode = NULL }, /* 0x038c */ - { .altcode = NULL }, /* 0x038d */ - { .altcode = NULL }, /* 0x038e */ - { .altcode = NULL }, /* 0x038f */ - { .altcode = NULL }, /* 0x0390 */ - { .altcode = NULL }, /* 0x0391 */ - { .altcode = NULL }, /* 0x0392 */ - { .altcode = NULL }, /* 0x0393 */ - { .altcode = NULL }, /* 0x0394 */ - { .altcode = NULL }, /* 0x0395 */ - { .altcode = NULL }, /* 0x0396 */ - { .altcode = NULL }, /* 0x0397 */ - { .altcode = NULL }, /* 0x0398 */ - { .altcode = NULL }, /* 0x0399 */ - { .altcode = NULL }, /* 0x039a */ - { .altcode = NULL }, /* 0x039b */ - { .altcode = NULL }, /* 0x039c */ - { .altcode = NULL }, /* 0x039d */ - { .altcode = NULL }, /* 0x039e */ - { .altcode = NULL }, /* 0x039f */ - { .altcode = NULL }, /* 0x03a0 */ - { .altcode = NULL }, /* 0x03a1 */ - { .altcode = NULL }, /* 0x03a2 (kappa) */ - { .altcode = NULL }, /* 0x03a3 (Rcedilla) */ - { .altcode = NULL }, /* 0x03a4 */ - { .altcode = NULL }, /* 0x03a5 (Itilde) */ - { .altcode = NULL }, /* 0x03a6 (Lcedilla) */ - { .altcode = NULL }, /* 0x03a7 */ - { .altcode = NULL }, /* 0x03a8 */ - { .altcode = NULL }, /* 0x03a9 */ - { .altcode = NULL }, /* 0x03aa (Emacron) */ - { .altcode = NULL }, /* 0x03ab (Gcedilla) */ - { .altcode = NULL }, /* 0x03ac (Tslash) */ - { .altcode = NULL }, /* 0x03ad */ - { .altcode = NULL }, /* 0x03ae */ - { .altcode = NULL }, /* 0x03af */ - { .altcode = NULL }, /* 0x03b0 */ - { .altcode = NULL }, /* 0x03b1 */ - { .altcode = NULL }, /* 0x03b2 */ - { .altcode = NULL }, /* 0x03b3 (rcedilla) */ - { .altcode = NULL }, /* 0x03b4 */ - { .altcode = NULL }, /* 0x03b5 (itilde) */ - { .altcode = NULL }, /* 0x03b6 (lcedilla) */ - { .altcode = NULL }, /* 0x03b7 */ - { .altcode = NULL }, /* 0x03b8 */ - { .altcode = NULL }, /* 0x03b9 */ - { .altcode = NULL }, /* 0x03ba (emacron) */ - { .altcode = NULL }, /* 0x03bb (gcedilla) */ - { .altcode = NULL }, /* 0x03bc (tslash) */ - { .altcode = NULL }, /* 0x03bd (ENG) */ - { .altcode = NULL }, /* 0x03be */ - { .altcode = NULL }, /* 0x03bf (eng) */ - { .altcode = NULL }, /* 0x03c0 (Amacron) */ - { .altcode = NULL }, /* 0x03c1 */ - { .altcode = NULL }, /* 0x03c2 */ - { .altcode = NULL }, /* 0x03c3 */ - { .altcode = NULL }, /* 0x03c4 */ - { .altcode = NULL }, /* 0x03c5 */ - { .altcode = NULL }, /* 0x03c6 */ - { .altcode = NULL }, /* 0x03c7 (Iogonek) */ - { .altcode = NULL }, /* 0x03c8 */ - { .altcode = NULL }, /* 0x03c9 */ - { .altcode = NULL }, /* 0x03ca */ - { .altcode = NULL }, /* 0x03cb */ - { .altcode = NULL }, /* 0x03cc (Eabovedot) */ - { .altcode = NULL }, /* 0x03cd */ - { .altcode = NULL }, /* 0x03ce */ - { .altcode = NULL }, /* 0x03cf (Imacron) */ - { .altcode = NULL }, /* 0x03d0 */ - { .altcode = NULL }, /* 0x03d1 (Ncedilla) */ - { .altcode = NULL }, /* 0x03d2 (Omacron) */ - { .altcode = NULL }, /* 0x03d3 (Kcedilla) */ - { .altcode = NULL }, /* 0x03d4 */ - { .altcode = NULL }, /* 0x03d5 */ - { .altcode = NULL }, /* 0x03d6 */ - { .altcode = NULL }, /* 0x03d7 */ - { .altcode = NULL }, /* 0x03d8 */ - { .altcode = NULL }, /* 0x03d9 (Uogonek) */ - { .altcode = NULL }, /* 0x03da */ - { .altcode = NULL }, /* 0x03db */ - { .altcode = NULL }, /* 0x03dc */ - { .altcode = NULL }, /* 0x03dd (Utilde) */ - { .altcode = NULL }, /* 0x03de (Umacron) */ - { .altcode = NULL }, /* 0x03df */ - { .altcode = NULL }, /* 0x03e0 (amacron) */ - { .altcode = NULL }, /* 0x03e1 */ - { .altcode = NULL }, /* 0x03e2 */ - { .altcode = NULL }, /* 0x03e3 */ - { .altcode = NULL }, /* 0x03e4 */ - { .altcode = NULL }, /* 0x03e5 */ - { .altcode = NULL }, /* 0x03e6 */ - { .altcode = NULL }, /* 0x03e7 (iogonek) */ - { .altcode = NULL }, /* 0x03e8 */ - { .altcode = NULL }, /* 0x03e9 */ - { .altcode = NULL }, /* 0x03ea */ - { .altcode = NULL }, /* 0x03eb */ - { .altcode = NULL }, /* 0x03ec (eabovedot) */ - { .altcode = NULL }, /* 0x03ed */ - { .altcode = NULL }, /* 0x03ee */ - { .altcode = NULL }, /* 0x03ef (imacron) */ - { .altcode = NULL }, /* 0x03f0 */ - { .altcode = NULL }, /* 0x03f1 (ncedilla) */ - { .altcode = NULL }, /* 0x03f2 (omacron) */ - { .altcode = NULL }, /* 0x03f3 (kcedilla) */ - { .altcode = NULL }, /* 0x03f4 */ - { .altcode = NULL }, /* 0x03f5 */ - { .altcode = NULL }, /* 0x03f6 */ - { .altcode = NULL }, /* 0x03f7 */ - { .altcode = NULL }, /* 0x03f8 */ - { .altcode = NULL }, /* 0x03f9 (uogonek) */ - { .altcode = NULL }, /* 0x03fa */ - { .altcode = NULL }, /* 0x03fb */ - { .altcode = NULL }, /* 0x03fc */ - { .altcode = NULL }, /* 0x03fd (utilde) */ - { .altcode = NULL }, /* 0x03fe (umacron) */ - { .altcode = NULL }, /* 0x03ff */ + { .altcode = NULL }, /* 0x0300 */ + { .altcode = NULL }, /* 0x0301 */ + { .altcode = NULL }, /* 0x0302 */ + { .altcode = NULL }, /* 0x0303 */ + { .altcode = NULL }, /* 0x0304 */ + { .altcode = NULL }, /* 0x0305 */ + { .altcode = NULL }, /* 0x0306 */ + { .altcode = NULL }, /* 0x0307 */ + { .altcode = NULL }, /* 0x0308 */ + { .altcode = NULL }, /* 0x0309 */ + { .altcode = NULL }, /* 0x030a */ + { .altcode = NULL }, /* 0x030b */ + { .altcode = NULL }, /* 0x030c */ + { .altcode = NULL }, /* 0x030d */ + { .altcode = NULL }, /* 0x030e */ + { .altcode = NULL }, /* 0x030f */ + { .altcode = NULL }, /* 0x0310 */ + { .altcode = NULL }, /* 0x0311 */ + { .altcode = NULL }, /* 0x0312 */ + { .altcode = NULL }, /* 0x0313 */ + { .altcode = NULL }, /* 0x0314 */ + { .altcode = NULL }, /* 0x0315 */ + { .altcode = NULL }, /* 0x0316 */ + { .altcode = NULL }, /* 0x0317 */ + { .altcode = NULL }, /* 0x0318 */ + { .altcode = NULL }, /* 0x0319 */ + { .altcode = NULL }, /* 0x031a */ + { .altcode = NULL }, /* 0x031b */ + { .altcode = NULL }, /* 0x031c */ + { .altcode = NULL }, /* 0x031d */ + { .altcode = NULL }, /* 0x031e */ + { .altcode = NULL }, /* 0x031f */ + { .altcode = NULL }, /* 0x0320 */ + { .altcode = NULL }, /* 0x0321 */ + { .altcode = NULL }, /* 0x0322 */ + { .altcode = NULL }, /* 0x0323 */ + { .altcode = NULL }, /* 0x0324 */ + { .altcode = NULL }, /* 0x0325 */ + { .altcode = NULL }, /* 0x0326 */ + { .altcode = NULL }, /* 0x0327 */ + { .altcode = NULL }, /* 0x0328 */ + { .altcode = NULL }, /* 0x0329 */ + { .altcode = NULL }, /* 0x032a */ + { .altcode = NULL }, /* 0x032b */ + { .altcode = NULL }, /* 0x032c */ + { .altcode = NULL }, /* 0x032d */ + { .altcode = NULL }, /* 0x032e */ + { .altcode = NULL }, /* 0x032f */ + { .altcode = NULL }, /* 0x0330 */ + { .altcode = NULL }, /* 0x0331 */ + { .altcode = NULL }, /* 0x0332 */ + { .altcode = NULL }, /* 0x0333 */ + { .altcode = NULL }, /* 0x0334 */ + { .altcode = NULL }, /* 0x0335 */ + { .altcode = NULL }, /* 0x0336 */ + { .altcode = NULL }, /* 0x0337 */ + { .altcode = NULL }, /* 0x0338 */ + { .altcode = NULL }, /* 0x0339 */ + { .altcode = NULL }, /* 0x033a */ + { .altcode = NULL }, /* 0x033b */ + { .altcode = NULL }, /* 0x033c */ + { .altcode = NULL }, /* 0x033d */ + { .altcode = NULL }, /* 0x033e */ + { .altcode = NULL }, /* 0x033f */ + { .altcode = NULL }, /* 0x0340 */ + { .altcode = NULL }, /* 0x0341 */ + { .altcode = NULL }, /* 0x0342 */ + { .altcode = NULL }, /* 0x0343 */ + { .altcode = NULL }, /* 0x0344 */ + { .altcode = NULL }, /* 0x0345 */ + { .altcode = NULL }, /* 0x0346 */ + { .altcode = NULL }, /* 0x0347 */ + { .altcode = NULL }, /* 0x0348 */ + { .altcode = NULL }, /* 0x0349 */ + { .altcode = NULL }, /* 0x034a */ + { .altcode = NULL }, /* 0x034b */ + { .altcode = NULL }, /* 0x034c */ + { .altcode = NULL }, /* 0x034d */ + { .altcode = NULL }, /* 0x034e */ + { .altcode = NULL }, /* 0x034f */ + { .altcode = NULL }, /* 0x0350 */ + { .altcode = NULL }, /* 0x0351 */ + { .altcode = NULL }, /* 0x0352 */ + { .altcode = NULL }, /* 0x0353 */ + { .altcode = NULL }, /* 0x0354 */ + { .altcode = NULL }, /* 0x0355 */ + { .altcode = NULL }, /* 0x0356 */ + { .altcode = NULL }, /* 0x0357 */ + { .altcode = NULL }, /* 0x0358 */ + { .altcode = NULL }, /* 0x0359 */ + { .altcode = NULL }, /* 0x035a */ + { .altcode = NULL }, /* 0x035b */ + { .altcode = NULL }, /* 0x035c */ + { .altcode = NULL }, /* 0x035d */ + { .altcode = NULL }, /* 0x035e */ + { .altcode = NULL }, /* 0x035f */ + { .altcode = NULL }, /* 0x0360 */ + { .altcode = NULL }, /* 0x0361 */ + { .altcode = NULL }, /* 0x0362 */ + { .altcode = NULL }, /* 0x0363 */ + { .altcode = NULL }, /* 0x0364 */ + { .altcode = NULL }, /* 0x0365 */ + { .altcode = NULL }, /* 0x0366 */ + { .altcode = NULL }, /* 0x0367 */ + { .altcode = NULL }, /* 0x0368 */ + { .altcode = NULL }, /* 0x0369 */ + { .altcode = NULL }, /* 0x036a */ + { .altcode = NULL }, /* 0x036b */ + { .altcode = NULL }, /* 0x036c */ + { .altcode = NULL }, /* 0x036d */ + { .altcode = NULL }, /* 0x036e */ + { .altcode = NULL }, /* 0x036f */ + { .altcode = NULL }, /* 0x0370 */ + { .altcode = NULL }, /* 0x0371 */ + { .altcode = NULL }, /* 0x0372 */ + { .altcode = NULL }, /* 0x0373 */ + { .altcode = NULL }, /* 0x0374 */ + { .altcode = NULL }, /* 0x0375 */ + { .altcode = NULL }, /* 0x0376 */ + { .altcode = NULL }, /* 0x0377 */ + { .altcode = NULL }, /* 0x0378 */ + { .altcode = NULL }, /* 0x0379 */ + { .altcode = NULL }, /* 0x037a */ + { .altcode = NULL }, /* 0x037b */ + { .altcode = NULL }, /* 0x037c */ + { .altcode = NULL }, /* 0x037d */ + { .altcode = NULL }, /* 0x037e */ + { .altcode = NULL }, /* 0x037f */ + { .altcode = NULL }, /* 0x0380 */ + { .altcode = NULL }, /* 0x0381 */ + { .altcode = NULL }, /* 0x0382 */ + { .altcode = NULL }, /* 0x0383 */ + { .altcode = NULL }, /* 0x0384 */ + { .altcode = NULL }, /* 0x0385 */ + { .altcode = NULL }, /* 0x0386 */ + { .altcode = NULL }, /* 0x0387 */ + { .altcode = NULL }, /* 0x0388 */ + { .altcode = NULL }, /* 0x0389 */ + { .altcode = NULL }, /* 0x038a */ + { .altcode = NULL }, /* 0x038b */ + { .altcode = NULL }, /* 0x038c */ + { .altcode = NULL }, /* 0x038d */ + { .altcode = NULL }, /* 0x038e */ + { .altcode = NULL }, /* 0x038f */ + { .altcode = NULL }, /* 0x0390 */ + { .altcode = NULL }, /* 0x0391 */ + { .altcode = NULL }, /* 0x0392 */ + { .altcode = NULL }, /* 0x0393 */ + { .altcode = NULL }, /* 0x0394 */ + { .altcode = NULL }, /* 0x0395 */ + { .altcode = NULL }, /* 0x0396 */ + { .altcode = NULL }, /* 0x0397 */ + { .altcode = NULL }, /* 0x0398 */ + { .altcode = NULL }, /* 0x0399 */ + { .altcode = NULL }, /* 0x039a */ + { .altcode = NULL }, /* 0x039b */ + { .altcode = NULL }, /* 0x039c */ + { .altcode = NULL }, /* 0x039d */ + { .altcode = NULL }, /* 0x039e */ + { .altcode = NULL }, /* 0x039f */ + { .altcode = NULL }, /* 0x03a0 */ + { .altcode = NULL }, /* 0x03a1 */ + { .altcode = NULL }, /* 0x03a2 (kappa) */ + { .altcode = NULL }, /* 0x03a3 (Rcedilla) */ + { .altcode = NULL }, /* 0x03a4 */ + { .altcode = NULL }, /* 0x03a5 (Itilde) */ + { .altcode = NULL }, /* 0x03a6 (Lcedilla) */ + { .altcode = NULL }, /* 0x03a7 */ + { .altcode = NULL }, /* 0x03a8 */ + { .altcode = NULL }, /* 0x03a9 */ + { .altcode = NULL }, /* 0x03aa (Emacron) */ + { .altcode = NULL }, /* 0x03ab (Gcedilla) */ + { .altcode = NULL }, /* 0x03ac (Tslash) */ + { .altcode = NULL }, /* 0x03ad */ + { .altcode = NULL }, /* 0x03ae */ + { .altcode = NULL }, /* 0x03af */ + { .altcode = NULL }, /* 0x03b0 */ + { .altcode = NULL }, /* 0x03b1 */ + { .altcode = NULL }, /* 0x03b2 */ + { .altcode = NULL }, /* 0x03b3 (rcedilla) */ + { .altcode = NULL }, /* 0x03b4 */ + { .altcode = NULL }, /* 0x03b5 (itilde) */ + { .altcode = NULL }, /* 0x03b6 (lcedilla) */ + { .altcode = NULL }, /* 0x03b7 */ + { .altcode = NULL }, /* 0x03b8 */ + { .altcode = NULL }, /* 0x03b9 */ + { .altcode = NULL }, /* 0x03ba (emacron) */ + { .altcode = NULL }, /* 0x03bb (gcedilla) */ + { .altcode = NULL }, /* 0x03bc (tslash) */ + { .altcode = NULL }, /* 0x03bd (ENG) */ + { .altcode = NULL }, /* 0x03be */ + { .altcode = NULL }, /* 0x03bf (eng) */ + { .altcode = NULL }, /* 0x03c0 (Amacron) */ + { .altcode = NULL }, /* 0x03c1 */ + { .altcode = NULL }, /* 0x03c2 */ + { .altcode = NULL }, /* 0x03c3 */ + { .altcode = NULL }, /* 0x03c4 */ + { .altcode = NULL }, /* 0x03c5 */ + { .altcode = NULL }, /* 0x03c6 */ + { .altcode = NULL }, /* 0x03c7 (Iogonek) */ + { .altcode = NULL }, /* 0x03c8 */ + { .altcode = NULL }, /* 0x03c9 */ + { .altcode = NULL }, /* 0x03ca */ + { .altcode = NULL }, /* 0x03cb */ + { .altcode = NULL }, /* 0x03cc (Eabovedot) */ + { .altcode = NULL }, /* 0x03cd */ + { .altcode = NULL }, /* 0x03ce */ + { .altcode = NULL }, /* 0x03cf (Imacron) */ + { .altcode = NULL }, /* 0x03d0 */ + { .altcode = NULL }, /* 0x03d1 (Ncedilla) */ + { .altcode = NULL }, /* 0x03d2 (Omacron) */ + { .altcode = NULL }, /* 0x03d3 (Kcedilla) */ + { .altcode = NULL }, /* 0x03d4 */ + { .altcode = NULL }, /* 0x03d5 */ + { .altcode = NULL }, /* 0x03d6 */ + { .altcode = NULL }, /* 0x03d7 */ + { .altcode = NULL }, /* 0x03d8 */ + { .altcode = NULL }, /* 0x03d9 (Uogonek) */ + { .altcode = NULL }, /* 0x03da */ + { .altcode = NULL }, /* 0x03db */ + { .altcode = NULL }, /* 0x03dc */ + { .altcode = NULL }, /* 0x03dd (Utilde) */ + { .altcode = NULL }, /* 0x03de (Umacron) */ + { .altcode = NULL }, /* 0x03df */ + { .altcode = NULL }, /* 0x03e0 (amacron) */ + { .altcode = NULL }, /* 0x03e1 */ + { .altcode = NULL }, /* 0x03e2 */ + { .altcode = NULL }, /* 0x03e3 */ + { .altcode = NULL }, /* 0x03e4 */ + { .altcode = NULL }, /* 0x03e5 */ + { .altcode = NULL }, /* 0x03e6 */ + { .altcode = NULL }, /* 0x03e7 (iogonek) */ + { .altcode = NULL }, /* 0x03e8 */ + { .altcode = NULL }, /* 0x03e9 */ + { .altcode = NULL }, /* 0x03ea */ + { .altcode = NULL }, /* 0x03eb */ + { .altcode = NULL }, /* 0x03ec (eabovedot) */ + { .altcode = NULL }, /* 0x03ed */ + { .altcode = NULL }, /* 0x03ee */ + { .altcode = NULL }, /* 0x03ef (imacron) */ + { .altcode = NULL }, /* 0x03f0 */ + { .altcode = NULL }, /* 0x03f1 (ncedilla) */ + { .altcode = NULL }, /* 0x03f2 (omacron) */ + { .altcode = NULL }, /* 0x03f3 (kcedilla) */ + { .altcode = NULL }, /* 0x03f4 */ + { .altcode = NULL }, /* 0x03f5 */ + { .altcode = NULL }, /* 0x03f6 */ + { .altcode = NULL }, /* 0x03f7 */ + { .altcode = NULL }, /* 0x03f8 */ + { .altcode = NULL }, /* 0x03f9 (uogonek) */ + { .altcode = NULL }, /* 0x03fa */ + { .altcode = NULL }, /* 0x03fb */ + { .altcode = NULL }, /* 0x03fc */ + { .altcode = NULL }, /* 0x03fd (utilde) */ + { .altcode = NULL }, /* 0x03fe (umacron) */ + { .altcode = NULL }, /* 0x03ff */ }, { /* 0x04?? */ - { .altcode = NULL }, /* 0x0400 */ - { .altcode = NULL }, /* 0x0401 */ - { .altcode = NULL }, /* 0x0402 */ - { .altcode = NULL }, /* 0x0403 */ - { .altcode = NULL }, /* 0x0404 */ - { .altcode = NULL }, /* 0x0405 */ - { .altcode = NULL }, /* 0x0406 */ - { .altcode = NULL }, /* 0x0407 */ - { .altcode = NULL }, /* 0x0408 */ - { .altcode = NULL }, /* 0x0409 */ - { .altcode = NULL }, /* 0x040a */ - { .altcode = NULL }, /* 0x040b */ - { .altcode = NULL }, /* 0x040c */ - { .altcode = NULL }, /* 0x040d */ - { .altcode = NULL }, /* 0x040e */ - { .altcode = NULL }, /* 0x040f */ - { .altcode = NULL }, /* 0x0410 */ - { .altcode = NULL }, /* 0x0411 */ - { .altcode = NULL }, /* 0x0412 */ - { .altcode = NULL }, /* 0x0413 */ - { .altcode = NULL }, /* 0x0414 */ - { .altcode = NULL }, /* 0x0415 */ - { .altcode = NULL }, /* 0x0416 */ - { .altcode = NULL }, /* 0x0417 */ - { .altcode = NULL }, /* 0x0418 */ - { .altcode = NULL }, /* 0x0419 */ - { .altcode = NULL }, /* 0x041a */ - { .altcode = NULL }, /* 0x041b */ - { .altcode = NULL }, /* 0x041c */ - { .altcode = NULL }, /* 0x041d */ - { .altcode = NULL }, /* 0x041e */ - { .altcode = NULL }, /* 0x041f */ - { .altcode = NULL }, /* 0x0420 */ - { .altcode = NULL }, /* 0x0421 */ - { .altcode = NULL }, /* 0x0422 */ - { .altcode = NULL }, /* 0x0423 */ - { .altcode = NULL }, /* 0x0424 */ - { .altcode = NULL }, /* 0x0425 */ - { .altcode = NULL }, /* 0x0426 */ - { .altcode = NULL }, /* 0x0427 */ - { .altcode = NULL }, /* 0x0428 */ - { .altcode = NULL }, /* 0x0429 */ - { .altcode = NULL }, /* 0x042a */ - { .altcode = NULL }, /* 0x042b */ - { .altcode = NULL }, /* 0x042c */ - { .altcode = NULL }, /* 0x042d */ - { .altcode = NULL }, /* 0x042e */ - { .altcode = NULL }, /* 0x042f */ - { .altcode = NULL }, /* 0x0430 */ - { .altcode = NULL }, /* 0x0431 */ - { .altcode = NULL }, /* 0x0432 */ - { .altcode = NULL }, /* 0x0433 */ - { .altcode = NULL }, /* 0x0434 */ - { .altcode = NULL }, /* 0x0435 */ - { .altcode = NULL }, /* 0x0436 */ - { .altcode = NULL }, /* 0x0437 */ - { .altcode = NULL }, /* 0x0438 */ - { .altcode = NULL }, /* 0x0439 */ - { .altcode = NULL }, /* 0x043a */ - { .altcode = NULL }, /* 0x043b */ - { .altcode = NULL }, /* 0x043c */ - { .altcode = NULL }, /* 0x043d */ - { .altcode = NULL }, /* 0x043e */ - { .altcode = NULL }, /* 0x043f */ - { .altcode = NULL }, /* 0x0440 */ - { .altcode = NULL }, /* 0x0441 */ - { .altcode = NULL }, /* 0x0442 */ - { .altcode = NULL }, /* 0x0443 */ - { .altcode = NULL }, /* 0x0444 */ - { .altcode = NULL }, /* 0x0445 */ - { .altcode = NULL }, /* 0x0446 */ - { .altcode = NULL }, /* 0x0447 */ - { .altcode = NULL }, /* 0x0448 */ - { .altcode = NULL }, /* 0x0449 */ - { .altcode = NULL }, /* 0x044a */ - { .altcode = NULL }, /* 0x044b */ - { .altcode = NULL }, /* 0x044c */ - { .altcode = NULL }, /* 0x044d */ - { .altcode = NULL }, /* 0x044e */ - { .altcode = NULL }, /* 0x044f */ - { .altcode = NULL }, /* 0x0450 */ - { .altcode = NULL }, /* 0x0451 */ - { .altcode = NULL }, /* 0x0452 */ - { .altcode = NULL }, /* 0x0453 */ - { .altcode = NULL }, /* 0x0454 */ - { .altcode = NULL }, /* 0x0455 */ - { .altcode = NULL }, /* 0x0456 */ - { .altcode = NULL }, /* 0x0457 */ - { .altcode = NULL }, /* 0x0458 */ - { .altcode = NULL }, /* 0x0459 */ - { .altcode = NULL }, /* 0x045a */ - { .altcode = NULL }, /* 0x045b */ - { .altcode = NULL }, /* 0x045c */ - { .altcode = NULL }, /* 0x045d */ - { .altcode = NULL }, /* 0x045e */ - { .altcode = NULL }, /* 0x045f */ - { .altcode = NULL }, /* 0x0460 */ - { .altcode = NULL }, /* 0x0461 */ - { .altcode = NULL }, /* 0x0462 */ - { .altcode = NULL }, /* 0x0463 */ - { .altcode = NULL }, /* 0x0464 */ - { .altcode = NULL }, /* 0x0465 */ - { .altcode = NULL }, /* 0x0466 */ - { .altcode = NULL }, /* 0x0467 */ - { .altcode = NULL }, /* 0x0468 */ - { .altcode = NULL }, /* 0x0469 */ - { .altcode = NULL }, /* 0x046a */ - { .altcode = NULL }, /* 0x046b */ - { .altcode = NULL }, /* 0x046c */ - { .altcode = NULL }, /* 0x046d */ - { .altcode = NULL }, /* 0x046e */ - { .altcode = NULL }, /* 0x046f */ - { .altcode = NULL }, /* 0x0470 */ - { .altcode = NULL }, /* 0x0471 */ - { .altcode = NULL }, /* 0x0472 */ - { .altcode = NULL }, /* 0x0473 */ - { .altcode = NULL }, /* 0x0474 */ - { .altcode = NULL }, /* 0x0475 */ - { .altcode = NULL }, /* 0x0476 */ - { .altcode = NULL }, /* 0x0477 */ - { .altcode = NULL }, /* 0x0478 */ - { .altcode = NULL }, /* 0x0479 */ - { .altcode = NULL }, /* 0x047a */ - { .altcode = NULL }, /* 0x047b */ - { .altcode = NULL }, /* 0x047c */ - { .altcode = NULL }, /* 0x047d */ - { .altcode = NULL }, /* 0x047e (overline) */ - { .altcode = NULL }, /* 0x047f */ - { .altcode = NULL }, /* 0x0480 */ - { .altcode = NULL }, /* 0x0481 */ - { .altcode = NULL }, /* 0x0482 */ - { .altcode = NULL }, /* 0x0483 */ - { .altcode = NULL }, /* 0x0484 */ - { .altcode = NULL }, /* 0x0485 */ - { .altcode = NULL }, /* 0x0486 */ - { .altcode = NULL }, /* 0x0487 */ - { .altcode = NULL }, /* 0x0488 */ - { .altcode = NULL }, /* 0x0489 */ - { .altcode = NULL }, /* 0x048a */ - { .altcode = NULL }, /* 0x048b */ - { .altcode = NULL }, /* 0x048c */ - { .altcode = NULL }, /* 0x048d */ - { .altcode = NULL }, /* 0x048e */ - { .altcode = NULL }, /* 0x048f */ - { .altcode = NULL }, /* 0x0490 */ - { .altcode = NULL }, /* 0x0491 */ - { .altcode = NULL }, /* 0x0492 */ - { .altcode = NULL }, /* 0x0493 */ - { .altcode = NULL }, /* 0x0494 */ - { .altcode = NULL }, /* 0x0495 */ - { .altcode = NULL }, /* 0x0496 */ - { .altcode = NULL }, /* 0x0497 */ - { .altcode = NULL }, /* 0x0498 */ - { .altcode = NULL }, /* 0x0499 */ - { .altcode = NULL }, /* 0x049a */ - { .altcode = NULL }, /* 0x049b */ - { .altcode = NULL }, /* 0x049c */ - { .altcode = NULL }, /* 0x049d */ - { .altcode = NULL }, /* 0x049e */ - { .altcode = NULL }, /* 0x049f */ - { .altcode = NULL }, /* 0x04a0 */ - { .altcode = NULL }, /* 0x04a1 (kana_fullstop) */ - { .altcode = NULL }, /* 0x04a2 (kana_openingbracket) */ - { .altcode = NULL }, /* 0x04a3 (kana_closingbracket) */ - { .altcode = NULL }, /* 0x04a4 (kana_comma) */ - { .altcode = NULL }, /* 0x04a5 (kana_middledot) */ - { .altcode = NULL }, /* 0x04a6 (kana_WO) */ - { .altcode = NULL }, /* 0x04a7 (kana_a) */ - { .altcode = NULL }, /* 0x04a8 (kana_i) */ - { .altcode = NULL }, /* 0x04a9 (kana_u) */ - { .altcode = NULL }, /* 0x04aa (kana_e) */ - { .altcode = NULL }, /* 0x04ab (kana_o) */ - { .altcode = NULL }, /* 0x04ac (kana_ya) */ - { .altcode = NULL }, /* 0x04ad (kana_yu) */ - { .altcode = NULL }, /* 0x04ae (kana_yo) */ - { .altcode = NULL }, /* 0x04af (kana_tu) */ - { .altcode = NULL }, /* 0x04b0 (prolongedsound) */ - { .altcode = NULL }, /* 0x04b1 (kana_A) */ - { .altcode = NULL }, /* 0x04b2 (kana_I) */ - { .altcode = NULL }, /* 0x04b3 (kana_U) */ - { .altcode = NULL }, /* 0x04b4 (kana_E) */ - { .altcode = NULL }, /* 0x04b5 (kana_O) */ - { .altcode = NULL }, /* 0x04b6 (kana_KA) */ - { .altcode = NULL }, /* 0x04b7 (kana_KI) */ - { .altcode = NULL }, /* 0x04b8 (kana_KU) */ - { .altcode = NULL }, /* 0x04b9 (kana_KE) */ - { .altcode = NULL }, /* 0x04ba (kana_KO) */ - { .altcode = NULL }, /* 0x04bb (kana_SA) */ - { .altcode = NULL }, /* 0x04bc (kana_SHI) */ - { .altcode = NULL }, /* 0x04bd (kana_SU) */ - { .altcode = NULL }, /* 0x04be (kana_SE) */ - { .altcode = NULL }, /* 0x04bf (kana_SO) */ - { .altcode = NULL }, /* 0x04c0 (kana_TA) */ - { .altcode = NULL }, /* 0x04c1 (kana_TI) */ - { .altcode = NULL }, /* 0x04c2 (kana_TU) */ - { .altcode = NULL }, /* 0x04c3 (kana_TE) */ - { .altcode = NULL }, /* 0x04c4 (kana_TO) */ - { .altcode = NULL }, /* 0x04c5 (kana_NA) */ - { .altcode = NULL }, /* 0x04c6 (kana_NI) */ - { .altcode = NULL }, /* 0x04c7 (kana_NU) */ - { .altcode = NULL }, /* 0x04c8 (kana_NE) */ - { .altcode = NULL }, /* 0x04c9 (kana_NO) */ - { .altcode = NULL }, /* 0x04ca (kana_HA) */ - { .altcode = NULL }, /* 0x04cb (kana_HI) */ - { .altcode = NULL }, /* 0x04cc (kana_HU) */ - { .altcode = NULL }, /* 0x04cd (kana_HE) */ - { .altcode = NULL }, /* 0x04ce (kana_HO) */ - { .altcode = NULL }, /* 0x04cf (kana_MA) */ - { .altcode = NULL }, /* 0x04d0 (kana_MI) */ - { .altcode = NULL }, /* 0x04d1 (kana_MU) */ - { .altcode = NULL }, /* 0x04d2 (kana_ME) */ - { .altcode = NULL }, /* 0x04d3 (kana_MO) */ - { .altcode = NULL }, /* 0x04d4 (kana_YA) */ - { .altcode = NULL }, /* 0x04d5 (kana_YU) */ - { .altcode = NULL }, /* 0x04d6 (kana_YO) */ - { .altcode = NULL }, /* 0x04d7 (kana_RA) */ - { .altcode = NULL }, /* 0x04d8 (kana_RI) */ - { .altcode = NULL }, /* 0x04d9 (kana_RU) */ - { .altcode = NULL }, /* 0x04da (kana_RE) */ - { .altcode = NULL }, /* 0x04db (kana_RO) */ - { .altcode = NULL }, /* 0x04dc (kana_WA) */ - { .altcode = NULL }, /* 0x04dd (kana_N) */ - { .altcode = NULL }, /* 0x04de (voicedsound) */ - { .altcode = NULL }, /* 0x04df (semivoicedsound) */ - { .altcode = NULL }, /* 0x04e0 */ - { .altcode = NULL }, /* 0x04e1 */ - { .altcode = NULL }, /* 0x04e2 */ - { .altcode = NULL }, /* 0x04e3 */ - { .altcode = NULL }, /* 0x04e4 */ - { .altcode = NULL }, /* 0x04e5 */ - { .altcode = NULL }, /* 0x04e6 */ - { .altcode = NULL }, /* 0x04e7 */ - { .altcode = NULL }, /* 0x04e8 */ - { .altcode = NULL }, /* 0x04e9 */ - { .altcode = NULL }, /* 0x04ea */ - { .altcode = NULL }, /* 0x04eb */ - { .altcode = NULL }, /* 0x04ec */ - { .altcode = NULL }, /* 0x04ed */ - { .altcode = NULL }, /* 0x04ee */ - { .altcode = NULL }, /* 0x04ef */ - { .altcode = NULL }, /* 0x04f0 */ - { .altcode = NULL }, /* 0x04f1 */ - { .altcode = NULL }, /* 0x04f2 */ - { .altcode = NULL }, /* 0x04f3 */ - { .altcode = NULL }, /* 0x04f4 */ - { .altcode = NULL }, /* 0x04f5 */ - { .altcode = NULL }, /* 0x04f6 */ - { .altcode = NULL }, /* 0x04f7 */ - { .altcode = NULL }, /* 0x04f8 */ - { .altcode = NULL }, /* 0x04f9 */ - { .altcode = NULL }, /* 0x04fa */ - { .altcode = NULL }, /* 0x04fb */ - { .altcode = NULL }, /* 0x04fc */ - { .altcode = NULL }, /* 0x04fd */ - { .altcode = NULL }, /* 0x04fe */ - { .altcode = NULL }, /* 0x04ff */ + { .altcode = NULL }, /* 0x0400 */ + { .altcode = NULL }, /* 0x0401 */ + { .altcode = NULL }, /* 0x0402 */ + { .altcode = NULL }, /* 0x0403 */ + { .altcode = NULL }, /* 0x0404 */ + { .altcode = NULL }, /* 0x0405 */ + { .altcode = NULL }, /* 0x0406 */ + { .altcode = NULL }, /* 0x0407 */ + { .altcode = NULL }, /* 0x0408 */ + { .altcode = NULL }, /* 0x0409 */ + { .altcode = NULL }, /* 0x040a */ + { .altcode = NULL }, /* 0x040b */ + { .altcode = NULL }, /* 0x040c */ + { .altcode = NULL }, /* 0x040d */ + { .altcode = NULL }, /* 0x040e */ + { .altcode = NULL }, /* 0x040f */ + { .altcode = NULL }, /* 0x0410 */ + { .altcode = NULL }, /* 0x0411 */ + { .altcode = NULL }, /* 0x0412 */ + { .altcode = NULL }, /* 0x0413 */ + { .altcode = NULL }, /* 0x0414 */ + { .altcode = NULL }, /* 0x0415 */ + { .altcode = NULL }, /* 0x0416 */ + { .altcode = NULL }, /* 0x0417 */ + { .altcode = NULL }, /* 0x0418 */ + { .altcode = NULL }, /* 0x0419 */ + { .altcode = NULL }, /* 0x041a */ + { .altcode = NULL }, /* 0x041b */ + { .altcode = NULL }, /* 0x041c */ + { .altcode = NULL }, /* 0x041d */ + { .altcode = NULL }, /* 0x041e */ + { .altcode = NULL }, /* 0x041f */ + { .altcode = NULL }, /* 0x0420 */ + { .altcode = NULL }, /* 0x0421 */ + { .altcode = NULL }, /* 0x0422 */ + { .altcode = NULL }, /* 0x0423 */ + { .altcode = NULL }, /* 0x0424 */ + { .altcode = NULL }, /* 0x0425 */ + { .altcode = NULL }, /* 0x0426 */ + { .altcode = NULL }, /* 0x0427 */ + { .altcode = NULL }, /* 0x0428 */ + { .altcode = NULL }, /* 0x0429 */ + { .altcode = NULL }, /* 0x042a */ + { .altcode = NULL }, /* 0x042b */ + { .altcode = NULL }, /* 0x042c */ + { .altcode = NULL }, /* 0x042d */ + { .altcode = NULL }, /* 0x042e */ + { .altcode = NULL }, /* 0x042f */ + { .altcode = NULL }, /* 0x0430 */ + { .altcode = NULL }, /* 0x0431 */ + { .altcode = NULL }, /* 0x0432 */ + { .altcode = NULL }, /* 0x0433 */ + { .altcode = NULL }, /* 0x0434 */ + { .altcode = NULL }, /* 0x0435 */ + { .altcode = NULL }, /* 0x0436 */ + { .altcode = NULL }, /* 0x0437 */ + { .altcode = NULL }, /* 0x0438 */ + { .altcode = NULL }, /* 0x0439 */ + { .altcode = NULL }, /* 0x043a */ + { .altcode = NULL }, /* 0x043b */ + { .altcode = NULL }, /* 0x043c */ + { .altcode = NULL }, /* 0x043d */ + { .altcode = NULL }, /* 0x043e */ + { .altcode = NULL }, /* 0x043f */ + { .altcode = NULL }, /* 0x0440 */ + { .altcode = NULL }, /* 0x0441 */ + { .altcode = NULL }, /* 0x0442 */ + { .altcode = NULL }, /* 0x0443 */ + { .altcode = NULL }, /* 0x0444 */ + { .altcode = NULL }, /* 0x0445 */ + { .altcode = NULL }, /* 0x0446 */ + { .altcode = NULL }, /* 0x0447 */ + { .altcode = NULL }, /* 0x0448 */ + { .altcode = NULL }, /* 0x0449 */ + { .altcode = NULL }, /* 0x044a */ + { .altcode = NULL }, /* 0x044b */ + { .altcode = NULL }, /* 0x044c */ + { .altcode = NULL }, /* 0x044d */ + { .altcode = NULL }, /* 0x044e */ + { .altcode = NULL }, /* 0x044f */ + { .altcode = NULL }, /* 0x0450 */ + { .altcode = NULL }, /* 0x0451 */ + { .altcode = NULL }, /* 0x0452 */ + { .altcode = NULL }, /* 0x0453 */ + { .altcode = NULL }, /* 0x0454 */ + { .altcode = NULL }, /* 0x0455 */ + { .altcode = NULL }, /* 0x0456 */ + { .altcode = NULL }, /* 0x0457 */ + { .altcode = NULL }, /* 0x0458 */ + { .altcode = NULL }, /* 0x0459 */ + { .altcode = NULL }, /* 0x045a */ + { .altcode = NULL }, /* 0x045b */ + { .altcode = NULL }, /* 0x045c */ + { .altcode = NULL }, /* 0x045d */ + { .altcode = NULL }, /* 0x045e */ + { .altcode = NULL }, /* 0x045f */ + { .altcode = NULL }, /* 0x0460 */ + { .altcode = NULL }, /* 0x0461 */ + { .altcode = NULL }, /* 0x0462 */ + { .altcode = NULL }, /* 0x0463 */ + { .altcode = NULL }, /* 0x0464 */ + { .altcode = NULL }, /* 0x0465 */ + { .altcode = NULL }, /* 0x0466 */ + { .altcode = NULL }, /* 0x0467 */ + { .altcode = NULL }, /* 0x0468 */ + { .altcode = NULL }, /* 0x0469 */ + { .altcode = NULL }, /* 0x046a */ + { .altcode = NULL }, /* 0x046b */ + { .altcode = NULL }, /* 0x046c */ + { .altcode = NULL }, /* 0x046d */ + { .altcode = NULL }, /* 0x046e */ + { .altcode = NULL }, /* 0x046f */ + { .altcode = NULL }, /* 0x0470 */ + { .altcode = NULL }, /* 0x0471 */ + { .altcode = NULL }, /* 0x0472 */ + { .altcode = NULL }, /* 0x0473 */ + { .altcode = NULL }, /* 0x0474 */ + { .altcode = NULL }, /* 0x0475 */ + { .altcode = NULL }, /* 0x0476 */ + { .altcode = NULL }, /* 0x0477 */ + { .altcode = NULL }, /* 0x0478 */ + { .altcode = NULL }, /* 0x0479 */ + { .altcode = NULL }, /* 0x047a */ + { .altcode = NULL }, /* 0x047b */ + { .altcode = NULL }, /* 0x047c */ + { .altcode = NULL }, /* 0x047d */ + { .altcode = NULL }, /* 0x047e (overline) */ + { .altcode = NULL }, /* 0x047f */ + { .altcode = NULL }, /* 0x0480 */ + { .altcode = NULL }, /* 0x0481 */ + { .altcode = NULL }, /* 0x0482 */ + { .altcode = NULL }, /* 0x0483 */ + { .altcode = NULL }, /* 0x0484 */ + { .altcode = NULL }, /* 0x0485 */ + { .altcode = NULL }, /* 0x0486 */ + { .altcode = NULL }, /* 0x0487 */ + { .altcode = NULL }, /* 0x0488 */ + { .altcode = NULL }, /* 0x0489 */ + { .altcode = NULL }, /* 0x048a */ + { .altcode = NULL }, /* 0x048b */ + { .altcode = NULL }, /* 0x048c */ + { .altcode = NULL }, /* 0x048d */ + { .altcode = NULL }, /* 0x048e */ + { .altcode = NULL }, /* 0x048f */ + { .altcode = NULL }, /* 0x0490 */ + { .altcode = NULL }, /* 0x0491 */ + { .altcode = NULL }, /* 0x0492 */ + { .altcode = NULL }, /* 0x0493 */ + { .altcode = NULL }, /* 0x0494 */ + { .altcode = NULL }, /* 0x0495 */ + { .altcode = NULL }, /* 0x0496 */ + { .altcode = NULL }, /* 0x0497 */ + { .altcode = NULL }, /* 0x0498 */ + { .altcode = NULL }, /* 0x0499 */ + { .altcode = NULL }, /* 0x049a */ + { .altcode = NULL }, /* 0x049b */ + { .altcode = NULL }, /* 0x049c */ + { .altcode = NULL }, /* 0x049d */ + { .altcode = NULL }, /* 0x049e */ + { .altcode = NULL }, /* 0x049f */ + { .altcode = NULL }, /* 0x04a0 */ + { .altcode = NULL }, /* 0x04a1 (kana_fullstop) */ + { .altcode = NULL }, /* 0x04a2 (kana_openingbracket) */ + { .altcode = NULL }, /* 0x04a3 (kana_closingbracket) */ + { .altcode = NULL }, /* 0x04a4 (kana_comma) */ + { .altcode = NULL }, /* 0x04a5 (kana_middledot) */ + { .altcode = NULL }, /* 0x04a6 (kana_WO) */ + { .altcode = NULL }, /* 0x04a7 (kana_a) */ + { .altcode = NULL }, /* 0x04a8 (kana_i) */ + { .altcode = NULL }, /* 0x04a9 (kana_u) */ + { .altcode = NULL }, /* 0x04aa (kana_e) */ + { .altcode = NULL }, /* 0x04ab (kana_o) */ + { .altcode = NULL }, /* 0x04ac (kana_ya) */ + { .altcode = NULL }, /* 0x04ad (kana_yu) */ + { .altcode = NULL }, /* 0x04ae (kana_yo) */ + { .altcode = NULL }, /* 0x04af (kana_tu) */ + { .altcode = NULL }, /* 0x04b0 (prolongedsound) */ + { .altcode = NULL }, /* 0x04b1 (kana_A) */ + { .altcode = NULL }, /* 0x04b2 (kana_I) */ + { .altcode = NULL }, /* 0x04b3 (kana_U) */ + { .altcode = NULL }, /* 0x04b4 (kana_E) */ + { .altcode = NULL }, /* 0x04b5 (kana_O) */ + { .altcode = NULL }, /* 0x04b6 (kana_KA) */ + { .altcode = NULL }, /* 0x04b7 (kana_KI) */ + { .altcode = NULL }, /* 0x04b8 (kana_KU) */ + { .altcode = NULL }, /* 0x04b9 (kana_KE) */ + { .altcode = NULL }, /* 0x04ba (kana_KO) */ + { .altcode = NULL }, /* 0x04bb (kana_SA) */ + { .altcode = NULL }, /* 0x04bc (kana_SHI) */ + { .altcode = NULL }, /* 0x04bd (kana_SU) */ + { .altcode = NULL }, /* 0x04be (kana_SE) */ + { .altcode = NULL }, /* 0x04bf (kana_SO) */ + { .altcode = NULL }, /* 0x04c0 (kana_TA) */ + { .altcode = NULL }, /* 0x04c1 (kana_TI) */ + { .altcode = NULL }, /* 0x04c2 (kana_TU) */ + { .altcode = NULL }, /* 0x04c3 (kana_TE) */ + { .altcode = NULL }, /* 0x04c4 (kana_TO) */ + { .altcode = NULL }, /* 0x04c5 (kana_NA) */ + { .altcode = NULL }, /* 0x04c6 (kana_NI) */ + { .altcode = NULL }, /* 0x04c7 (kana_NU) */ + { .altcode = NULL }, /* 0x04c8 (kana_NE) */ + { .altcode = NULL }, /* 0x04c9 (kana_NO) */ + { .altcode = NULL }, /* 0x04ca (kana_HA) */ + { .altcode = NULL }, /* 0x04cb (kana_HI) */ + { .altcode = NULL }, /* 0x04cc (kana_HU) */ + { .altcode = NULL }, /* 0x04cd (kana_HE) */ + { .altcode = NULL }, /* 0x04ce (kana_HO) */ + { .altcode = NULL }, /* 0x04cf (kana_MA) */ + { .altcode = NULL }, /* 0x04d0 (kana_MI) */ + { .altcode = NULL }, /* 0x04d1 (kana_MU) */ + { .altcode = NULL }, /* 0x04d2 (kana_ME) */ + { .altcode = NULL }, /* 0x04d3 (kana_MO) */ + { .altcode = NULL }, /* 0x04d4 (kana_YA) */ + { .altcode = NULL }, /* 0x04d5 (kana_YU) */ + { .altcode = NULL }, /* 0x04d6 (kana_YO) */ + { .altcode = NULL }, /* 0x04d7 (kana_RA) */ + { .altcode = NULL }, /* 0x04d8 (kana_RI) */ + { .altcode = NULL }, /* 0x04d9 (kana_RU) */ + { .altcode = NULL }, /* 0x04da (kana_RE) */ + { .altcode = NULL }, /* 0x04db (kana_RO) */ + { .altcode = NULL }, /* 0x04dc (kana_WA) */ + { .altcode = NULL }, /* 0x04dd (kana_N) */ + { .altcode = NULL }, /* 0x04de (voicedsound) */ + { .altcode = NULL }, /* 0x04df (semivoicedsound) */ + { .altcode = NULL }, /* 0x04e0 */ + { .altcode = NULL }, /* 0x04e1 */ + { .altcode = NULL }, /* 0x04e2 */ + { .altcode = NULL }, /* 0x04e3 */ + { .altcode = NULL }, /* 0x04e4 */ + { .altcode = NULL }, /* 0x04e5 */ + { .altcode = NULL }, /* 0x04e6 */ + { .altcode = NULL }, /* 0x04e7 */ + { .altcode = NULL }, /* 0x04e8 */ + { .altcode = NULL }, /* 0x04e9 */ + { .altcode = NULL }, /* 0x04ea */ + { .altcode = NULL }, /* 0x04eb */ + { .altcode = NULL }, /* 0x04ec */ + { .altcode = NULL }, /* 0x04ed */ + { .altcode = NULL }, /* 0x04ee */ + { .altcode = NULL }, /* 0x04ef */ + { .altcode = NULL }, /* 0x04f0 */ + { .altcode = NULL }, /* 0x04f1 */ + { .altcode = NULL }, /* 0x04f2 */ + { .altcode = NULL }, /* 0x04f3 */ + { .altcode = NULL }, /* 0x04f4 */ + { .altcode = NULL }, /* 0x04f5 */ + { .altcode = NULL }, /* 0x04f6 */ + { .altcode = NULL }, /* 0x04f7 */ + { .altcode = NULL }, /* 0x04f8 */ + { .altcode = NULL }, /* 0x04f9 */ + { .altcode = NULL }, /* 0x04fa */ + { .altcode = NULL }, /* 0x04fb */ + { .altcode = NULL }, /* 0x04fc */ + { .altcode = NULL }, /* 0x04fd */ + { .altcode = NULL }, /* 0x04fe */ + { .altcode = NULL }, /* 0x04ff */ }, { /* 0x05?? */ - { .altcode = NULL }, /* 0x0500 */ - { .altcode = NULL }, /* 0x0501 */ - { .altcode = NULL }, /* 0x0502 */ - { .altcode = NULL }, /* 0x0503 */ - { .altcode = NULL }, /* 0x0504 */ - { .altcode = NULL }, /* 0x0505 */ - { .altcode = NULL }, /* 0x0506 */ - { .altcode = NULL }, /* 0x0507 */ - { .altcode = NULL }, /* 0x0508 */ - { .altcode = NULL }, /* 0x0509 */ - { .altcode = NULL }, /* 0x050a */ - { .altcode = NULL }, /* 0x050b */ - { .altcode = NULL }, /* 0x050c */ - { .altcode = NULL }, /* 0x050d */ - { .altcode = NULL }, /* 0x050e */ - { .altcode = NULL }, /* 0x050f */ - { .altcode = NULL }, /* 0x0510 */ - { .altcode = NULL }, /* 0x0511 */ - { .altcode = NULL }, /* 0x0512 */ - { .altcode = NULL }, /* 0x0513 */ - { .altcode = NULL }, /* 0x0514 */ - { .altcode = NULL }, /* 0x0515 */ - { .altcode = NULL }, /* 0x0516 */ - { .altcode = NULL }, /* 0x0517 */ - { .altcode = NULL }, /* 0x0518 */ - { .altcode = NULL }, /* 0x0519 */ - { .altcode = NULL }, /* 0x051a */ - { .altcode = NULL }, /* 0x051b */ - { .altcode = NULL }, /* 0x051c */ - { .altcode = NULL }, /* 0x051d */ - { .altcode = NULL }, /* 0x051e */ - { .altcode = NULL }, /* 0x051f */ - { .altcode = NULL }, /* 0x0520 */ - { .altcode = NULL }, /* 0x0521 */ - { .altcode = NULL }, /* 0x0522 */ - { .altcode = NULL }, /* 0x0523 */ - { .altcode = NULL }, /* 0x0524 */ - { .altcode = NULL }, /* 0x0525 */ - { .altcode = NULL }, /* 0x0526 */ - { .altcode = NULL }, /* 0x0527 */ - { .altcode = NULL }, /* 0x0528 */ - { .altcode = NULL }, /* 0x0529 */ - { .altcode = NULL }, /* 0x052a */ - { .altcode = NULL }, /* 0x052b */ - { .altcode = NULL }, /* 0x052c */ - { .altcode = NULL }, /* 0x052d */ - { .altcode = NULL }, /* 0x052e */ - { .altcode = NULL }, /* 0x052f */ - { .altcode = NULL }, /* 0x0530 */ - { .altcode = NULL }, /* 0x0531 */ - { .altcode = NULL }, /* 0x0532 */ - { .altcode = NULL }, /* 0x0533 */ - { .altcode = NULL }, /* 0x0534 */ - { .altcode = NULL }, /* 0x0535 */ - { .altcode = NULL }, /* 0x0536 */ - { .altcode = NULL }, /* 0x0537 */ - { .altcode = NULL }, /* 0x0538 */ - { .altcode = NULL }, /* 0x0539 */ - { .altcode = NULL }, /* 0x053a */ - { .altcode = NULL }, /* 0x053b */ - { .altcode = NULL }, /* 0x053c */ - { .altcode = NULL }, /* 0x053d */ - { .altcode = NULL }, /* 0x053e */ - { .altcode = NULL }, /* 0x053f */ - { .altcode = NULL }, /* 0x0540 */ - { .altcode = NULL }, /* 0x0541 */ - { .altcode = NULL }, /* 0x0542 */ - { .altcode = NULL }, /* 0x0543 */ - { .altcode = NULL }, /* 0x0544 */ - { .altcode = NULL }, /* 0x0545 */ - { .altcode = NULL }, /* 0x0546 */ - { .altcode = NULL }, /* 0x0547 */ - { .altcode = NULL }, /* 0x0548 */ - { .altcode = NULL }, /* 0x0549 */ - { .altcode = NULL }, /* 0x054a */ - { .altcode = NULL }, /* 0x054b */ - { .altcode = NULL }, /* 0x054c */ - { .altcode = NULL }, /* 0x054d */ - { .altcode = NULL }, /* 0x054e */ - { .altcode = NULL }, /* 0x054f */ - { .altcode = NULL }, /* 0x0550 */ - { .altcode = NULL }, /* 0x0551 */ - { .altcode = NULL }, /* 0x0552 */ - { .altcode = NULL }, /* 0x0553 */ - { .altcode = NULL }, /* 0x0554 */ - { .altcode = NULL }, /* 0x0555 */ - { .altcode = NULL }, /* 0x0556 */ - { .altcode = NULL }, /* 0x0557 */ - { .altcode = NULL }, /* 0x0558 */ - { .altcode = NULL }, /* 0x0559 */ - { .altcode = NULL }, /* 0x055a */ - { .altcode = NULL }, /* 0x055b */ - { .altcode = NULL }, /* 0x055c */ - { .altcode = NULL }, /* 0x055d */ - { .altcode = NULL }, /* 0x055e */ - { .altcode = NULL }, /* 0x055f */ - { .altcode = NULL }, /* 0x0560 */ - { .altcode = NULL }, /* 0x0561 */ - { .altcode = NULL }, /* 0x0562 */ - { .altcode = NULL }, /* 0x0563 */ - { .altcode = NULL }, /* 0x0564 */ - { .altcode = NULL }, /* 0x0565 */ - { .altcode = NULL }, /* 0x0566 */ - { .altcode = NULL }, /* 0x0567 */ - { .altcode = NULL }, /* 0x0568 */ - { .altcode = NULL }, /* 0x0569 */ - { .altcode = NULL }, /* 0x056a */ - { .altcode = NULL }, /* 0x056b */ - { .altcode = NULL }, /* 0x056c */ - { .altcode = NULL }, /* 0x056d */ - { .altcode = NULL }, /* 0x056e */ - { .altcode = NULL }, /* 0x056f */ - { .altcode = NULL }, /* 0x0570 */ - { .altcode = NULL }, /* 0x0571 */ - { .altcode = NULL }, /* 0x0572 */ - { .altcode = NULL }, /* 0x0573 */ - { .altcode = NULL }, /* 0x0574 */ - { .altcode = NULL }, /* 0x0575 */ - { .altcode = NULL }, /* 0x0576 */ - { .altcode = NULL }, /* 0x0577 */ - { .altcode = NULL }, /* 0x0578 */ - { .altcode = NULL }, /* 0x0579 */ - { .altcode = NULL }, /* 0x057a */ - { .altcode = NULL }, /* 0x057b */ - { .altcode = NULL }, /* 0x057c */ - { .altcode = NULL }, /* 0x057d */ - { .altcode = NULL }, /* 0x057e */ - { .altcode = NULL }, /* 0x057f */ - { .altcode = NULL }, /* 0x0580 */ - { .altcode = NULL }, /* 0x0581 */ - { .altcode = NULL }, /* 0x0582 */ - { .altcode = NULL }, /* 0x0583 */ - { .altcode = NULL }, /* 0x0584 */ - { .altcode = NULL }, /* 0x0585 */ - { .altcode = NULL }, /* 0x0586 */ - { .altcode = NULL }, /* 0x0587 */ - { .altcode = NULL }, /* 0x0588 */ - { .altcode = NULL }, /* 0x0589 */ - { .altcode = NULL }, /* 0x058a */ - { .altcode = NULL }, /* 0x058b */ - { .altcode = NULL }, /* 0x058c */ - { .altcode = NULL }, /* 0x058d */ - { .altcode = NULL }, /* 0x058e */ - { .altcode = NULL }, /* 0x058f */ - { .altcode = NULL }, /* 0x0590 */ - { .altcode = NULL }, /* 0x0591 */ - { .altcode = NULL }, /* 0x0592 */ - { .altcode = NULL }, /* 0x0593 */ - { .altcode = NULL }, /* 0x0594 */ - { .altcode = NULL }, /* 0x0595 */ - { .altcode = NULL }, /* 0x0596 */ - { .altcode = NULL }, /* 0x0597 */ - { .altcode = NULL }, /* 0x0598 */ - { .altcode = NULL }, /* 0x0599 */ - { .altcode = NULL }, /* 0x059a */ - { .altcode = NULL }, /* 0x059b */ - { .altcode = NULL }, /* 0x059c */ - { .altcode = NULL }, /* 0x059d */ - { .altcode = NULL }, /* 0x059e */ - { .altcode = NULL }, /* 0x059f */ - { .altcode = NULL }, /* 0x05a0 */ - { .altcode = NULL }, /* 0x05a1 */ - { .altcode = NULL }, /* 0x05a2 */ - { .altcode = NULL }, /* 0x05a3 */ - { .altcode = NULL }, /* 0x05a4 */ - { .altcode = NULL }, /* 0x05a5 */ - { .altcode = NULL }, /* 0x05a6 */ - { .altcode = NULL }, /* 0x05a7 */ - { .altcode = NULL }, /* 0x05a8 */ - { .altcode = NULL }, /* 0x05a9 */ - { .altcode = NULL }, /* 0x05aa */ - { .altcode = NULL }, /* 0x05ab */ - { .altcode = NULL }, /* 0x05ac (Arabic_comma) */ - { .altcode = NULL }, /* 0x05ad */ - { .altcode = NULL }, /* 0x05ae */ - { .altcode = NULL }, /* 0x05af */ - { .altcode = NULL }, /* 0x05b0 */ - { .altcode = NULL }, /* 0x05b1 */ - { .altcode = NULL }, /* 0x05b2 */ - { .altcode = NULL }, /* 0x05b3 */ - { .altcode = NULL }, /* 0x05b4 */ - { .altcode = NULL }, /* 0x05b5 */ - { .altcode = NULL }, /* 0x05b6 */ - { .altcode = NULL }, /* 0x05b7 */ - { .altcode = NULL }, /* 0x05b8 */ - { .altcode = NULL }, /* 0x05b9 */ - { .altcode = NULL }, /* 0x05ba */ - { .altcode = NULL }, /* 0x05bb (Arabic_semicolon) */ - { .altcode = NULL }, /* 0x05bc */ - { .altcode = NULL }, /* 0x05bd */ - { .altcode = NULL }, /* 0x05be */ - { .altcode = NULL }, /* 0x05bf (Arabic_question_mark) */ - { .altcode = NULL }, /* 0x05c0 */ - { .altcode = NULL }, /* 0x05c1 (Arabic_hamza) */ - { .altcode = NULL }, /* 0x05c2 (Arabic_maddaonalef) */ - { .altcode = NULL }, /* 0x05c3 (Arabic_hamzaonalef) */ - { .altcode = NULL }, /* 0x05c4 (Arabic_hamzaonwaw) */ - { .altcode = NULL }, /* 0x05c5 (Arabic_hamzaunderalef) */ - { .altcode = NULL }, /* 0x05c6 (Arabic_hamzaonyeh) */ - { .altcode = NULL }, /* 0x05c7 (Arabic_alef) */ - { .altcode = NULL }, /* 0x05c8 (Arabic_beh) */ - { .altcode = NULL }, /* 0x05c9 (Arabic_tehmarbuta) */ - { .altcode = NULL }, /* 0x05ca (Arabic_teh) */ - { .altcode = NULL }, /* 0x05cb (Arabic_theh) */ - { .altcode = NULL }, /* 0x05cc (Arabic_jeem) */ - { .altcode = NULL }, /* 0x05cd (Arabic_hah) */ - { .altcode = NULL }, /* 0x05ce (Arabic_khah) */ - { .altcode = NULL }, /* 0x05cf (Arabic_dal) */ - { .altcode = NULL }, /* 0x05d0 (Arabic_thal) */ - { .altcode = NULL }, /* 0x05d1 (Arabic_ra) */ - { .altcode = NULL }, /* 0x05d2 (Arabic_zain) */ - { .altcode = NULL }, /* 0x05d3 (Arabic_seen) */ - { .altcode = NULL }, /* 0x05d4 (Arabic_sheen) */ - { .altcode = NULL }, /* 0x05d5 (Arabic_sad) */ - { .altcode = NULL }, /* 0x05d6 (Arabic_dad) */ - { .altcode = NULL }, /* 0x05d7 (Arabic_tah) */ - { .altcode = NULL }, /* 0x05d8 (Arabic_zah) */ - { .altcode = NULL }, /* 0x05d9 (Arabic_ain) */ - { .altcode = NULL }, /* 0x05da (Arabic_ghain) */ - { .altcode = NULL }, /* 0x05db */ - { .altcode = NULL }, /* 0x05dc */ - { .altcode = NULL }, /* 0x05dd */ - { .altcode = NULL }, /* 0x05de */ - { .altcode = NULL }, /* 0x05df */ - { .altcode = NULL }, /* 0x05e0 (Arabic_tatweel) */ - { .altcode = NULL }, /* 0x05e1 (Arabic_feh) */ - { .altcode = NULL }, /* 0x05e2 (Arabic_qaf) */ - { .altcode = NULL }, /* 0x05e3 (Arabic_kaf) */ - { .altcode = NULL }, /* 0x05e4 (Arabic_lam) */ - { .altcode = NULL }, /* 0x05e5 (Arabic_meem) */ - { .altcode = NULL }, /* 0x05e6 (Arabic_noon) */ - { .altcode = NULL }, /* 0x05e7 (Arabic_heh) */ - { .altcode = NULL }, /* 0x05e8 (Arabic_waw) */ - { .altcode = NULL }, /* 0x05e9 (Arabic_alefmaksura) */ - { .altcode = NULL }, /* 0x05ea (Arabic_yeh) */ - { .altcode = NULL }, /* 0x05eb (Arabic_fathatan) */ - { .altcode = NULL }, /* 0x05ec (Arabic_dammatan) */ - { .altcode = NULL }, /* 0x05ed (Arabic_kasratan) */ - { .altcode = NULL }, /* 0x05ee (Arabic_fatha) */ - { .altcode = NULL }, /* 0x05ef (Arabic_damma) */ - { .altcode = NULL }, /* 0x05f0 (Arabic_kasra) */ - { .altcode = NULL }, /* 0x05f1 (Arabic_shadda) */ - { .altcode = NULL }, /* 0x05f2 (Arabic_sukun) */ - { .altcode = NULL }, /* 0x05f3 */ - { .altcode = NULL }, /* 0x05f4 */ - { .altcode = NULL }, /* 0x05f5 */ - { .altcode = NULL }, /* 0x05f6 */ - { .altcode = NULL }, /* 0x05f7 */ - { .altcode = NULL }, /* 0x05f8 */ - { .altcode = NULL }, /* 0x05f9 */ - { .altcode = NULL }, /* 0x05fa */ - { .altcode = NULL }, /* 0x05fb */ - { .altcode = NULL }, /* 0x05fc */ - { .altcode = NULL }, /* 0x05fd */ - { .altcode = NULL }, /* 0x05fe */ - { .altcode = NULL }, /* 0x05ff */ + { .altcode = NULL }, /* 0x0500 */ + { .altcode = NULL }, /* 0x0501 */ + { .altcode = NULL }, /* 0x0502 */ + { .altcode = NULL }, /* 0x0503 */ + { .altcode = NULL }, /* 0x0504 */ + { .altcode = NULL }, /* 0x0505 */ + { .altcode = NULL }, /* 0x0506 */ + { .altcode = NULL }, /* 0x0507 */ + { .altcode = NULL }, /* 0x0508 */ + { .altcode = NULL }, /* 0x0509 */ + { .altcode = NULL }, /* 0x050a */ + { .altcode = NULL }, /* 0x050b */ + { .altcode = NULL }, /* 0x050c */ + { .altcode = NULL }, /* 0x050d */ + { .altcode = NULL }, /* 0x050e */ + { .altcode = NULL }, /* 0x050f */ + { .altcode = NULL }, /* 0x0510 */ + { .altcode = NULL }, /* 0x0511 */ + { .altcode = NULL }, /* 0x0512 */ + { .altcode = NULL }, /* 0x0513 */ + { .altcode = NULL }, /* 0x0514 */ + { .altcode = NULL }, /* 0x0515 */ + { .altcode = NULL }, /* 0x0516 */ + { .altcode = NULL }, /* 0x0517 */ + { .altcode = NULL }, /* 0x0518 */ + { .altcode = NULL }, /* 0x0519 */ + { .altcode = NULL }, /* 0x051a */ + { .altcode = NULL }, /* 0x051b */ + { .altcode = NULL }, /* 0x051c */ + { .altcode = NULL }, /* 0x051d */ + { .altcode = NULL }, /* 0x051e */ + { .altcode = NULL }, /* 0x051f */ + { .altcode = NULL }, /* 0x0520 */ + { .altcode = NULL }, /* 0x0521 */ + { .altcode = NULL }, /* 0x0522 */ + { .altcode = NULL }, /* 0x0523 */ + { .altcode = NULL }, /* 0x0524 */ + { .altcode = NULL }, /* 0x0525 */ + { .altcode = NULL }, /* 0x0526 */ + { .altcode = NULL }, /* 0x0527 */ + { .altcode = NULL }, /* 0x0528 */ + { .altcode = NULL }, /* 0x0529 */ + { .altcode = NULL }, /* 0x052a */ + { .altcode = NULL }, /* 0x052b */ + { .altcode = NULL }, /* 0x052c */ + { .altcode = NULL }, /* 0x052d */ + { .altcode = NULL }, /* 0x052e */ + { .altcode = NULL }, /* 0x052f */ + { .altcode = NULL }, /* 0x0530 */ + { .altcode = NULL }, /* 0x0531 */ + { .altcode = NULL }, /* 0x0532 */ + { .altcode = NULL }, /* 0x0533 */ + { .altcode = NULL }, /* 0x0534 */ + { .altcode = NULL }, /* 0x0535 */ + { .altcode = NULL }, /* 0x0536 */ + { .altcode = NULL }, /* 0x0537 */ + { .altcode = NULL }, /* 0x0538 */ + { .altcode = NULL }, /* 0x0539 */ + { .altcode = NULL }, /* 0x053a */ + { .altcode = NULL }, /* 0x053b */ + { .altcode = NULL }, /* 0x053c */ + { .altcode = NULL }, /* 0x053d */ + { .altcode = NULL }, /* 0x053e */ + { .altcode = NULL }, /* 0x053f */ + { .altcode = NULL }, /* 0x0540 */ + { .altcode = NULL }, /* 0x0541 */ + { .altcode = NULL }, /* 0x0542 */ + { .altcode = NULL }, /* 0x0543 */ + { .altcode = NULL }, /* 0x0544 */ + { .altcode = NULL }, /* 0x0545 */ + { .altcode = NULL }, /* 0x0546 */ + { .altcode = NULL }, /* 0x0547 */ + { .altcode = NULL }, /* 0x0548 */ + { .altcode = NULL }, /* 0x0549 */ + { .altcode = NULL }, /* 0x054a */ + { .altcode = NULL }, /* 0x054b */ + { .altcode = NULL }, /* 0x054c */ + { .altcode = NULL }, /* 0x054d */ + { .altcode = NULL }, /* 0x054e */ + { .altcode = NULL }, /* 0x054f */ + { .altcode = NULL }, /* 0x0550 */ + { .altcode = NULL }, /* 0x0551 */ + { .altcode = NULL }, /* 0x0552 */ + { .altcode = NULL }, /* 0x0553 */ + { .altcode = NULL }, /* 0x0554 */ + { .altcode = NULL }, /* 0x0555 */ + { .altcode = NULL }, /* 0x0556 */ + { .altcode = NULL }, /* 0x0557 */ + { .altcode = NULL }, /* 0x0558 */ + { .altcode = NULL }, /* 0x0559 */ + { .altcode = NULL }, /* 0x055a */ + { .altcode = NULL }, /* 0x055b */ + { .altcode = NULL }, /* 0x055c */ + { .altcode = NULL }, /* 0x055d */ + { .altcode = NULL }, /* 0x055e */ + { .altcode = NULL }, /* 0x055f */ + { .altcode = NULL }, /* 0x0560 */ + { .altcode = NULL }, /* 0x0561 */ + { .altcode = NULL }, /* 0x0562 */ + { .altcode = NULL }, /* 0x0563 */ + { .altcode = NULL }, /* 0x0564 */ + { .altcode = NULL }, /* 0x0565 */ + { .altcode = NULL }, /* 0x0566 */ + { .altcode = NULL }, /* 0x0567 */ + { .altcode = NULL }, /* 0x0568 */ + { .altcode = NULL }, /* 0x0569 */ + { .altcode = NULL }, /* 0x056a */ + { .altcode = NULL }, /* 0x056b */ + { .altcode = NULL }, /* 0x056c */ + { .altcode = NULL }, /* 0x056d */ + { .altcode = NULL }, /* 0x056e */ + { .altcode = NULL }, /* 0x056f */ + { .altcode = NULL }, /* 0x0570 */ + { .altcode = NULL }, /* 0x0571 */ + { .altcode = NULL }, /* 0x0572 */ + { .altcode = NULL }, /* 0x0573 */ + { .altcode = NULL }, /* 0x0574 */ + { .altcode = NULL }, /* 0x0575 */ + { .altcode = NULL }, /* 0x0576 */ + { .altcode = NULL }, /* 0x0577 */ + { .altcode = NULL }, /* 0x0578 */ + { .altcode = NULL }, /* 0x0579 */ + { .altcode = NULL }, /* 0x057a */ + { .altcode = NULL }, /* 0x057b */ + { .altcode = NULL }, /* 0x057c */ + { .altcode = NULL }, /* 0x057d */ + { .altcode = NULL }, /* 0x057e */ + { .altcode = NULL }, /* 0x057f */ + { .altcode = NULL }, /* 0x0580 */ + { .altcode = NULL }, /* 0x0581 */ + { .altcode = NULL }, /* 0x0582 */ + { .altcode = NULL }, /* 0x0583 */ + { .altcode = NULL }, /* 0x0584 */ + { .altcode = NULL }, /* 0x0585 */ + { .altcode = NULL }, /* 0x0586 */ + { .altcode = NULL }, /* 0x0587 */ + { .altcode = NULL }, /* 0x0588 */ + { .altcode = NULL }, /* 0x0589 */ + { .altcode = NULL }, /* 0x058a */ + { .altcode = NULL }, /* 0x058b */ + { .altcode = NULL }, /* 0x058c */ + { .altcode = NULL }, /* 0x058d */ + { .altcode = NULL }, /* 0x058e */ + { .altcode = NULL }, /* 0x058f */ + { .altcode = NULL }, /* 0x0590 */ + { .altcode = NULL }, /* 0x0591 */ + { .altcode = NULL }, /* 0x0592 */ + { .altcode = NULL }, /* 0x0593 */ + { .altcode = NULL }, /* 0x0594 */ + { .altcode = NULL }, /* 0x0595 */ + { .altcode = NULL }, /* 0x0596 */ + { .altcode = NULL }, /* 0x0597 */ + { .altcode = NULL }, /* 0x0598 */ + { .altcode = NULL }, /* 0x0599 */ + { .altcode = NULL }, /* 0x059a */ + { .altcode = NULL }, /* 0x059b */ + { .altcode = NULL }, /* 0x059c */ + { .altcode = NULL }, /* 0x059d */ + { .altcode = NULL }, /* 0x059e */ + { .altcode = NULL }, /* 0x059f */ + { .altcode = NULL }, /* 0x05a0 */ + { .altcode = NULL }, /* 0x05a1 */ + { .altcode = NULL }, /* 0x05a2 */ + { .altcode = NULL }, /* 0x05a3 */ + { .altcode = NULL }, /* 0x05a4 */ + { .altcode = NULL }, /* 0x05a5 */ + { .altcode = NULL }, /* 0x05a6 */ + { .altcode = NULL }, /* 0x05a7 */ + { .altcode = NULL }, /* 0x05a8 */ + { .altcode = NULL }, /* 0x05a9 */ + { .altcode = NULL }, /* 0x05aa */ + { .altcode = NULL }, /* 0x05ab */ + { .altcode = NULL }, /* 0x05ac (Arabic_comma) */ + { .altcode = NULL }, /* 0x05ad */ + { .altcode = NULL }, /* 0x05ae */ + { .altcode = NULL }, /* 0x05af */ + { .altcode = NULL }, /* 0x05b0 */ + { .altcode = NULL }, /* 0x05b1 */ + { .altcode = NULL }, /* 0x05b2 */ + { .altcode = NULL }, /* 0x05b3 */ + { .altcode = NULL }, /* 0x05b4 */ + { .altcode = NULL }, /* 0x05b5 */ + { .altcode = NULL }, /* 0x05b6 */ + { .altcode = NULL }, /* 0x05b7 */ + { .altcode = NULL }, /* 0x05b8 */ + { .altcode = NULL }, /* 0x05b9 */ + { .altcode = NULL }, /* 0x05ba */ + { .altcode = NULL }, /* 0x05bb (Arabic_semicolon) */ + { .altcode = NULL }, /* 0x05bc */ + { .altcode = NULL }, /* 0x05bd */ + { .altcode = NULL }, /* 0x05be */ + { .altcode = NULL }, /* 0x05bf (Arabic_question_mark) */ + { .altcode = NULL }, /* 0x05c0 */ + { .altcode = NULL }, /* 0x05c1 (Arabic_hamza) */ + { .altcode = NULL }, /* 0x05c2 (Arabic_maddaonalef) */ + { .altcode = NULL }, /* 0x05c3 (Arabic_hamzaonalef) */ + { .altcode = NULL }, /* 0x05c4 (Arabic_hamzaonwaw) */ + { .altcode = NULL }, /* 0x05c5 (Arabic_hamzaunderalef) */ + { .altcode = NULL }, /* 0x05c6 (Arabic_hamzaonyeh) */ + { .altcode = NULL }, /* 0x05c7 (Arabic_alef) */ + { .altcode = NULL }, /* 0x05c8 (Arabic_beh) */ + { .altcode = NULL }, /* 0x05c9 (Arabic_tehmarbuta) */ + { .altcode = NULL }, /* 0x05ca (Arabic_teh) */ + { .altcode = NULL }, /* 0x05cb (Arabic_theh) */ + { .altcode = NULL }, /* 0x05cc (Arabic_jeem) */ + { .altcode = NULL }, /* 0x05cd (Arabic_hah) */ + { .altcode = NULL }, /* 0x05ce (Arabic_khah) */ + { .altcode = NULL }, /* 0x05cf (Arabic_dal) */ + { .altcode = NULL }, /* 0x05d0 (Arabic_thal) */ + { .altcode = NULL }, /* 0x05d1 (Arabic_ra) */ + { .altcode = NULL }, /* 0x05d2 (Arabic_zain) */ + { .altcode = NULL }, /* 0x05d3 (Arabic_seen) */ + { .altcode = NULL }, /* 0x05d4 (Arabic_sheen) */ + { .altcode = NULL }, /* 0x05d5 (Arabic_sad) */ + { .altcode = NULL }, /* 0x05d6 (Arabic_dad) */ + { .altcode = NULL }, /* 0x05d7 (Arabic_tah) */ + { .altcode = NULL }, /* 0x05d8 (Arabic_zah) */ + { .altcode = NULL }, /* 0x05d9 (Arabic_ain) */ + { .altcode = NULL }, /* 0x05da (Arabic_ghain) */ + { .altcode = NULL }, /* 0x05db */ + { .altcode = NULL }, /* 0x05dc */ + { .altcode = NULL }, /* 0x05dd */ + { .altcode = NULL }, /* 0x05de */ + { .altcode = NULL }, /* 0x05df */ + { .altcode = NULL }, /* 0x05e0 (Arabic_tatweel) */ + { .altcode = NULL }, /* 0x05e1 (Arabic_feh) */ + { .altcode = NULL }, /* 0x05e2 (Arabic_qaf) */ + { .altcode = NULL }, /* 0x05e3 (Arabic_kaf) */ + { .altcode = NULL }, /* 0x05e4 (Arabic_lam) */ + { .altcode = NULL }, /* 0x05e5 (Arabic_meem) */ + { .altcode = NULL }, /* 0x05e6 (Arabic_noon) */ + { .altcode = NULL }, /* 0x05e7 (Arabic_heh) */ + { .altcode = NULL }, /* 0x05e8 (Arabic_waw) */ + { .altcode = NULL }, /* 0x05e9 (Arabic_alefmaksura) */ + { .altcode = NULL }, /* 0x05ea (Arabic_yeh) */ + { .altcode = NULL }, /* 0x05eb (Arabic_fathatan) */ + { .altcode = NULL }, /* 0x05ec (Arabic_dammatan) */ + { .altcode = NULL }, /* 0x05ed (Arabic_kasratan) */ + { .altcode = NULL }, /* 0x05ee (Arabic_fatha) */ + { .altcode = NULL }, /* 0x05ef (Arabic_damma) */ + { .altcode = NULL }, /* 0x05f0 (Arabic_kasra) */ + { .altcode = NULL }, /* 0x05f1 (Arabic_shadda) */ + { .altcode = NULL }, /* 0x05f2 (Arabic_sukun) */ + { .altcode = NULL }, /* 0x05f3 */ + { .altcode = NULL }, /* 0x05f4 */ + { .altcode = NULL }, /* 0x05f5 */ + { .altcode = NULL }, /* 0x05f6 */ + { .altcode = NULL }, /* 0x05f7 */ + { .altcode = NULL }, /* 0x05f8 */ + { .altcode = NULL }, /* 0x05f9 */ + { .altcode = NULL }, /* 0x05fa */ + { .altcode = NULL }, /* 0x05fb */ + { .altcode = NULL }, /* 0x05fc */ + { .altcode = NULL }, /* 0x05fd */ + { .altcode = NULL }, /* 0x05fe */ + { .altcode = NULL }, /* 0x05ff */ }, { /* 0x06?? */ - { .altcode = NULL }, /* 0x0600 */ - { .altcode = NULL }, /* 0x0601 */ - { .altcode = NULL }, /* 0x0602 */ - { .altcode = NULL }, /* 0x0603 */ - { .altcode = NULL }, /* 0x0604 */ - { .altcode = NULL }, /* 0x0605 */ - { .altcode = NULL }, /* 0x0606 */ - { .altcode = NULL }, /* 0x0607 */ - { .altcode = NULL }, /* 0x0608 */ - { .altcode = NULL }, /* 0x0609 */ - { .altcode = NULL }, /* 0x060a */ - { .altcode = NULL }, /* 0x060b */ - { .altcode = NULL }, /* 0x060c */ - { .altcode = NULL }, /* 0x060d */ - { .altcode = NULL }, /* 0x060e */ - { .altcode = NULL }, /* 0x060f */ - { .altcode = NULL }, /* 0x0610 */ - { .altcode = NULL }, /* 0x0611 */ - { .altcode = NULL }, /* 0x0612 */ - { .altcode = NULL }, /* 0x0613 */ - { .altcode = NULL }, /* 0x0614 */ - { .altcode = NULL }, /* 0x0615 */ - { .altcode = NULL }, /* 0x0616 */ - { .altcode = NULL }, /* 0x0617 */ - { .altcode = NULL }, /* 0x0618 */ - { .altcode = NULL }, /* 0x0619 */ - { .altcode = NULL }, /* 0x061a */ - { .altcode = NULL }, /* 0x061b */ - { .altcode = NULL }, /* 0x061c */ - { .altcode = NULL }, /* 0x061d */ - { .altcode = NULL }, /* 0x061e */ - { .altcode = NULL }, /* 0x061f */ - { .altcode = NULL }, /* 0x0620 */ - { .altcode = NULL }, /* 0x0621 */ - { .altcode = NULL }, /* 0x0622 */ - { .altcode = NULL }, /* 0x0623 */ - { .altcode = NULL }, /* 0x0624 */ - { .altcode = NULL }, /* 0x0625 */ - { .altcode = NULL }, /* 0x0626 */ - { .altcode = NULL }, /* 0x0627 */ - { .altcode = NULL }, /* 0x0628 */ - { .altcode = NULL }, /* 0x0629 */ - { .altcode = NULL }, /* 0x062a */ - { .altcode = NULL }, /* 0x062b */ - { .altcode = NULL }, /* 0x062c */ - { .altcode = NULL }, /* 0x062d */ - { .altcode = NULL }, /* 0x062e */ - { .altcode = NULL }, /* 0x062f */ - { .altcode = NULL }, /* 0x0630 */ - { .altcode = NULL }, /* 0x0631 */ - { .altcode = NULL }, /* 0x0632 */ - { .altcode = NULL }, /* 0x0633 */ - { .altcode = NULL }, /* 0x0634 */ - { .altcode = NULL }, /* 0x0635 */ - { .altcode = NULL }, /* 0x0636 */ - { .altcode = NULL }, /* 0x0637 */ - { .altcode = NULL }, /* 0x0638 */ - { .altcode = NULL }, /* 0x0639 */ - { .altcode = NULL }, /* 0x063a */ - { .altcode = NULL }, /* 0x063b */ - { .altcode = NULL }, /* 0x063c */ - { .altcode = NULL }, /* 0x063d */ - { .altcode = NULL }, /* 0x063e */ - { .altcode = NULL }, /* 0x063f */ - { .altcode = NULL }, /* 0x0640 */ - { .altcode = NULL }, /* 0x0641 */ - { .altcode = NULL }, /* 0x0642 */ - { .altcode = NULL }, /* 0x0643 */ - { .altcode = NULL }, /* 0x0644 */ - { .altcode = NULL }, /* 0x0645 */ - { .altcode = NULL }, /* 0x0646 */ - { .altcode = NULL }, /* 0x0647 */ - { .altcode = NULL }, /* 0x0648 */ - { .altcode = NULL }, /* 0x0649 */ - { .altcode = NULL }, /* 0x064a */ - { .altcode = NULL }, /* 0x064b */ - { .altcode = NULL }, /* 0x064c */ - { .altcode = NULL }, /* 0x064d */ - { .altcode = NULL }, /* 0x064e */ - { .altcode = NULL }, /* 0x064f */ - { .altcode = NULL }, /* 0x0650 */ - { .altcode = NULL }, /* 0x0651 */ - { .altcode = NULL }, /* 0x0652 */ - { .altcode = NULL }, /* 0x0653 */ - { .altcode = NULL }, /* 0x0654 */ - { .altcode = NULL }, /* 0x0655 */ - { .altcode = NULL }, /* 0x0656 */ - { .altcode = NULL }, /* 0x0657 */ - { .altcode = NULL }, /* 0x0658 */ - { .altcode = NULL }, /* 0x0659 */ - { .altcode = NULL }, /* 0x065a */ - { .altcode = NULL }, /* 0x065b */ - { .altcode = NULL }, /* 0x065c */ - { .altcode = NULL }, /* 0x065d */ - { .altcode = NULL }, /* 0x065e */ - { .altcode = NULL }, /* 0x065f */ - { .altcode = NULL }, /* 0x0660 */ - { .altcode = NULL }, /* 0x0661 */ - { .altcode = NULL }, /* 0x0662 */ - { .altcode = NULL }, /* 0x0663 */ - { .altcode = NULL }, /* 0x0664 */ - { .altcode = NULL }, /* 0x0665 */ - { .altcode = NULL }, /* 0x0666 */ - { .altcode = NULL }, /* 0x0667 */ - { .altcode = NULL }, /* 0x0668 */ - { .altcode = NULL }, /* 0x0669 */ - { .altcode = NULL }, /* 0x066a */ - { .altcode = NULL }, /* 0x066b */ - { .altcode = NULL }, /* 0x066c */ - { .altcode = NULL }, /* 0x066d */ - { .altcode = NULL }, /* 0x066e */ - { .altcode = NULL }, /* 0x066f */ - { .altcode = NULL }, /* 0x0670 */ - { .altcode = NULL }, /* 0x0671 */ - { .altcode = NULL }, /* 0x0672 */ - { .altcode = NULL }, /* 0x0673 */ - { .altcode = NULL }, /* 0x0674 */ - { .altcode = NULL }, /* 0x0675 */ - { .altcode = NULL }, /* 0x0676 */ - { .altcode = NULL }, /* 0x0677 */ - { .altcode = NULL }, /* 0x0678 */ - { .altcode = NULL }, /* 0x0679 */ - { .altcode = NULL }, /* 0x067a */ - { .altcode = NULL }, /* 0x067b */ - { .altcode = NULL }, /* 0x067c */ - { .altcode = NULL }, /* 0x067d */ - { .altcode = NULL }, /* 0x067e */ - { .altcode = NULL }, /* 0x067f */ - { .altcode = NULL }, /* 0x0680 */ - { .altcode = NULL }, /* 0x0681 */ - { .altcode = NULL }, /* 0x0682 */ - { .altcode = NULL }, /* 0x0683 */ - { .altcode = NULL }, /* 0x0684 */ - { .altcode = NULL }, /* 0x0685 */ - { .altcode = NULL }, /* 0x0686 */ - { .altcode = NULL }, /* 0x0687 */ - { .altcode = NULL }, /* 0x0688 */ - { .altcode = NULL }, /* 0x0689 */ - { .altcode = NULL }, /* 0x068a */ - { .altcode = NULL }, /* 0x068b */ - { .altcode = NULL }, /* 0x068c */ - { .altcode = NULL }, /* 0x068d */ - { .altcode = NULL }, /* 0x068e */ - { .altcode = NULL }, /* 0x068f */ - { .altcode = NULL }, /* 0x0690 */ - { .altcode = NULL }, /* 0x0691 */ - { .altcode = NULL }, /* 0x0692 */ - { .altcode = NULL }, /* 0x0693 */ - { .altcode = NULL }, /* 0x0694 */ - { .altcode = NULL }, /* 0x0695 */ - { .altcode = NULL }, /* 0x0696 */ - { .altcode = NULL }, /* 0x0697 */ - { .altcode = NULL }, /* 0x0698 */ - { .altcode = NULL }, /* 0x0699 */ - { .altcode = NULL }, /* 0x069a */ - { .altcode = NULL }, /* 0x069b */ - { .altcode = NULL }, /* 0x069c */ - { .altcode = NULL }, /* 0x069d */ - { .altcode = NULL }, /* 0x069e */ - { .altcode = NULL }, /* 0x069f */ - { .altcode = NULL }, /* 0x06a0 */ - { .altcode = NULL }, /* 0x06a1 (Serbian_dje) */ - { .altcode = NULL }, /* 0x06a2 (Macedonia_gje) */ - { .altcode = NULL }, /* 0x06a3 (Cyrillic_io) */ - { .altcode = NULL }, /* 0x06a4 (Ukranian_je) */ - { .altcode = NULL }, /* 0x06a5 (Macedonia_dse) */ - { .altcode = NULL }, /* 0x06a6 (Ukranian_i) */ - { .altcode = NULL }, /* 0x06a7 (Ukranian_yi) */ - { .altcode = NULL }, /* 0x06a8 (Serbian_je) */ - { .altcode = NULL }, /* 0x06a9 (Serbian_lje) */ - { .altcode = NULL }, /* 0x06aa (Serbian_nje) */ - { .altcode = NULL }, /* 0x06ab (Serbian_tshe) */ - { .altcode = NULL }, /* 0x06ac (Macedonia_kje) */ - { .altcode = NULL }, /* 0x06ad (Ukrainian_ghe_with_upturn) */ - { .altcode = NULL }, /* 0x06ae (Byelorussian_shortu) */ - { .altcode = NULL }, /* 0x06af (Serbian_dze) */ - { .altcode = NULL }, /* 0x06b0 (numerosign) */ - { .altcode = NULL }, /* 0x06b1 (Serbian_DJE) */ - { .altcode = NULL }, /* 0x06b2 (Macedonia_GJE) */ - { .altcode = NULL }, /* 0x06b3 (Cyrillic_IO) */ - { .altcode = NULL }, /* 0x06b4 (Ukranian_JE) */ - { .altcode = NULL }, /* 0x06b5 (Macedonia_DSE) */ - { .altcode = NULL }, /* 0x06b6 (Ukranian_I) */ - { .altcode = NULL }, /* 0x06b7 (Ukranian_YI) */ - { .altcode = NULL }, /* 0x06b8 (Serbian_JE) */ - { .altcode = NULL }, /* 0x06b9 (Serbian_LJE) */ - { .altcode = NULL }, /* 0x06ba (Serbian_NJE) */ - { .altcode = NULL }, /* 0x06bb (Serbian_TSHE) */ - { .altcode = NULL }, /* 0x06bc (Macedonia_KJE) */ - { .altcode = NULL }, /* 0x06bd (Ukrainian_GHE_WITH_UPTURN) */ - { .altcode = NULL }, /* 0x06be (Byelorussian_SHORTU) */ - { .altcode = NULL }, /* 0x06bf (Serbian_DZE) */ - { .altcode = NULL }, /* 0x06c0 (Cyrillic_yu) */ - { .altcode = NULL }, /* 0x06c1 (Cyrillic_a) */ - { .altcode = NULL }, /* 0x06c2 (Cyrillic_be) */ - { .altcode = NULL }, /* 0x06c3 (Cyrillic_tse) */ - { .altcode = NULL }, /* 0x06c4 (Cyrillic_de) */ - { .altcode = NULL }, /* 0x06c5 (Cyrillic_ie) */ - { .altcode = NULL }, /* 0x06c6 (Cyrillic_ef) */ - { .altcode = NULL }, /* 0x06c7 (Cyrillic_ghe) */ - { .altcode = NULL }, /* 0x06c8 (Cyrillic_ha) */ - { .altcode = NULL }, /* 0x06c9 (Cyrillic_i) */ - { .altcode = NULL }, /* 0x06ca (Cyrillic_shorti) */ - { .altcode = NULL }, /* 0x06cb (Cyrillic_ka) */ - { .altcode = NULL }, /* 0x06cc (Cyrillic_el) */ - { .altcode = NULL }, /* 0x06cd (Cyrillic_em) */ - { .altcode = NULL }, /* 0x06ce (Cyrillic_en) */ - { .altcode = NULL }, /* 0x06cf (Cyrillic_o) */ - { .altcode = NULL }, /* 0x06d0 (Cyrillic_pe) */ - { .altcode = NULL }, /* 0x06d1 (Cyrillic_ya) */ - { .altcode = NULL }, /* 0x06d2 (Cyrillic_er) */ - { .altcode = NULL }, /* 0x06d3 (Cyrillic_es) */ - { .altcode = NULL }, /* 0x06d4 (Cyrillic_te) */ - { .altcode = NULL }, /* 0x06d5 (Cyrillic_u) */ - { .altcode = NULL }, /* 0x06d6 (Cyrillic_zhe) */ - { .altcode = NULL }, /* 0x06d7 (Cyrillic_ve) */ - { .altcode = NULL }, /* 0x06d8 (Cyrillic_softsign) */ - { .altcode = NULL }, /* 0x06d9 (Cyrillic_yeru) */ - { .altcode = NULL }, /* 0x06da (Cyrillic_ze) */ - { .altcode = NULL }, /* 0x06db (Cyrillic_sha) */ - { .altcode = NULL }, /* 0x06dc (Cyrillic_e) */ - { .altcode = NULL }, /* 0x06dd (Cyrillic_shcha) */ - { .altcode = NULL }, /* 0x06de (Cyrillic_che) */ - { .altcode = NULL }, /* 0x06df (Cyrillic_hardsign) */ - { .altcode = NULL }, /* 0x06e0 (Cyrillic_YU) */ - { .altcode = NULL }, /* 0x06e1 (Cyrillic_A) */ - { .altcode = NULL }, /* 0x06e2 (Cyrillic_BE) */ - { .altcode = NULL }, /* 0x06e3 (Cyrillic_TSE) */ - { .altcode = NULL }, /* 0x06e4 (Cyrillic_DE) */ - { .altcode = NULL }, /* 0x06e5 (Cyrillic_IE) */ - { .altcode = NULL }, /* 0x06e6 (Cyrillic_EF) */ - { .altcode = NULL }, /* 0x06e7 (Cyrillic_GHE) */ - { .altcode = NULL }, /* 0x06e8 (Cyrillic_HA) */ - { .altcode = NULL }, /* 0x06e9 (Cyrillic_I) */ - { .altcode = NULL }, /* 0x06ea (Cyrillic_SHORTI) */ - { .altcode = NULL }, /* 0x06eb (Cyrillic_KA) */ - { .altcode = NULL }, /* 0x06ec (Cyrillic_EL) */ - { .altcode = NULL }, /* 0x06ed (Cyrillic_EM) */ - { .altcode = NULL }, /* 0x06ee (Cyrillic_EN) */ - { .altcode = NULL }, /* 0x06ef (Cyrillic_O) */ - { .altcode = NULL }, /* 0x06f0 (Cyrillic_PE) */ - { .altcode = NULL }, /* 0x06f1 (Cyrillic_YA) */ - { .altcode = NULL }, /* 0x06f2 (Cyrillic_ER) */ - { .altcode = NULL }, /* 0x06f3 (Cyrillic_ES) */ - { .altcode = NULL }, /* 0x06f4 (Cyrillic_TE) */ - { .altcode = NULL }, /* 0x06f5 (Cyrillic_U) */ - { .altcode = NULL }, /* 0x06f6 (Cyrillic_ZHE) */ - { .altcode = NULL }, /* 0x06f7 (Cyrillic_VE) */ - { .altcode = NULL }, /* 0x06f8 (Cyrillic_SOFTSIGN) */ - { .altcode = NULL }, /* 0x06f9 (Cyrillic_YERU) */ - { .altcode = NULL }, /* 0x06fa (Cyrillic_ZE) */ - { .altcode = NULL }, /* 0x06fb (Cyrillic_SHA) */ - { .altcode = NULL }, /* 0x06fc (Cyrillic_E) */ - { .altcode = NULL }, /* 0x06fd (Cyrillic_SHCHA) */ - { .altcode = NULL }, /* 0x06fe (Cyrillic_CHE) */ - { .altcode = NULL }, /* 0x06ff (Cyrillic_HARDSIGN) */ + { .altcode = NULL }, /* 0x0600 */ + { .altcode = NULL }, /* 0x0601 */ + { .altcode = NULL }, /* 0x0602 */ + { .altcode = NULL }, /* 0x0603 */ + { .altcode = NULL }, /* 0x0604 */ + { .altcode = NULL }, /* 0x0605 */ + { .altcode = NULL }, /* 0x0606 */ + { .altcode = NULL }, /* 0x0607 */ + { .altcode = NULL }, /* 0x0608 */ + { .altcode = NULL }, /* 0x0609 */ + { .altcode = NULL }, /* 0x060a */ + { .altcode = NULL }, /* 0x060b */ + { .altcode = NULL }, /* 0x060c */ + { .altcode = NULL }, /* 0x060d */ + { .altcode = NULL }, /* 0x060e */ + { .altcode = NULL }, /* 0x060f */ + { .altcode = NULL }, /* 0x0610 */ + { .altcode = NULL }, /* 0x0611 */ + { .altcode = NULL }, /* 0x0612 */ + { .altcode = NULL }, /* 0x0613 */ + { .altcode = NULL }, /* 0x0614 */ + { .altcode = NULL }, /* 0x0615 */ + { .altcode = NULL }, /* 0x0616 */ + { .altcode = NULL }, /* 0x0617 */ + { .altcode = NULL }, /* 0x0618 */ + { .altcode = NULL }, /* 0x0619 */ + { .altcode = NULL }, /* 0x061a */ + { .altcode = NULL }, /* 0x061b */ + { .altcode = NULL }, /* 0x061c */ + { .altcode = NULL }, /* 0x061d */ + { .altcode = NULL }, /* 0x061e */ + { .altcode = NULL }, /* 0x061f */ + { .altcode = NULL }, /* 0x0620 */ + { .altcode = NULL }, /* 0x0621 */ + { .altcode = NULL }, /* 0x0622 */ + { .altcode = NULL }, /* 0x0623 */ + { .altcode = NULL }, /* 0x0624 */ + { .altcode = NULL }, /* 0x0625 */ + { .altcode = NULL }, /* 0x0626 */ + { .altcode = NULL }, /* 0x0627 */ + { .altcode = NULL }, /* 0x0628 */ + { .altcode = NULL }, /* 0x0629 */ + { .altcode = NULL }, /* 0x062a */ + { .altcode = NULL }, /* 0x062b */ + { .altcode = NULL }, /* 0x062c */ + { .altcode = NULL }, /* 0x062d */ + { .altcode = NULL }, /* 0x062e */ + { .altcode = NULL }, /* 0x062f */ + { .altcode = NULL }, /* 0x0630 */ + { .altcode = NULL }, /* 0x0631 */ + { .altcode = NULL }, /* 0x0632 */ + { .altcode = NULL }, /* 0x0633 */ + { .altcode = NULL }, /* 0x0634 */ + { .altcode = NULL }, /* 0x0635 */ + { .altcode = NULL }, /* 0x0636 */ + { .altcode = NULL }, /* 0x0637 */ + { .altcode = NULL }, /* 0x0638 */ + { .altcode = NULL }, /* 0x0639 */ + { .altcode = NULL }, /* 0x063a */ + { .altcode = NULL }, /* 0x063b */ + { .altcode = NULL }, /* 0x063c */ + { .altcode = NULL }, /* 0x063d */ + { .altcode = NULL }, /* 0x063e */ + { .altcode = NULL }, /* 0x063f */ + { .altcode = NULL }, /* 0x0640 */ + { .altcode = NULL }, /* 0x0641 */ + { .altcode = NULL }, /* 0x0642 */ + { .altcode = NULL }, /* 0x0643 */ + { .altcode = NULL }, /* 0x0644 */ + { .altcode = NULL }, /* 0x0645 */ + { .altcode = NULL }, /* 0x0646 */ + { .altcode = NULL }, /* 0x0647 */ + { .altcode = NULL }, /* 0x0648 */ + { .altcode = NULL }, /* 0x0649 */ + { .altcode = NULL }, /* 0x064a */ + { .altcode = NULL }, /* 0x064b */ + { .altcode = NULL }, /* 0x064c */ + { .altcode = NULL }, /* 0x064d */ + { .altcode = NULL }, /* 0x064e */ + { .altcode = NULL }, /* 0x064f */ + { .altcode = NULL }, /* 0x0650 */ + { .altcode = NULL }, /* 0x0651 */ + { .altcode = NULL }, /* 0x0652 */ + { .altcode = NULL }, /* 0x0653 */ + { .altcode = NULL }, /* 0x0654 */ + { .altcode = NULL }, /* 0x0655 */ + { .altcode = NULL }, /* 0x0656 */ + { .altcode = NULL }, /* 0x0657 */ + { .altcode = NULL }, /* 0x0658 */ + { .altcode = NULL }, /* 0x0659 */ + { .altcode = NULL }, /* 0x065a */ + { .altcode = NULL }, /* 0x065b */ + { .altcode = NULL }, /* 0x065c */ + { .altcode = NULL }, /* 0x065d */ + { .altcode = NULL }, /* 0x065e */ + { .altcode = NULL }, /* 0x065f */ + { .altcode = NULL }, /* 0x0660 */ + { .altcode = NULL }, /* 0x0661 */ + { .altcode = NULL }, /* 0x0662 */ + { .altcode = NULL }, /* 0x0663 */ + { .altcode = NULL }, /* 0x0664 */ + { .altcode = NULL }, /* 0x0665 */ + { .altcode = NULL }, /* 0x0666 */ + { .altcode = NULL }, /* 0x0667 */ + { .altcode = NULL }, /* 0x0668 */ + { .altcode = NULL }, /* 0x0669 */ + { .altcode = NULL }, /* 0x066a */ + { .altcode = NULL }, /* 0x066b */ + { .altcode = NULL }, /* 0x066c */ + { .altcode = NULL }, /* 0x066d */ + { .altcode = NULL }, /* 0x066e */ + { .altcode = NULL }, /* 0x066f */ + { .altcode = NULL }, /* 0x0670 */ + { .altcode = NULL }, /* 0x0671 */ + { .altcode = NULL }, /* 0x0672 */ + { .altcode = NULL }, /* 0x0673 */ + { .altcode = NULL }, /* 0x0674 */ + { .altcode = NULL }, /* 0x0675 */ + { .altcode = NULL }, /* 0x0676 */ + { .altcode = NULL }, /* 0x0677 */ + { .altcode = NULL }, /* 0x0678 */ + { .altcode = NULL }, /* 0x0679 */ + { .altcode = NULL }, /* 0x067a */ + { .altcode = NULL }, /* 0x067b */ + { .altcode = NULL }, /* 0x067c */ + { .altcode = NULL }, /* 0x067d */ + { .altcode = NULL }, /* 0x067e */ + { .altcode = NULL }, /* 0x067f */ + { .altcode = NULL }, /* 0x0680 */ + { .altcode = NULL }, /* 0x0681 */ + { .altcode = NULL }, /* 0x0682 */ + { .altcode = NULL }, /* 0x0683 */ + { .altcode = NULL }, /* 0x0684 */ + { .altcode = NULL }, /* 0x0685 */ + { .altcode = NULL }, /* 0x0686 */ + { .altcode = NULL }, /* 0x0687 */ + { .altcode = NULL }, /* 0x0688 */ + { .altcode = NULL }, /* 0x0689 */ + { .altcode = NULL }, /* 0x068a */ + { .altcode = NULL }, /* 0x068b */ + { .altcode = NULL }, /* 0x068c */ + { .altcode = NULL }, /* 0x068d */ + { .altcode = NULL }, /* 0x068e */ + { .altcode = NULL }, /* 0x068f */ + { .altcode = NULL }, /* 0x0690 */ + { .altcode = NULL }, /* 0x0691 */ + { .altcode = NULL }, /* 0x0692 */ + { .altcode = NULL }, /* 0x0693 */ + { .altcode = NULL }, /* 0x0694 */ + { .altcode = NULL }, /* 0x0695 */ + { .altcode = NULL }, /* 0x0696 */ + { .altcode = NULL }, /* 0x0697 */ + { .altcode = NULL }, /* 0x0698 */ + { .altcode = NULL }, /* 0x0699 */ + { .altcode = NULL }, /* 0x069a */ + { .altcode = NULL }, /* 0x069b */ + { .altcode = NULL }, /* 0x069c */ + { .altcode = NULL }, /* 0x069d */ + { .altcode = NULL }, /* 0x069e */ + { .altcode = NULL }, /* 0x069f */ + { .altcode = NULL }, /* 0x06a0 */ + { .altcode = NULL }, /* 0x06a1 (Serbian_dje) */ + { .altcode = NULL }, /* 0x06a2 (Macedonia_gje) */ + { .altcode = NULL }, /* 0x06a3 (Cyrillic_io) */ + { .altcode = NULL }, /* 0x06a4 (Ukranian_je) */ + { .altcode = NULL }, /* 0x06a5 (Macedonia_dse) */ + { .altcode = NULL }, /* 0x06a6 (Ukranian_i) */ + { .altcode = NULL }, /* 0x06a7 (Ukranian_yi) */ + { .altcode = NULL }, /* 0x06a8 (Serbian_je) */ + { .altcode = NULL }, /* 0x06a9 (Serbian_lje) */ + { .altcode = NULL }, /* 0x06aa (Serbian_nje) */ + { .altcode = NULL }, /* 0x06ab (Serbian_tshe) */ + { .altcode = NULL }, /* 0x06ac (Macedonia_kje) */ + { .altcode = NULL }, /* 0x06ad (Ukrainian_ghe_with_upturn) */ + { .altcode = NULL }, /* 0x06ae (Byelorussian_shortu) */ + { .altcode = NULL }, /* 0x06af (Serbian_dze) */ + { .altcode = NULL }, /* 0x06b0 (numerosign) */ + { .altcode = NULL }, /* 0x06b1 (Serbian_DJE) */ + { .altcode = NULL }, /* 0x06b2 (Macedonia_GJE) */ + { .altcode = NULL }, /* 0x06b3 (Cyrillic_IO) */ + { .altcode = NULL }, /* 0x06b4 (Ukranian_JE) */ + { .altcode = NULL }, /* 0x06b5 (Macedonia_DSE) */ + { .altcode = NULL }, /* 0x06b6 (Ukranian_I) */ + { .altcode = NULL }, /* 0x06b7 (Ukranian_YI) */ + { .altcode = NULL }, /* 0x06b8 (Serbian_JE) */ + { .altcode = NULL }, /* 0x06b9 (Serbian_LJE) */ + { .altcode = NULL }, /* 0x06ba (Serbian_NJE) */ + { .altcode = NULL }, /* 0x06bb (Serbian_TSHE) */ + { .altcode = NULL }, /* 0x06bc (Macedonia_KJE) */ + { .altcode = NULL }, /* 0x06bd (Ukrainian_GHE_WITH_UPTURN) */ + { .altcode = NULL }, /* 0x06be (Byelorussian_SHORTU) */ + { .altcode = NULL }, /* 0x06bf (Serbian_DZE) */ + { .altcode = NULL }, /* 0x06c0 (Cyrillic_yu) */ + { .altcode = NULL }, /* 0x06c1 (Cyrillic_a) */ + { .altcode = NULL }, /* 0x06c2 (Cyrillic_be) */ + { .altcode = NULL }, /* 0x06c3 (Cyrillic_tse) */ + { .altcode = NULL }, /* 0x06c4 (Cyrillic_de) */ + { .altcode = NULL }, /* 0x06c5 (Cyrillic_ie) */ + { .altcode = NULL }, /* 0x06c6 (Cyrillic_ef) */ + { .altcode = NULL }, /* 0x06c7 (Cyrillic_ghe) */ + { .altcode = NULL }, /* 0x06c8 (Cyrillic_ha) */ + { .altcode = NULL }, /* 0x06c9 (Cyrillic_i) */ + { .altcode = NULL }, /* 0x06ca (Cyrillic_shorti) */ + { .altcode = NULL }, /* 0x06cb (Cyrillic_ka) */ + { .altcode = NULL }, /* 0x06cc (Cyrillic_el) */ + { .altcode = NULL }, /* 0x06cd (Cyrillic_em) */ + { .altcode = NULL }, /* 0x06ce (Cyrillic_en) */ + { .altcode = NULL }, /* 0x06cf (Cyrillic_o) */ + { .altcode = NULL }, /* 0x06d0 (Cyrillic_pe) */ + { .altcode = NULL }, /* 0x06d1 (Cyrillic_ya) */ + { .altcode = NULL }, /* 0x06d2 (Cyrillic_er) */ + { .altcode = NULL }, /* 0x06d3 (Cyrillic_es) */ + { .altcode = NULL }, /* 0x06d4 (Cyrillic_te) */ + { .altcode = NULL }, /* 0x06d5 (Cyrillic_u) */ + { .altcode = NULL }, /* 0x06d6 (Cyrillic_zhe) */ + { .altcode = NULL }, /* 0x06d7 (Cyrillic_ve) */ + { .altcode = NULL }, /* 0x06d8 (Cyrillic_softsign) */ + { .altcode = NULL }, /* 0x06d9 (Cyrillic_yeru) */ + { .altcode = NULL }, /* 0x06da (Cyrillic_ze) */ + { .altcode = NULL }, /* 0x06db (Cyrillic_sha) */ + { .altcode = NULL }, /* 0x06dc (Cyrillic_e) */ + { .altcode = NULL }, /* 0x06dd (Cyrillic_shcha) */ + { .altcode = NULL }, /* 0x06de (Cyrillic_che) */ + { .altcode = NULL }, /* 0x06df (Cyrillic_hardsign) */ + { .altcode = NULL }, /* 0x06e0 (Cyrillic_YU) */ + { .altcode = NULL }, /* 0x06e1 (Cyrillic_A) */ + { .altcode = NULL }, /* 0x06e2 (Cyrillic_BE) */ + { .altcode = NULL }, /* 0x06e3 (Cyrillic_TSE) */ + { .altcode = NULL }, /* 0x06e4 (Cyrillic_DE) */ + { .altcode = NULL }, /* 0x06e5 (Cyrillic_IE) */ + { .altcode = NULL }, /* 0x06e6 (Cyrillic_EF) */ + { .altcode = NULL }, /* 0x06e7 (Cyrillic_GHE) */ + { .altcode = NULL }, /* 0x06e8 (Cyrillic_HA) */ + { .altcode = NULL }, /* 0x06e9 (Cyrillic_I) */ + { .altcode = NULL }, /* 0x06ea (Cyrillic_SHORTI) */ + { .altcode = NULL }, /* 0x06eb (Cyrillic_KA) */ + { .altcode = NULL }, /* 0x06ec (Cyrillic_EL) */ + { .altcode = NULL }, /* 0x06ed (Cyrillic_EM) */ + { .altcode = NULL }, /* 0x06ee (Cyrillic_EN) */ + { .altcode = NULL }, /* 0x06ef (Cyrillic_O) */ + { .altcode = NULL }, /* 0x06f0 (Cyrillic_PE) */ + { .altcode = NULL }, /* 0x06f1 (Cyrillic_YA) */ + { .altcode = NULL }, /* 0x06f2 (Cyrillic_ER) */ + { .altcode = NULL }, /* 0x06f3 (Cyrillic_ES) */ + { .altcode = NULL }, /* 0x06f4 (Cyrillic_TE) */ + { .altcode = NULL }, /* 0x06f5 (Cyrillic_U) */ + { .altcode = NULL }, /* 0x06f6 (Cyrillic_ZHE) */ + { .altcode = NULL }, /* 0x06f7 (Cyrillic_VE) */ + { .altcode = NULL }, /* 0x06f8 (Cyrillic_SOFTSIGN) */ + { .altcode = NULL }, /* 0x06f9 (Cyrillic_YERU) */ + { .altcode = NULL }, /* 0x06fa (Cyrillic_ZE) */ + { .altcode = NULL }, /* 0x06fb (Cyrillic_SHA) */ + { .altcode = NULL }, /* 0x06fc (Cyrillic_E) */ + { .altcode = NULL }, /* 0x06fd (Cyrillic_SHCHA) */ + { .altcode = NULL }, /* 0x06fe (Cyrillic_CHE) */ + { .altcode = NULL }, /* 0x06ff (Cyrillic_HARDSIGN) */ }, { /* 0x07?? */ - { .altcode = NULL }, /* 0x0700 */ - { .altcode = NULL }, /* 0x0701 */ - { .altcode = NULL }, /* 0x0702 */ - { .altcode = NULL }, /* 0x0703 */ - { .altcode = NULL }, /* 0x0704 */ - { .altcode = NULL }, /* 0x0705 */ - { .altcode = NULL }, /* 0x0706 */ - { .altcode = NULL }, /* 0x0707 */ - { .altcode = NULL }, /* 0x0708 */ - { .altcode = NULL }, /* 0x0709 */ - { .altcode = NULL }, /* 0x070a */ - { .altcode = NULL }, /* 0x070b */ - { .altcode = NULL }, /* 0x070c */ - { .altcode = NULL }, /* 0x070d */ - { .altcode = NULL }, /* 0x070e */ - { .altcode = NULL }, /* 0x070f */ - { .altcode = NULL }, /* 0x0710 */ - { .altcode = NULL }, /* 0x0711 */ - { .altcode = NULL }, /* 0x0712 */ - { .altcode = NULL }, /* 0x0713 */ - { .altcode = NULL }, /* 0x0714 */ - { .altcode = NULL }, /* 0x0715 */ - { .altcode = NULL }, /* 0x0716 */ - { .altcode = NULL }, /* 0x0717 */ - { .altcode = NULL }, /* 0x0718 */ - { .altcode = NULL }, /* 0x0719 */ - { .altcode = NULL }, /* 0x071a */ - { .altcode = NULL }, /* 0x071b */ - { .altcode = NULL }, /* 0x071c */ - { .altcode = NULL }, /* 0x071d */ - { .altcode = NULL }, /* 0x071e */ - { .altcode = NULL }, /* 0x071f */ - { .altcode = NULL }, /* 0x0720 */ - { .altcode = NULL }, /* 0x0721 */ - { .altcode = NULL }, /* 0x0722 */ - { .altcode = NULL }, /* 0x0723 */ - { .altcode = NULL }, /* 0x0724 */ - { .altcode = NULL }, /* 0x0725 */ - { .altcode = NULL }, /* 0x0726 */ - { .altcode = NULL }, /* 0x0727 */ - { .altcode = NULL }, /* 0x0728 */ - { .altcode = NULL }, /* 0x0729 */ - { .altcode = NULL }, /* 0x072a */ - { .altcode = NULL }, /* 0x072b */ - { .altcode = NULL }, /* 0x072c */ - { .altcode = NULL }, /* 0x072d */ - { .altcode = NULL }, /* 0x072e */ - { .altcode = NULL }, /* 0x072f */ - { .altcode = NULL }, /* 0x0730 */ - { .altcode = NULL }, /* 0x0731 */ - { .altcode = NULL }, /* 0x0732 */ - { .altcode = NULL }, /* 0x0733 */ - { .altcode = NULL }, /* 0x0734 */ - { .altcode = NULL }, /* 0x0735 */ - { .altcode = NULL }, /* 0x0736 */ - { .altcode = NULL }, /* 0x0737 */ - { .altcode = NULL }, /* 0x0738 */ - { .altcode = NULL }, /* 0x0739 */ - { .altcode = NULL }, /* 0x073a */ - { .altcode = NULL }, /* 0x073b */ - { .altcode = NULL }, /* 0x073c */ - { .altcode = NULL }, /* 0x073d */ - { .altcode = NULL }, /* 0x073e */ - { .altcode = NULL }, /* 0x073f */ - { .altcode = NULL }, /* 0x0740 */ - { .altcode = NULL }, /* 0x0741 */ - { .altcode = NULL }, /* 0x0742 */ - { .altcode = NULL }, /* 0x0743 */ - { .altcode = NULL }, /* 0x0744 */ - { .altcode = NULL }, /* 0x0745 */ - { .altcode = NULL }, /* 0x0746 */ - { .altcode = NULL }, /* 0x0747 */ - { .altcode = NULL }, /* 0x0748 */ - { .altcode = NULL }, /* 0x0749 */ - { .altcode = NULL }, /* 0x074a */ - { .altcode = NULL }, /* 0x074b */ - { .altcode = NULL }, /* 0x074c */ - { .altcode = NULL }, /* 0x074d */ - { .altcode = NULL }, /* 0x074e */ - { .altcode = NULL }, /* 0x074f */ - { .altcode = NULL }, /* 0x0750 */ - { .altcode = NULL }, /* 0x0751 */ - { .altcode = NULL }, /* 0x0752 */ - { .altcode = NULL }, /* 0x0753 */ - { .altcode = NULL }, /* 0x0754 */ - { .altcode = NULL }, /* 0x0755 */ - { .altcode = NULL }, /* 0x0756 */ - { .altcode = NULL }, /* 0x0757 */ - { .altcode = NULL }, /* 0x0758 */ - { .altcode = NULL }, /* 0x0759 */ - { .altcode = NULL }, /* 0x075a */ - { .altcode = NULL }, /* 0x075b */ - { .altcode = NULL }, /* 0x075c */ - { .altcode = NULL }, /* 0x075d */ - { .altcode = NULL }, /* 0x075e */ - { .altcode = NULL }, /* 0x075f */ - { .altcode = NULL }, /* 0x0760 */ - { .altcode = NULL }, /* 0x0761 */ - { .altcode = NULL }, /* 0x0762 */ - { .altcode = NULL }, /* 0x0763 */ - { .altcode = NULL }, /* 0x0764 */ - { .altcode = NULL }, /* 0x0765 */ - { .altcode = NULL }, /* 0x0766 */ - { .altcode = NULL }, /* 0x0767 */ - { .altcode = NULL }, /* 0x0768 */ - { .altcode = NULL }, /* 0x0769 */ - { .altcode = NULL }, /* 0x076a */ - { .altcode = NULL }, /* 0x076b */ - { .altcode = NULL }, /* 0x076c */ - { .altcode = NULL }, /* 0x076d */ - { .altcode = NULL }, /* 0x076e */ - { .altcode = NULL }, /* 0x076f */ - { .altcode = NULL }, /* 0x0770 */ - { .altcode = NULL }, /* 0x0771 */ - { .altcode = NULL }, /* 0x0772 */ - { .altcode = NULL }, /* 0x0773 */ - { .altcode = NULL }, /* 0x0774 */ - { .altcode = NULL }, /* 0x0775 */ - { .altcode = NULL }, /* 0x0776 */ - { .altcode = NULL }, /* 0x0777 */ - { .altcode = NULL }, /* 0x0778 */ - { .altcode = NULL }, /* 0x0779 */ - { .altcode = NULL }, /* 0x077a */ - { .altcode = NULL }, /* 0x077b */ - { .altcode = NULL }, /* 0x077c */ - { .altcode = NULL }, /* 0x077d */ - { .altcode = NULL }, /* 0x077e */ - { .altcode = NULL }, /* 0x077f */ - { .altcode = NULL }, /* 0x0780 */ - { .altcode = NULL }, /* 0x0781 */ - { .altcode = NULL }, /* 0x0782 */ - { .altcode = NULL }, /* 0x0783 */ - { .altcode = NULL }, /* 0x0784 */ - { .altcode = NULL }, /* 0x0785 */ - { .altcode = NULL }, /* 0x0786 */ - { .altcode = NULL }, /* 0x0787 */ - { .altcode = NULL }, /* 0x0788 */ - { .altcode = NULL }, /* 0x0789 */ - { .altcode = NULL }, /* 0x078a */ - { .altcode = NULL }, /* 0x078b */ - { .altcode = NULL }, /* 0x078c */ - { .altcode = NULL }, /* 0x078d */ - { .altcode = NULL }, /* 0x078e */ - { .altcode = NULL }, /* 0x078f */ - { .altcode = NULL }, /* 0x0790 */ - { .altcode = NULL }, /* 0x0791 */ - { .altcode = NULL }, /* 0x0792 */ - { .altcode = NULL }, /* 0x0793 */ - { .altcode = NULL }, /* 0x0794 */ - { .altcode = NULL }, /* 0x0795 */ - { .altcode = NULL }, /* 0x0796 */ - { .altcode = NULL }, /* 0x0797 */ - { .altcode = NULL }, /* 0x0798 */ - { .altcode = NULL }, /* 0x0799 */ - { .altcode = NULL }, /* 0x079a */ - { .altcode = NULL }, /* 0x079b */ - { .altcode = NULL }, /* 0x079c */ - { .altcode = NULL }, /* 0x079d */ - { .altcode = NULL }, /* 0x079e */ - { .altcode = NULL }, /* 0x079f */ - { .altcode = NULL }, /* 0x07a0 */ - { .altcode = NULL }, /* 0x07a1 (Greek_ALPHAaccent) */ - { .altcode = NULL }, /* 0x07a2 (Greek_EPSILONaccent) */ - { .altcode = NULL }, /* 0x07a3 (Greek_ETAaccent) */ - { .altcode = NULL }, /* 0x07a4 (Greek_IOTAaccent) */ - { .altcode = NULL }, /* 0x07a5 (Greek_IOTAdiaeresis) */ - { .altcode = NULL }, /* 0x07a6 */ - { .altcode = NULL }, /* 0x07a7 (Greek_OMICRONaccent) */ - { .altcode = NULL }, /* 0x07a8 (Greek_UPSILONaccent) */ - { .altcode = NULL }, /* 0x07a9 (Greek_UPSILONdieresis) */ - { .altcode = NULL }, /* 0x07aa */ - { .altcode = NULL }, /* 0x07ab (Greek_OMEGAaccent) */ - { .altcode = NULL }, /* 0x07ac */ - { .altcode = NULL }, /* 0x07ad */ - { .altcode = NULL }, /* 0x07ae (Greek_accentdieresis) */ - { .altcode = NULL }, /* 0x07af (Greek_horizbar) */ - { .altcode = NULL }, /* 0x07b0 */ - { .altcode = NULL }, /* 0x07b1 (Greek_alphaaccent) */ - { .altcode = NULL }, /* 0x07b2 (Greek_epsilonaccent) */ - { .altcode = NULL }, /* 0x07b3 (Greek_etaaccent) */ - { .altcode = NULL }, /* 0x07b4 (Greek_iotaaccent) */ - { .altcode = NULL }, /* 0x07b5 (Greek_iotadieresis) */ - { .altcode = NULL }, /* 0x07b6 (Greek_iotaaccentdieresis) */ - { .altcode = NULL }, /* 0x07b7 (Greek_omicronaccent) */ - { .altcode = NULL }, /* 0x07b8 (Greek_upsilonaccent) */ - { .altcode = NULL }, /* 0x07b9 (Greek_upsilondieresis) */ - { .altcode = NULL }, /* 0x07ba (Greek_upsilonaccentdieresis) */ - { .altcode = NULL }, /* 0x07bb (Greek_omegaaccent) */ - { .altcode = NULL }, /* 0x07bc */ - { .altcode = NULL }, /* 0x07bd */ - { .altcode = NULL }, /* 0x07be */ - { .altcode = NULL }, /* 0x07bf */ - { .altcode = NULL }, /* 0x07c0 */ - { .altcode = NULL }, /* 0x07c1 (Greek_ALPHA) */ - { .altcode = NULL }, /* 0x07c2 (Greek_BETA) */ - { .altcode = NULL }, /* 0x07c3 (Greek_GAMMA) */ - { .altcode = NULL }, /* 0x07c4 (Greek_DELTA) */ - { .altcode = NULL }, /* 0x07c5 (Greek_EPSILON) */ - { .altcode = NULL }, /* 0x07c6 (Greek_ZETA) */ - { .altcode = NULL }, /* 0x07c7 (Greek_ETA) */ - { .altcode = NULL }, /* 0x07c8 (Greek_THETA) */ - { .altcode = NULL }, /* 0x07c9 (Greek_IOTA) */ - { .altcode = NULL }, /* 0x07ca (Greek_KAPPA) */ - { .altcode = NULL }, /* 0x07cb (Greek_LAMBDA) */ - { .altcode = NULL }, /* 0x07cc (Greek_MU) */ - { .altcode = NULL }, /* 0x07cd (Greek_NU) */ - { .altcode = NULL }, /* 0x07ce (Greek_XI) */ - { .altcode = NULL }, /* 0x07cf (Greek_OMICRON) */ - { .altcode = NULL }, /* 0x07d0 (Greek_PI) */ - { .altcode = NULL }, /* 0x07d1 (Greek_RHO) */ - { .altcode = NULL }, /* 0x07d2 (Greek_SIGMA) */ - { .altcode = NULL }, /* 0x07d3 */ - { .altcode = NULL }, /* 0x07d4 (Greek_TAU) */ - { .altcode = NULL }, /* 0x07d5 (Greek_UPSILON) */ - { .altcode = NULL }, /* 0x07d6 (Greek_PHI) */ - { .altcode = NULL }, /* 0x07d7 (Greek_CHI) */ - { .altcode = NULL }, /* 0x07d8 (Greek_PSI) */ - { .altcode = NULL }, /* 0x07d9 (Greek_OMEGA) */ - { .altcode = NULL }, /* 0x07da */ - { .altcode = NULL }, /* 0x07db */ - { .altcode = NULL }, /* 0x07dc */ - { .altcode = NULL }, /* 0x07dd */ - { .altcode = NULL }, /* 0x07de */ - { .altcode = NULL }, /* 0x07df */ - { .altcode = NULL }, /* 0x07e0 */ - { .altcode = NULL }, /* 0x07e1 (Greek_alpha) */ - { .altcode = NULL }, /* 0x07e2 (Greek_beta) */ - { .altcode = NULL }, /* 0x07e3 (Greek_gamma) */ - { .altcode = NULL }, /* 0x07e4 (Greek_delta) */ - { .altcode = NULL }, /* 0x07e5 (Greek_epsilon) */ - { .altcode = NULL }, /* 0x07e6 (Greek_zeta) */ - { .altcode = NULL }, /* 0x07e7 (Greek_eta) */ - { .altcode = NULL }, /* 0x07e8 (Greek_theta) */ - { .altcode = NULL }, /* 0x07e9 (Greek_iota) */ - { .altcode = NULL }, /* 0x07ea (Greek_kappa) */ - { .altcode = NULL }, /* 0x07eb (Greek_lambda) */ - { .altcode = NULL }, /* 0x07ec (Greek_mu) */ - { .altcode = NULL }, /* 0x07ed (Greek_nu) */ - { .altcode = NULL }, /* 0x07ee (Greek_xi) */ - { .altcode = NULL }, /* 0x07ef (Greek_omicron) */ - { .altcode = NULL }, /* 0x07f0 (Greek_pi) */ - { .altcode = NULL }, /* 0x07f1 (Greek_rho) */ - { .altcode = NULL }, /* 0x07f2 (Greek_sigma) */ - { .altcode = NULL }, /* 0x07f3 (Greek_finalsmallsigma) */ - { .altcode = NULL }, /* 0x07f4 (Greek_tau) */ - { .altcode = NULL }, /* 0x07f5 (Greek_upsilon) */ - { .altcode = NULL }, /* 0x07f6 (Greek_phi) */ - { .altcode = NULL }, /* 0x07f7 (Greek_chi) */ - { .altcode = NULL }, /* 0x07f8 (Greek_psi) */ - { .altcode = NULL }, /* 0x07f9 (Greek_omega) */ - { .altcode = NULL }, /* 0x07fa */ - { .altcode = NULL }, /* 0x07fb */ - { .altcode = NULL }, /* 0x07fc */ - { .altcode = NULL }, /* 0x07fd */ - { .altcode = NULL }, /* 0x07fe */ - { .altcode = NULL }, /* 0x07ff */ + { .altcode = NULL }, /* 0x0700 */ + { .altcode = NULL }, /* 0x0701 */ + { .altcode = NULL }, /* 0x0702 */ + { .altcode = NULL }, /* 0x0703 */ + { .altcode = NULL }, /* 0x0704 */ + { .altcode = NULL }, /* 0x0705 */ + { .altcode = NULL }, /* 0x0706 */ + { .altcode = NULL }, /* 0x0707 */ + { .altcode = NULL }, /* 0x0708 */ + { .altcode = NULL }, /* 0x0709 */ + { .altcode = NULL }, /* 0x070a */ + { .altcode = NULL }, /* 0x070b */ + { .altcode = NULL }, /* 0x070c */ + { .altcode = NULL }, /* 0x070d */ + { .altcode = NULL }, /* 0x070e */ + { .altcode = NULL }, /* 0x070f */ + { .altcode = NULL }, /* 0x0710 */ + { .altcode = NULL }, /* 0x0711 */ + { .altcode = NULL }, /* 0x0712 */ + { .altcode = NULL }, /* 0x0713 */ + { .altcode = NULL }, /* 0x0714 */ + { .altcode = NULL }, /* 0x0715 */ + { .altcode = NULL }, /* 0x0716 */ + { .altcode = NULL }, /* 0x0717 */ + { .altcode = NULL }, /* 0x0718 */ + { .altcode = NULL }, /* 0x0719 */ + { .altcode = NULL }, /* 0x071a */ + { .altcode = NULL }, /* 0x071b */ + { .altcode = NULL }, /* 0x071c */ + { .altcode = NULL }, /* 0x071d */ + { .altcode = NULL }, /* 0x071e */ + { .altcode = NULL }, /* 0x071f */ + { .altcode = NULL }, /* 0x0720 */ + { .altcode = NULL }, /* 0x0721 */ + { .altcode = NULL }, /* 0x0722 */ + { .altcode = NULL }, /* 0x0723 */ + { .altcode = NULL }, /* 0x0724 */ + { .altcode = NULL }, /* 0x0725 */ + { .altcode = NULL }, /* 0x0726 */ + { .altcode = NULL }, /* 0x0727 */ + { .altcode = NULL }, /* 0x0728 */ + { .altcode = NULL }, /* 0x0729 */ + { .altcode = NULL }, /* 0x072a */ + { .altcode = NULL }, /* 0x072b */ + { .altcode = NULL }, /* 0x072c */ + { .altcode = NULL }, /* 0x072d */ + { .altcode = NULL }, /* 0x072e */ + { .altcode = NULL }, /* 0x072f */ + { .altcode = NULL }, /* 0x0730 */ + { .altcode = NULL }, /* 0x0731 */ + { .altcode = NULL }, /* 0x0732 */ + { .altcode = NULL }, /* 0x0733 */ + { .altcode = NULL }, /* 0x0734 */ + { .altcode = NULL }, /* 0x0735 */ + { .altcode = NULL }, /* 0x0736 */ + { .altcode = NULL }, /* 0x0737 */ + { .altcode = NULL }, /* 0x0738 */ + { .altcode = NULL }, /* 0x0739 */ + { .altcode = NULL }, /* 0x073a */ + { .altcode = NULL }, /* 0x073b */ + { .altcode = NULL }, /* 0x073c */ + { .altcode = NULL }, /* 0x073d */ + { .altcode = NULL }, /* 0x073e */ + { .altcode = NULL }, /* 0x073f */ + { .altcode = NULL }, /* 0x0740 */ + { .altcode = NULL }, /* 0x0741 */ + { .altcode = NULL }, /* 0x0742 */ + { .altcode = NULL }, /* 0x0743 */ + { .altcode = NULL }, /* 0x0744 */ + { .altcode = NULL }, /* 0x0745 */ + { .altcode = NULL }, /* 0x0746 */ + { .altcode = NULL }, /* 0x0747 */ + { .altcode = NULL }, /* 0x0748 */ + { .altcode = NULL }, /* 0x0749 */ + { .altcode = NULL }, /* 0x074a */ + { .altcode = NULL }, /* 0x074b */ + { .altcode = NULL }, /* 0x074c */ + { .altcode = NULL }, /* 0x074d */ + { .altcode = NULL }, /* 0x074e */ + { .altcode = NULL }, /* 0x074f */ + { .altcode = NULL }, /* 0x0750 */ + { .altcode = NULL }, /* 0x0751 */ + { .altcode = NULL }, /* 0x0752 */ + { .altcode = NULL }, /* 0x0753 */ + { .altcode = NULL }, /* 0x0754 */ + { .altcode = NULL }, /* 0x0755 */ + { .altcode = NULL }, /* 0x0756 */ + { .altcode = NULL }, /* 0x0757 */ + { .altcode = NULL }, /* 0x0758 */ + { .altcode = NULL }, /* 0x0759 */ + { .altcode = NULL }, /* 0x075a */ + { .altcode = NULL }, /* 0x075b */ + { .altcode = NULL }, /* 0x075c */ + { .altcode = NULL }, /* 0x075d */ + { .altcode = NULL }, /* 0x075e */ + { .altcode = NULL }, /* 0x075f */ + { .altcode = NULL }, /* 0x0760 */ + { .altcode = NULL }, /* 0x0761 */ + { .altcode = NULL }, /* 0x0762 */ + { .altcode = NULL }, /* 0x0763 */ + { .altcode = NULL }, /* 0x0764 */ + { .altcode = NULL }, /* 0x0765 */ + { .altcode = NULL }, /* 0x0766 */ + { .altcode = NULL }, /* 0x0767 */ + { .altcode = NULL }, /* 0x0768 */ + { .altcode = NULL }, /* 0x0769 */ + { .altcode = NULL }, /* 0x076a */ + { .altcode = NULL }, /* 0x076b */ + { .altcode = NULL }, /* 0x076c */ + { .altcode = NULL }, /* 0x076d */ + { .altcode = NULL }, /* 0x076e */ + { .altcode = NULL }, /* 0x076f */ + { .altcode = NULL }, /* 0x0770 */ + { .altcode = NULL }, /* 0x0771 */ + { .altcode = NULL }, /* 0x0772 */ + { .altcode = NULL }, /* 0x0773 */ + { .altcode = NULL }, /* 0x0774 */ + { .altcode = NULL }, /* 0x0775 */ + { .altcode = NULL }, /* 0x0776 */ + { .altcode = NULL }, /* 0x0777 */ + { .altcode = NULL }, /* 0x0778 */ + { .altcode = NULL }, /* 0x0779 */ + { .altcode = NULL }, /* 0x077a */ + { .altcode = NULL }, /* 0x077b */ + { .altcode = NULL }, /* 0x077c */ + { .altcode = NULL }, /* 0x077d */ + { .altcode = NULL }, /* 0x077e */ + { .altcode = NULL }, /* 0x077f */ + { .altcode = NULL }, /* 0x0780 */ + { .altcode = NULL }, /* 0x0781 */ + { .altcode = NULL }, /* 0x0782 */ + { .altcode = NULL }, /* 0x0783 */ + { .altcode = NULL }, /* 0x0784 */ + { .altcode = NULL }, /* 0x0785 */ + { .altcode = NULL }, /* 0x0786 */ + { .altcode = NULL }, /* 0x0787 */ + { .altcode = NULL }, /* 0x0788 */ + { .altcode = NULL }, /* 0x0789 */ + { .altcode = NULL }, /* 0x078a */ + { .altcode = NULL }, /* 0x078b */ + { .altcode = NULL }, /* 0x078c */ + { .altcode = NULL }, /* 0x078d */ + { .altcode = NULL }, /* 0x078e */ + { .altcode = NULL }, /* 0x078f */ + { .altcode = NULL }, /* 0x0790 */ + { .altcode = NULL }, /* 0x0791 */ + { .altcode = NULL }, /* 0x0792 */ + { .altcode = NULL }, /* 0x0793 */ + { .altcode = NULL }, /* 0x0794 */ + { .altcode = NULL }, /* 0x0795 */ + { .altcode = NULL }, /* 0x0796 */ + { .altcode = NULL }, /* 0x0797 */ + { .altcode = NULL }, /* 0x0798 */ + { .altcode = NULL }, /* 0x0799 */ + { .altcode = NULL }, /* 0x079a */ + { .altcode = NULL }, /* 0x079b */ + { .altcode = NULL }, /* 0x079c */ + { .altcode = NULL }, /* 0x079d */ + { .altcode = NULL }, /* 0x079e */ + { .altcode = NULL }, /* 0x079f */ + { .altcode = NULL }, /* 0x07a0 */ + { .altcode = NULL }, /* 0x07a1 (Greek_ALPHAaccent) */ + { .altcode = NULL }, /* 0x07a2 (Greek_EPSILONaccent) */ + { .altcode = NULL }, /* 0x07a3 (Greek_ETAaccent) */ + { .altcode = NULL }, /* 0x07a4 (Greek_IOTAaccent) */ + { .altcode = NULL }, /* 0x07a5 (Greek_IOTAdiaeresis) */ + { .altcode = NULL }, /* 0x07a6 */ + { .altcode = NULL }, /* 0x07a7 (Greek_OMICRONaccent) */ + { .altcode = NULL }, /* 0x07a8 (Greek_UPSILONaccent) */ + { .altcode = NULL }, /* 0x07a9 (Greek_UPSILONdieresis) */ + { .altcode = NULL }, /* 0x07aa */ + { .altcode = NULL }, /* 0x07ab (Greek_OMEGAaccent) */ + { .altcode = NULL }, /* 0x07ac */ + { .altcode = NULL }, /* 0x07ad */ + { .altcode = NULL }, /* 0x07ae (Greek_accentdieresis) */ + { .altcode = NULL }, /* 0x07af (Greek_horizbar) */ + { .altcode = NULL }, /* 0x07b0 */ + { .altcode = NULL }, /* 0x07b1 (Greek_alphaaccent) */ + { .altcode = NULL }, /* 0x07b2 (Greek_epsilonaccent) */ + { .altcode = NULL }, /* 0x07b3 (Greek_etaaccent) */ + { .altcode = NULL }, /* 0x07b4 (Greek_iotaaccent) */ + { .altcode = NULL }, /* 0x07b5 (Greek_iotadieresis) */ + { .altcode = NULL }, /* 0x07b6 (Greek_iotaaccentdieresis) */ + { .altcode = NULL }, /* 0x07b7 (Greek_omicronaccent) */ + { .altcode = NULL }, /* 0x07b8 (Greek_upsilonaccent) */ + { .altcode = NULL }, /* 0x07b9 (Greek_upsilondieresis) */ + { .altcode = NULL }, /* 0x07ba (Greek_upsilonaccentdieresis) */ + { .altcode = NULL }, /* 0x07bb (Greek_omegaaccent) */ + { .altcode = NULL }, /* 0x07bc */ + { .altcode = NULL }, /* 0x07bd */ + { .altcode = NULL }, /* 0x07be */ + { .altcode = NULL }, /* 0x07bf */ + { .altcode = NULL }, /* 0x07c0 */ + { .altcode = NULL }, /* 0x07c1 (Greek_ALPHA) */ + { .altcode = NULL }, /* 0x07c2 (Greek_BETA) */ + { .altcode = NULL }, /* 0x07c3 (Greek_GAMMA) */ + { .altcode = NULL }, /* 0x07c4 (Greek_DELTA) */ + { .altcode = NULL }, /* 0x07c5 (Greek_EPSILON) */ + { .altcode = NULL }, /* 0x07c6 (Greek_ZETA) */ + { .altcode = NULL }, /* 0x07c7 (Greek_ETA) */ + { .altcode = NULL }, /* 0x07c8 (Greek_THETA) */ + { .altcode = NULL }, /* 0x07c9 (Greek_IOTA) */ + { .altcode = NULL }, /* 0x07ca (Greek_KAPPA) */ + { .altcode = NULL }, /* 0x07cb (Greek_LAMBDA) */ + { .altcode = NULL }, /* 0x07cc (Greek_MU) */ + { .altcode = NULL }, /* 0x07cd (Greek_NU) */ + { .altcode = NULL }, /* 0x07ce (Greek_XI) */ + { .altcode = NULL }, /* 0x07cf (Greek_OMICRON) */ + { .altcode = NULL }, /* 0x07d0 (Greek_PI) */ + { .altcode = NULL }, /* 0x07d1 (Greek_RHO) */ + { .altcode = NULL }, /* 0x07d2 (Greek_SIGMA) */ + { .altcode = NULL }, /* 0x07d3 */ + { .altcode = NULL }, /* 0x07d4 (Greek_TAU) */ + { .altcode = NULL }, /* 0x07d5 (Greek_UPSILON) */ + { .altcode = NULL }, /* 0x07d6 (Greek_PHI) */ + { .altcode = NULL }, /* 0x07d7 (Greek_CHI) */ + { .altcode = NULL }, /* 0x07d8 (Greek_PSI) */ + { .altcode = NULL }, /* 0x07d9 (Greek_OMEGA) */ + { .altcode = NULL }, /* 0x07da */ + { .altcode = NULL }, /* 0x07db */ + { .altcode = NULL }, /* 0x07dc */ + { .altcode = NULL }, /* 0x07dd */ + { .altcode = NULL }, /* 0x07de */ + { .altcode = NULL }, /* 0x07df */ + { .altcode = NULL }, /* 0x07e0 */ + { .altcode = NULL }, /* 0x07e1 (Greek_alpha) */ + { .altcode = NULL }, /* 0x07e2 (Greek_beta) */ + { .altcode = NULL }, /* 0x07e3 (Greek_gamma) */ + { .altcode = NULL }, /* 0x07e4 (Greek_delta) */ + { .altcode = NULL }, /* 0x07e5 (Greek_epsilon) */ + { .altcode = NULL }, /* 0x07e6 (Greek_zeta) */ + { .altcode = NULL }, /* 0x07e7 (Greek_eta) */ + { .altcode = NULL }, /* 0x07e8 (Greek_theta) */ + { .altcode = NULL }, /* 0x07e9 (Greek_iota) */ + { .altcode = NULL }, /* 0x07ea (Greek_kappa) */ + { .altcode = NULL }, /* 0x07eb (Greek_lambda) */ + { .altcode = NULL }, /* 0x07ec (Greek_mu) */ + { .altcode = NULL }, /* 0x07ed (Greek_nu) */ + { .altcode = NULL }, /* 0x07ee (Greek_xi) */ + { .altcode = NULL }, /* 0x07ef (Greek_omicron) */ + { .altcode = NULL }, /* 0x07f0 (Greek_pi) */ + { .altcode = NULL }, /* 0x07f1 (Greek_rho) */ + { .altcode = NULL }, /* 0x07f2 (Greek_sigma) */ + { .altcode = NULL }, /* 0x07f3 (Greek_finalsmallsigma) */ + { .altcode = NULL }, /* 0x07f4 (Greek_tau) */ + { .altcode = NULL }, /* 0x07f5 (Greek_upsilon) */ + { .altcode = NULL }, /* 0x07f6 (Greek_phi) */ + { .altcode = NULL }, /* 0x07f7 (Greek_chi) */ + { .altcode = NULL }, /* 0x07f8 (Greek_psi) */ + { .altcode = NULL }, /* 0x07f9 (Greek_omega) */ + { .altcode = NULL }, /* 0x07fa */ + { .altcode = NULL }, /* 0x07fb */ + { .altcode = NULL }, /* 0x07fc */ + { .altcode = NULL }, /* 0x07fd */ + { .altcode = NULL }, /* 0x07fe */ + { .altcode = NULL }, /* 0x07ff */ }, { /* 0x08?? */ - { .altcode = NULL }, /* 0x0800 */ - { .altcode = NULL }, /* 0x0801 */ - { .altcode = NULL }, /* 0x0802 */ - { .altcode = NULL }, /* 0x0803 */ - { .altcode = NULL }, /* 0x0804 */ - { .altcode = NULL }, /* 0x0805 */ - { .altcode = NULL }, /* 0x0806 */ - { .altcode = NULL }, /* 0x0807 */ - { .altcode = NULL }, /* 0x0808 */ - { .altcode = NULL }, /* 0x0809 */ - { .altcode = NULL }, /* 0x080a */ - { .altcode = NULL }, /* 0x080b */ - { .altcode = NULL }, /* 0x080c */ - { .altcode = NULL }, /* 0x080d */ - { .altcode = NULL }, /* 0x080e */ - { .altcode = NULL }, /* 0x080f */ - { .altcode = NULL }, /* 0x0810 */ - { .altcode = NULL }, /* 0x0811 */ - { .altcode = NULL }, /* 0x0812 */ - { .altcode = NULL }, /* 0x0813 */ - { .altcode = NULL }, /* 0x0814 */ - { .altcode = NULL }, /* 0x0815 */ - { .altcode = NULL }, /* 0x0816 */ - { .altcode = NULL }, /* 0x0817 */ - { .altcode = NULL }, /* 0x0818 */ - { .altcode = NULL }, /* 0x0819 */ - { .altcode = NULL }, /* 0x081a */ - { .altcode = NULL }, /* 0x081b */ - { .altcode = NULL }, /* 0x081c */ - { .altcode = NULL }, /* 0x081d */ - { .altcode = NULL }, /* 0x081e */ - { .altcode = NULL }, /* 0x081f */ - { .altcode = NULL }, /* 0x0820 */ - { .altcode = NULL }, /* 0x0821 */ - { .altcode = NULL }, /* 0x0822 */ - { .altcode = NULL }, /* 0x0823 */ - { .altcode = NULL }, /* 0x0824 */ - { .altcode = NULL }, /* 0x0825 */ - { .altcode = NULL }, /* 0x0826 */ - { .altcode = NULL }, /* 0x0827 */ - { .altcode = NULL }, /* 0x0828 */ - { .altcode = NULL }, /* 0x0829 */ - { .altcode = NULL }, /* 0x082a */ - { .altcode = NULL }, /* 0x082b */ - { .altcode = NULL }, /* 0x082c */ - { .altcode = NULL }, /* 0x082d */ - { .altcode = NULL }, /* 0x082e */ - { .altcode = NULL }, /* 0x082f */ - { .altcode = NULL }, /* 0x0830 */ - { .altcode = NULL }, /* 0x0831 */ - { .altcode = NULL }, /* 0x0832 */ - { .altcode = NULL }, /* 0x0833 */ - { .altcode = NULL }, /* 0x0834 */ - { .altcode = NULL }, /* 0x0835 */ - { .altcode = NULL }, /* 0x0836 */ - { .altcode = NULL }, /* 0x0837 */ - { .altcode = NULL }, /* 0x0838 */ - { .altcode = NULL }, /* 0x0839 */ - { .altcode = NULL }, /* 0x083a */ - { .altcode = NULL }, /* 0x083b */ - { .altcode = NULL }, /* 0x083c */ - { .altcode = NULL }, /* 0x083d */ - { .altcode = NULL }, /* 0x083e */ - { .altcode = NULL }, /* 0x083f */ - { .altcode = NULL }, /* 0x0840 */ - { .altcode = NULL }, /* 0x0841 */ - { .altcode = NULL }, /* 0x0842 */ - { .altcode = NULL }, /* 0x0843 */ - { .altcode = NULL }, /* 0x0844 */ - { .altcode = NULL }, /* 0x0845 */ - { .altcode = NULL }, /* 0x0846 */ - { .altcode = NULL }, /* 0x0847 */ - { .altcode = NULL }, /* 0x0848 */ - { .altcode = NULL }, /* 0x0849 */ - { .altcode = NULL }, /* 0x084a */ - { .altcode = NULL }, /* 0x084b */ - { .altcode = NULL }, /* 0x084c */ - { .altcode = NULL }, /* 0x084d */ - { .altcode = NULL }, /* 0x084e */ - { .altcode = NULL }, /* 0x084f */ - { .altcode = NULL }, /* 0x0850 */ - { .altcode = NULL }, /* 0x0851 */ - { .altcode = NULL }, /* 0x0852 */ - { .altcode = NULL }, /* 0x0853 */ - { .altcode = NULL }, /* 0x0854 */ - { .altcode = NULL }, /* 0x0855 */ - { .altcode = NULL }, /* 0x0856 */ - { .altcode = NULL }, /* 0x0857 */ - { .altcode = NULL }, /* 0x0858 */ - { .altcode = NULL }, /* 0x0859 */ - { .altcode = NULL }, /* 0x085a */ - { .altcode = NULL }, /* 0x085b */ - { .altcode = NULL }, /* 0x085c */ - { .altcode = NULL }, /* 0x085d */ - { .altcode = NULL }, /* 0x085e */ - { .altcode = NULL }, /* 0x085f */ - { .altcode = NULL }, /* 0x0860 */ - { .altcode = NULL }, /* 0x0861 */ - { .altcode = NULL }, /* 0x0862 */ - { .altcode = NULL }, /* 0x0863 */ - { .altcode = NULL }, /* 0x0864 */ - { .altcode = NULL }, /* 0x0865 */ - { .altcode = NULL }, /* 0x0866 */ - { .altcode = NULL }, /* 0x0867 */ - { .altcode = NULL }, /* 0x0868 */ - { .altcode = NULL }, /* 0x0869 */ - { .altcode = NULL }, /* 0x086a */ - { .altcode = NULL }, /* 0x086b */ - { .altcode = NULL }, /* 0x086c */ - { .altcode = NULL }, /* 0x086d */ - { .altcode = NULL }, /* 0x086e */ - { .altcode = NULL }, /* 0x086f */ - { .altcode = NULL }, /* 0x0870 */ - { .altcode = NULL }, /* 0x0871 */ - { .altcode = NULL }, /* 0x0872 */ - { .altcode = NULL }, /* 0x0873 */ - { .altcode = NULL }, /* 0x0874 */ - { .altcode = NULL }, /* 0x0875 */ - { .altcode = NULL }, /* 0x0876 */ - { .altcode = NULL }, /* 0x0877 */ - { .altcode = NULL }, /* 0x0878 */ - { .altcode = NULL }, /* 0x0879 */ - { .altcode = NULL }, /* 0x087a */ - { .altcode = NULL }, /* 0x087b */ - { .altcode = NULL }, /* 0x087c */ - { .altcode = NULL }, /* 0x087d */ - { .altcode = NULL }, /* 0x087e */ - { .altcode = NULL }, /* 0x087f */ - { .altcode = NULL }, /* 0x0880 */ - { .altcode = NULL }, /* 0x0881 */ - { .altcode = NULL }, /* 0x0882 */ - { .altcode = NULL }, /* 0x0883 */ - { .altcode = NULL }, /* 0x0884 */ - { .altcode = NULL }, /* 0x0885 */ - { .altcode = NULL }, /* 0x0886 */ - { .altcode = NULL }, /* 0x0887 */ - { .altcode = NULL }, /* 0x0888 */ - { .altcode = NULL }, /* 0x0889 */ - { .altcode = NULL }, /* 0x088a */ - { .altcode = NULL }, /* 0x088b */ - { .altcode = NULL }, /* 0x088c */ - { .altcode = NULL }, /* 0x088d */ - { .altcode = NULL }, /* 0x088e */ - { .altcode = NULL }, /* 0x088f */ - { .altcode = NULL }, /* 0x0890 */ - { .altcode = NULL }, /* 0x0891 */ - { .altcode = NULL }, /* 0x0892 */ - { .altcode = NULL }, /* 0x0893 */ - { .altcode = NULL }, /* 0x0894 */ - { .altcode = NULL }, /* 0x0895 */ - { .altcode = NULL }, /* 0x0896 */ - { .altcode = NULL }, /* 0x0897 */ - { .altcode = NULL }, /* 0x0898 */ - { .altcode = NULL }, /* 0x0899 */ - { .altcode = NULL }, /* 0x089a */ - { .altcode = NULL }, /* 0x089b */ - { .altcode = NULL }, /* 0x089c */ - { .altcode = NULL }, /* 0x089d */ - { .altcode = NULL }, /* 0x089e */ - { .altcode = NULL }, /* 0x089f */ - { .altcode = NULL }, /* 0x08a0 */ - { .altcode = NULL }, /* 0x08a1 (leftradical) */ - { .altcode = NULL }, /* 0x08a2 (topleftradical) */ - { .altcode = NULL }, /* 0x08a3 (horizconnector) */ - { .altcode = NULL }, /* 0x08a4 (topintegral) */ - { .altcode = NULL }, /* 0x08a5 (botintegral) */ - { .altcode = NULL }, /* 0x08a6 (vertconnector) */ - { .altcode = NULL }, /* 0x08a7 (topleftsqbracket) */ - { .altcode = NULL }, /* 0x08a8 (botleftsqbracket) */ - { .altcode = NULL }, /* 0x08a9 (toprightsqbracket) */ - { .altcode = NULL }, /* 0x08aa (botrightsqbracket) */ - { .altcode = NULL }, /* 0x08ab (topleftparens) */ - { .altcode = NULL }, /* 0x08ac (botleftparens) */ - { .altcode = NULL }, /* 0x08ad (toprightparens) */ - { .altcode = NULL }, /* 0x08ae (botrightparens) */ - { .altcode = NULL }, /* 0x08af (leftmiddlecurlybrace) */ - { .altcode = NULL }, /* 0x08b0 (rightmiddlecurlybrace) */ - { .altcode = NULL }, /* 0x08b1 (topleftsummation) */ - { .altcode = NULL }, /* 0x08b2 (botleftsummation) */ - { .altcode = NULL }, /* 0x08b3 (topvertsummationconnector) */ - { .altcode = NULL }, /* 0x08b4 (botvertsummationconnector) */ - { .altcode = NULL }, /* 0x08b5 (toprightsummation) */ - { .altcode = NULL }, /* 0x08b6 (botrightsummation) */ - { .altcode = NULL }, /* 0x08b7 (rightmiddlesummation) */ - { .altcode = NULL }, /* 0x08b8 */ - { .altcode = NULL }, /* 0x08b9 */ - { .altcode = NULL }, /* 0x08ba */ - { .altcode = NULL }, /* 0x08bb */ - { .altcode = NULL }, /* 0x08bc (lessthanequal) */ - { .altcode = NULL }, /* 0x08bd (notequal) */ - { .altcode = NULL }, /* 0x08be (greaterthanequal) */ - { .altcode = NULL }, /* 0x08bf (integral) */ - { .altcode = NULL }, /* 0x08c0 (therefore) */ - { .altcode = NULL }, /* 0x08c1 (variation) */ - { .altcode = NULL }, /* 0x08c2 (infinity) */ - { .altcode = NULL }, /* 0x08c3 */ - { .altcode = NULL }, /* 0x08c4 */ - { .altcode = NULL }, /* 0x08c5 (nabla) */ - { .altcode = NULL }, /* 0x08c6 */ - { .altcode = NULL }, /* 0x08c7 */ - { .altcode = NULL }, /* 0x08c8 (approximate) */ - { .altcode = NULL }, /* 0x08c9 (similarequal) */ - { .altcode = NULL }, /* 0x08ca */ - { .altcode = NULL }, /* 0x08cb */ - { .altcode = NULL }, /* 0x08cc */ - { .altcode = NULL }, /* 0x08cd (ifonlyif) */ - { .altcode = NULL }, /* 0x08ce (implies) */ - { .altcode = NULL }, /* 0x08cf (identical) */ - { .altcode = NULL }, /* 0x08d0 */ - { .altcode = NULL }, /* 0x08d1 */ - { .altcode = NULL }, /* 0x08d2 */ - { .altcode = NULL }, /* 0x08d3 */ - { .altcode = NULL }, /* 0x08d4 */ - { .altcode = NULL }, /* 0x08d5 */ - { .altcode = NULL }, /* 0x08d6 (radical) */ - { .altcode = NULL }, /* 0x08d7 */ - { .altcode = NULL }, /* 0x08d8 */ - { .altcode = NULL }, /* 0x08d9 */ - { .altcode = NULL }, /* 0x08da (includedin) */ - { .altcode = NULL }, /* 0x08db (includes) */ - { .altcode = NULL }, /* 0x08dc (intersection) */ - { .altcode = NULL }, /* 0x08dd (union) */ - { .altcode = NULL }, /* 0x08de (logicaland) */ - { .altcode = NULL }, /* 0x08df (logicalor) */ - { .altcode = NULL }, /* 0x08e0 */ - { .altcode = NULL }, /* 0x08e1 */ - { .altcode = NULL }, /* 0x08e2 */ - { .altcode = NULL }, /* 0x08e3 */ - { .altcode = NULL }, /* 0x08e4 */ - { .altcode = NULL }, /* 0x08e5 */ - { .altcode = NULL }, /* 0x08e6 */ - { .altcode = NULL }, /* 0x08e7 */ - { .altcode = NULL }, /* 0x08e8 */ - { .altcode = NULL }, /* 0x08e9 */ - { .altcode = NULL }, /* 0x08ea */ - { .altcode = NULL }, /* 0x08eb */ - { .altcode = NULL }, /* 0x08ec */ - { .altcode = NULL }, /* 0x08ed */ - { .altcode = NULL }, /* 0x08ee */ - { .altcode = NULL }, /* 0x08ef (partialderivative) */ - { .altcode = NULL }, /* 0x08f0 */ - { .altcode = NULL }, /* 0x08f1 */ - { .altcode = NULL }, /* 0x08f2 */ - { .altcode = NULL }, /* 0x08f3 */ - { .altcode = NULL }, /* 0x08f4 */ - { .altcode = NULL }, /* 0x08f5 */ - { .altcode = NULL }, /* 0x08f6 (function) */ - { .altcode = NULL }, /* 0x08f7 */ - { .altcode = NULL }, /* 0x08f8 */ - { .altcode = NULL }, /* 0x08f9 */ - { .altcode = NULL }, /* 0x08fa */ - { .altcode = NULL }, /* 0x08fb (leftarrow) */ - { .altcode = NULL }, /* 0x08fc (uparrow) */ - { .altcode = NULL }, /* 0x08fd (rightarrow) */ - { .altcode = NULL }, /* 0x08fe (downarrow) */ - { .altcode = NULL }, /* 0x08ff */ + { .altcode = NULL }, /* 0x0800 */ + { .altcode = NULL }, /* 0x0801 */ + { .altcode = NULL }, /* 0x0802 */ + { .altcode = NULL }, /* 0x0803 */ + { .altcode = NULL }, /* 0x0804 */ + { .altcode = NULL }, /* 0x0805 */ + { .altcode = NULL }, /* 0x0806 */ + { .altcode = NULL }, /* 0x0807 */ + { .altcode = NULL }, /* 0x0808 */ + { .altcode = NULL }, /* 0x0809 */ + { .altcode = NULL }, /* 0x080a */ + { .altcode = NULL }, /* 0x080b */ + { .altcode = NULL }, /* 0x080c */ + { .altcode = NULL }, /* 0x080d */ + { .altcode = NULL }, /* 0x080e */ + { .altcode = NULL }, /* 0x080f */ + { .altcode = NULL }, /* 0x0810 */ + { .altcode = NULL }, /* 0x0811 */ + { .altcode = NULL }, /* 0x0812 */ + { .altcode = NULL }, /* 0x0813 */ + { .altcode = NULL }, /* 0x0814 */ + { .altcode = NULL }, /* 0x0815 */ + { .altcode = NULL }, /* 0x0816 */ + { .altcode = NULL }, /* 0x0817 */ + { .altcode = NULL }, /* 0x0818 */ + { .altcode = NULL }, /* 0x0819 */ + { .altcode = NULL }, /* 0x081a */ + { .altcode = NULL }, /* 0x081b */ + { .altcode = NULL }, /* 0x081c */ + { .altcode = NULL }, /* 0x081d */ + { .altcode = NULL }, /* 0x081e */ + { .altcode = NULL }, /* 0x081f */ + { .altcode = NULL }, /* 0x0820 */ + { .altcode = NULL }, /* 0x0821 */ + { .altcode = NULL }, /* 0x0822 */ + { .altcode = NULL }, /* 0x0823 */ + { .altcode = NULL }, /* 0x0824 */ + { .altcode = NULL }, /* 0x0825 */ + { .altcode = NULL }, /* 0x0826 */ + { .altcode = NULL }, /* 0x0827 */ + { .altcode = NULL }, /* 0x0828 */ + { .altcode = NULL }, /* 0x0829 */ + { .altcode = NULL }, /* 0x082a */ + { .altcode = NULL }, /* 0x082b */ + { .altcode = NULL }, /* 0x082c */ + { .altcode = NULL }, /* 0x082d */ + { .altcode = NULL }, /* 0x082e */ + { .altcode = NULL }, /* 0x082f */ + { .altcode = NULL }, /* 0x0830 */ + { .altcode = NULL }, /* 0x0831 */ + { .altcode = NULL }, /* 0x0832 */ + { .altcode = NULL }, /* 0x0833 */ + { .altcode = NULL }, /* 0x0834 */ + { .altcode = NULL }, /* 0x0835 */ + { .altcode = NULL }, /* 0x0836 */ + { .altcode = NULL }, /* 0x0837 */ + { .altcode = NULL }, /* 0x0838 */ + { .altcode = NULL }, /* 0x0839 */ + { .altcode = NULL }, /* 0x083a */ + { .altcode = NULL }, /* 0x083b */ + { .altcode = NULL }, /* 0x083c */ + { .altcode = NULL }, /* 0x083d */ + { .altcode = NULL }, /* 0x083e */ + { .altcode = NULL }, /* 0x083f */ + { .altcode = NULL }, /* 0x0840 */ + { .altcode = NULL }, /* 0x0841 */ + { .altcode = NULL }, /* 0x0842 */ + { .altcode = NULL }, /* 0x0843 */ + { .altcode = NULL }, /* 0x0844 */ + { .altcode = NULL }, /* 0x0845 */ + { .altcode = NULL }, /* 0x0846 */ + { .altcode = NULL }, /* 0x0847 */ + { .altcode = NULL }, /* 0x0848 */ + { .altcode = NULL }, /* 0x0849 */ + { .altcode = NULL }, /* 0x084a */ + { .altcode = NULL }, /* 0x084b */ + { .altcode = NULL }, /* 0x084c */ + { .altcode = NULL }, /* 0x084d */ + { .altcode = NULL }, /* 0x084e */ + { .altcode = NULL }, /* 0x084f */ + { .altcode = NULL }, /* 0x0850 */ + { .altcode = NULL }, /* 0x0851 */ + { .altcode = NULL }, /* 0x0852 */ + { .altcode = NULL }, /* 0x0853 */ + { .altcode = NULL }, /* 0x0854 */ + { .altcode = NULL }, /* 0x0855 */ + { .altcode = NULL }, /* 0x0856 */ + { .altcode = NULL }, /* 0x0857 */ + { .altcode = NULL }, /* 0x0858 */ + { .altcode = NULL }, /* 0x0859 */ + { .altcode = NULL }, /* 0x085a */ + { .altcode = NULL }, /* 0x085b */ + { .altcode = NULL }, /* 0x085c */ + { .altcode = NULL }, /* 0x085d */ + { .altcode = NULL }, /* 0x085e */ + { .altcode = NULL }, /* 0x085f */ + { .altcode = NULL }, /* 0x0860 */ + { .altcode = NULL }, /* 0x0861 */ + { .altcode = NULL }, /* 0x0862 */ + { .altcode = NULL }, /* 0x0863 */ + { .altcode = NULL }, /* 0x0864 */ + { .altcode = NULL }, /* 0x0865 */ + { .altcode = NULL }, /* 0x0866 */ + { .altcode = NULL }, /* 0x0867 */ + { .altcode = NULL }, /* 0x0868 */ + { .altcode = NULL }, /* 0x0869 */ + { .altcode = NULL }, /* 0x086a */ + { .altcode = NULL }, /* 0x086b */ + { .altcode = NULL }, /* 0x086c */ + { .altcode = NULL }, /* 0x086d */ + { .altcode = NULL }, /* 0x086e */ + { .altcode = NULL }, /* 0x086f */ + { .altcode = NULL }, /* 0x0870 */ + { .altcode = NULL }, /* 0x0871 */ + { .altcode = NULL }, /* 0x0872 */ + { .altcode = NULL }, /* 0x0873 */ + { .altcode = NULL }, /* 0x0874 */ + { .altcode = NULL }, /* 0x0875 */ + { .altcode = NULL }, /* 0x0876 */ + { .altcode = NULL }, /* 0x0877 */ + { .altcode = NULL }, /* 0x0878 */ + { .altcode = NULL }, /* 0x0879 */ + { .altcode = NULL }, /* 0x087a */ + { .altcode = NULL }, /* 0x087b */ + { .altcode = NULL }, /* 0x087c */ + { .altcode = NULL }, /* 0x087d */ + { .altcode = NULL }, /* 0x087e */ + { .altcode = NULL }, /* 0x087f */ + { .altcode = NULL }, /* 0x0880 */ + { .altcode = NULL }, /* 0x0881 */ + { .altcode = NULL }, /* 0x0882 */ + { .altcode = NULL }, /* 0x0883 */ + { .altcode = NULL }, /* 0x0884 */ + { .altcode = NULL }, /* 0x0885 */ + { .altcode = NULL }, /* 0x0886 */ + { .altcode = NULL }, /* 0x0887 */ + { .altcode = NULL }, /* 0x0888 */ + { .altcode = NULL }, /* 0x0889 */ + { .altcode = NULL }, /* 0x088a */ + { .altcode = NULL }, /* 0x088b */ + { .altcode = NULL }, /* 0x088c */ + { .altcode = NULL }, /* 0x088d */ + { .altcode = NULL }, /* 0x088e */ + { .altcode = NULL }, /* 0x088f */ + { .altcode = NULL }, /* 0x0890 */ + { .altcode = NULL }, /* 0x0891 */ + { .altcode = NULL }, /* 0x0892 */ + { .altcode = NULL }, /* 0x0893 */ + { .altcode = NULL }, /* 0x0894 */ + { .altcode = NULL }, /* 0x0895 */ + { .altcode = NULL }, /* 0x0896 */ + { .altcode = NULL }, /* 0x0897 */ + { .altcode = NULL }, /* 0x0898 */ + { .altcode = NULL }, /* 0x0899 */ + { .altcode = NULL }, /* 0x089a */ + { .altcode = NULL }, /* 0x089b */ + { .altcode = NULL }, /* 0x089c */ + { .altcode = NULL }, /* 0x089d */ + { .altcode = NULL }, /* 0x089e */ + { .altcode = NULL }, /* 0x089f */ + { .altcode = NULL }, /* 0x08a0 */ + { .altcode = NULL }, /* 0x08a1 (leftradical) */ + { .altcode = NULL }, /* 0x08a2 (topleftradical) */ + { .altcode = NULL }, /* 0x08a3 (horizconnector) */ + { .altcode = NULL }, /* 0x08a4 (topintegral) */ + { .altcode = NULL }, /* 0x08a5 (botintegral) */ + { .altcode = NULL }, /* 0x08a6 (vertconnector) */ + { .altcode = NULL }, /* 0x08a7 (topleftsqbracket) */ + { .altcode = NULL }, /* 0x08a8 (botleftsqbracket) */ + { .altcode = NULL }, /* 0x08a9 (toprightsqbracket) */ + { .altcode = NULL }, /* 0x08aa (botrightsqbracket) */ + { .altcode = NULL }, /* 0x08ab (topleftparens) */ + { .altcode = NULL }, /* 0x08ac (botleftparens) */ + { .altcode = NULL }, /* 0x08ad (toprightparens) */ + { .altcode = NULL }, /* 0x08ae (botrightparens) */ + { .altcode = NULL }, /* 0x08af (leftmiddlecurlybrace) */ + { .altcode = NULL }, /* 0x08b0 (rightmiddlecurlybrace) */ + { .altcode = NULL }, /* 0x08b1 (topleftsummation) */ + { .altcode = NULL }, /* 0x08b2 (botleftsummation) */ + { .altcode = NULL }, /* 0x08b3 (topvertsummationconnector) */ + { .altcode = NULL }, /* 0x08b4 (botvertsummationconnector) */ + { .altcode = NULL }, /* 0x08b5 (toprightsummation) */ + { .altcode = NULL }, /* 0x08b6 (botrightsummation) */ + { .altcode = NULL }, /* 0x08b7 (rightmiddlesummation) */ + { .altcode = NULL }, /* 0x08b8 */ + { .altcode = NULL }, /* 0x08b9 */ + { .altcode = NULL }, /* 0x08ba */ + { .altcode = NULL }, /* 0x08bb */ + { .altcode = NULL }, /* 0x08bc (lessthanequal) */ + { .altcode = NULL }, /* 0x08bd (notequal) */ + { .altcode = NULL }, /* 0x08be (greaterthanequal) */ + { .altcode = NULL }, /* 0x08bf (integral) */ + { .altcode = NULL }, /* 0x08c0 (therefore) */ + { .altcode = NULL }, /* 0x08c1 (variation) */ + { .altcode = NULL }, /* 0x08c2 (infinity) */ + { .altcode = NULL }, /* 0x08c3 */ + { .altcode = NULL }, /* 0x08c4 */ + { .altcode = NULL }, /* 0x08c5 (nabla) */ + { .altcode = NULL }, /* 0x08c6 */ + { .altcode = NULL }, /* 0x08c7 */ + { .altcode = NULL }, /* 0x08c8 (approximate) */ + { .altcode = NULL }, /* 0x08c9 (similarequal) */ + { .altcode = NULL }, /* 0x08ca */ + { .altcode = NULL }, /* 0x08cb */ + { .altcode = NULL }, /* 0x08cc */ + { .altcode = NULL }, /* 0x08cd (ifonlyif) */ + { .altcode = NULL }, /* 0x08ce (implies) */ + { .altcode = NULL }, /* 0x08cf (identical) */ + { .altcode = NULL }, /* 0x08d0 */ + { .altcode = NULL }, /* 0x08d1 */ + { .altcode = NULL }, /* 0x08d2 */ + { .altcode = NULL }, /* 0x08d3 */ + { .altcode = NULL }, /* 0x08d4 */ + { .altcode = NULL }, /* 0x08d5 */ + { .altcode = NULL }, /* 0x08d6 (radical) */ + { .altcode = NULL }, /* 0x08d7 */ + { .altcode = NULL }, /* 0x08d8 */ + { .altcode = NULL }, /* 0x08d9 */ + { .altcode = NULL }, /* 0x08da (includedin) */ + { .altcode = NULL }, /* 0x08db (includes) */ + { .altcode = NULL }, /* 0x08dc (intersection) */ + { .altcode = NULL }, /* 0x08dd (union) */ + { .altcode = NULL }, /* 0x08de (logicaland) */ + { .altcode = NULL }, /* 0x08df (logicalor) */ + { .altcode = NULL }, /* 0x08e0 */ + { .altcode = NULL }, /* 0x08e1 */ + { .altcode = NULL }, /* 0x08e2 */ + { .altcode = NULL }, /* 0x08e3 */ + { .altcode = NULL }, /* 0x08e4 */ + { .altcode = NULL }, /* 0x08e5 */ + { .altcode = NULL }, /* 0x08e6 */ + { .altcode = NULL }, /* 0x08e7 */ + { .altcode = NULL }, /* 0x08e8 */ + { .altcode = NULL }, /* 0x08e9 */ + { .altcode = NULL }, /* 0x08ea */ + { .altcode = NULL }, /* 0x08eb */ + { .altcode = NULL }, /* 0x08ec */ + { .altcode = NULL }, /* 0x08ed */ + { .altcode = NULL }, /* 0x08ee */ + { .altcode = NULL }, /* 0x08ef (partialderivative) */ + { .altcode = NULL }, /* 0x08f0 */ + { .altcode = NULL }, /* 0x08f1 */ + { .altcode = NULL }, /* 0x08f2 */ + { .altcode = NULL }, /* 0x08f3 */ + { .altcode = NULL }, /* 0x08f4 */ + { .altcode = NULL }, /* 0x08f5 */ + { .altcode = NULL }, /* 0x08f6 (function) */ + { .altcode = NULL }, /* 0x08f7 */ + { .altcode = NULL }, /* 0x08f8 */ + { .altcode = NULL }, /* 0x08f9 */ + { .altcode = NULL }, /* 0x08fa */ + { .altcode = NULL }, /* 0x08fb (leftarrow) */ + { .altcode = NULL }, /* 0x08fc (uparrow) */ + { .altcode = NULL }, /* 0x08fd (rightarrow) */ + { .altcode = NULL }, /* 0x08fe (downarrow) */ + { .altcode = NULL }, /* 0x08ff */ }, { /* 0x09?? */ - { .altcode = NULL }, /* 0x0900 */ - { .altcode = NULL }, /* 0x0901 */ - { .altcode = NULL }, /* 0x0902 */ - { .altcode = NULL }, /* 0x0903 */ - { .altcode = NULL }, /* 0x0904 */ - { .altcode = NULL }, /* 0x0905 */ - { .altcode = NULL }, /* 0x0906 */ - { .altcode = NULL }, /* 0x0907 */ - { .altcode = NULL }, /* 0x0908 */ - { .altcode = NULL }, /* 0x0909 */ - { .altcode = NULL }, /* 0x090a */ - { .altcode = NULL }, /* 0x090b */ - { .altcode = NULL }, /* 0x090c */ - { .altcode = NULL }, /* 0x090d */ - { .altcode = NULL }, /* 0x090e */ - { .altcode = NULL }, /* 0x090f */ - { .altcode = NULL }, /* 0x0910 */ - { .altcode = NULL }, /* 0x0911 */ - { .altcode = NULL }, /* 0x0912 */ - { .altcode = NULL }, /* 0x0913 */ - { .altcode = NULL }, /* 0x0914 */ - { .altcode = NULL }, /* 0x0915 */ - { .altcode = NULL }, /* 0x0916 */ - { .altcode = NULL }, /* 0x0917 */ - { .altcode = NULL }, /* 0x0918 */ - { .altcode = NULL }, /* 0x0919 */ - { .altcode = NULL }, /* 0x091a */ - { .altcode = NULL }, /* 0x091b */ - { .altcode = NULL }, /* 0x091c */ - { .altcode = NULL }, /* 0x091d */ - { .altcode = NULL }, /* 0x091e */ - { .altcode = NULL }, /* 0x091f */ - { .altcode = NULL }, /* 0x0920 */ - { .altcode = NULL }, /* 0x0921 */ - { .altcode = NULL }, /* 0x0922 */ - { .altcode = NULL }, /* 0x0923 */ - { .altcode = NULL }, /* 0x0924 */ - { .altcode = NULL }, /* 0x0925 */ - { .altcode = NULL }, /* 0x0926 */ - { .altcode = NULL }, /* 0x0927 */ - { .altcode = NULL }, /* 0x0928 */ - { .altcode = NULL }, /* 0x0929 */ - { .altcode = NULL }, /* 0x092a */ - { .altcode = NULL }, /* 0x092b */ - { .altcode = NULL }, /* 0x092c */ - { .altcode = NULL }, /* 0x092d */ - { .altcode = NULL }, /* 0x092e */ - { .altcode = NULL }, /* 0x092f */ - { .altcode = NULL }, /* 0x0930 */ - { .altcode = NULL }, /* 0x0931 */ - { .altcode = NULL }, /* 0x0932 */ - { .altcode = NULL }, /* 0x0933 */ - { .altcode = NULL }, /* 0x0934 */ - { .altcode = NULL }, /* 0x0935 */ - { .altcode = NULL }, /* 0x0936 */ - { .altcode = NULL }, /* 0x0937 */ - { .altcode = NULL }, /* 0x0938 */ - { .altcode = NULL }, /* 0x0939 */ - { .altcode = NULL }, /* 0x093a */ - { .altcode = NULL }, /* 0x093b */ - { .altcode = NULL }, /* 0x093c */ - { .altcode = NULL }, /* 0x093d */ - { .altcode = NULL }, /* 0x093e */ - { .altcode = NULL }, /* 0x093f */ - { .altcode = NULL }, /* 0x0940 */ - { .altcode = NULL }, /* 0x0941 */ - { .altcode = NULL }, /* 0x0942 */ - { .altcode = NULL }, /* 0x0943 */ - { .altcode = NULL }, /* 0x0944 */ - { .altcode = NULL }, /* 0x0945 */ - { .altcode = NULL }, /* 0x0946 */ - { .altcode = NULL }, /* 0x0947 */ - { .altcode = NULL }, /* 0x0948 */ - { .altcode = NULL }, /* 0x0949 */ - { .altcode = NULL }, /* 0x094a */ - { .altcode = NULL }, /* 0x094b */ - { .altcode = NULL }, /* 0x094c */ - { .altcode = NULL }, /* 0x094d */ - { .altcode = NULL }, /* 0x094e */ - { .altcode = NULL }, /* 0x094f */ - { .altcode = NULL }, /* 0x0950 */ - { .altcode = NULL }, /* 0x0951 */ - { .altcode = NULL }, /* 0x0952 */ - { .altcode = NULL }, /* 0x0953 */ - { .altcode = NULL }, /* 0x0954 */ - { .altcode = NULL }, /* 0x0955 */ - { .altcode = NULL }, /* 0x0956 */ - { .altcode = NULL }, /* 0x0957 */ - { .altcode = NULL }, /* 0x0958 */ - { .altcode = NULL }, /* 0x0959 */ - { .altcode = NULL }, /* 0x095a */ - { .altcode = NULL }, /* 0x095b */ - { .altcode = NULL }, /* 0x095c */ - { .altcode = NULL }, /* 0x095d */ - { .altcode = NULL }, /* 0x095e */ - { .altcode = NULL }, /* 0x095f */ - { .altcode = NULL }, /* 0x0960 */ - { .altcode = NULL }, /* 0x0961 */ - { .altcode = NULL }, /* 0x0962 */ - { .altcode = NULL }, /* 0x0963 */ - { .altcode = NULL }, /* 0x0964 */ - { .altcode = NULL }, /* 0x0965 */ - { .altcode = NULL }, /* 0x0966 */ - { .altcode = NULL }, /* 0x0967 */ - { .altcode = NULL }, /* 0x0968 */ - { .altcode = NULL }, /* 0x0969 */ - { .altcode = NULL }, /* 0x096a */ - { .altcode = NULL }, /* 0x096b */ - { .altcode = NULL }, /* 0x096c */ - { .altcode = NULL }, /* 0x096d */ - { .altcode = NULL }, /* 0x096e */ - { .altcode = NULL }, /* 0x096f */ - { .altcode = NULL }, /* 0x0970 */ - { .altcode = NULL }, /* 0x0971 */ - { .altcode = NULL }, /* 0x0972 */ - { .altcode = NULL }, /* 0x0973 */ - { .altcode = NULL }, /* 0x0974 */ - { .altcode = NULL }, /* 0x0975 */ - { .altcode = NULL }, /* 0x0976 */ - { .altcode = NULL }, /* 0x0977 */ - { .altcode = NULL }, /* 0x0978 */ - { .altcode = NULL }, /* 0x0979 */ - { .altcode = NULL }, /* 0x097a */ - { .altcode = NULL }, /* 0x097b */ - { .altcode = NULL }, /* 0x097c */ - { .altcode = NULL }, /* 0x097d */ - { .altcode = NULL }, /* 0x097e */ - { .altcode = NULL }, /* 0x097f */ - { .altcode = NULL }, /* 0x0980 */ - { .altcode = NULL }, /* 0x0981 */ - { .altcode = NULL }, /* 0x0982 */ - { .altcode = NULL }, /* 0x0983 */ - { .altcode = NULL }, /* 0x0984 */ - { .altcode = NULL }, /* 0x0985 */ - { .altcode = NULL }, /* 0x0986 */ - { .altcode = NULL }, /* 0x0987 */ - { .altcode = NULL }, /* 0x0988 */ - { .altcode = NULL }, /* 0x0989 */ - { .altcode = NULL }, /* 0x098a */ - { .altcode = NULL }, /* 0x098b */ - { .altcode = NULL }, /* 0x098c */ - { .altcode = NULL }, /* 0x098d */ - { .altcode = NULL }, /* 0x098e */ - { .altcode = NULL }, /* 0x098f */ - { .altcode = NULL }, /* 0x0990 */ - { .altcode = NULL }, /* 0x0991 */ - { .altcode = NULL }, /* 0x0992 */ - { .altcode = NULL }, /* 0x0993 */ - { .altcode = NULL }, /* 0x0994 */ - { .altcode = NULL }, /* 0x0995 */ - { .altcode = NULL }, /* 0x0996 */ - { .altcode = NULL }, /* 0x0997 */ - { .altcode = NULL }, /* 0x0998 */ - { .altcode = NULL }, /* 0x0999 */ - { .altcode = NULL }, /* 0x099a */ - { .altcode = NULL }, /* 0x099b */ - { .altcode = NULL }, /* 0x099c */ - { .altcode = NULL }, /* 0x099d */ - { .altcode = NULL }, /* 0x099e */ - { .altcode = NULL }, /* 0x099f */ - { .altcode = NULL }, /* 0x09a0 */ - { .altcode = NULL }, /* 0x09a1 */ - { .altcode = NULL }, /* 0x09a2 */ - { .altcode = NULL }, /* 0x09a3 */ - { .altcode = NULL }, /* 0x09a4 */ - { .altcode = NULL }, /* 0x09a5 */ - { .altcode = NULL }, /* 0x09a6 */ - { .altcode = NULL }, /* 0x09a7 */ - { .altcode = NULL }, /* 0x09a8 */ - { .altcode = NULL }, /* 0x09a9 */ - { .altcode = NULL }, /* 0x09aa */ - { .altcode = NULL }, /* 0x09ab */ - { .altcode = NULL }, /* 0x09ac */ - { .altcode = NULL }, /* 0x09ad */ - { .altcode = NULL }, /* 0x09ae */ - { .altcode = NULL }, /* 0x09af */ - { .altcode = NULL }, /* 0x09b0 */ - { .altcode = NULL }, /* 0x09b1 */ - { .altcode = NULL }, /* 0x09b2 */ - { .altcode = NULL }, /* 0x09b3 */ - { .altcode = NULL }, /* 0x09b4 */ - { .altcode = NULL }, /* 0x09b5 */ - { .altcode = NULL }, /* 0x09b6 */ - { .altcode = NULL }, /* 0x09b7 */ - { .altcode = NULL }, /* 0x09b8 */ - { .altcode = NULL }, /* 0x09b9 */ - { .altcode = NULL }, /* 0x09ba */ - { .altcode = NULL }, /* 0x09bb */ - { .altcode = NULL }, /* 0x09bc */ - { .altcode = NULL }, /* 0x09bd */ - { .altcode = NULL }, /* 0x09be */ - { .altcode = NULL }, /* 0x09bf */ - { .altcode = NULL }, /* 0x09c0 */ - { .altcode = NULL }, /* 0x09c1 */ - { .altcode = NULL }, /* 0x09c2 */ - { .altcode = NULL }, /* 0x09c3 */ - { .altcode = NULL }, /* 0x09c4 */ - { .altcode = NULL }, /* 0x09c5 */ - { .altcode = NULL }, /* 0x09c6 */ - { .altcode = NULL }, /* 0x09c7 */ - { .altcode = NULL }, /* 0x09c8 */ - { .altcode = NULL }, /* 0x09c9 */ - { .altcode = NULL }, /* 0x09ca */ - { .altcode = NULL }, /* 0x09cb */ - { .altcode = NULL }, /* 0x09cc */ - { .altcode = NULL }, /* 0x09cd */ - { .altcode = NULL }, /* 0x09ce */ - { .altcode = NULL }, /* 0x09cf */ - { .altcode = NULL }, /* 0x09d0 */ - { .altcode = NULL }, /* 0x09d1 */ - { .altcode = NULL }, /* 0x09d2 */ - { .altcode = NULL }, /* 0x09d3 */ - { .altcode = NULL }, /* 0x09d4 */ - { .altcode = NULL }, /* 0x09d5 */ - { .altcode = NULL }, /* 0x09d6 */ - { .altcode = NULL }, /* 0x09d7 */ - { .altcode = NULL }, /* 0x09d8 */ - { .altcode = NULL }, /* 0x09d9 */ - { .altcode = NULL }, /* 0x09da */ - { .altcode = NULL }, /* 0x09db */ - { .altcode = NULL }, /* 0x09dc */ - { .altcode = NULL }, /* 0x09dd */ - { .altcode = NULL }, /* 0x09de */ - { .altcode = NULL }, /* 0x09df (blank) */ - { .altcode = NULL }, /* 0x09e0 (soliddiamond) */ - { .altcode = NULL }, /* 0x09e1 (checkerboard) */ - { .altcode = NULL }, /* 0x09e2 (ht) */ - { .altcode = NULL }, /* 0x09e3 (ff) */ - { .altcode = NULL }, /* 0x09e4 (cr) */ - { .altcode = NULL }, /* 0x09e5 (lf) */ - { .altcode = NULL }, /* 0x09e6 */ - { .altcode = NULL }, /* 0x09e7 */ - { .altcode = NULL }, /* 0x09e8 (nl) */ - { .altcode = NULL }, /* 0x09e9 (vt) */ - { .altcode = NULL }, /* 0x09ea (lowrightcorner) */ - { .altcode = NULL }, /* 0x09eb (uprightcorner) */ - { .altcode = NULL }, /* 0x09ec (upleftcorner) */ - { .altcode = NULL }, /* 0x09ed (lowleftcorner) */ - { .altcode = NULL }, /* 0x09ee (crossinglines) */ - { .altcode = NULL }, /* 0x09ef (horizlinescan1) */ - { .altcode = NULL }, /* 0x09f0 (horizlinescan3) */ - { .altcode = NULL }, /* 0x09f1 (horizlinescan5) */ - { .altcode = NULL }, /* 0x09f2 (horizlinescan7) */ - { .altcode = NULL }, /* 0x09f3 (horizlinescan9) */ - { .altcode = NULL }, /* 0x09f4 (leftt) */ - { .altcode = NULL }, /* 0x09f5 (rightt) */ - { .altcode = NULL }, /* 0x09f6 (bott) */ - { .altcode = NULL }, /* 0x09f7 (topt) */ - { .altcode = NULL }, /* 0x09f8 (vertbar) */ - { .altcode = NULL }, /* 0x09f9 */ - { .altcode = NULL }, /* 0x09fa */ - { .altcode = NULL }, /* 0x09fb */ - { .altcode = NULL }, /* 0x09fc */ - { .altcode = NULL }, /* 0x09fd */ - { .altcode = NULL }, /* 0x09fe */ - { .altcode = NULL }, /* 0x09ff */ + { .altcode = NULL }, /* 0x0900 */ + { .altcode = NULL }, /* 0x0901 */ + { .altcode = NULL }, /* 0x0902 */ + { .altcode = NULL }, /* 0x0903 */ + { .altcode = NULL }, /* 0x0904 */ + { .altcode = NULL }, /* 0x0905 */ + { .altcode = NULL }, /* 0x0906 */ + { .altcode = NULL }, /* 0x0907 */ + { .altcode = NULL }, /* 0x0908 */ + { .altcode = NULL }, /* 0x0909 */ + { .altcode = NULL }, /* 0x090a */ + { .altcode = NULL }, /* 0x090b */ + { .altcode = NULL }, /* 0x090c */ + { .altcode = NULL }, /* 0x090d */ + { .altcode = NULL }, /* 0x090e */ + { .altcode = NULL }, /* 0x090f */ + { .altcode = NULL }, /* 0x0910 */ + { .altcode = NULL }, /* 0x0911 */ + { .altcode = NULL }, /* 0x0912 */ + { .altcode = NULL }, /* 0x0913 */ + { .altcode = NULL }, /* 0x0914 */ + { .altcode = NULL }, /* 0x0915 */ + { .altcode = NULL }, /* 0x0916 */ + { .altcode = NULL }, /* 0x0917 */ + { .altcode = NULL }, /* 0x0918 */ + { .altcode = NULL }, /* 0x0919 */ + { .altcode = NULL }, /* 0x091a */ + { .altcode = NULL }, /* 0x091b */ + { .altcode = NULL }, /* 0x091c */ + { .altcode = NULL }, /* 0x091d */ + { .altcode = NULL }, /* 0x091e */ + { .altcode = NULL }, /* 0x091f */ + { .altcode = NULL }, /* 0x0920 */ + { .altcode = NULL }, /* 0x0921 */ + { .altcode = NULL }, /* 0x0922 */ + { .altcode = NULL }, /* 0x0923 */ + { .altcode = NULL }, /* 0x0924 */ + { .altcode = NULL }, /* 0x0925 */ + { .altcode = NULL }, /* 0x0926 */ + { .altcode = NULL }, /* 0x0927 */ + { .altcode = NULL }, /* 0x0928 */ + { .altcode = NULL }, /* 0x0929 */ + { .altcode = NULL }, /* 0x092a */ + { .altcode = NULL }, /* 0x092b */ + { .altcode = NULL }, /* 0x092c */ + { .altcode = NULL }, /* 0x092d */ + { .altcode = NULL }, /* 0x092e */ + { .altcode = NULL }, /* 0x092f */ + { .altcode = NULL }, /* 0x0930 */ + { .altcode = NULL }, /* 0x0931 */ + { .altcode = NULL }, /* 0x0932 */ + { .altcode = NULL }, /* 0x0933 */ + { .altcode = NULL }, /* 0x0934 */ + { .altcode = NULL }, /* 0x0935 */ + { .altcode = NULL }, /* 0x0936 */ + { .altcode = NULL }, /* 0x0937 */ + { .altcode = NULL }, /* 0x0938 */ + { .altcode = NULL }, /* 0x0939 */ + { .altcode = NULL }, /* 0x093a */ + { .altcode = NULL }, /* 0x093b */ + { .altcode = NULL }, /* 0x093c */ + { .altcode = NULL }, /* 0x093d */ + { .altcode = NULL }, /* 0x093e */ + { .altcode = NULL }, /* 0x093f */ + { .altcode = NULL }, /* 0x0940 */ + { .altcode = NULL }, /* 0x0941 */ + { .altcode = NULL }, /* 0x0942 */ + { .altcode = NULL }, /* 0x0943 */ + { .altcode = NULL }, /* 0x0944 */ + { .altcode = NULL }, /* 0x0945 */ + { .altcode = NULL }, /* 0x0946 */ + { .altcode = NULL }, /* 0x0947 */ + { .altcode = NULL }, /* 0x0948 */ + { .altcode = NULL }, /* 0x0949 */ + { .altcode = NULL }, /* 0x094a */ + { .altcode = NULL }, /* 0x094b */ + { .altcode = NULL }, /* 0x094c */ + { .altcode = NULL }, /* 0x094d */ + { .altcode = NULL }, /* 0x094e */ + { .altcode = NULL }, /* 0x094f */ + { .altcode = NULL }, /* 0x0950 */ + { .altcode = NULL }, /* 0x0951 */ + { .altcode = NULL }, /* 0x0952 */ + { .altcode = NULL }, /* 0x0953 */ + { .altcode = NULL }, /* 0x0954 */ + { .altcode = NULL }, /* 0x0955 */ + { .altcode = NULL }, /* 0x0956 */ + { .altcode = NULL }, /* 0x0957 */ + { .altcode = NULL }, /* 0x0958 */ + { .altcode = NULL }, /* 0x0959 */ + { .altcode = NULL }, /* 0x095a */ + { .altcode = NULL }, /* 0x095b */ + { .altcode = NULL }, /* 0x095c */ + { .altcode = NULL }, /* 0x095d */ + { .altcode = NULL }, /* 0x095e */ + { .altcode = NULL }, /* 0x095f */ + { .altcode = NULL }, /* 0x0960 */ + { .altcode = NULL }, /* 0x0961 */ + { .altcode = NULL }, /* 0x0962 */ + { .altcode = NULL }, /* 0x0963 */ + { .altcode = NULL }, /* 0x0964 */ + { .altcode = NULL }, /* 0x0965 */ + { .altcode = NULL }, /* 0x0966 */ + { .altcode = NULL }, /* 0x0967 */ + { .altcode = NULL }, /* 0x0968 */ + { .altcode = NULL }, /* 0x0969 */ + { .altcode = NULL }, /* 0x096a */ + { .altcode = NULL }, /* 0x096b */ + { .altcode = NULL }, /* 0x096c */ + { .altcode = NULL }, /* 0x096d */ + { .altcode = NULL }, /* 0x096e */ + { .altcode = NULL }, /* 0x096f */ + { .altcode = NULL }, /* 0x0970 */ + { .altcode = NULL }, /* 0x0971 */ + { .altcode = NULL }, /* 0x0972 */ + { .altcode = NULL }, /* 0x0973 */ + { .altcode = NULL }, /* 0x0974 */ + { .altcode = NULL }, /* 0x0975 */ + { .altcode = NULL }, /* 0x0976 */ + { .altcode = NULL }, /* 0x0977 */ + { .altcode = NULL }, /* 0x0978 */ + { .altcode = NULL }, /* 0x0979 */ + { .altcode = NULL }, /* 0x097a */ + { .altcode = NULL }, /* 0x097b */ + { .altcode = NULL }, /* 0x097c */ + { .altcode = NULL }, /* 0x097d */ + { .altcode = NULL }, /* 0x097e */ + { .altcode = NULL }, /* 0x097f */ + { .altcode = NULL }, /* 0x0980 */ + { .altcode = NULL }, /* 0x0981 */ + { .altcode = NULL }, /* 0x0982 */ + { .altcode = NULL }, /* 0x0983 */ + { .altcode = NULL }, /* 0x0984 */ + { .altcode = NULL }, /* 0x0985 */ + { .altcode = NULL }, /* 0x0986 */ + { .altcode = NULL }, /* 0x0987 */ + { .altcode = NULL }, /* 0x0988 */ + { .altcode = NULL }, /* 0x0989 */ + { .altcode = NULL }, /* 0x098a */ + { .altcode = NULL }, /* 0x098b */ + { .altcode = NULL }, /* 0x098c */ + { .altcode = NULL }, /* 0x098d */ + { .altcode = NULL }, /* 0x098e */ + { .altcode = NULL }, /* 0x098f */ + { .altcode = NULL }, /* 0x0990 */ + { .altcode = NULL }, /* 0x0991 */ + { .altcode = NULL }, /* 0x0992 */ + { .altcode = NULL }, /* 0x0993 */ + { .altcode = NULL }, /* 0x0994 */ + { .altcode = NULL }, /* 0x0995 */ + { .altcode = NULL }, /* 0x0996 */ + { .altcode = NULL }, /* 0x0997 */ + { .altcode = NULL }, /* 0x0998 */ + { .altcode = NULL }, /* 0x0999 */ + { .altcode = NULL }, /* 0x099a */ + { .altcode = NULL }, /* 0x099b */ + { .altcode = NULL }, /* 0x099c */ + { .altcode = NULL }, /* 0x099d */ + { .altcode = NULL }, /* 0x099e */ + { .altcode = NULL }, /* 0x099f */ + { .altcode = NULL }, /* 0x09a0 */ + { .altcode = NULL }, /* 0x09a1 */ + { .altcode = NULL }, /* 0x09a2 */ + { .altcode = NULL }, /* 0x09a3 */ + { .altcode = NULL }, /* 0x09a4 */ + { .altcode = NULL }, /* 0x09a5 */ + { .altcode = NULL }, /* 0x09a6 */ + { .altcode = NULL }, /* 0x09a7 */ + { .altcode = NULL }, /* 0x09a8 */ + { .altcode = NULL }, /* 0x09a9 */ + { .altcode = NULL }, /* 0x09aa */ + { .altcode = NULL }, /* 0x09ab */ + { .altcode = NULL }, /* 0x09ac */ + { .altcode = NULL }, /* 0x09ad */ + { .altcode = NULL }, /* 0x09ae */ + { .altcode = NULL }, /* 0x09af */ + { .altcode = NULL }, /* 0x09b0 */ + { .altcode = NULL }, /* 0x09b1 */ + { .altcode = NULL }, /* 0x09b2 */ + { .altcode = NULL }, /* 0x09b3 */ + { .altcode = NULL }, /* 0x09b4 */ + { .altcode = NULL }, /* 0x09b5 */ + { .altcode = NULL }, /* 0x09b6 */ + { .altcode = NULL }, /* 0x09b7 */ + { .altcode = NULL }, /* 0x09b8 */ + { .altcode = NULL }, /* 0x09b9 */ + { .altcode = NULL }, /* 0x09ba */ + { .altcode = NULL }, /* 0x09bb */ + { .altcode = NULL }, /* 0x09bc */ + { .altcode = NULL }, /* 0x09bd */ + { .altcode = NULL }, /* 0x09be */ + { .altcode = NULL }, /* 0x09bf */ + { .altcode = NULL }, /* 0x09c0 */ + { .altcode = NULL }, /* 0x09c1 */ + { .altcode = NULL }, /* 0x09c2 */ + { .altcode = NULL }, /* 0x09c3 */ + { .altcode = NULL }, /* 0x09c4 */ + { .altcode = NULL }, /* 0x09c5 */ + { .altcode = NULL }, /* 0x09c6 */ + { .altcode = NULL }, /* 0x09c7 */ + { .altcode = NULL }, /* 0x09c8 */ + { .altcode = NULL }, /* 0x09c9 */ + { .altcode = NULL }, /* 0x09ca */ + { .altcode = NULL }, /* 0x09cb */ + { .altcode = NULL }, /* 0x09cc */ + { .altcode = NULL }, /* 0x09cd */ + { .altcode = NULL }, /* 0x09ce */ + { .altcode = NULL }, /* 0x09cf */ + { .altcode = NULL }, /* 0x09d0 */ + { .altcode = NULL }, /* 0x09d1 */ + { .altcode = NULL }, /* 0x09d2 */ + { .altcode = NULL }, /* 0x09d3 */ + { .altcode = NULL }, /* 0x09d4 */ + { .altcode = NULL }, /* 0x09d5 */ + { .altcode = NULL }, /* 0x09d6 */ + { .altcode = NULL }, /* 0x09d7 */ + { .altcode = NULL }, /* 0x09d8 */ + { .altcode = NULL }, /* 0x09d9 */ + { .altcode = NULL }, /* 0x09da */ + { .altcode = NULL }, /* 0x09db */ + { .altcode = NULL }, /* 0x09dc */ + { .altcode = NULL }, /* 0x09dd */ + { .altcode = NULL }, /* 0x09de */ + { .altcode = NULL }, /* 0x09df (blank) */ + { .altcode = NULL }, /* 0x09e0 (soliddiamond) */ + { .altcode = NULL }, /* 0x09e1 (checkerboard) */ + { .altcode = NULL }, /* 0x09e2 (ht) */ + { .altcode = NULL }, /* 0x09e3 (ff) */ + { .altcode = NULL }, /* 0x09e4 (cr) */ + { .altcode = NULL }, /* 0x09e5 (lf) */ + { .altcode = NULL }, /* 0x09e6 */ + { .altcode = NULL }, /* 0x09e7 */ + { .altcode = NULL }, /* 0x09e8 (nl) */ + { .altcode = NULL }, /* 0x09e9 (vt) */ + { .altcode = NULL }, /* 0x09ea (lowrightcorner) */ + { .altcode = NULL }, /* 0x09eb (uprightcorner) */ + { .altcode = NULL }, /* 0x09ec (upleftcorner) */ + { .altcode = NULL }, /* 0x09ed (lowleftcorner) */ + { .altcode = NULL }, /* 0x09ee (crossinglines) */ + { .altcode = NULL }, /* 0x09ef (horizlinescan1) */ + { .altcode = NULL }, /* 0x09f0 (horizlinescan3) */ + { .altcode = NULL }, /* 0x09f1 (horizlinescan5) */ + { .altcode = NULL }, /* 0x09f2 (horizlinescan7) */ + { .altcode = NULL }, /* 0x09f3 (horizlinescan9) */ + { .altcode = NULL }, /* 0x09f4 (leftt) */ + { .altcode = NULL }, /* 0x09f5 (rightt) */ + { .altcode = NULL }, /* 0x09f6 (bott) */ + { .altcode = NULL }, /* 0x09f7 (topt) */ + { .altcode = NULL }, /* 0x09f8 (vertbar) */ + { .altcode = NULL }, /* 0x09f9 */ + { .altcode = NULL }, /* 0x09fa */ + { .altcode = NULL }, /* 0x09fb */ + { .altcode = NULL }, /* 0x09fc */ + { .altcode = NULL }, /* 0x09fd */ + { .altcode = NULL }, /* 0x09fe */ + { .altcode = NULL }, /* 0x09ff */ }, { /* 0x0a?? */ - { .altcode = NULL }, /* 0x0a00 */ - { .altcode = NULL }, /* 0x0a01 */ - { .altcode = NULL }, /* 0x0a02 */ - { .altcode = NULL }, /* 0x0a03 */ - { .altcode = NULL }, /* 0x0a04 */ - { .altcode = NULL }, /* 0x0a05 */ - { .altcode = NULL }, /* 0x0a06 */ - { .altcode = NULL }, /* 0x0a07 */ - { .altcode = NULL }, /* 0x0a08 */ - { .altcode = NULL }, /* 0x0a09 */ - { .altcode = NULL }, /* 0x0a0a */ - { .altcode = NULL }, /* 0x0a0b */ - { .altcode = NULL }, /* 0x0a0c */ - { .altcode = NULL }, /* 0x0a0d */ - { .altcode = NULL }, /* 0x0a0e */ - { .altcode = NULL }, /* 0x0a0f */ - { .altcode = NULL }, /* 0x0a10 */ - { .altcode = NULL }, /* 0x0a11 */ - { .altcode = NULL }, /* 0x0a12 */ - { .altcode = NULL }, /* 0x0a13 */ - { .altcode = NULL }, /* 0x0a14 */ - { .altcode = NULL }, /* 0x0a15 */ - { .altcode = NULL }, /* 0x0a16 */ - { .altcode = NULL }, /* 0x0a17 */ - { .altcode = NULL }, /* 0x0a18 */ - { .altcode = NULL }, /* 0x0a19 */ - { .altcode = NULL }, /* 0x0a1a */ - { .altcode = NULL }, /* 0x0a1b */ - { .altcode = NULL }, /* 0x0a1c */ - { .altcode = NULL }, /* 0x0a1d */ - { .altcode = NULL }, /* 0x0a1e */ - { .altcode = NULL }, /* 0x0a1f */ - { .altcode = NULL }, /* 0x0a20 */ - { .altcode = NULL }, /* 0x0a21 */ - { .altcode = NULL }, /* 0x0a22 */ - { .altcode = NULL }, /* 0x0a23 */ - { .altcode = NULL }, /* 0x0a24 */ - { .altcode = NULL }, /* 0x0a25 */ - { .altcode = NULL }, /* 0x0a26 */ - { .altcode = NULL }, /* 0x0a27 */ - { .altcode = NULL }, /* 0x0a28 */ - { .altcode = NULL }, /* 0x0a29 */ - { .altcode = NULL }, /* 0x0a2a */ - { .altcode = NULL }, /* 0x0a2b */ - { .altcode = NULL }, /* 0x0a2c */ - { .altcode = NULL }, /* 0x0a2d */ - { .altcode = NULL }, /* 0x0a2e */ - { .altcode = NULL }, /* 0x0a2f */ - { .altcode = NULL }, /* 0x0a30 */ - { .altcode = NULL }, /* 0x0a31 */ - { .altcode = NULL }, /* 0x0a32 */ - { .altcode = NULL }, /* 0x0a33 */ - { .altcode = NULL }, /* 0x0a34 */ - { .altcode = NULL }, /* 0x0a35 */ - { .altcode = NULL }, /* 0x0a36 */ - { .altcode = NULL }, /* 0x0a37 */ - { .altcode = NULL }, /* 0x0a38 */ - { .altcode = NULL }, /* 0x0a39 */ - { .altcode = NULL }, /* 0x0a3a */ - { .altcode = NULL }, /* 0x0a3b */ - { .altcode = NULL }, /* 0x0a3c */ - { .altcode = NULL }, /* 0x0a3d */ - { .altcode = NULL }, /* 0x0a3e */ - { .altcode = NULL }, /* 0x0a3f */ - { .altcode = NULL }, /* 0x0a40 */ - { .altcode = NULL }, /* 0x0a41 */ - { .altcode = NULL }, /* 0x0a42 */ - { .altcode = NULL }, /* 0x0a43 */ - { .altcode = NULL }, /* 0x0a44 */ - { .altcode = NULL }, /* 0x0a45 */ - { .altcode = NULL }, /* 0x0a46 */ - { .altcode = NULL }, /* 0x0a47 */ - { .altcode = NULL }, /* 0x0a48 */ - { .altcode = NULL }, /* 0x0a49 */ - { .altcode = NULL }, /* 0x0a4a */ - { .altcode = NULL }, /* 0x0a4b */ - { .altcode = NULL }, /* 0x0a4c */ - { .altcode = NULL }, /* 0x0a4d */ - { .altcode = NULL }, /* 0x0a4e */ - { .altcode = NULL }, /* 0x0a4f */ - { .altcode = NULL }, /* 0x0a50 */ - { .altcode = NULL }, /* 0x0a51 */ - { .altcode = NULL }, /* 0x0a52 */ - { .altcode = NULL }, /* 0x0a53 */ - { .altcode = NULL }, /* 0x0a54 */ - { .altcode = NULL }, /* 0x0a55 */ - { .altcode = NULL }, /* 0x0a56 */ - { .altcode = NULL }, /* 0x0a57 */ - { .altcode = NULL }, /* 0x0a58 */ - { .altcode = NULL }, /* 0x0a59 */ - { .altcode = NULL }, /* 0x0a5a */ - { .altcode = NULL }, /* 0x0a5b */ - { .altcode = NULL }, /* 0x0a5c */ - { .altcode = NULL }, /* 0x0a5d */ - { .altcode = NULL }, /* 0x0a5e */ - { .altcode = NULL }, /* 0x0a5f */ - { .altcode = NULL }, /* 0x0a60 */ - { .altcode = NULL }, /* 0x0a61 */ - { .altcode = NULL }, /* 0x0a62 */ - { .altcode = NULL }, /* 0x0a63 */ - { .altcode = NULL }, /* 0x0a64 */ - { .altcode = NULL }, /* 0x0a65 */ - { .altcode = NULL }, /* 0x0a66 */ - { .altcode = NULL }, /* 0x0a67 */ - { .altcode = NULL }, /* 0x0a68 */ - { .altcode = NULL }, /* 0x0a69 */ - { .altcode = NULL }, /* 0x0a6a */ - { .altcode = NULL }, /* 0x0a6b */ - { .altcode = NULL }, /* 0x0a6c */ - { .altcode = NULL }, /* 0x0a6d */ - { .altcode = NULL }, /* 0x0a6e */ - { .altcode = NULL }, /* 0x0a6f */ - { .altcode = NULL }, /* 0x0a70 */ - { .altcode = NULL }, /* 0x0a71 */ - { .altcode = NULL }, /* 0x0a72 */ - { .altcode = NULL }, /* 0x0a73 */ - { .altcode = NULL }, /* 0x0a74 */ - { .altcode = NULL }, /* 0x0a75 */ - { .altcode = NULL }, /* 0x0a76 */ - { .altcode = NULL }, /* 0x0a77 */ - { .altcode = NULL }, /* 0x0a78 */ - { .altcode = NULL }, /* 0x0a79 */ - { .altcode = NULL }, /* 0x0a7a */ - { .altcode = NULL }, /* 0x0a7b */ - { .altcode = NULL }, /* 0x0a7c */ - { .altcode = NULL }, /* 0x0a7d */ - { .altcode = NULL }, /* 0x0a7e */ - { .altcode = NULL }, /* 0x0a7f */ - { .altcode = NULL }, /* 0x0a80 */ - { .altcode = NULL }, /* 0x0a81 */ - { .altcode = NULL }, /* 0x0a82 */ - { .altcode = NULL }, /* 0x0a83 */ - { .altcode = NULL }, /* 0x0a84 */ - { .altcode = NULL }, /* 0x0a85 */ - { .altcode = NULL }, /* 0x0a86 */ - { .altcode = NULL }, /* 0x0a87 */ - { .altcode = NULL }, /* 0x0a88 */ - { .altcode = NULL }, /* 0x0a89 */ - { .altcode = NULL }, /* 0x0a8a */ - { .altcode = NULL }, /* 0x0a8b */ - { .altcode = NULL }, /* 0x0a8c */ - { .altcode = NULL }, /* 0x0a8d */ - { .altcode = NULL }, /* 0x0a8e */ - { .altcode = NULL }, /* 0x0a8f */ - { .altcode = NULL }, /* 0x0a90 */ - { .altcode = NULL }, /* 0x0a91 */ - { .altcode = NULL }, /* 0x0a92 */ - { .altcode = NULL }, /* 0x0a93 */ - { .altcode = NULL }, /* 0x0a94 */ - { .altcode = NULL }, /* 0x0a95 */ - { .altcode = NULL }, /* 0x0a96 */ - { .altcode = NULL }, /* 0x0a97 */ - { .altcode = NULL }, /* 0x0a98 */ - { .altcode = NULL }, /* 0x0a99 */ - { .altcode = NULL }, /* 0x0a9a */ - { .altcode = NULL }, /* 0x0a9b */ - { .altcode = NULL }, /* 0x0a9c */ - { .altcode = NULL }, /* 0x0a9d */ - { .altcode = NULL }, /* 0x0a9e */ - { .altcode = NULL }, /* 0x0a9f */ - { .altcode = NULL }, /* 0x0aa0 */ - { .altcode = NULL }, /* 0x0aa1 (emspace) */ - { .altcode = NULL }, /* 0x0aa2 (enspace) */ - { .altcode = NULL }, /* 0x0aa3 (em3space) */ - { .altcode = NULL }, /* 0x0aa4 (em4space) */ - { .altcode = NULL }, /* 0x0aa5 (digitspace) */ - { .altcode = NULL }, /* 0x0aa6 (punctspace) */ - { .altcode = NULL }, /* 0x0aa7 (thinspace) */ - { .altcode = NULL }, /* 0x0aa8 (hairspace) */ - { .altcode = NULL }, /* 0x0aa9 (emdash) */ - { .altcode = NULL }, /* 0x0aaa (endash) */ - { .altcode = NULL }, /* 0x0aab */ - { .altcode = NULL }, /* 0x0aac (signifblank) */ - { .altcode = NULL }, /* 0x0aad */ - { .altcode = NULL }, /* 0x0aae (ellipsis) */ - { .altcode = NULL }, /* 0x0aaf (doubbaselinedot) */ - { .altcode = NULL }, /* 0x0ab0 (onethird) */ - { .altcode = NULL }, /* 0x0ab1 (twothirds) */ - { .altcode = NULL }, /* 0x0ab2 (onefifth) */ - { .altcode = NULL }, /* 0x0ab3 (twofifths) */ - { .altcode = NULL }, /* 0x0ab4 (threefifths) */ - { .altcode = NULL }, /* 0x0ab5 (fourfifths) */ - { .altcode = NULL }, /* 0x0ab6 (onesixth) */ - { .altcode = NULL }, /* 0x0ab7 (fivesixths) */ - { .altcode = NULL }, /* 0x0ab8 (careof) */ - { .altcode = NULL }, /* 0x0ab9 */ - { .altcode = NULL }, /* 0x0aba */ - { .altcode = NULL }, /* 0x0abb (figdash) */ - { .altcode = NULL }, /* 0x0abc (leftanglebracket) */ - { .altcode = NULL }, /* 0x0abd (decimalpoint) */ - { .altcode = NULL }, /* 0x0abe (rightanglebracket) */ - { .altcode = NULL }, /* 0x0abf (marker) */ - { .altcode = NULL }, /* 0x0ac0 */ - { .altcode = NULL }, /* 0x0ac1 */ - { .altcode = NULL }, /* 0x0ac2 */ - { .altcode = NULL }, /* 0x0ac3 (oneeighth) */ - { .altcode = NULL }, /* 0x0ac4 (threeeighths) */ - { .altcode = NULL }, /* 0x0ac5 (fiveeighths) */ - { .altcode = NULL }, /* 0x0ac6 (seveneighths) */ - { .altcode = NULL }, /* 0x0ac7 */ - { .altcode = NULL }, /* 0x0ac8 */ - { .altcode = NULL }, /* 0x0ac9 (trademark) */ - { .altcode = NULL }, /* 0x0aca (signaturemark) */ - { .altcode = NULL }, /* 0x0acb (trademarkincircle) */ - { .altcode = NULL }, /* 0x0acc (leftopentriangle) */ - { .altcode = NULL }, /* 0x0acd (rightopentriangle) */ - { .altcode = NULL }, /* 0x0ace (emopencircle) */ - { .altcode = NULL }, /* 0x0acf (emopenrectangle) */ - { .altcode = NULL }, /* 0x0ad0 (leftsinglequotemark) */ - { .altcode = NULL }, /* 0x0ad1 (rightsinglequotemark) */ - { .altcode = NULL }, /* 0x0ad2 (leftdoublequotemark) */ - { .altcode = NULL }, /* 0x0ad3 (rightdoublequotemark) */ - { .altcode = NULL }, /* 0x0ad4 (prescription) */ - { .altcode = NULL }, /* 0x0ad5 */ - { .altcode = NULL }, /* 0x0ad6 (minutes) */ - { .altcode = NULL }, /* 0x0ad7 (seconds) */ - { .altcode = NULL }, /* 0x0ad8 */ - { .altcode = NULL }, /* 0x0ad9 (latincross) */ - { .altcode = NULL }, /* 0x0ada (hexagram) */ - { .altcode = NULL }, /* 0x0adb (filledrectbullet) */ - { .altcode = NULL }, /* 0x0adc (filledlefttribullet) */ - { .altcode = NULL }, /* 0x0add (filledrighttribullet) */ - { .altcode = NULL }, /* 0x0ade (emfilledcircle) */ - { .altcode = NULL }, /* 0x0adf (emfilledrect) */ - { .altcode = NULL }, /* 0x0ae0 (enopencircbullet) */ - { .altcode = NULL }, /* 0x0ae1 (enopensquarebullet) */ - { .altcode = NULL }, /* 0x0ae2 (openrectbullet) */ - { .altcode = NULL }, /* 0x0ae3 (opentribulletup) */ - { .altcode = NULL }, /* 0x0ae4 (opentribulletdown) */ - { .altcode = NULL }, /* 0x0ae5 (openstar) */ - { .altcode = NULL }, /* 0x0ae6 (enfilledcircbullet) */ - { .altcode = NULL }, /* 0x0ae7 (enfilledsqbullet) */ - { .altcode = NULL }, /* 0x0ae8 (filledtribulletup) */ - { .altcode = NULL }, /* 0x0ae9 (filledtribulletdown) */ - { .altcode = NULL }, /* 0x0aea (leftpointer) */ - { .altcode = NULL }, /* 0x0aeb (rightpointer) */ - { .altcode = NULL }, /* 0x0aec (club) */ - { .altcode = NULL }, /* 0x0aed (diamond) */ - { .altcode = NULL }, /* 0x0aee (heart) */ - { .altcode = NULL }, /* 0x0aef */ - { .altcode = NULL }, /* 0x0af0 (maltesecross) */ - { .altcode = NULL }, /* 0x0af1 (dagger) */ - { .altcode = NULL }, /* 0x0af2 (doubledagger) */ - { .altcode = NULL }, /* 0x0af3 (checkmark) */ - { .altcode = NULL }, /* 0x0af4 (ballotcross) */ - { .altcode = NULL }, /* 0x0af5 (musicalsharp) */ - { .altcode = NULL }, /* 0x0af6 (musicalflat) */ - { .altcode = NULL }, /* 0x0af7 (malesymbol) */ - { .altcode = NULL }, /* 0x0af8 (femalesymbol) */ - { .altcode = NULL }, /* 0x0af9 (telephone) */ - { .altcode = NULL }, /* 0x0afa (telephonerecorder) */ - { .altcode = NULL }, /* 0x0afb (phonographcopyright) */ - { .altcode = NULL }, /* 0x0afc (caret) */ - { .altcode = NULL }, /* 0x0afd (singlelowquotemark) */ - { .altcode = NULL }, /* 0x0afe (doublelowquotemark) */ - { .altcode = NULL }, /* 0x0aff (cursor) */ + { .altcode = NULL }, /* 0x0a00 */ + { .altcode = NULL }, /* 0x0a01 */ + { .altcode = NULL }, /* 0x0a02 */ + { .altcode = NULL }, /* 0x0a03 */ + { .altcode = NULL }, /* 0x0a04 */ + { .altcode = NULL }, /* 0x0a05 */ + { .altcode = NULL }, /* 0x0a06 */ + { .altcode = NULL }, /* 0x0a07 */ + { .altcode = NULL }, /* 0x0a08 */ + { .altcode = NULL }, /* 0x0a09 */ + { .altcode = NULL }, /* 0x0a0a */ + { .altcode = NULL }, /* 0x0a0b */ + { .altcode = NULL }, /* 0x0a0c */ + { .altcode = NULL }, /* 0x0a0d */ + { .altcode = NULL }, /* 0x0a0e */ + { .altcode = NULL }, /* 0x0a0f */ + { .altcode = NULL }, /* 0x0a10 */ + { .altcode = NULL }, /* 0x0a11 */ + { .altcode = NULL }, /* 0x0a12 */ + { .altcode = NULL }, /* 0x0a13 */ + { .altcode = NULL }, /* 0x0a14 */ + { .altcode = NULL }, /* 0x0a15 */ + { .altcode = NULL }, /* 0x0a16 */ + { .altcode = NULL }, /* 0x0a17 */ + { .altcode = NULL }, /* 0x0a18 */ + { .altcode = NULL }, /* 0x0a19 */ + { .altcode = NULL }, /* 0x0a1a */ + { .altcode = NULL }, /* 0x0a1b */ + { .altcode = NULL }, /* 0x0a1c */ + { .altcode = NULL }, /* 0x0a1d */ + { .altcode = NULL }, /* 0x0a1e */ + { .altcode = NULL }, /* 0x0a1f */ + { .altcode = NULL }, /* 0x0a20 */ + { .altcode = NULL }, /* 0x0a21 */ + { .altcode = NULL }, /* 0x0a22 */ + { .altcode = NULL }, /* 0x0a23 */ + { .altcode = NULL }, /* 0x0a24 */ + { .altcode = NULL }, /* 0x0a25 */ + { .altcode = NULL }, /* 0x0a26 */ + { .altcode = NULL }, /* 0x0a27 */ + { .altcode = NULL }, /* 0x0a28 */ + { .altcode = NULL }, /* 0x0a29 */ + { .altcode = NULL }, /* 0x0a2a */ + { .altcode = NULL }, /* 0x0a2b */ + { .altcode = NULL }, /* 0x0a2c */ + { .altcode = NULL }, /* 0x0a2d */ + { .altcode = NULL }, /* 0x0a2e */ + { .altcode = NULL }, /* 0x0a2f */ + { .altcode = NULL }, /* 0x0a30 */ + { .altcode = NULL }, /* 0x0a31 */ + { .altcode = NULL }, /* 0x0a32 */ + { .altcode = NULL }, /* 0x0a33 */ + { .altcode = NULL }, /* 0x0a34 */ + { .altcode = NULL }, /* 0x0a35 */ + { .altcode = NULL }, /* 0x0a36 */ + { .altcode = NULL }, /* 0x0a37 */ + { .altcode = NULL }, /* 0x0a38 */ + { .altcode = NULL }, /* 0x0a39 */ + { .altcode = NULL }, /* 0x0a3a */ + { .altcode = NULL }, /* 0x0a3b */ + { .altcode = NULL }, /* 0x0a3c */ + { .altcode = NULL }, /* 0x0a3d */ + { .altcode = NULL }, /* 0x0a3e */ + { .altcode = NULL }, /* 0x0a3f */ + { .altcode = NULL }, /* 0x0a40 */ + { .altcode = NULL }, /* 0x0a41 */ + { .altcode = NULL }, /* 0x0a42 */ + { .altcode = NULL }, /* 0x0a43 */ + { .altcode = NULL }, /* 0x0a44 */ + { .altcode = NULL }, /* 0x0a45 */ + { .altcode = NULL }, /* 0x0a46 */ + { .altcode = NULL }, /* 0x0a47 */ + { .altcode = NULL }, /* 0x0a48 */ + { .altcode = NULL }, /* 0x0a49 */ + { .altcode = NULL }, /* 0x0a4a */ + { .altcode = NULL }, /* 0x0a4b */ + { .altcode = NULL }, /* 0x0a4c */ + { .altcode = NULL }, /* 0x0a4d */ + { .altcode = NULL }, /* 0x0a4e */ + { .altcode = NULL }, /* 0x0a4f */ + { .altcode = NULL }, /* 0x0a50 */ + { .altcode = NULL }, /* 0x0a51 */ + { .altcode = NULL }, /* 0x0a52 */ + { .altcode = NULL }, /* 0x0a53 */ + { .altcode = NULL }, /* 0x0a54 */ + { .altcode = NULL }, /* 0x0a55 */ + { .altcode = NULL }, /* 0x0a56 */ + { .altcode = NULL }, /* 0x0a57 */ + { .altcode = NULL }, /* 0x0a58 */ + { .altcode = NULL }, /* 0x0a59 */ + { .altcode = NULL }, /* 0x0a5a */ + { .altcode = NULL }, /* 0x0a5b */ + { .altcode = NULL }, /* 0x0a5c */ + { .altcode = NULL }, /* 0x0a5d */ + { .altcode = NULL }, /* 0x0a5e */ + { .altcode = NULL }, /* 0x0a5f */ + { .altcode = NULL }, /* 0x0a60 */ + { .altcode = NULL }, /* 0x0a61 */ + { .altcode = NULL }, /* 0x0a62 */ + { .altcode = NULL }, /* 0x0a63 */ + { .altcode = NULL }, /* 0x0a64 */ + { .altcode = NULL }, /* 0x0a65 */ + { .altcode = NULL }, /* 0x0a66 */ + { .altcode = NULL }, /* 0x0a67 */ + { .altcode = NULL }, /* 0x0a68 */ + { .altcode = NULL }, /* 0x0a69 */ + { .altcode = NULL }, /* 0x0a6a */ + { .altcode = NULL }, /* 0x0a6b */ + { .altcode = NULL }, /* 0x0a6c */ + { .altcode = NULL }, /* 0x0a6d */ + { .altcode = NULL }, /* 0x0a6e */ + { .altcode = NULL }, /* 0x0a6f */ + { .altcode = NULL }, /* 0x0a70 */ + { .altcode = NULL }, /* 0x0a71 */ + { .altcode = NULL }, /* 0x0a72 */ + { .altcode = NULL }, /* 0x0a73 */ + { .altcode = NULL }, /* 0x0a74 */ + { .altcode = NULL }, /* 0x0a75 */ + { .altcode = NULL }, /* 0x0a76 */ + { .altcode = NULL }, /* 0x0a77 */ + { .altcode = NULL }, /* 0x0a78 */ + { .altcode = NULL }, /* 0x0a79 */ + { .altcode = NULL }, /* 0x0a7a */ + { .altcode = NULL }, /* 0x0a7b */ + { .altcode = NULL }, /* 0x0a7c */ + { .altcode = NULL }, /* 0x0a7d */ + { .altcode = NULL }, /* 0x0a7e */ + { .altcode = NULL }, /* 0x0a7f */ + { .altcode = NULL }, /* 0x0a80 */ + { .altcode = NULL }, /* 0x0a81 */ + { .altcode = NULL }, /* 0x0a82 */ + { .altcode = NULL }, /* 0x0a83 */ + { .altcode = NULL }, /* 0x0a84 */ + { .altcode = NULL }, /* 0x0a85 */ + { .altcode = NULL }, /* 0x0a86 */ + { .altcode = NULL }, /* 0x0a87 */ + { .altcode = NULL }, /* 0x0a88 */ + { .altcode = NULL }, /* 0x0a89 */ + { .altcode = NULL }, /* 0x0a8a */ + { .altcode = NULL }, /* 0x0a8b */ + { .altcode = NULL }, /* 0x0a8c */ + { .altcode = NULL }, /* 0x0a8d */ + { .altcode = NULL }, /* 0x0a8e */ + { .altcode = NULL }, /* 0x0a8f */ + { .altcode = NULL }, /* 0x0a90 */ + { .altcode = NULL }, /* 0x0a91 */ + { .altcode = NULL }, /* 0x0a92 */ + { .altcode = NULL }, /* 0x0a93 */ + { .altcode = NULL }, /* 0x0a94 */ + { .altcode = NULL }, /* 0x0a95 */ + { .altcode = NULL }, /* 0x0a96 */ + { .altcode = NULL }, /* 0x0a97 */ + { .altcode = NULL }, /* 0x0a98 */ + { .altcode = NULL }, /* 0x0a99 */ + { .altcode = NULL }, /* 0x0a9a */ + { .altcode = NULL }, /* 0x0a9b */ + { .altcode = NULL }, /* 0x0a9c */ + { .altcode = NULL }, /* 0x0a9d */ + { .altcode = NULL }, /* 0x0a9e */ + { .altcode = NULL }, /* 0x0a9f */ + { .altcode = NULL }, /* 0x0aa0 */ + { .altcode = NULL }, /* 0x0aa1 (emspace) */ + { .altcode = NULL }, /* 0x0aa2 (enspace) */ + { .altcode = NULL }, /* 0x0aa3 (em3space) */ + { .altcode = NULL }, /* 0x0aa4 (em4space) */ + { .altcode = NULL }, /* 0x0aa5 (digitspace) */ + { .altcode = NULL }, /* 0x0aa6 (punctspace) */ + { .altcode = NULL }, /* 0x0aa7 (thinspace) */ + { .altcode = NULL }, /* 0x0aa8 (hairspace) */ + { .altcode = NULL }, /* 0x0aa9 (emdash) */ + { .altcode = NULL }, /* 0x0aaa (endash) */ + { .altcode = NULL }, /* 0x0aab */ + { .altcode = NULL }, /* 0x0aac (signifblank) */ + { .altcode = NULL }, /* 0x0aad */ + { .altcode = NULL }, /* 0x0aae (ellipsis) */ + { .altcode = NULL }, /* 0x0aaf (doubbaselinedot) */ + { .altcode = NULL }, /* 0x0ab0 (onethird) */ + { .altcode = NULL }, /* 0x0ab1 (twothirds) */ + { .altcode = NULL }, /* 0x0ab2 (onefifth) */ + { .altcode = NULL }, /* 0x0ab3 (twofifths) */ + { .altcode = NULL }, /* 0x0ab4 (threefifths) */ + { .altcode = NULL }, /* 0x0ab5 (fourfifths) */ + { .altcode = NULL }, /* 0x0ab6 (onesixth) */ + { .altcode = NULL }, /* 0x0ab7 (fivesixths) */ + { .altcode = NULL }, /* 0x0ab8 (careof) */ + { .altcode = NULL }, /* 0x0ab9 */ + { .altcode = NULL }, /* 0x0aba */ + { .altcode = NULL }, /* 0x0abb (figdash) */ + { .altcode = NULL }, /* 0x0abc (leftanglebracket) */ + { .altcode = NULL }, /* 0x0abd (decimalpoint) */ + { .altcode = NULL }, /* 0x0abe (rightanglebracket) */ + { .altcode = NULL }, /* 0x0abf (marker) */ + { .altcode = NULL }, /* 0x0ac0 */ + { .altcode = NULL }, /* 0x0ac1 */ + { .altcode = NULL }, /* 0x0ac2 */ + { .altcode = NULL }, /* 0x0ac3 (oneeighth) */ + { .altcode = NULL }, /* 0x0ac4 (threeeighths) */ + { .altcode = NULL }, /* 0x0ac5 (fiveeighths) */ + { .altcode = NULL }, /* 0x0ac6 (seveneighths) */ + { .altcode = NULL }, /* 0x0ac7 */ + { .altcode = NULL }, /* 0x0ac8 */ + { .altcode = NULL }, /* 0x0ac9 (trademark) */ + { .altcode = NULL }, /* 0x0aca (signaturemark) */ + { .altcode = NULL }, /* 0x0acb (trademarkincircle) */ + { .altcode = NULL }, /* 0x0acc (leftopentriangle) */ + { .altcode = NULL }, /* 0x0acd (rightopentriangle) */ + { .altcode = NULL }, /* 0x0ace (emopencircle) */ + { .altcode = NULL }, /* 0x0acf (emopenrectangle) */ + { .altcode = NULL }, /* 0x0ad0 (leftsinglequotemark) */ + { .altcode = NULL }, /* 0x0ad1 (rightsinglequotemark) */ + { .altcode = NULL }, /* 0x0ad2 (leftdoublequotemark) */ + { .altcode = NULL }, /* 0x0ad3 (rightdoublequotemark) */ + { .altcode = NULL }, /* 0x0ad4 (prescription) */ + { .altcode = NULL }, /* 0x0ad5 */ + { .altcode = NULL }, /* 0x0ad6 (minutes) */ + { .altcode = NULL }, /* 0x0ad7 (seconds) */ + { .altcode = NULL }, /* 0x0ad8 */ + { .altcode = NULL }, /* 0x0ad9 (latincross) */ + { .altcode = NULL }, /* 0x0ada (hexagram) */ + { .altcode = NULL }, /* 0x0adb (filledrectbullet) */ + { .altcode = NULL }, /* 0x0adc (filledlefttribullet) */ + { .altcode = NULL }, /* 0x0add (filledrighttribullet) */ + { .altcode = NULL }, /* 0x0ade (emfilledcircle) */ + { .altcode = NULL }, /* 0x0adf (emfilledrect) */ + { .altcode = NULL }, /* 0x0ae0 (enopencircbullet) */ + { .altcode = NULL }, /* 0x0ae1 (enopensquarebullet) */ + { .altcode = NULL }, /* 0x0ae2 (openrectbullet) */ + { .altcode = NULL }, /* 0x0ae3 (opentribulletup) */ + { .altcode = NULL }, /* 0x0ae4 (opentribulletdown) */ + { .altcode = NULL }, /* 0x0ae5 (openstar) */ + { .altcode = NULL }, /* 0x0ae6 (enfilledcircbullet) */ + { .altcode = NULL }, /* 0x0ae7 (enfilledsqbullet) */ + { .altcode = NULL }, /* 0x0ae8 (filledtribulletup) */ + { .altcode = NULL }, /* 0x0ae9 (filledtribulletdown) */ + { .altcode = NULL }, /* 0x0aea (leftpointer) */ + { .altcode = NULL }, /* 0x0aeb (rightpointer) */ + { .altcode = NULL }, /* 0x0aec (club) */ + { .altcode = NULL }, /* 0x0aed (diamond) */ + { .altcode = NULL }, /* 0x0aee (heart) */ + { .altcode = NULL }, /* 0x0aef */ + { .altcode = NULL }, /* 0x0af0 (maltesecross) */ + { .altcode = NULL }, /* 0x0af1 (dagger) */ + { .altcode = NULL }, /* 0x0af2 (doubledagger) */ + { .altcode = NULL }, /* 0x0af3 (checkmark) */ + { .altcode = NULL }, /* 0x0af4 (ballotcross) */ + { .altcode = NULL }, /* 0x0af5 (musicalsharp) */ + { .altcode = NULL }, /* 0x0af6 (musicalflat) */ + { .altcode = NULL }, /* 0x0af7 (malesymbol) */ + { .altcode = NULL }, /* 0x0af8 (femalesymbol) */ + { .altcode = NULL }, /* 0x0af9 (telephone) */ + { .altcode = NULL }, /* 0x0afa (telephonerecorder) */ + { .altcode = NULL }, /* 0x0afb (phonographcopyright) */ + { .altcode = NULL }, /* 0x0afc (caret) */ + { .altcode = NULL }, /* 0x0afd (singlelowquotemark) */ + { .altcode = NULL }, /* 0x0afe (doublelowquotemark) */ + { .altcode = NULL }, /* 0x0aff (cursor) */ }, { /* 0x0b?? */ - { .altcode = NULL }, /* 0x0b00 */ - { .altcode = NULL }, /* 0x0b01 */ - { .altcode = NULL }, /* 0x0b02 */ - { .altcode = NULL }, /* 0x0b03 */ - { .altcode = NULL }, /* 0x0b04 */ - { .altcode = NULL }, /* 0x0b05 */ - { .altcode = NULL }, /* 0x0b06 */ - { .altcode = NULL }, /* 0x0b07 */ - { .altcode = NULL }, /* 0x0b08 */ - { .altcode = NULL }, /* 0x0b09 */ - { .altcode = NULL }, /* 0x0b0a */ - { .altcode = NULL }, /* 0x0b0b */ - { .altcode = NULL }, /* 0x0b0c */ - { .altcode = NULL }, /* 0x0b0d */ - { .altcode = NULL }, /* 0x0b0e */ - { .altcode = NULL }, /* 0x0b0f */ - { .altcode = NULL }, /* 0x0b10 */ - { .altcode = NULL }, /* 0x0b11 */ - { .altcode = NULL }, /* 0x0b12 */ - { .altcode = NULL }, /* 0x0b13 */ - { .altcode = NULL }, /* 0x0b14 */ - { .altcode = NULL }, /* 0x0b15 */ - { .altcode = NULL }, /* 0x0b16 */ - { .altcode = NULL }, /* 0x0b17 */ - { .altcode = NULL }, /* 0x0b18 */ - { .altcode = NULL }, /* 0x0b19 */ - { .altcode = NULL }, /* 0x0b1a */ - { .altcode = NULL }, /* 0x0b1b */ - { .altcode = NULL }, /* 0x0b1c */ - { .altcode = NULL }, /* 0x0b1d */ - { .altcode = NULL }, /* 0x0b1e */ - { .altcode = NULL }, /* 0x0b1f */ - { .altcode = NULL }, /* 0x0b20 */ - { .altcode = NULL }, /* 0x0b21 */ - { .altcode = NULL }, /* 0x0b22 */ - { .altcode = NULL }, /* 0x0b23 */ - { .altcode = NULL }, /* 0x0b24 */ - { .altcode = NULL }, /* 0x0b25 */ - { .altcode = NULL }, /* 0x0b26 */ - { .altcode = NULL }, /* 0x0b27 */ - { .altcode = NULL }, /* 0x0b28 */ - { .altcode = NULL }, /* 0x0b29 */ - { .altcode = NULL }, /* 0x0b2a */ - { .altcode = NULL }, /* 0x0b2b */ - { .altcode = NULL }, /* 0x0b2c */ - { .altcode = NULL }, /* 0x0b2d */ - { .altcode = NULL }, /* 0x0b2e */ - { .altcode = NULL }, /* 0x0b2f */ - { .altcode = NULL }, /* 0x0b30 */ - { .altcode = NULL }, /* 0x0b31 */ - { .altcode = NULL }, /* 0x0b32 */ - { .altcode = NULL }, /* 0x0b33 */ - { .altcode = NULL }, /* 0x0b34 */ - { .altcode = NULL }, /* 0x0b35 */ - { .altcode = NULL }, /* 0x0b36 */ - { .altcode = NULL }, /* 0x0b37 */ - { .altcode = NULL }, /* 0x0b38 */ - { .altcode = NULL }, /* 0x0b39 */ - { .altcode = NULL }, /* 0x0b3a */ - { .altcode = NULL }, /* 0x0b3b */ - { .altcode = NULL }, /* 0x0b3c */ - { .altcode = NULL }, /* 0x0b3d */ - { .altcode = NULL }, /* 0x0b3e */ - { .altcode = NULL }, /* 0x0b3f */ - { .altcode = NULL }, /* 0x0b40 */ - { .altcode = NULL }, /* 0x0b41 */ - { .altcode = NULL }, /* 0x0b42 */ - { .altcode = NULL }, /* 0x0b43 */ - { .altcode = NULL }, /* 0x0b44 */ - { .altcode = NULL }, /* 0x0b45 */ - { .altcode = NULL }, /* 0x0b46 */ - { .altcode = NULL }, /* 0x0b47 */ - { .altcode = NULL }, /* 0x0b48 */ - { .altcode = NULL }, /* 0x0b49 */ - { .altcode = NULL }, /* 0x0b4a */ - { .altcode = NULL }, /* 0x0b4b */ - { .altcode = NULL }, /* 0x0b4c */ - { .altcode = NULL }, /* 0x0b4d */ - { .altcode = NULL }, /* 0x0b4e */ - { .altcode = NULL }, /* 0x0b4f */ - { .altcode = NULL }, /* 0x0b50 */ - { .altcode = NULL }, /* 0x0b51 */ - { .altcode = NULL }, /* 0x0b52 */ - { .altcode = NULL }, /* 0x0b53 */ - { .altcode = NULL }, /* 0x0b54 */ - { .altcode = NULL }, /* 0x0b55 */ - { .altcode = NULL }, /* 0x0b56 */ - { .altcode = NULL }, /* 0x0b57 */ - { .altcode = NULL }, /* 0x0b58 */ - { .altcode = NULL }, /* 0x0b59 */ - { .altcode = NULL }, /* 0x0b5a */ - { .altcode = NULL }, /* 0x0b5b */ - { .altcode = NULL }, /* 0x0b5c */ - { .altcode = NULL }, /* 0x0b5d */ - { .altcode = NULL }, /* 0x0b5e */ - { .altcode = NULL }, /* 0x0b5f */ - { .altcode = NULL }, /* 0x0b60 */ - { .altcode = NULL }, /* 0x0b61 */ - { .altcode = NULL }, /* 0x0b62 */ - { .altcode = NULL }, /* 0x0b63 */ - { .altcode = NULL }, /* 0x0b64 */ - { .altcode = NULL }, /* 0x0b65 */ - { .altcode = NULL }, /* 0x0b66 */ - { .altcode = NULL }, /* 0x0b67 */ - { .altcode = NULL }, /* 0x0b68 */ - { .altcode = NULL }, /* 0x0b69 */ - { .altcode = NULL }, /* 0x0b6a */ - { .altcode = NULL }, /* 0x0b6b */ - { .altcode = NULL }, /* 0x0b6c */ - { .altcode = NULL }, /* 0x0b6d */ - { .altcode = NULL }, /* 0x0b6e */ - { .altcode = NULL }, /* 0x0b6f */ - { .altcode = NULL }, /* 0x0b70 */ - { .altcode = NULL }, /* 0x0b71 */ - { .altcode = NULL }, /* 0x0b72 */ - { .altcode = NULL }, /* 0x0b73 */ - { .altcode = NULL }, /* 0x0b74 */ - { .altcode = NULL }, /* 0x0b75 */ - { .altcode = NULL }, /* 0x0b76 */ - { .altcode = NULL }, /* 0x0b77 */ - { .altcode = NULL }, /* 0x0b78 */ - { .altcode = NULL }, /* 0x0b79 */ - { .altcode = NULL }, /* 0x0b7a */ - { .altcode = NULL }, /* 0x0b7b */ - { .altcode = NULL }, /* 0x0b7c */ - { .altcode = NULL }, /* 0x0b7d */ - { .altcode = NULL }, /* 0x0b7e */ - { .altcode = NULL }, /* 0x0b7f */ - { .altcode = NULL }, /* 0x0b80 */ - { .altcode = NULL }, /* 0x0b81 */ - { .altcode = NULL }, /* 0x0b82 */ - { .altcode = NULL }, /* 0x0b83 */ - { .altcode = NULL }, /* 0x0b84 */ - { .altcode = NULL }, /* 0x0b85 */ - { .altcode = NULL }, /* 0x0b86 */ - { .altcode = NULL }, /* 0x0b87 */ - { .altcode = NULL }, /* 0x0b88 */ - { .altcode = NULL }, /* 0x0b89 */ - { .altcode = NULL }, /* 0x0b8a */ - { .altcode = NULL }, /* 0x0b8b */ - { .altcode = NULL }, /* 0x0b8c */ - { .altcode = NULL }, /* 0x0b8d */ - { .altcode = NULL }, /* 0x0b8e */ - { .altcode = NULL }, /* 0x0b8f */ - { .altcode = NULL }, /* 0x0b90 */ - { .altcode = NULL }, /* 0x0b91 */ - { .altcode = NULL }, /* 0x0b92 */ - { .altcode = NULL }, /* 0x0b93 */ - { .altcode = NULL }, /* 0x0b94 */ - { .altcode = NULL }, /* 0x0b95 */ - { .altcode = NULL }, /* 0x0b96 */ - { .altcode = NULL }, /* 0x0b97 */ - { .altcode = NULL }, /* 0x0b98 */ - { .altcode = NULL }, /* 0x0b99 */ - { .altcode = NULL }, /* 0x0b9a */ - { .altcode = NULL }, /* 0x0b9b */ - { .altcode = NULL }, /* 0x0b9c */ - { .altcode = NULL }, /* 0x0b9d */ - { .altcode = NULL }, /* 0x0b9e */ - { .altcode = NULL }, /* 0x0b9f */ - { .altcode = NULL }, /* 0x0ba0 */ - { .altcode = NULL }, /* 0x0ba1 */ - { .altcode = NULL }, /* 0x0ba2 */ - { .altcode = NULL }, /* 0x0ba3 (leftcaret) */ - { .altcode = NULL }, /* 0x0ba4 */ - { .altcode = NULL }, /* 0x0ba5 */ - { .altcode = NULL }, /* 0x0ba6 (rightcaret) */ - { .altcode = NULL }, /* 0x0ba7 */ - { .altcode = NULL }, /* 0x0ba8 (downcaret) */ - { .altcode = NULL }, /* 0x0ba9 (upcaret) */ - { .altcode = NULL }, /* 0x0baa */ - { .altcode = NULL }, /* 0x0bab */ - { .altcode = NULL }, /* 0x0bac */ - { .altcode = NULL }, /* 0x0bad */ - { .altcode = NULL }, /* 0x0bae */ - { .altcode = NULL }, /* 0x0baf */ - { .altcode = NULL }, /* 0x0bb0 */ - { .altcode = NULL }, /* 0x0bb1 */ - { .altcode = NULL }, /* 0x0bb2 */ - { .altcode = NULL }, /* 0x0bb3 */ - { .altcode = NULL }, /* 0x0bb4 */ - { .altcode = NULL }, /* 0x0bb5 */ - { .altcode = NULL }, /* 0x0bb6 */ - { .altcode = NULL }, /* 0x0bb7 */ - { .altcode = NULL }, /* 0x0bb8 */ - { .altcode = NULL }, /* 0x0bb9 */ - { .altcode = NULL }, /* 0x0bba */ - { .altcode = NULL }, /* 0x0bbb */ - { .altcode = NULL }, /* 0x0bbc */ - { .altcode = NULL }, /* 0x0bbd */ - { .altcode = NULL }, /* 0x0bbe */ - { .altcode = NULL }, /* 0x0bbf */ - { .altcode = NULL }, /* 0x0bc0 (overbar) */ - { .altcode = NULL }, /* 0x0bc1 */ - { .altcode = NULL }, /* 0x0bc2 (downtack) */ - { .altcode = NULL }, /* 0x0bc3 (upshoe) */ - { .altcode = NULL }, /* 0x0bc4 (downstile) */ - { .altcode = NULL }, /* 0x0bc5 */ - { .altcode = NULL }, /* 0x0bc6 (underbar) */ - { .altcode = NULL }, /* 0x0bc7 */ - { .altcode = NULL }, /* 0x0bc8 */ - { .altcode = NULL }, /* 0x0bc9 */ - { .altcode = NULL }, /* 0x0bca (jot) */ - { .altcode = NULL }, /* 0x0bcb */ - { .altcode = NULL }, /* 0x0bcc (quad) */ - { .altcode = NULL }, /* 0x0bcd */ - { .altcode = NULL }, /* 0x0bce (uptack) */ - { .altcode = NULL }, /* 0x0bcf (circle) */ - { .altcode = NULL }, /* 0x0bd0 */ - { .altcode = NULL }, /* 0x0bd1 */ - { .altcode = NULL }, /* 0x0bd2 */ - { .altcode = NULL }, /* 0x0bd3 (upstile) */ - { .altcode = NULL }, /* 0x0bd4 */ - { .altcode = NULL }, /* 0x0bd5 */ - { .altcode = NULL }, /* 0x0bd6 (downshoe) */ - { .altcode = NULL }, /* 0x0bd7 */ - { .altcode = NULL }, /* 0x0bd8 (rightshoe) */ - { .altcode = NULL }, /* 0x0bd9 */ - { .altcode = NULL }, /* 0x0bda (leftshoe) */ - { .altcode = NULL }, /* 0x0bdb */ - { .altcode = NULL }, /* 0x0bdc (lefttack) */ - { .altcode = NULL }, /* 0x0bdd */ - { .altcode = NULL }, /* 0x0bde */ - { .altcode = NULL }, /* 0x0bdf */ - { .altcode = NULL }, /* 0x0be0 */ - { .altcode = NULL }, /* 0x0be1 */ - { .altcode = NULL }, /* 0x0be2 */ - { .altcode = NULL }, /* 0x0be3 */ - { .altcode = NULL }, /* 0x0be4 */ - { .altcode = NULL }, /* 0x0be5 */ - { .altcode = NULL }, /* 0x0be6 */ - { .altcode = NULL }, /* 0x0be7 */ - { .altcode = NULL }, /* 0x0be8 */ - { .altcode = NULL }, /* 0x0be9 */ - { .altcode = NULL }, /* 0x0bea */ - { .altcode = NULL }, /* 0x0beb */ - { .altcode = NULL }, /* 0x0bec */ - { .altcode = NULL }, /* 0x0bed */ - { .altcode = NULL }, /* 0x0bee */ - { .altcode = NULL }, /* 0x0bef */ - { .altcode = NULL }, /* 0x0bf0 */ - { .altcode = NULL }, /* 0x0bf1 */ - { .altcode = NULL }, /* 0x0bf2 */ - { .altcode = NULL }, /* 0x0bf3 */ - { .altcode = NULL }, /* 0x0bf4 */ - { .altcode = NULL }, /* 0x0bf5 */ - { .altcode = NULL }, /* 0x0bf6 */ - { .altcode = NULL }, /* 0x0bf7 */ - { .altcode = NULL }, /* 0x0bf8 */ - { .altcode = NULL }, /* 0x0bf9 */ - { .altcode = NULL }, /* 0x0bfa */ - { .altcode = NULL }, /* 0x0bfb */ - { .altcode = NULL }, /* 0x0bfc (righttack) */ - { .altcode = NULL }, /* 0x0bfd */ - { .altcode = NULL }, /* 0x0bfe */ - { .altcode = NULL }, /* 0x0bff */ + { .altcode = NULL }, /* 0x0b00 */ + { .altcode = NULL }, /* 0x0b01 */ + { .altcode = NULL }, /* 0x0b02 */ + { .altcode = NULL }, /* 0x0b03 */ + { .altcode = NULL }, /* 0x0b04 */ + { .altcode = NULL }, /* 0x0b05 */ + { .altcode = NULL }, /* 0x0b06 */ + { .altcode = NULL }, /* 0x0b07 */ + { .altcode = NULL }, /* 0x0b08 */ + { .altcode = NULL }, /* 0x0b09 */ + { .altcode = NULL }, /* 0x0b0a */ + { .altcode = NULL }, /* 0x0b0b */ + { .altcode = NULL }, /* 0x0b0c */ + { .altcode = NULL }, /* 0x0b0d */ + { .altcode = NULL }, /* 0x0b0e */ + { .altcode = NULL }, /* 0x0b0f */ + { .altcode = NULL }, /* 0x0b10 */ + { .altcode = NULL }, /* 0x0b11 */ + { .altcode = NULL }, /* 0x0b12 */ + { .altcode = NULL }, /* 0x0b13 */ + { .altcode = NULL }, /* 0x0b14 */ + { .altcode = NULL }, /* 0x0b15 */ + { .altcode = NULL }, /* 0x0b16 */ + { .altcode = NULL }, /* 0x0b17 */ + { .altcode = NULL }, /* 0x0b18 */ + { .altcode = NULL }, /* 0x0b19 */ + { .altcode = NULL }, /* 0x0b1a */ + { .altcode = NULL }, /* 0x0b1b */ + { .altcode = NULL }, /* 0x0b1c */ + { .altcode = NULL }, /* 0x0b1d */ + { .altcode = NULL }, /* 0x0b1e */ + { .altcode = NULL }, /* 0x0b1f */ + { .altcode = NULL }, /* 0x0b20 */ + { .altcode = NULL }, /* 0x0b21 */ + { .altcode = NULL }, /* 0x0b22 */ + { .altcode = NULL }, /* 0x0b23 */ + { .altcode = NULL }, /* 0x0b24 */ + { .altcode = NULL }, /* 0x0b25 */ + { .altcode = NULL }, /* 0x0b26 */ + { .altcode = NULL }, /* 0x0b27 */ + { .altcode = NULL }, /* 0x0b28 */ + { .altcode = NULL }, /* 0x0b29 */ + { .altcode = NULL }, /* 0x0b2a */ + { .altcode = NULL }, /* 0x0b2b */ + { .altcode = NULL }, /* 0x0b2c */ + { .altcode = NULL }, /* 0x0b2d */ + { .altcode = NULL }, /* 0x0b2e */ + { .altcode = NULL }, /* 0x0b2f */ + { .altcode = NULL }, /* 0x0b30 */ + { .altcode = NULL }, /* 0x0b31 */ + { .altcode = NULL }, /* 0x0b32 */ + { .altcode = NULL }, /* 0x0b33 */ + { .altcode = NULL }, /* 0x0b34 */ + { .altcode = NULL }, /* 0x0b35 */ + { .altcode = NULL }, /* 0x0b36 */ + { .altcode = NULL }, /* 0x0b37 */ + { .altcode = NULL }, /* 0x0b38 */ + { .altcode = NULL }, /* 0x0b39 */ + { .altcode = NULL }, /* 0x0b3a */ + { .altcode = NULL }, /* 0x0b3b */ + { .altcode = NULL }, /* 0x0b3c */ + { .altcode = NULL }, /* 0x0b3d */ + { .altcode = NULL }, /* 0x0b3e */ + { .altcode = NULL }, /* 0x0b3f */ + { .altcode = NULL }, /* 0x0b40 */ + { .altcode = NULL }, /* 0x0b41 */ + { .altcode = NULL }, /* 0x0b42 */ + { .altcode = NULL }, /* 0x0b43 */ + { .altcode = NULL }, /* 0x0b44 */ + { .altcode = NULL }, /* 0x0b45 */ + { .altcode = NULL }, /* 0x0b46 */ + { .altcode = NULL }, /* 0x0b47 */ + { .altcode = NULL }, /* 0x0b48 */ + { .altcode = NULL }, /* 0x0b49 */ + { .altcode = NULL }, /* 0x0b4a */ + { .altcode = NULL }, /* 0x0b4b */ + { .altcode = NULL }, /* 0x0b4c */ + { .altcode = NULL }, /* 0x0b4d */ + { .altcode = NULL }, /* 0x0b4e */ + { .altcode = NULL }, /* 0x0b4f */ + { .altcode = NULL }, /* 0x0b50 */ + { .altcode = NULL }, /* 0x0b51 */ + { .altcode = NULL }, /* 0x0b52 */ + { .altcode = NULL }, /* 0x0b53 */ + { .altcode = NULL }, /* 0x0b54 */ + { .altcode = NULL }, /* 0x0b55 */ + { .altcode = NULL }, /* 0x0b56 */ + { .altcode = NULL }, /* 0x0b57 */ + { .altcode = NULL }, /* 0x0b58 */ + { .altcode = NULL }, /* 0x0b59 */ + { .altcode = NULL }, /* 0x0b5a */ + { .altcode = NULL }, /* 0x0b5b */ + { .altcode = NULL }, /* 0x0b5c */ + { .altcode = NULL }, /* 0x0b5d */ + { .altcode = NULL }, /* 0x0b5e */ + { .altcode = NULL }, /* 0x0b5f */ + { .altcode = NULL }, /* 0x0b60 */ + { .altcode = NULL }, /* 0x0b61 */ + { .altcode = NULL }, /* 0x0b62 */ + { .altcode = NULL }, /* 0x0b63 */ + { .altcode = NULL }, /* 0x0b64 */ + { .altcode = NULL }, /* 0x0b65 */ + { .altcode = NULL }, /* 0x0b66 */ + { .altcode = NULL }, /* 0x0b67 */ + { .altcode = NULL }, /* 0x0b68 */ + { .altcode = NULL }, /* 0x0b69 */ + { .altcode = NULL }, /* 0x0b6a */ + { .altcode = NULL }, /* 0x0b6b */ + { .altcode = NULL }, /* 0x0b6c */ + { .altcode = NULL }, /* 0x0b6d */ + { .altcode = NULL }, /* 0x0b6e */ + { .altcode = NULL }, /* 0x0b6f */ + { .altcode = NULL }, /* 0x0b70 */ + { .altcode = NULL }, /* 0x0b71 */ + { .altcode = NULL }, /* 0x0b72 */ + { .altcode = NULL }, /* 0x0b73 */ + { .altcode = NULL }, /* 0x0b74 */ + { .altcode = NULL }, /* 0x0b75 */ + { .altcode = NULL }, /* 0x0b76 */ + { .altcode = NULL }, /* 0x0b77 */ + { .altcode = NULL }, /* 0x0b78 */ + { .altcode = NULL }, /* 0x0b79 */ + { .altcode = NULL }, /* 0x0b7a */ + { .altcode = NULL }, /* 0x0b7b */ + { .altcode = NULL }, /* 0x0b7c */ + { .altcode = NULL }, /* 0x0b7d */ + { .altcode = NULL }, /* 0x0b7e */ + { .altcode = NULL }, /* 0x0b7f */ + { .altcode = NULL }, /* 0x0b80 */ + { .altcode = NULL }, /* 0x0b81 */ + { .altcode = NULL }, /* 0x0b82 */ + { .altcode = NULL }, /* 0x0b83 */ + { .altcode = NULL }, /* 0x0b84 */ + { .altcode = NULL }, /* 0x0b85 */ + { .altcode = NULL }, /* 0x0b86 */ + { .altcode = NULL }, /* 0x0b87 */ + { .altcode = NULL }, /* 0x0b88 */ + { .altcode = NULL }, /* 0x0b89 */ + { .altcode = NULL }, /* 0x0b8a */ + { .altcode = NULL }, /* 0x0b8b */ + { .altcode = NULL }, /* 0x0b8c */ + { .altcode = NULL }, /* 0x0b8d */ + { .altcode = NULL }, /* 0x0b8e */ + { .altcode = NULL }, /* 0x0b8f */ + { .altcode = NULL }, /* 0x0b90 */ + { .altcode = NULL }, /* 0x0b91 */ + { .altcode = NULL }, /* 0x0b92 */ + { .altcode = NULL }, /* 0x0b93 */ + { .altcode = NULL }, /* 0x0b94 */ + { .altcode = NULL }, /* 0x0b95 */ + { .altcode = NULL }, /* 0x0b96 */ + { .altcode = NULL }, /* 0x0b97 */ + { .altcode = NULL }, /* 0x0b98 */ + { .altcode = NULL }, /* 0x0b99 */ + { .altcode = NULL }, /* 0x0b9a */ + { .altcode = NULL }, /* 0x0b9b */ + { .altcode = NULL }, /* 0x0b9c */ + { .altcode = NULL }, /* 0x0b9d */ + { .altcode = NULL }, /* 0x0b9e */ + { .altcode = NULL }, /* 0x0b9f */ + { .altcode = NULL }, /* 0x0ba0 */ + { .altcode = NULL }, /* 0x0ba1 */ + { .altcode = NULL }, /* 0x0ba2 */ + { .altcode = NULL }, /* 0x0ba3 (leftcaret) */ + { .altcode = NULL }, /* 0x0ba4 */ + { .altcode = NULL }, /* 0x0ba5 */ + { .altcode = NULL }, /* 0x0ba6 (rightcaret) */ + { .altcode = NULL }, /* 0x0ba7 */ + { .altcode = NULL }, /* 0x0ba8 (downcaret) */ + { .altcode = NULL }, /* 0x0ba9 (upcaret) */ + { .altcode = NULL }, /* 0x0baa */ + { .altcode = NULL }, /* 0x0bab */ + { .altcode = NULL }, /* 0x0bac */ + { .altcode = NULL }, /* 0x0bad */ + { .altcode = NULL }, /* 0x0bae */ + { .altcode = NULL }, /* 0x0baf */ + { .altcode = NULL }, /* 0x0bb0 */ + { .altcode = NULL }, /* 0x0bb1 */ + { .altcode = NULL }, /* 0x0bb2 */ + { .altcode = NULL }, /* 0x0bb3 */ + { .altcode = NULL }, /* 0x0bb4 */ + { .altcode = NULL }, /* 0x0bb5 */ + { .altcode = NULL }, /* 0x0bb6 */ + { .altcode = NULL }, /* 0x0bb7 */ + { .altcode = NULL }, /* 0x0bb8 */ + { .altcode = NULL }, /* 0x0bb9 */ + { .altcode = NULL }, /* 0x0bba */ + { .altcode = NULL }, /* 0x0bbb */ + { .altcode = NULL }, /* 0x0bbc */ + { .altcode = NULL }, /* 0x0bbd */ + { .altcode = NULL }, /* 0x0bbe */ + { .altcode = NULL }, /* 0x0bbf */ + { .altcode = NULL }, /* 0x0bc0 (overbar) */ + { .altcode = NULL }, /* 0x0bc1 */ + { .altcode = NULL }, /* 0x0bc2 (downtack) */ + { .altcode = NULL }, /* 0x0bc3 (upshoe) */ + { .altcode = NULL }, /* 0x0bc4 (downstile) */ + { .altcode = NULL }, /* 0x0bc5 */ + { .altcode = NULL }, /* 0x0bc6 (underbar) */ + { .altcode = NULL }, /* 0x0bc7 */ + { .altcode = NULL }, /* 0x0bc8 */ + { .altcode = NULL }, /* 0x0bc9 */ + { .altcode = NULL }, /* 0x0bca (jot) */ + { .altcode = NULL }, /* 0x0bcb */ + { .altcode = NULL }, /* 0x0bcc (quad) */ + { .altcode = NULL }, /* 0x0bcd */ + { .altcode = NULL }, /* 0x0bce (uptack) */ + { .altcode = NULL }, /* 0x0bcf (circle) */ + { .altcode = NULL }, /* 0x0bd0 */ + { .altcode = NULL }, /* 0x0bd1 */ + { .altcode = NULL }, /* 0x0bd2 */ + { .altcode = NULL }, /* 0x0bd3 (upstile) */ + { .altcode = NULL }, /* 0x0bd4 */ + { .altcode = NULL }, /* 0x0bd5 */ + { .altcode = NULL }, /* 0x0bd6 (downshoe) */ + { .altcode = NULL }, /* 0x0bd7 */ + { .altcode = NULL }, /* 0x0bd8 (rightshoe) */ + { .altcode = NULL }, /* 0x0bd9 */ + { .altcode = NULL }, /* 0x0bda (leftshoe) */ + { .altcode = NULL }, /* 0x0bdb */ + { .altcode = NULL }, /* 0x0bdc (lefttack) */ + { .altcode = NULL }, /* 0x0bdd */ + { .altcode = NULL }, /* 0x0bde */ + { .altcode = NULL }, /* 0x0bdf */ + { .altcode = NULL }, /* 0x0be0 */ + { .altcode = NULL }, /* 0x0be1 */ + { .altcode = NULL }, /* 0x0be2 */ + { .altcode = NULL }, /* 0x0be3 */ + { .altcode = NULL }, /* 0x0be4 */ + { .altcode = NULL }, /* 0x0be5 */ + { .altcode = NULL }, /* 0x0be6 */ + { .altcode = NULL }, /* 0x0be7 */ + { .altcode = NULL }, /* 0x0be8 */ + { .altcode = NULL }, /* 0x0be9 */ + { .altcode = NULL }, /* 0x0bea */ + { .altcode = NULL }, /* 0x0beb */ + { .altcode = NULL }, /* 0x0bec */ + { .altcode = NULL }, /* 0x0bed */ + { .altcode = NULL }, /* 0x0bee */ + { .altcode = NULL }, /* 0x0bef */ + { .altcode = NULL }, /* 0x0bf0 */ + { .altcode = NULL }, /* 0x0bf1 */ + { .altcode = NULL }, /* 0x0bf2 */ + { .altcode = NULL }, /* 0x0bf3 */ + { .altcode = NULL }, /* 0x0bf4 */ + { .altcode = NULL }, /* 0x0bf5 */ + { .altcode = NULL }, /* 0x0bf6 */ + { .altcode = NULL }, /* 0x0bf7 */ + { .altcode = NULL }, /* 0x0bf8 */ + { .altcode = NULL }, /* 0x0bf9 */ + { .altcode = NULL }, /* 0x0bfa */ + { .altcode = NULL }, /* 0x0bfb */ + { .altcode = NULL }, /* 0x0bfc (righttack) */ + { .altcode = NULL }, /* 0x0bfd */ + { .altcode = NULL }, /* 0x0bfe */ + { .altcode = NULL }, /* 0x0bff */ }, { /* 0x0c?? */ - { .altcode = NULL }, /* 0x0c00 */ - { .altcode = NULL }, /* 0x0c01 */ - { .altcode = NULL }, /* 0x0c02 */ - { .altcode = NULL }, /* 0x0c03 */ - { .altcode = NULL }, /* 0x0c04 */ - { .altcode = NULL }, /* 0x0c05 */ - { .altcode = NULL }, /* 0x0c06 */ - { .altcode = NULL }, /* 0x0c07 */ - { .altcode = NULL }, /* 0x0c08 */ - { .altcode = NULL }, /* 0x0c09 */ - { .altcode = NULL }, /* 0x0c0a */ - { .altcode = NULL }, /* 0x0c0b */ - { .altcode = NULL }, /* 0x0c0c */ - { .altcode = NULL }, /* 0x0c0d */ - { .altcode = NULL }, /* 0x0c0e */ - { .altcode = NULL }, /* 0x0c0f */ - { .altcode = NULL }, /* 0x0c10 */ - { .altcode = NULL }, /* 0x0c11 */ - { .altcode = NULL }, /* 0x0c12 */ - { .altcode = NULL }, /* 0x0c13 */ - { .altcode = NULL }, /* 0x0c14 */ - { .altcode = NULL }, /* 0x0c15 */ - { .altcode = NULL }, /* 0x0c16 */ - { .altcode = NULL }, /* 0x0c17 */ - { .altcode = NULL }, /* 0x0c18 */ - { .altcode = NULL }, /* 0x0c19 */ - { .altcode = NULL }, /* 0x0c1a */ - { .altcode = NULL }, /* 0x0c1b */ - { .altcode = NULL }, /* 0x0c1c */ - { .altcode = NULL }, /* 0x0c1d */ - { .altcode = NULL }, /* 0x0c1e */ - { .altcode = NULL }, /* 0x0c1f */ - { .altcode = NULL }, /* 0x0c20 */ - { .altcode = NULL }, /* 0x0c21 */ - { .altcode = NULL }, /* 0x0c22 */ - { .altcode = NULL }, /* 0x0c23 */ - { .altcode = NULL }, /* 0x0c24 */ - { .altcode = NULL }, /* 0x0c25 */ - { .altcode = NULL }, /* 0x0c26 */ - { .altcode = NULL }, /* 0x0c27 */ - { .altcode = NULL }, /* 0x0c28 */ - { .altcode = NULL }, /* 0x0c29 */ - { .altcode = NULL }, /* 0x0c2a */ - { .altcode = NULL }, /* 0x0c2b */ - { .altcode = NULL }, /* 0x0c2c */ - { .altcode = NULL }, /* 0x0c2d */ - { .altcode = NULL }, /* 0x0c2e */ - { .altcode = NULL }, /* 0x0c2f */ - { .altcode = NULL }, /* 0x0c30 */ - { .altcode = NULL }, /* 0x0c31 */ - { .altcode = NULL }, /* 0x0c32 */ - { .altcode = NULL }, /* 0x0c33 */ - { .altcode = NULL }, /* 0x0c34 */ - { .altcode = NULL }, /* 0x0c35 */ - { .altcode = NULL }, /* 0x0c36 */ - { .altcode = NULL }, /* 0x0c37 */ - { .altcode = NULL }, /* 0x0c38 */ - { .altcode = NULL }, /* 0x0c39 */ - { .altcode = NULL }, /* 0x0c3a */ - { .altcode = NULL }, /* 0x0c3b */ - { .altcode = NULL }, /* 0x0c3c */ - { .altcode = NULL }, /* 0x0c3d */ - { .altcode = NULL }, /* 0x0c3e */ - { .altcode = NULL }, /* 0x0c3f */ - { .altcode = NULL }, /* 0x0c40 */ - { .altcode = NULL }, /* 0x0c41 */ - { .altcode = NULL }, /* 0x0c42 */ - { .altcode = NULL }, /* 0x0c43 */ - { .altcode = NULL }, /* 0x0c44 */ - { .altcode = NULL }, /* 0x0c45 */ - { .altcode = NULL }, /* 0x0c46 */ - { .altcode = NULL }, /* 0x0c47 */ - { .altcode = NULL }, /* 0x0c48 */ - { .altcode = NULL }, /* 0x0c49 */ - { .altcode = NULL }, /* 0x0c4a */ - { .altcode = NULL }, /* 0x0c4b */ - { .altcode = NULL }, /* 0x0c4c */ - { .altcode = NULL }, /* 0x0c4d */ - { .altcode = NULL }, /* 0x0c4e */ - { .altcode = NULL }, /* 0x0c4f */ - { .altcode = NULL }, /* 0x0c50 */ - { .altcode = NULL }, /* 0x0c51 */ - { .altcode = NULL }, /* 0x0c52 */ - { .altcode = NULL }, /* 0x0c53 */ - { .altcode = NULL }, /* 0x0c54 */ - { .altcode = NULL }, /* 0x0c55 */ - { .altcode = NULL }, /* 0x0c56 */ - { .altcode = NULL }, /* 0x0c57 */ - { .altcode = NULL }, /* 0x0c58 */ - { .altcode = NULL }, /* 0x0c59 */ - { .altcode = NULL }, /* 0x0c5a */ - { .altcode = NULL }, /* 0x0c5b */ - { .altcode = NULL }, /* 0x0c5c */ - { .altcode = NULL }, /* 0x0c5d */ - { .altcode = NULL }, /* 0x0c5e */ - { .altcode = NULL }, /* 0x0c5f */ - { .altcode = NULL }, /* 0x0c60 */ - { .altcode = NULL }, /* 0x0c61 */ - { .altcode = NULL }, /* 0x0c62 */ - { .altcode = NULL }, /* 0x0c63 */ - { .altcode = NULL }, /* 0x0c64 */ - { .altcode = NULL }, /* 0x0c65 */ - { .altcode = NULL }, /* 0x0c66 */ - { .altcode = NULL }, /* 0x0c67 */ - { .altcode = NULL }, /* 0x0c68 */ - { .altcode = NULL }, /* 0x0c69 */ - { .altcode = NULL }, /* 0x0c6a */ - { .altcode = NULL }, /* 0x0c6b */ - { .altcode = NULL }, /* 0x0c6c */ - { .altcode = NULL }, /* 0x0c6d */ - { .altcode = NULL }, /* 0x0c6e */ - { .altcode = NULL }, /* 0x0c6f */ - { .altcode = NULL }, /* 0x0c70 */ - { .altcode = NULL }, /* 0x0c71 */ - { .altcode = NULL }, /* 0x0c72 */ - { .altcode = NULL }, /* 0x0c73 */ - { .altcode = NULL }, /* 0x0c74 */ - { .altcode = NULL }, /* 0x0c75 */ - { .altcode = NULL }, /* 0x0c76 */ - { .altcode = NULL }, /* 0x0c77 */ - { .altcode = NULL }, /* 0x0c78 */ - { .altcode = NULL }, /* 0x0c79 */ - { .altcode = NULL }, /* 0x0c7a */ - { .altcode = NULL }, /* 0x0c7b */ - { .altcode = NULL }, /* 0x0c7c */ - { .altcode = NULL }, /* 0x0c7d */ - { .altcode = NULL }, /* 0x0c7e */ - { .altcode = NULL }, /* 0x0c7f */ - { .altcode = NULL }, /* 0x0c80 */ - { .altcode = NULL }, /* 0x0c81 */ - { .altcode = NULL }, /* 0x0c82 */ - { .altcode = NULL }, /* 0x0c83 */ - { .altcode = NULL }, /* 0x0c84 */ - { .altcode = NULL }, /* 0x0c85 */ - { .altcode = NULL }, /* 0x0c86 */ - { .altcode = NULL }, /* 0x0c87 */ - { .altcode = NULL }, /* 0x0c88 */ - { .altcode = NULL }, /* 0x0c89 */ - { .altcode = NULL }, /* 0x0c8a */ - { .altcode = NULL }, /* 0x0c8b */ - { .altcode = NULL }, /* 0x0c8c */ - { .altcode = NULL }, /* 0x0c8d */ - { .altcode = NULL }, /* 0x0c8e */ - { .altcode = NULL }, /* 0x0c8f */ - { .altcode = NULL }, /* 0x0c90 */ - { .altcode = NULL }, /* 0x0c91 */ - { .altcode = NULL }, /* 0x0c92 */ - { .altcode = NULL }, /* 0x0c93 */ - { .altcode = NULL }, /* 0x0c94 */ - { .altcode = NULL }, /* 0x0c95 */ - { .altcode = NULL }, /* 0x0c96 */ - { .altcode = NULL }, /* 0x0c97 */ - { .altcode = NULL }, /* 0x0c98 */ - { .altcode = NULL }, /* 0x0c99 */ - { .altcode = NULL }, /* 0x0c9a */ - { .altcode = NULL }, /* 0x0c9b */ - { .altcode = NULL }, /* 0x0c9c */ - { .altcode = NULL }, /* 0x0c9d */ - { .altcode = NULL }, /* 0x0c9e */ - { .altcode = NULL }, /* 0x0c9f */ - { .altcode = NULL }, /* 0x0ca0 */ - { .altcode = NULL }, /* 0x0ca1 */ - { .altcode = NULL }, /* 0x0ca2 */ - { .altcode = NULL }, /* 0x0ca3 */ - { .altcode = NULL }, /* 0x0ca4 */ - { .altcode = NULL }, /* 0x0ca5 */ - { .altcode = NULL }, /* 0x0ca6 */ - { .altcode = NULL }, /* 0x0ca7 */ - { .altcode = NULL }, /* 0x0ca8 */ - { .altcode = NULL }, /* 0x0ca9 */ - { .altcode = NULL }, /* 0x0caa */ - { .altcode = NULL }, /* 0x0cab */ - { .altcode = NULL }, /* 0x0cac */ - { .altcode = NULL }, /* 0x0cad */ - { .altcode = NULL }, /* 0x0cae */ - { .altcode = NULL }, /* 0x0caf */ - { .altcode = NULL }, /* 0x0cb0 */ - { .altcode = NULL }, /* 0x0cb1 */ - { .altcode = NULL }, /* 0x0cb2 */ - { .altcode = NULL }, /* 0x0cb3 */ - { .altcode = NULL }, /* 0x0cb4 */ - { .altcode = NULL }, /* 0x0cb5 */ - { .altcode = NULL }, /* 0x0cb6 */ - { .altcode = NULL }, /* 0x0cb7 */ - { .altcode = NULL }, /* 0x0cb8 */ - { .altcode = NULL }, /* 0x0cb9 */ - { .altcode = NULL }, /* 0x0cba */ - { .altcode = NULL }, /* 0x0cbb */ - { .altcode = NULL }, /* 0x0cbc */ - { .altcode = NULL }, /* 0x0cbd */ - { .altcode = NULL }, /* 0x0cbe */ - { .altcode = NULL }, /* 0x0cbf */ - { .altcode = NULL }, /* 0x0cc0 */ - { .altcode = NULL }, /* 0x0cc1 */ - { .altcode = NULL }, /* 0x0cc2 */ - { .altcode = NULL }, /* 0x0cc3 */ - { .altcode = NULL }, /* 0x0cc4 */ - { .altcode = NULL }, /* 0x0cc5 */ - { .altcode = NULL }, /* 0x0cc6 */ - { .altcode = NULL }, /* 0x0cc7 */ - { .altcode = NULL }, /* 0x0cc8 */ - { .altcode = NULL }, /* 0x0cc9 */ - { .altcode = NULL }, /* 0x0cca */ - { .altcode = NULL }, /* 0x0ccb */ - { .altcode = NULL }, /* 0x0ccc */ - { .altcode = NULL }, /* 0x0ccd */ - { .altcode = NULL }, /* 0x0cce */ - { .altcode = NULL }, /* 0x0ccf */ - { .altcode = NULL }, /* 0x0cd0 */ - { .altcode = NULL }, /* 0x0cd1 */ - { .altcode = NULL }, /* 0x0cd2 */ - { .altcode = NULL }, /* 0x0cd3 */ - { .altcode = NULL }, /* 0x0cd4 */ - { .altcode = NULL }, /* 0x0cd5 */ - { .altcode = NULL }, /* 0x0cd6 */ - { .altcode = NULL }, /* 0x0cd7 */ - { .altcode = NULL }, /* 0x0cd8 */ - { .altcode = NULL }, /* 0x0cd9 */ - { .altcode = NULL }, /* 0x0cda */ - { .altcode = NULL }, /* 0x0cdb */ - { .altcode = NULL }, /* 0x0cdc */ - { .altcode = NULL }, /* 0x0cdd */ - { .altcode = NULL }, /* 0x0cde */ - { .altcode = NULL }, /* 0x0cdf (hebrew_doublelowline) */ - { .altcode = NULL }, /* 0x0ce0 (hebrew_aleph) */ - { .altcode = NULL }, /* 0x0ce1 (hebrew_beth) */ - { .altcode = NULL }, /* 0x0ce2 (hebrew_gimmel) */ - { .altcode = NULL }, /* 0x0ce3 (hebrew_daleth) */ - { .altcode = NULL }, /* 0x0ce4 (hebrew_he) */ - { .altcode = NULL }, /* 0x0ce5 (hebrew_waw) */ - { .altcode = NULL }, /* 0x0ce6 (hebrew_zayin) */ - { .altcode = NULL }, /* 0x0ce7 (hebrew_het) */ - { .altcode = NULL }, /* 0x0ce8 (hebrew_teth) */ - { .altcode = NULL }, /* 0x0ce9 (hebrew_yod) */ - { .altcode = NULL }, /* 0x0cea (hebrew_finalkaph) */ - { .altcode = NULL }, /* 0x0ceb (hebrew_kaph) */ - { .altcode = NULL }, /* 0x0cec (hebrew_lamed) */ - { .altcode = NULL }, /* 0x0ced (hebrew_finalmem) */ - { .altcode = NULL }, /* 0x0cee (hebrew_mem) */ - { .altcode = NULL }, /* 0x0cef (hebrew_finalnun) */ - { .altcode = NULL }, /* 0x0cf0 (hebrew_nun) */ - { .altcode = NULL }, /* 0x0cf1 (hebrew_samekh) */ - { .altcode = NULL }, /* 0x0cf2 (hebrew_ayin) */ - { .altcode = NULL }, /* 0x0cf3 (hebrew_finalpe) */ - { .altcode = NULL }, /* 0x0cf4 (hebrew_pe) */ - { .altcode = NULL }, /* 0x0cf5 (hebrew_finalzadi) */ - { .altcode = NULL }, /* 0x0cf6 (hebrew_zadi) */ - { .altcode = NULL }, /* 0x0cf7 (hebrew_kuf) */ - { .altcode = NULL }, /* 0x0cf8 (hebrew_resh) */ - { .altcode = NULL }, /* 0x0cf9 (hebrew_shin) */ - { .altcode = NULL }, /* 0x0cfa (hebrew_taf) */ - { .altcode = NULL }, /* 0x0cfb */ - { .altcode = NULL }, /* 0x0cfc */ - { .altcode = NULL }, /* 0x0cfd */ - { .altcode = NULL }, /* 0x0cfe */ - { .altcode = NULL }, /* 0x0cff */ + { .altcode = NULL }, /* 0x0c00 */ + { .altcode = NULL }, /* 0x0c01 */ + { .altcode = NULL }, /* 0x0c02 */ + { .altcode = NULL }, /* 0x0c03 */ + { .altcode = NULL }, /* 0x0c04 */ + { .altcode = NULL }, /* 0x0c05 */ + { .altcode = NULL }, /* 0x0c06 */ + { .altcode = NULL }, /* 0x0c07 */ + { .altcode = NULL }, /* 0x0c08 */ + { .altcode = NULL }, /* 0x0c09 */ + { .altcode = NULL }, /* 0x0c0a */ + { .altcode = NULL }, /* 0x0c0b */ + { .altcode = NULL }, /* 0x0c0c */ + { .altcode = NULL }, /* 0x0c0d */ + { .altcode = NULL }, /* 0x0c0e */ + { .altcode = NULL }, /* 0x0c0f */ + { .altcode = NULL }, /* 0x0c10 */ + { .altcode = NULL }, /* 0x0c11 */ + { .altcode = NULL }, /* 0x0c12 */ + { .altcode = NULL }, /* 0x0c13 */ + { .altcode = NULL }, /* 0x0c14 */ + { .altcode = NULL }, /* 0x0c15 */ + { .altcode = NULL }, /* 0x0c16 */ + { .altcode = NULL }, /* 0x0c17 */ + { .altcode = NULL }, /* 0x0c18 */ + { .altcode = NULL }, /* 0x0c19 */ + { .altcode = NULL }, /* 0x0c1a */ + { .altcode = NULL }, /* 0x0c1b */ + { .altcode = NULL }, /* 0x0c1c */ + { .altcode = NULL }, /* 0x0c1d */ + { .altcode = NULL }, /* 0x0c1e */ + { .altcode = NULL }, /* 0x0c1f */ + { .altcode = NULL }, /* 0x0c20 */ + { .altcode = NULL }, /* 0x0c21 */ + { .altcode = NULL }, /* 0x0c22 */ + { .altcode = NULL }, /* 0x0c23 */ + { .altcode = NULL }, /* 0x0c24 */ + { .altcode = NULL }, /* 0x0c25 */ + { .altcode = NULL }, /* 0x0c26 */ + { .altcode = NULL }, /* 0x0c27 */ + { .altcode = NULL }, /* 0x0c28 */ + { .altcode = NULL }, /* 0x0c29 */ + { .altcode = NULL }, /* 0x0c2a */ + { .altcode = NULL }, /* 0x0c2b */ + { .altcode = NULL }, /* 0x0c2c */ + { .altcode = NULL }, /* 0x0c2d */ + { .altcode = NULL }, /* 0x0c2e */ + { .altcode = NULL }, /* 0x0c2f */ + { .altcode = NULL }, /* 0x0c30 */ + { .altcode = NULL }, /* 0x0c31 */ + { .altcode = NULL }, /* 0x0c32 */ + { .altcode = NULL }, /* 0x0c33 */ + { .altcode = NULL }, /* 0x0c34 */ + { .altcode = NULL }, /* 0x0c35 */ + { .altcode = NULL }, /* 0x0c36 */ + { .altcode = NULL }, /* 0x0c37 */ + { .altcode = NULL }, /* 0x0c38 */ + { .altcode = NULL }, /* 0x0c39 */ + { .altcode = NULL }, /* 0x0c3a */ + { .altcode = NULL }, /* 0x0c3b */ + { .altcode = NULL }, /* 0x0c3c */ + { .altcode = NULL }, /* 0x0c3d */ + { .altcode = NULL }, /* 0x0c3e */ + { .altcode = NULL }, /* 0x0c3f */ + { .altcode = NULL }, /* 0x0c40 */ + { .altcode = NULL }, /* 0x0c41 */ + { .altcode = NULL }, /* 0x0c42 */ + { .altcode = NULL }, /* 0x0c43 */ + { .altcode = NULL }, /* 0x0c44 */ + { .altcode = NULL }, /* 0x0c45 */ + { .altcode = NULL }, /* 0x0c46 */ + { .altcode = NULL }, /* 0x0c47 */ + { .altcode = NULL }, /* 0x0c48 */ + { .altcode = NULL }, /* 0x0c49 */ + { .altcode = NULL }, /* 0x0c4a */ + { .altcode = NULL }, /* 0x0c4b */ + { .altcode = NULL }, /* 0x0c4c */ + { .altcode = NULL }, /* 0x0c4d */ + { .altcode = NULL }, /* 0x0c4e */ + { .altcode = NULL }, /* 0x0c4f */ + { .altcode = NULL }, /* 0x0c50 */ + { .altcode = NULL }, /* 0x0c51 */ + { .altcode = NULL }, /* 0x0c52 */ + { .altcode = NULL }, /* 0x0c53 */ + { .altcode = NULL }, /* 0x0c54 */ + { .altcode = NULL }, /* 0x0c55 */ + { .altcode = NULL }, /* 0x0c56 */ + { .altcode = NULL }, /* 0x0c57 */ + { .altcode = NULL }, /* 0x0c58 */ + { .altcode = NULL }, /* 0x0c59 */ + { .altcode = NULL }, /* 0x0c5a */ + { .altcode = NULL }, /* 0x0c5b */ + { .altcode = NULL }, /* 0x0c5c */ + { .altcode = NULL }, /* 0x0c5d */ + { .altcode = NULL }, /* 0x0c5e */ + { .altcode = NULL }, /* 0x0c5f */ + { .altcode = NULL }, /* 0x0c60 */ + { .altcode = NULL }, /* 0x0c61 */ + { .altcode = NULL }, /* 0x0c62 */ + { .altcode = NULL }, /* 0x0c63 */ + { .altcode = NULL }, /* 0x0c64 */ + { .altcode = NULL }, /* 0x0c65 */ + { .altcode = NULL }, /* 0x0c66 */ + { .altcode = NULL }, /* 0x0c67 */ + { .altcode = NULL }, /* 0x0c68 */ + { .altcode = NULL }, /* 0x0c69 */ + { .altcode = NULL }, /* 0x0c6a */ + { .altcode = NULL }, /* 0x0c6b */ + { .altcode = NULL }, /* 0x0c6c */ + { .altcode = NULL }, /* 0x0c6d */ + { .altcode = NULL }, /* 0x0c6e */ + { .altcode = NULL }, /* 0x0c6f */ + { .altcode = NULL }, /* 0x0c70 */ + { .altcode = NULL }, /* 0x0c71 */ + { .altcode = NULL }, /* 0x0c72 */ + { .altcode = NULL }, /* 0x0c73 */ + { .altcode = NULL }, /* 0x0c74 */ + { .altcode = NULL }, /* 0x0c75 */ + { .altcode = NULL }, /* 0x0c76 */ + { .altcode = NULL }, /* 0x0c77 */ + { .altcode = NULL }, /* 0x0c78 */ + { .altcode = NULL }, /* 0x0c79 */ + { .altcode = NULL }, /* 0x0c7a */ + { .altcode = NULL }, /* 0x0c7b */ + { .altcode = NULL }, /* 0x0c7c */ + { .altcode = NULL }, /* 0x0c7d */ + { .altcode = NULL }, /* 0x0c7e */ + { .altcode = NULL }, /* 0x0c7f */ + { .altcode = NULL }, /* 0x0c80 */ + { .altcode = NULL }, /* 0x0c81 */ + { .altcode = NULL }, /* 0x0c82 */ + { .altcode = NULL }, /* 0x0c83 */ + { .altcode = NULL }, /* 0x0c84 */ + { .altcode = NULL }, /* 0x0c85 */ + { .altcode = NULL }, /* 0x0c86 */ + { .altcode = NULL }, /* 0x0c87 */ + { .altcode = NULL }, /* 0x0c88 */ + { .altcode = NULL }, /* 0x0c89 */ + { .altcode = NULL }, /* 0x0c8a */ + { .altcode = NULL }, /* 0x0c8b */ + { .altcode = NULL }, /* 0x0c8c */ + { .altcode = NULL }, /* 0x0c8d */ + { .altcode = NULL }, /* 0x0c8e */ + { .altcode = NULL }, /* 0x0c8f */ + { .altcode = NULL }, /* 0x0c90 */ + { .altcode = NULL }, /* 0x0c91 */ + { .altcode = NULL }, /* 0x0c92 */ + { .altcode = NULL }, /* 0x0c93 */ + { .altcode = NULL }, /* 0x0c94 */ + { .altcode = NULL }, /* 0x0c95 */ + { .altcode = NULL }, /* 0x0c96 */ + { .altcode = NULL }, /* 0x0c97 */ + { .altcode = NULL }, /* 0x0c98 */ + { .altcode = NULL }, /* 0x0c99 */ + { .altcode = NULL }, /* 0x0c9a */ + { .altcode = NULL }, /* 0x0c9b */ + { .altcode = NULL }, /* 0x0c9c */ + { .altcode = NULL }, /* 0x0c9d */ + { .altcode = NULL }, /* 0x0c9e */ + { .altcode = NULL }, /* 0x0c9f */ + { .altcode = NULL }, /* 0x0ca0 */ + { .altcode = NULL }, /* 0x0ca1 */ + { .altcode = NULL }, /* 0x0ca2 */ + { .altcode = NULL }, /* 0x0ca3 */ + { .altcode = NULL }, /* 0x0ca4 */ + { .altcode = NULL }, /* 0x0ca5 */ + { .altcode = NULL }, /* 0x0ca6 */ + { .altcode = NULL }, /* 0x0ca7 */ + { .altcode = NULL }, /* 0x0ca8 */ + { .altcode = NULL }, /* 0x0ca9 */ + { .altcode = NULL }, /* 0x0caa */ + { .altcode = NULL }, /* 0x0cab */ + { .altcode = NULL }, /* 0x0cac */ + { .altcode = NULL }, /* 0x0cad */ + { .altcode = NULL }, /* 0x0cae */ + { .altcode = NULL }, /* 0x0caf */ + { .altcode = NULL }, /* 0x0cb0 */ + { .altcode = NULL }, /* 0x0cb1 */ + { .altcode = NULL }, /* 0x0cb2 */ + { .altcode = NULL }, /* 0x0cb3 */ + { .altcode = NULL }, /* 0x0cb4 */ + { .altcode = NULL }, /* 0x0cb5 */ + { .altcode = NULL }, /* 0x0cb6 */ + { .altcode = NULL }, /* 0x0cb7 */ + { .altcode = NULL }, /* 0x0cb8 */ + { .altcode = NULL }, /* 0x0cb9 */ + { .altcode = NULL }, /* 0x0cba */ + { .altcode = NULL }, /* 0x0cbb */ + { .altcode = NULL }, /* 0x0cbc */ + { .altcode = NULL }, /* 0x0cbd */ + { .altcode = NULL }, /* 0x0cbe */ + { .altcode = NULL }, /* 0x0cbf */ + { .altcode = NULL }, /* 0x0cc0 */ + { .altcode = NULL }, /* 0x0cc1 */ + { .altcode = NULL }, /* 0x0cc2 */ + { .altcode = NULL }, /* 0x0cc3 */ + { .altcode = NULL }, /* 0x0cc4 */ + { .altcode = NULL }, /* 0x0cc5 */ + { .altcode = NULL }, /* 0x0cc6 */ + { .altcode = NULL }, /* 0x0cc7 */ + { .altcode = NULL }, /* 0x0cc8 */ + { .altcode = NULL }, /* 0x0cc9 */ + { .altcode = NULL }, /* 0x0cca */ + { .altcode = NULL }, /* 0x0ccb */ + { .altcode = NULL }, /* 0x0ccc */ + { .altcode = NULL }, /* 0x0ccd */ + { .altcode = NULL }, /* 0x0cce */ + { .altcode = NULL }, /* 0x0ccf */ + { .altcode = NULL }, /* 0x0cd0 */ + { .altcode = NULL }, /* 0x0cd1 */ + { .altcode = NULL }, /* 0x0cd2 */ + { .altcode = NULL }, /* 0x0cd3 */ + { .altcode = NULL }, /* 0x0cd4 */ + { .altcode = NULL }, /* 0x0cd5 */ + { .altcode = NULL }, /* 0x0cd6 */ + { .altcode = NULL }, /* 0x0cd7 */ + { .altcode = NULL }, /* 0x0cd8 */ + { .altcode = NULL }, /* 0x0cd9 */ + { .altcode = NULL }, /* 0x0cda */ + { .altcode = NULL }, /* 0x0cdb */ + { .altcode = NULL }, /* 0x0cdc */ + { .altcode = NULL }, /* 0x0cdd */ + { .altcode = NULL }, /* 0x0cde */ + { .altcode = NULL }, /* 0x0cdf (hebrew_doublelowline) */ + { .altcode = NULL }, /* 0x0ce0 (hebrew_aleph) */ + { .altcode = NULL }, /* 0x0ce1 (hebrew_beth) */ + { .altcode = NULL }, /* 0x0ce2 (hebrew_gimmel) */ + { .altcode = NULL }, /* 0x0ce3 (hebrew_daleth) */ + { .altcode = NULL }, /* 0x0ce4 (hebrew_he) */ + { .altcode = NULL }, /* 0x0ce5 (hebrew_waw) */ + { .altcode = NULL }, /* 0x0ce6 (hebrew_zayin) */ + { .altcode = NULL }, /* 0x0ce7 (hebrew_het) */ + { .altcode = NULL }, /* 0x0ce8 (hebrew_teth) */ + { .altcode = NULL }, /* 0x0ce9 (hebrew_yod) */ + { .altcode = NULL }, /* 0x0cea (hebrew_finalkaph) */ + { .altcode = NULL }, /* 0x0ceb (hebrew_kaph) */ + { .altcode = NULL }, /* 0x0cec (hebrew_lamed) */ + { .altcode = NULL }, /* 0x0ced (hebrew_finalmem) */ + { .altcode = NULL }, /* 0x0cee (hebrew_mem) */ + { .altcode = NULL }, /* 0x0cef (hebrew_finalnun) */ + { .altcode = NULL }, /* 0x0cf0 (hebrew_nun) */ + { .altcode = NULL }, /* 0x0cf1 (hebrew_samekh) */ + { .altcode = NULL }, /* 0x0cf2 (hebrew_ayin) */ + { .altcode = NULL }, /* 0x0cf3 (hebrew_finalpe) */ + { .altcode = NULL }, /* 0x0cf4 (hebrew_pe) */ + { .altcode = NULL }, /* 0x0cf5 (hebrew_finalzadi) */ + { .altcode = NULL }, /* 0x0cf6 (hebrew_zadi) */ + { .altcode = NULL }, /* 0x0cf7 (hebrew_kuf) */ + { .altcode = NULL }, /* 0x0cf8 (hebrew_resh) */ + { .altcode = NULL }, /* 0x0cf9 (hebrew_shin) */ + { .altcode = NULL }, /* 0x0cfa (hebrew_taf) */ + { .altcode = NULL }, /* 0x0cfb */ + { .altcode = NULL }, /* 0x0cfc */ + { .altcode = NULL }, /* 0x0cfd */ + { .altcode = NULL }, /* 0x0cfe */ + { .altcode = NULL }, /* 0x0cff */ }, { /* 0x0d?? */ - { .altcode = NULL }, /* 0x0d00 */ - { .altcode = NULL }, /* 0x0d01 */ - { .altcode = NULL }, /* 0x0d02 */ - { .altcode = NULL }, /* 0x0d03 */ - { .altcode = NULL }, /* 0x0d04 */ - { .altcode = NULL }, /* 0x0d05 */ - { .altcode = NULL }, /* 0x0d06 */ - { .altcode = NULL }, /* 0x0d07 */ - { .altcode = NULL }, /* 0x0d08 */ - { .altcode = NULL }, /* 0x0d09 */ - { .altcode = NULL }, /* 0x0d0a */ - { .altcode = NULL }, /* 0x0d0b */ - { .altcode = NULL }, /* 0x0d0c */ - { .altcode = NULL }, /* 0x0d0d */ - { .altcode = NULL }, /* 0x0d0e */ - { .altcode = NULL }, /* 0x0d0f */ - { .altcode = NULL }, /* 0x0d10 */ - { .altcode = NULL }, /* 0x0d11 */ - { .altcode = NULL }, /* 0x0d12 */ - { .altcode = NULL }, /* 0x0d13 */ - { .altcode = NULL }, /* 0x0d14 */ - { .altcode = NULL }, /* 0x0d15 */ - { .altcode = NULL }, /* 0x0d16 */ - { .altcode = NULL }, /* 0x0d17 */ - { .altcode = NULL }, /* 0x0d18 */ - { .altcode = NULL }, /* 0x0d19 */ - { .altcode = NULL }, /* 0x0d1a */ - { .altcode = NULL }, /* 0x0d1b */ - { .altcode = NULL }, /* 0x0d1c */ - { .altcode = NULL }, /* 0x0d1d */ - { .altcode = NULL }, /* 0x0d1e */ - { .altcode = NULL }, /* 0x0d1f */ - { .altcode = NULL }, /* 0x0d20 */ - { .altcode = NULL }, /* 0x0d21 */ - { .altcode = NULL }, /* 0x0d22 */ - { .altcode = NULL }, /* 0x0d23 */ - { .altcode = NULL }, /* 0x0d24 */ - { .altcode = NULL }, /* 0x0d25 */ - { .altcode = NULL }, /* 0x0d26 */ - { .altcode = NULL }, /* 0x0d27 */ - { .altcode = NULL }, /* 0x0d28 */ - { .altcode = NULL }, /* 0x0d29 */ - { .altcode = NULL }, /* 0x0d2a */ - { .altcode = NULL }, /* 0x0d2b */ - { .altcode = NULL }, /* 0x0d2c */ - { .altcode = NULL }, /* 0x0d2d */ - { .altcode = NULL }, /* 0x0d2e */ - { .altcode = NULL }, /* 0x0d2f */ - { .altcode = NULL }, /* 0x0d30 */ - { .altcode = NULL }, /* 0x0d31 */ - { .altcode = NULL }, /* 0x0d32 */ - { .altcode = NULL }, /* 0x0d33 */ - { .altcode = NULL }, /* 0x0d34 */ - { .altcode = NULL }, /* 0x0d35 */ - { .altcode = NULL }, /* 0x0d36 */ - { .altcode = NULL }, /* 0x0d37 */ - { .altcode = NULL }, /* 0x0d38 */ - { .altcode = NULL }, /* 0x0d39 */ - { .altcode = NULL }, /* 0x0d3a */ - { .altcode = NULL }, /* 0x0d3b */ - { .altcode = NULL }, /* 0x0d3c */ - { .altcode = NULL }, /* 0x0d3d */ - { .altcode = NULL }, /* 0x0d3e */ - { .altcode = NULL }, /* 0x0d3f */ - { .altcode = NULL }, /* 0x0d40 */ - { .altcode = NULL }, /* 0x0d41 */ - { .altcode = NULL }, /* 0x0d42 */ - { .altcode = NULL }, /* 0x0d43 */ - { .altcode = NULL }, /* 0x0d44 */ - { .altcode = NULL }, /* 0x0d45 */ - { .altcode = NULL }, /* 0x0d46 */ - { .altcode = NULL }, /* 0x0d47 */ - { .altcode = NULL }, /* 0x0d48 */ - { .altcode = NULL }, /* 0x0d49 */ - { .altcode = NULL }, /* 0x0d4a */ - { .altcode = NULL }, /* 0x0d4b */ - { .altcode = NULL }, /* 0x0d4c */ - { .altcode = NULL }, /* 0x0d4d */ - { .altcode = NULL }, /* 0x0d4e */ - { .altcode = NULL }, /* 0x0d4f */ - { .altcode = NULL }, /* 0x0d50 */ - { .altcode = NULL }, /* 0x0d51 */ - { .altcode = NULL }, /* 0x0d52 */ - { .altcode = NULL }, /* 0x0d53 */ - { .altcode = NULL }, /* 0x0d54 */ - { .altcode = NULL }, /* 0x0d55 */ - { .altcode = NULL }, /* 0x0d56 */ - { .altcode = NULL }, /* 0x0d57 */ - { .altcode = NULL }, /* 0x0d58 */ - { .altcode = NULL }, /* 0x0d59 */ - { .altcode = NULL }, /* 0x0d5a */ - { .altcode = NULL }, /* 0x0d5b */ - { .altcode = NULL }, /* 0x0d5c */ - { .altcode = NULL }, /* 0x0d5d */ - { .altcode = NULL }, /* 0x0d5e */ - { .altcode = NULL }, /* 0x0d5f */ - { .altcode = NULL }, /* 0x0d60 */ - { .altcode = NULL }, /* 0x0d61 */ - { .altcode = NULL }, /* 0x0d62 */ - { .altcode = NULL }, /* 0x0d63 */ - { .altcode = NULL }, /* 0x0d64 */ - { .altcode = NULL }, /* 0x0d65 */ - { .altcode = NULL }, /* 0x0d66 */ - { .altcode = NULL }, /* 0x0d67 */ - { .altcode = NULL }, /* 0x0d68 */ - { .altcode = NULL }, /* 0x0d69 */ - { .altcode = NULL }, /* 0x0d6a */ - { .altcode = NULL }, /* 0x0d6b */ - { .altcode = NULL }, /* 0x0d6c */ - { .altcode = NULL }, /* 0x0d6d */ - { .altcode = NULL }, /* 0x0d6e */ - { .altcode = NULL }, /* 0x0d6f */ - { .altcode = NULL }, /* 0x0d70 */ - { .altcode = NULL }, /* 0x0d71 */ - { .altcode = NULL }, /* 0x0d72 */ - { .altcode = NULL }, /* 0x0d73 */ - { .altcode = NULL }, /* 0x0d74 */ - { .altcode = NULL }, /* 0x0d75 */ - { .altcode = NULL }, /* 0x0d76 */ - { .altcode = NULL }, /* 0x0d77 */ - { .altcode = NULL }, /* 0x0d78 */ - { .altcode = NULL }, /* 0x0d79 */ - { .altcode = NULL }, /* 0x0d7a */ - { .altcode = NULL }, /* 0x0d7b */ - { .altcode = NULL }, /* 0x0d7c */ - { .altcode = NULL }, /* 0x0d7d */ - { .altcode = NULL }, /* 0x0d7e */ - { .altcode = NULL }, /* 0x0d7f */ - { .altcode = NULL }, /* 0x0d80 */ - { .altcode = NULL }, /* 0x0d81 */ - { .altcode = NULL }, /* 0x0d82 */ - { .altcode = NULL }, /* 0x0d83 */ - { .altcode = NULL }, /* 0x0d84 */ - { .altcode = NULL }, /* 0x0d85 */ - { .altcode = NULL }, /* 0x0d86 */ - { .altcode = NULL }, /* 0x0d87 */ - { .altcode = NULL }, /* 0x0d88 */ - { .altcode = NULL }, /* 0x0d89 */ - { .altcode = NULL }, /* 0x0d8a */ - { .altcode = NULL }, /* 0x0d8b */ - { .altcode = NULL }, /* 0x0d8c */ - { .altcode = NULL }, /* 0x0d8d */ - { .altcode = NULL }, /* 0x0d8e */ - { .altcode = NULL }, /* 0x0d8f */ - { .altcode = NULL }, /* 0x0d90 */ - { .altcode = NULL }, /* 0x0d91 */ - { .altcode = NULL }, /* 0x0d92 */ - { .altcode = NULL }, /* 0x0d93 */ - { .altcode = NULL }, /* 0x0d94 */ - { .altcode = NULL }, /* 0x0d95 */ - { .altcode = NULL }, /* 0x0d96 */ - { .altcode = NULL }, /* 0x0d97 */ - { .altcode = NULL }, /* 0x0d98 */ - { .altcode = NULL }, /* 0x0d99 */ - { .altcode = NULL }, /* 0x0d9a */ - { .altcode = NULL }, /* 0x0d9b */ - { .altcode = NULL }, /* 0x0d9c */ - { .altcode = NULL }, /* 0x0d9d */ - { .altcode = NULL }, /* 0x0d9e */ - { .altcode = NULL }, /* 0x0d9f */ - { .altcode = NULL }, /* 0x0da0 */ - { .altcode = NULL }, /* 0x0da1 (Thai_kokai) */ - { .altcode = NULL }, /* 0x0da2 (Thai_khokhai) */ - { .altcode = NULL }, /* 0x0da3 (Thai_khokhuat) */ - { .altcode = NULL }, /* 0x0da4 (Thai_khokhwai) */ - { .altcode = NULL }, /* 0x0da5 (Thai_khokhon) */ - { .altcode = NULL }, /* 0x0da6 (Thai_khorakhang) */ - { .altcode = NULL }, /* 0x0da7 (Thai_ngongu) */ - { .altcode = NULL }, /* 0x0da8 (Thai_chochan) */ - { .altcode = NULL }, /* 0x0da9 (Thai_choching) */ - { .altcode = NULL }, /* 0x0daa (Thai_chochang) */ - { .altcode = NULL }, /* 0x0dab (Thai_soso) */ - { .altcode = NULL }, /* 0x0dac (Thai_chochoe) */ - { .altcode = NULL }, /* 0x0dad (Thai_yoying) */ - { .altcode = NULL }, /* 0x0dae (Thai_dochada) */ - { .altcode = NULL }, /* 0x0daf (Thai_topatak) */ - { .altcode = NULL }, /* 0x0db0 (Thai_thothan) */ - { .altcode = NULL }, /* 0x0db1 (Thai_thonangmontho) */ - { .altcode = NULL }, /* 0x0db2 (Thai_thophuthao) */ - { .altcode = NULL }, /* 0x0db3 (Thai_nonen) */ - { .altcode = NULL }, /* 0x0db4 (Thai_dodek) */ - { .altcode = NULL }, /* 0x0db5 (Thai_totao) */ - { .altcode = NULL }, /* 0x0db6 (Thai_thothung) */ - { .altcode = NULL }, /* 0x0db7 (Thai_thothahan) */ - { .altcode = NULL }, /* 0x0db8 (Thai_thothong) */ - { .altcode = NULL }, /* 0x0db9 (Thai_nonu) */ - { .altcode = NULL }, /* 0x0dba (Thai_bobaimai) */ - { .altcode = NULL }, /* 0x0dbb (Thai_popla) */ - { .altcode = NULL }, /* 0x0dbc (Thai_phophung) */ - { .altcode = NULL }, /* 0x0dbd (Thai_fofa) */ - { .altcode = NULL }, /* 0x0dbe (Thai_phophan) */ - { .altcode = NULL }, /* 0x0dbf (Thai_fofan) */ - { .altcode = NULL }, /* 0x0dc0 (Thai_phosamphao) */ - { .altcode = NULL }, /* 0x0dc1 (Thai_moma) */ - { .altcode = NULL }, /* 0x0dc2 (Thai_yoyak) */ - { .altcode = NULL }, /* 0x0dc3 (Thai_rorua) */ - { .altcode = NULL }, /* 0x0dc4 (Thai_ru) */ - { .altcode = NULL }, /* 0x0dc5 (Thai_loling) */ - { .altcode = NULL }, /* 0x0dc6 (Thai_lu) */ - { .altcode = NULL }, /* 0x0dc7 (Thai_wowaen) */ - { .altcode = NULL }, /* 0x0dc8 (Thai_sosala) */ - { .altcode = NULL }, /* 0x0dc9 (Thai_sorusi) */ - { .altcode = NULL }, /* 0x0dca (Thai_sosua) */ - { .altcode = NULL }, /* 0x0dcb (Thai_hohip) */ - { .altcode = NULL }, /* 0x0dcc (Thai_lochula) */ - { .altcode = NULL }, /* 0x0dcd (Thai_oang) */ - { .altcode = NULL }, /* 0x0dce (Thai_honokhuk) */ - { .altcode = NULL }, /* 0x0dcf (Thai_paiyannoi) */ - { .altcode = NULL }, /* 0x0dd0 (Thai_saraa) */ - { .altcode = NULL }, /* 0x0dd1 (Thai_maihanakat) */ - { .altcode = NULL }, /* 0x0dd2 (Thai_saraaa) */ - { .altcode = NULL }, /* 0x0dd3 (Thai_saraam) */ - { .altcode = NULL }, /* 0x0dd4 (Thai_sarai) */ - { .altcode = NULL }, /* 0x0dd5 (Thai_saraii) */ - { .altcode = NULL }, /* 0x0dd6 (Thai_saraue) */ - { .altcode = NULL }, /* 0x0dd7 (Thai_sarauee) */ - { .altcode = NULL }, /* 0x0dd8 (Thai_sarau) */ - { .altcode = NULL }, /* 0x0dd9 (Thai_sarauu) */ - { .altcode = NULL }, /* 0x0dda (Thai_phinthu) */ - { .altcode = NULL }, /* 0x0ddb */ - { .altcode = NULL }, /* 0x0ddc */ - { .altcode = NULL }, /* 0x0ddd */ - { .altcode = NULL }, /* 0x0dde (Thai_maihanakat_maitho) */ - { .altcode = NULL }, /* 0x0ddf (Thai_baht) */ - { .altcode = NULL }, /* 0x0de0 (Thai_sarae) */ - { .altcode = NULL }, /* 0x0de1 (Thai_saraae) */ - { .altcode = NULL }, /* 0x0de2 (Thai_sarao) */ - { .altcode = NULL }, /* 0x0de3 (Thai_saraaimaimuan) */ - { .altcode = NULL }, /* 0x0de4 (Thai_saraaimaimalai) */ - { .altcode = NULL }, /* 0x0de5 (Thai_lakkhangyao) */ - { .altcode = NULL }, /* 0x0de6 (Thai_maiyamok) */ - { .altcode = NULL }, /* 0x0de7 (Thai_maitaikhu) */ - { .altcode = NULL }, /* 0x0de8 (Thai_maiek) */ - { .altcode = NULL }, /* 0x0de9 (Thai_maitho) */ - { .altcode = NULL }, /* 0x0dea (Thai_maitri) */ - { .altcode = NULL }, /* 0x0deb (Thai_maichattawa) */ - { .altcode = NULL }, /* 0x0dec (Thai_thanthakhat) */ - { .altcode = NULL }, /* 0x0ded (Thai_nikhahit) */ - { .altcode = NULL }, /* 0x0dee */ - { .altcode = NULL }, /* 0x0def */ - { .altcode = NULL }, /* 0x0df0 (Thai_leksun) */ - { .altcode = NULL }, /* 0x0df1 (Thai_leknung) */ - { .altcode = NULL }, /* 0x0df2 (Thai_leksong) */ - { .altcode = NULL }, /* 0x0df3 (Thai_leksam) */ - { .altcode = NULL }, /* 0x0df4 (Thai_leksi) */ - { .altcode = NULL }, /* 0x0df5 (Thai_lekha) */ - { .altcode = NULL }, /* 0x0df6 (Thai_lekhok) */ - { .altcode = NULL }, /* 0x0df7 (Thai_lekchet) */ - { .altcode = NULL }, /* 0x0df8 (Thai_lekpaet) */ - { .altcode = NULL }, /* 0x0df9 (Thai_lekkao) */ - { .altcode = NULL }, /* 0x0dfa */ - { .altcode = NULL }, /* 0x0dfb */ - { .altcode = NULL }, /* 0x0dfc */ - { .altcode = NULL }, /* 0x0dfd */ - { .altcode = NULL }, /* 0x0dfe */ - { .altcode = NULL }, /* 0x0dff */ + { .altcode = NULL }, /* 0x0d00 */ + { .altcode = NULL }, /* 0x0d01 */ + { .altcode = NULL }, /* 0x0d02 */ + { .altcode = NULL }, /* 0x0d03 */ + { .altcode = NULL }, /* 0x0d04 */ + { .altcode = NULL }, /* 0x0d05 */ + { .altcode = NULL }, /* 0x0d06 */ + { .altcode = NULL }, /* 0x0d07 */ + { .altcode = NULL }, /* 0x0d08 */ + { .altcode = NULL }, /* 0x0d09 */ + { .altcode = NULL }, /* 0x0d0a */ + { .altcode = NULL }, /* 0x0d0b */ + { .altcode = NULL }, /* 0x0d0c */ + { .altcode = NULL }, /* 0x0d0d */ + { .altcode = NULL }, /* 0x0d0e */ + { .altcode = NULL }, /* 0x0d0f */ + { .altcode = NULL }, /* 0x0d10 */ + { .altcode = NULL }, /* 0x0d11 */ + { .altcode = NULL }, /* 0x0d12 */ + { .altcode = NULL }, /* 0x0d13 */ + { .altcode = NULL }, /* 0x0d14 */ + { .altcode = NULL }, /* 0x0d15 */ + { .altcode = NULL }, /* 0x0d16 */ + { .altcode = NULL }, /* 0x0d17 */ + { .altcode = NULL }, /* 0x0d18 */ + { .altcode = NULL }, /* 0x0d19 */ + { .altcode = NULL }, /* 0x0d1a */ + { .altcode = NULL }, /* 0x0d1b */ + { .altcode = NULL }, /* 0x0d1c */ + { .altcode = NULL }, /* 0x0d1d */ + { .altcode = NULL }, /* 0x0d1e */ + { .altcode = NULL }, /* 0x0d1f */ + { .altcode = NULL }, /* 0x0d20 */ + { .altcode = NULL }, /* 0x0d21 */ + { .altcode = NULL }, /* 0x0d22 */ + { .altcode = NULL }, /* 0x0d23 */ + { .altcode = NULL }, /* 0x0d24 */ + { .altcode = NULL }, /* 0x0d25 */ + { .altcode = NULL }, /* 0x0d26 */ + { .altcode = NULL }, /* 0x0d27 */ + { .altcode = NULL }, /* 0x0d28 */ + { .altcode = NULL }, /* 0x0d29 */ + { .altcode = NULL }, /* 0x0d2a */ + { .altcode = NULL }, /* 0x0d2b */ + { .altcode = NULL }, /* 0x0d2c */ + { .altcode = NULL }, /* 0x0d2d */ + { .altcode = NULL }, /* 0x0d2e */ + { .altcode = NULL }, /* 0x0d2f */ + { .altcode = NULL }, /* 0x0d30 */ + { .altcode = NULL }, /* 0x0d31 */ + { .altcode = NULL }, /* 0x0d32 */ + { .altcode = NULL }, /* 0x0d33 */ + { .altcode = NULL }, /* 0x0d34 */ + { .altcode = NULL }, /* 0x0d35 */ + { .altcode = NULL }, /* 0x0d36 */ + { .altcode = NULL }, /* 0x0d37 */ + { .altcode = NULL }, /* 0x0d38 */ + { .altcode = NULL }, /* 0x0d39 */ + { .altcode = NULL }, /* 0x0d3a */ + { .altcode = NULL }, /* 0x0d3b */ + { .altcode = NULL }, /* 0x0d3c */ + { .altcode = NULL }, /* 0x0d3d */ + { .altcode = NULL }, /* 0x0d3e */ + { .altcode = NULL }, /* 0x0d3f */ + { .altcode = NULL }, /* 0x0d40 */ + { .altcode = NULL }, /* 0x0d41 */ + { .altcode = NULL }, /* 0x0d42 */ + { .altcode = NULL }, /* 0x0d43 */ + { .altcode = NULL }, /* 0x0d44 */ + { .altcode = NULL }, /* 0x0d45 */ + { .altcode = NULL }, /* 0x0d46 */ + { .altcode = NULL }, /* 0x0d47 */ + { .altcode = NULL }, /* 0x0d48 */ + { .altcode = NULL }, /* 0x0d49 */ + { .altcode = NULL }, /* 0x0d4a */ + { .altcode = NULL }, /* 0x0d4b */ + { .altcode = NULL }, /* 0x0d4c */ + { .altcode = NULL }, /* 0x0d4d */ + { .altcode = NULL }, /* 0x0d4e */ + { .altcode = NULL }, /* 0x0d4f */ + { .altcode = NULL }, /* 0x0d50 */ + { .altcode = NULL }, /* 0x0d51 */ + { .altcode = NULL }, /* 0x0d52 */ + { .altcode = NULL }, /* 0x0d53 */ + { .altcode = NULL }, /* 0x0d54 */ + { .altcode = NULL }, /* 0x0d55 */ + { .altcode = NULL }, /* 0x0d56 */ + { .altcode = NULL }, /* 0x0d57 */ + { .altcode = NULL }, /* 0x0d58 */ + { .altcode = NULL }, /* 0x0d59 */ + { .altcode = NULL }, /* 0x0d5a */ + { .altcode = NULL }, /* 0x0d5b */ + { .altcode = NULL }, /* 0x0d5c */ + { .altcode = NULL }, /* 0x0d5d */ + { .altcode = NULL }, /* 0x0d5e */ + { .altcode = NULL }, /* 0x0d5f */ + { .altcode = NULL }, /* 0x0d60 */ + { .altcode = NULL }, /* 0x0d61 */ + { .altcode = NULL }, /* 0x0d62 */ + { .altcode = NULL }, /* 0x0d63 */ + { .altcode = NULL }, /* 0x0d64 */ + { .altcode = NULL }, /* 0x0d65 */ + { .altcode = NULL }, /* 0x0d66 */ + { .altcode = NULL }, /* 0x0d67 */ + { .altcode = NULL }, /* 0x0d68 */ + { .altcode = NULL }, /* 0x0d69 */ + { .altcode = NULL }, /* 0x0d6a */ + { .altcode = NULL }, /* 0x0d6b */ + { .altcode = NULL }, /* 0x0d6c */ + { .altcode = NULL }, /* 0x0d6d */ + { .altcode = NULL }, /* 0x0d6e */ + { .altcode = NULL }, /* 0x0d6f */ + { .altcode = NULL }, /* 0x0d70 */ + { .altcode = NULL }, /* 0x0d71 */ + { .altcode = NULL }, /* 0x0d72 */ + { .altcode = NULL }, /* 0x0d73 */ + { .altcode = NULL }, /* 0x0d74 */ + { .altcode = NULL }, /* 0x0d75 */ + { .altcode = NULL }, /* 0x0d76 */ + { .altcode = NULL }, /* 0x0d77 */ + { .altcode = NULL }, /* 0x0d78 */ + { .altcode = NULL }, /* 0x0d79 */ + { .altcode = NULL }, /* 0x0d7a */ + { .altcode = NULL }, /* 0x0d7b */ + { .altcode = NULL }, /* 0x0d7c */ + { .altcode = NULL }, /* 0x0d7d */ + { .altcode = NULL }, /* 0x0d7e */ + { .altcode = NULL }, /* 0x0d7f */ + { .altcode = NULL }, /* 0x0d80 */ + { .altcode = NULL }, /* 0x0d81 */ + { .altcode = NULL }, /* 0x0d82 */ + { .altcode = NULL }, /* 0x0d83 */ + { .altcode = NULL }, /* 0x0d84 */ + { .altcode = NULL }, /* 0x0d85 */ + { .altcode = NULL }, /* 0x0d86 */ + { .altcode = NULL }, /* 0x0d87 */ + { .altcode = NULL }, /* 0x0d88 */ + { .altcode = NULL }, /* 0x0d89 */ + { .altcode = NULL }, /* 0x0d8a */ + { .altcode = NULL }, /* 0x0d8b */ + { .altcode = NULL }, /* 0x0d8c */ + { .altcode = NULL }, /* 0x0d8d */ + { .altcode = NULL }, /* 0x0d8e */ + { .altcode = NULL }, /* 0x0d8f */ + { .altcode = NULL }, /* 0x0d90 */ + { .altcode = NULL }, /* 0x0d91 */ + { .altcode = NULL }, /* 0x0d92 */ + { .altcode = NULL }, /* 0x0d93 */ + { .altcode = NULL }, /* 0x0d94 */ + { .altcode = NULL }, /* 0x0d95 */ + { .altcode = NULL }, /* 0x0d96 */ + { .altcode = NULL }, /* 0x0d97 */ + { .altcode = NULL }, /* 0x0d98 */ + { .altcode = NULL }, /* 0x0d99 */ + { .altcode = NULL }, /* 0x0d9a */ + { .altcode = NULL }, /* 0x0d9b */ + { .altcode = NULL }, /* 0x0d9c */ + { .altcode = NULL }, /* 0x0d9d */ + { .altcode = NULL }, /* 0x0d9e */ + { .altcode = NULL }, /* 0x0d9f */ + { .altcode = NULL }, /* 0x0da0 */ + { .altcode = NULL }, /* 0x0da1 (Thai_kokai) */ + { .altcode = NULL }, /* 0x0da2 (Thai_khokhai) */ + { .altcode = NULL }, /* 0x0da3 (Thai_khokhuat) */ + { .altcode = NULL }, /* 0x0da4 (Thai_khokhwai) */ + { .altcode = NULL }, /* 0x0da5 (Thai_khokhon) */ + { .altcode = NULL }, /* 0x0da6 (Thai_khorakhang) */ + { .altcode = NULL }, /* 0x0da7 (Thai_ngongu) */ + { .altcode = NULL }, /* 0x0da8 (Thai_chochan) */ + { .altcode = NULL }, /* 0x0da9 (Thai_choching) */ + { .altcode = NULL }, /* 0x0daa (Thai_chochang) */ + { .altcode = NULL }, /* 0x0dab (Thai_soso) */ + { .altcode = NULL }, /* 0x0dac (Thai_chochoe) */ + { .altcode = NULL }, /* 0x0dad (Thai_yoying) */ + { .altcode = NULL }, /* 0x0dae (Thai_dochada) */ + { .altcode = NULL }, /* 0x0daf (Thai_topatak) */ + { .altcode = NULL }, /* 0x0db0 (Thai_thothan) */ + { .altcode = NULL }, /* 0x0db1 (Thai_thonangmontho) */ + { .altcode = NULL }, /* 0x0db2 (Thai_thophuthao) */ + { .altcode = NULL }, /* 0x0db3 (Thai_nonen) */ + { .altcode = NULL }, /* 0x0db4 (Thai_dodek) */ + { .altcode = NULL }, /* 0x0db5 (Thai_totao) */ + { .altcode = NULL }, /* 0x0db6 (Thai_thothung) */ + { .altcode = NULL }, /* 0x0db7 (Thai_thothahan) */ + { .altcode = NULL }, /* 0x0db8 (Thai_thothong) */ + { .altcode = NULL }, /* 0x0db9 (Thai_nonu) */ + { .altcode = NULL }, /* 0x0dba (Thai_bobaimai) */ + { .altcode = NULL }, /* 0x0dbb (Thai_popla) */ + { .altcode = NULL }, /* 0x0dbc (Thai_phophung) */ + { .altcode = NULL }, /* 0x0dbd (Thai_fofa) */ + { .altcode = NULL }, /* 0x0dbe (Thai_phophan) */ + { .altcode = NULL }, /* 0x0dbf (Thai_fofan) */ + { .altcode = NULL }, /* 0x0dc0 (Thai_phosamphao) */ + { .altcode = NULL }, /* 0x0dc1 (Thai_moma) */ + { .altcode = NULL }, /* 0x0dc2 (Thai_yoyak) */ + { .altcode = NULL }, /* 0x0dc3 (Thai_rorua) */ + { .altcode = NULL }, /* 0x0dc4 (Thai_ru) */ + { .altcode = NULL }, /* 0x0dc5 (Thai_loling) */ + { .altcode = NULL }, /* 0x0dc6 (Thai_lu) */ + { .altcode = NULL }, /* 0x0dc7 (Thai_wowaen) */ + { .altcode = NULL }, /* 0x0dc8 (Thai_sosala) */ + { .altcode = NULL }, /* 0x0dc9 (Thai_sorusi) */ + { .altcode = NULL }, /* 0x0dca (Thai_sosua) */ + { .altcode = NULL }, /* 0x0dcb (Thai_hohip) */ + { .altcode = NULL }, /* 0x0dcc (Thai_lochula) */ + { .altcode = NULL }, /* 0x0dcd (Thai_oang) */ + { .altcode = NULL }, /* 0x0dce (Thai_honokhuk) */ + { .altcode = NULL }, /* 0x0dcf (Thai_paiyannoi) */ + { .altcode = NULL }, /* 0x0dd0 (Thai_saraa) */ + { .altcode = NULL }, /* 0x0dd1 (Thai_maihanakat) */ + { .altcode = NULL }, /* 0x0dd2 (Thai_saraaa) */ + { .altcode = NULL }, /* 0x0dd3 (Thai_saraam) */ + { .altcode = NULL }, /* 0x0dd4 (Thai_sarai) */ + { .altcode = NULL }, /* 0x0dd5 (Thai_saraii) */ + { .altcode = NULL }, /* 0x0dd6 (Thai_saraue) */ + { .altcode = NULL }, /* 0x0dd7 (Thai_sarauee) */ + { .altcode = NULL }, /* 0x0dd8 (Thai_sarau) */ + { .altcode = NULL }, /* 0x0dd9 (Thai_sarauu) */ + { .altcode = NULL }, /* 0x0dda (Thai_phinthu) */ + { .altcode = NULL }, /* 0x0ddb */ + { .altcode = NULL }, /* 0x0ddc */ + { .altcode = NULL }, /* 0x0ddd */ + { .altcode = NULL }, /* 0x0dde (Thai_maihanakat_maitho) */ + { .altcode = NULL }, /* 0x0ddf (Thai_baht) */ + { .altcode = NULL }, /* 0x0de0 (Thai_sarae) */ + { .altcode = NULL }, /* 0x0de1 (Thai_saraae) */ + { .altcode = NULL }, /* 0x0de2 (Thai_sarao) */ + { .altcode = NULL }, /* 0x0de3 (Thai_saraaimaimuan) */ + { .altcode = NULL }, /* 0x0de4 (Thai_saraaimaimalai) */ + { .altcode = NULL }, /* 0x0de5 (Thai_lakkhangyao) */ + { .altcode = NULL }, /* 0x0de6 (Thai_maiyamok) */ + { .altcode = NULL }, /* 0x0de7 (Thai_maitaikhu) */ + { .altcode = NULL }, /* 0x0de8 (Thai_maiek) */ + { .altcode = NULL }, /* 0x0de9 (Thai_maitho) */ + { .altcode = NULL }, /* 0x0dea (Thai_maitri) */ + { .altcode = NULL }, /* 0x0deb (Thai_maichattawa) */ + { .altcode = NULL }, /* 0x0dec (Thai_thanthakhat) */ + { .altcode = NULL }, /* 0x0ded (Thai_nikhahit) */ + { .altcode = NULL }, /* 0x0dee */ + { .altcode = NULL }, /* 0x0def */ + { .altcode = NULL }, /* 0x0df0 (Thai_leksun) */ + { .altcode = NULL }, /* 0x0df1 (Thai_leknung) */ + { .altcode = NULL }, /* 0x0df2 (Thai_leksong) */ + { .altcode = NULL }, /* 0x0df3 (Thai_leksam) */ + { .altcode = NULL }, /* 0x0df4 (Thai_leksi) */ + { .altcode = NULL }, /* 0x0df5 (Thai_lekha) */ + { .altcode = NULL }, /* 0x0df6 (Thai_lekhok) */ + { .altcode = NULL }, /* 0x0df7 (Thai_lekchet) */ + { .altcode = NULL }, /* 0x0df8 (Thai_lekpaet) */ + { .altcode = NULL }, /* 0x0df9 (Thai_lekkao) */ + { .altcode = NULL }, /* 0x0dfa */ + { .altcode = NULL }, /* 0x0dfb */ + { .altcode = NULL }, /* 0x0dfc */ + { .altcode = NULL }, /* 0x0dfd */ + { .altcode = NULL }, /* 0x0dfe */ + { .altcode = NULL }, /* 0x0dff */ }, { /* 0x0e?? */ - { .altcode = NULL }, /* 0x0e00 */ - { .altcode = NULL }, /* 0x0e01 */ - { .altcode = NULL }, /* 0x0e02 */ - { .altcode = NULL }, /* 0x0e03 */ - { .altcode = NULL }, /* 0x0e04 */ - { .altcode = NULL }, /* 0x0e05 */ - { .altcode = NULL }, /* 0x0e06 */ - { .altcode = NULL }, /* 0x0e07 */ - { .altcode = NULL }, /* 0x0e08 */ - { .altcode = NULL }, /* 0x0e09 */ - { .altcode = NULL }, /* 0x0e0a */ - { .altcode = NULL }, /* 0x0e0b */ - { .altcode = NULL }, /* 0x0e0c */ - { .altcode = NULL }, /* 0x0e0d */ - { .altcode = NULL }, /* 0x0e0e */ - { .altcode = NULL }, /* 0x0e0f */ - { .altcode = NULL }, /* 0x0e10 */ - { .altcode = NULL }, /* 0x0e11 */ - { .altcode = NULL }, /* 0x0e12 */ - { .altcode = NULL }, /* 0x0e13 */ - { .altcode = NULL }, /* 0x0e14 */ - { .altcode = NULL }, /* 0x0e15 */ - { .altcode = NULL }, /* 0x0e16 */ - { .altcode = NULL }, /* 0x0e17 */ - { .altcode = NULL }, /* 0x0e18 */ - { .altcode = NULL }, /* 0x0e19 */ - { .altcode = NULL }, /* 0x0e1a */ - { .altcode = NULL }, /* 0x0e1b */ - { .altcode = NULL }, /* 0x0e1c */ - { .altcode = NULL }, /* 0x0e1d */ - { .altcode = NULL }, /* 0x0e1e */ - { .altcode = NULL }, /* 0x0e1f */ - { .altcode = NULL }, /* 0x0e20 */ - { .altcode = NULL }, /* 0x0e21 */ - { .altcode = NULL }, /* 0x0e22 */ - { .altcode = NULL }, /* 0x0e23 */ - { .altcode = NULL }, /* 0x0e24 */ - { .altcode = NULL }, /* 0x0e25 */ - { .altcode = NULL }, /* 0x0e26 */ - { .altcode = NULL }, /* 0x0e27 */ - { .altcode = NULL }, /* 0x0e28 */ - { .altcode = NULL }, /* 0x0e29 */ - { .altcode = NULL }, /* 0x0e2a */ - { .altcode = NULL }, /* 0x0e2b */ - { .altcode = NULL }, /* 0x0e2c */ - { .altcode = NULL }, /* 0x0e2d */ - { .altcode = NULL }, /* 0x0e2e */ - { .altcode = NULL }, /* 0x0e2f */ - { .altcode = NULL }, /* 0x0e30 */ - { .altcode = NULL }, /* 0x0e31 */ - { .altcode = NULL }, /* 0x0e32 */ - { .altcode = NULL }, /* 0x0e33 */ - { .altcode = NULL }, /* 0x0e34 */ - { .altcode = NULL }, /* 0x0e35 */ - { .altcode = NULL }, /* 0x0e36 */ - { .altcode = NULL }, /* 0x0e37 */ - { .altcode = NULL }, /* 0x0e38 */ - { .altcode = NULL }, /* 0x0e39 */ - { .altcode = NULL }, /* 0x0e3a */ - { .altcode = NULL }, /* 0x0e3b */ - { .altcode = NULL }, /* 0x0e3c */ - { .altcode = NULL }, /* 0x0e3d */ - { .altcode = NULL }, /* 0x0e3e */ - { .altcode = NULL }, /* 0x0e3f */ - { .altcode = NULL }, /* 0x0e40 */ - { .altcode = NULL }, /* 0x0e41 */ - { .altcode = NULL }, /* 0x0e42 */ - { .altcode = NULL }, /* 0x0e43 */ - { .altcode = NULL }, /* 0x0e44 */ - { .altcode = NULL }, /* 0x0e45 */ - { .altcode = NULL }, /* 0x0e46 */ - { .altcode = NULL }, /* 0x0e47 */ - { .altcode = NULL }, /* 0x0e48 */ - { .altcode = NULL }, /* 0x0e49 */ - { .altcode = NULL }, /* 0x0e4a */ - { .altcode = NULL }, /* 0x0e4b */ - { .altcode = NULL }, /* 0x0e4c */ - { .altcode = NULL }, /* 0x0e4d */ - { .altcode = NULL }, /* 0x0e4e */ - { .altcode = NULL }, /* 0x0e4f */ - { .altcode = NULL }, /* 0x0e50 */ - { .altcode = NULL }, /* 0x0e51 */ - { .altcode = NULL }, /* 0x0e52 */ - { .altcode = NULL }, /* 0x0e53 */ - { .altcode = NULL }, /* 0x0e54 */ - { .altcode = NULL }, /* 0x0e55 */ - { .altcode = NULL }, /* 0x0e56 */ - { .altcode = NULL }, /* 0x0e57 */ - { .altcode = NULL }, /* 0x0e58 */ - { .altcode = NULL }, /* 0x0e59 */ - { .altcode = NULL }, /* 0x0e5a */ - { .altcode = NULL }, /* 0x0e5b */ - { .altcode = NULL }, /* 0x0e5c */ - { .altcode = NULL }, /* 0x0e5d */ - { .altcode = NULL }, /* 0x0e5e */ - { .altcode = NULL }, /* 0x0e5f */ - { .altcode = NULL }, /* 0x0e60 */ - { .altcode = NULL }, /* 0x0e61 */ - { .altcode = NULL }, /* 0x0e62 */ - { .altcode = NULL }, /* 0x0e63 */ - { .altcode = NULL }, /* 0x0e64 */ - { .altcode = NULL }, /* 0x0e65 */ - { .altcode = NULL }, /* 0x0e66 */ - { .altcode = NULL }, /* 0x0e67 */ - { .altcode = NULL }, /* 0x0e68 */ - { .altcode = NULL }, /* 0x0e69 */ - { .altcode = NULL }, /* 0x0e6a */ - { .altcode = NULL }, /* 0x0e6b */ - { .altcode = NULL }, /* 0x0e6c */ - { .altcode = NULL }, /* 0x0e6d */ - { .altcode = NULL }, /* 0x0e6e */ - { .altcode = NULL }, /* 0x0e6f */ - { .altcode = NULL }, /* 0x0e70 */ - { .altcode = NULL }, /* 0x0e71 */ - { .altcode = NULL }, /* 0x0e72 */ - { .altcode = NULL }, /* 0x0e73 */ - { .altcode = NULL }, /* 0x0e74 */ - { .altcode = NULL }, /* 0x0e75 */ - { .altcode = NULL }, /* 0x0e76 */ - { .altcode = NULL }, /* 0x0e77 */ - { .altcode = NULL }, /* 0x0e78 */ - { .altcode = NULL }, /* 0x0e79 */ - { .altcode = NULL }, /* 0x0e7a */ - { .altcode = NULL }, /* 0x0e7b */ - { .altcode = NULL }, /* 0x0e7c */ - { .altcode = NULL }, /* 0x0e7d */ - { .altcode = NULL }, /* 0x0e7e */ - { .altcode = NULL }, /* 0x0e7f */ - { .altcode = NULL }, /* 0x0e80 */ - { .altcode = NULL }, /* 0x0e81 */ - { .altcode = NULL }, /* 0x0e82 */ - { .altcode = NULL }, /* 0x0e83 */ - { .altcode = NULL }, /* 0x0e84 */ - { .altcode = NULL }, /* 0x0e85 */ - { .altcode = NULL }, /* 0x0e86 */ - { .altcode = NULL }, /* 0x0e87 */ - { .altcode = NULL }, /* 0x0e88 */ - { .altcode = NULL }, /* 0x0e89 */ - { .altcode = NULL }, /* 0x0e8a */ - { .altcode = NULL }, /* 0x0e8b */ - { .altcode = NULL }, /* 0x0e8c */ - { .altcode = NULL }, /* 0x0e8d */ - { .altcode = NULL }, /* 0x0e8e */ - { .altcode = NULL }, /* 0x0e8f */ - { .altcode = NULL }, /* 0x0e90 */ - { .altcode = NULL }, /* 0x0e91 */ - { .altcode = NULL }, /* 0x0e92 */ - { .altcode = NULL }, /* 0x0e93 */ - { .altcode = NULL }, /* 0x0e94 */ - { .altcode = NULL }, /* 0x0e95 */ - { .altcode = NULL }, /* 0x0e96 */ - { .altcode = NULL }, /* 0x0e97 */ - { .altcode = NULL }, /* 0x0e98 */ - { .altcode = NULL }, /* 0x0e99 */ - { .altcode = NULL }, /* 0x0e9a */ - { .altcode = NULL }, /* 0x0e9b */ - { .altcode = NULL }, /* 0x0e9c */ - { .altcode = NULL }, /* 0x0e9d */ - { .altcode = NULL }, /* 0x0e9e */ - { .altcode = NULL }, /* 0x0e9f */ - { .altcode = NULL }, /* 0x0ea0 */ - { .altcode = NULL }, /* 0x0ea1 (Hangul_Kiyeog) */ - { .altcode = NULL }, /* 0x0ea2 (Hangul_SsangKiyeog) */ - { .altcode = NULL }, /* 0x0ea3 (Hangul_KiyeogSios) */ - { .altcode = NULL }, /* 0x0ea4 (Hangul_Nieun) */ - { .altcode = NULL }, /* 0x0ea5 (Hangul_NieunJieuj) */ - { .altcode = NULL }, /* 0x0ea6 (Hangul_NieunHieuh) */ - { .altcode = NULL }, /* 0x0ea7 (Hangul_Dikeud) */ - { .altcode = NULL }, /* 0x0ea8 (Hangul_SsangDikeud) */ - { .altcode = NULL }, /* 0x0ea9 (Hangul_Rieul) */ - { .altcode = NULL }, /* 0x0eaa (Hangul_RieulKiyeog) */ - { .altcode = NULL }, /* 0x0eab (Hangul_RieulMieum) */ - { .altcode = NULL }, /* 0x0eac (Hangul_RieulPieub) */ - { .altcode = NULL }, /* 0x0ead (Hangul_RieulSios) */ - { .altcode = NULL }, /* 0x0eae (Hangul_RieulTieut) */ - { .altcode = NULL }, /* 0x0eaf (Hangul_RieulPhieuf) */ - { .altcode = NULL }, /* 0x0eb0 (Hangul_RieulHieuh) */ - { .altcode = NULL }, /* 0x0eb1 (Hangul_Mieum) */ - { .altcode = NULL }, /* 0x0eb2 (Hangul_Pieub) */ - { .altcode = NULL }, /* 0x0eb3 (Hangul_SsangPieub) */ - { .altcode = NULL }, /* 0x0eb4 (Hangul_PieubSios) */ - { .altcode = NULL }, /* 0x0eb5 (Hangul_Sios) */ - { .altcode = NULL }, /* 0x0eb6 (Hangul_SsangSios) */ - { .altcode = NULL }, /* 0x0eb7 (Hangul_Ieung) */ - { .altcode = NULL }, /* 0x0eb8 (Hangul_Jieuj) */ - { .altcode = NULL }, /* 0x0eb9 (Hangul_SsangJieuj) */ - { .altcode = NULL }, /* 0x0eba (Hangul_Cieuc) */ - { .altcode = NULL }, /* 0x0ebb (Hangul_Khieuq) */ - { .altcode = NULL }, /* 0x0ebc (Hangul_Tieut) */ - { .altcode = NULL }, /* 0x0ebd (Hangul_Phieuf) */ - { .altcode = NULL }, /* 0x0ebe (Hangul_Hieuh) */ - { .altcode = NULL }, /* 0x0ebf (Hangul_A) */ - { .altcode = NULL }, /* 0x0ec0 (Hangul_AE) */ - { .altcode = NULL }, /* 0x0ec1 (Hangul_YA) */ - { .altcode = NULL }, /* 0x0ec2 (Hangul_YAE) */ - { .altcode = NULL }, /* 0x0ec3 (Hangul_EO) */ - { .altcode = NULL }, /* 0x0ec4 (Hangul_E) */ - { .altcode = NULL }, /* 0x0ec5 (Hangul_YEO) */ - { .altcode = NULL }, /* 0x0ec6 (Hangul_YE) */ - { .altcode = NULL }, /* 0x0ec7 (Hangul_O) */ - { .altcode = NULL }, /* 0x0ec8 (Hangul_WA) */ - { .altcode = NULL }, /* 0x0ec9 (Hangul_WAE) */ - { .altcode = NULL }, /* 0x0eca (Hangul_OE) */ - { .altcode = NULL }, /* 0x0ecb (Hangul_YO) */ - { .altcode = NULL }, /* 0x0ecc (Hangul_U) */ - { .altcode = NULL }, /* 0x0ecd (Hangul_WEO) */ - { .altcode = NULL }, /* 0x0ece (Hangul_WE) */ - { .altcode = NULL }, /* 0x0ecf (Hangul_WI) */ - { .altcode = NULL }, /* 0x0ed0 (Hangul_YU) */ - { .altcode = NULL }, /* 0x0ed1 (Hangul_EU) */ - { .altcode = NULL }, /* 0x0ed2 (Hangul_YI) */ - { .altcode = NULL }, /* 0x0ed3 (Hangul_I) */ - { .altcode = NULL }, /* 0x0ed4 (Hangul_J_Kiyeog) */ - { .altcode = NULL }, /* 0x0ed5 (Hangul_J_SsangKiyeog) */ - { .altcode = NULL }, /* 0x0ed6 (Hangul_J_KiyeogSios) */ - { .altcode = NULL }, /* 0x0ed7 (Hangul_J_Nieun) */ - { .altcode = NULL }, /* 0x0ed8 (Hangul_J_NieunJieuj) */ - { .altcode = NULL }, /* 0x0ed9 (Hangul_J_NieunHieuh) */ - { .altcode = NULL }, /* 0x0eda (Hangul_J_Dikeud) */ - { .altcode = NULL }, /* 0x0edb (Hangul_J_Rieul) */ - { .altcode = NULL }, /* 0x0edc (Hangul_J_RieulKiyeog) */ - { .altcode = NULL }, /* 0x0edd (Hangul_J_RieulMieum) */ - { .altcode = NULL }, /* 0x0ede (Hangul_J_RieulPieub) */ - { .altcode = NULL }, /* 0x0edf (Hangul_J_RieulSios) */ - { .altcode = NULL }, /* 0x0ee0 (Hangul_J_RieulTieut) */ - { .altcode = NULL }, /* 0x0ee1 (Hangul_J_RieulPhieuf) */ - { .altcode = NULL }, /* 0x0ee2 (Hangul_J_RieulHieuh) */ - { .altcode = NULL }, /* 0x0ee3 (Hangul_J_Mieum) */ - { .altcode = NULL }, /* 0x0ee4 (Hangul_J_Pieub) */ - { .altcode = NULL }, /* 0x0ee5 (Hangul_J_PieubSios) */ - { .altcode = NULL }, /* 0x0ee6 (Hangul_J_Sios) */ - { .altcode = NULL }, /* 0x0ee7 (Hangul_J_SsangSios) */ - { .altcode = NULL }, /* 0x0ee8 (Hangul_J_Ieung) */ - { .altcode = NULL }, /* 0x0ee9 (Hangul_J_Jieuj) */ - { .altcode = NULL }, /* 0x0eea (Hangul_J_Cieuc) */ - { .altcode = NULL }, /* 0x0eeb (Hangul_J_Khieuq) */ - { .altcode = NULL }, /* 0x0eec (Hangul_J_Tieut) */ - { .altcode = NULL }, /* 0x0eed (Hangul_J_Phieuf) */ - { .altcode = NULL }, /* 0x0eee (Hangul_J_Hieuh) */ - { .altcode = NULL }, /* 0x0eef (Hangul_RieulYeorinHieuh) */ - { .altcode = NULL }, /* 0x0ef0 (Hangul_SunkyeongeumMieum) */ - { .altcode = NULL }, /* 0x0ef1 (Hangul_SunkyeongeumPieub) */ - { .altcode = NULL }, /* 0x0ef2 (Hangul_PanSios) */ - { .altcode = NULL }, /* 0x0ef3 (Hangul_KkogjiDalrinIeung) */ - { .altcode = NULL }, /* 0x0ef4 (Hangul_SunkyeongeumPhieuf) */ - { .altcode = NULL }, /* 0x0ef5 (Hangul_YeorinHieuh) */ - { .altcode = NULL }, /* 0x0ef6 (Hangul_AraeA) */ - { .altcode = NULL }, /* 0x0ef7 (Hangul_AraeAE) */ - { .altcode = NULL }, /* 0x0ef8 (Hangul_J_PanSios) */ - { .altcode = NULL }, /* 0x0ef9 (Hangul_J_KkogjiDalrinIeung) */ - { .altcode = NULL }, /* 0x0efa (Hangul_J_YeorinHieuh) */ - { .altcode = NULL }, /* 0x0efb */ - { .altcode = NULL }, /* 0x0efc */ - { .altcode = NULL }, /* 0x0efd */ - { .altcode = NULL }, /* 0x0efe */ - { .altcode = NULL }, /* 0x0eff (Korean_Won) */ + { .altcode = NULL }, /* 0x0e00 */ + { .altcode = NULL }, /* 0x0e01 */ + { .altcode = NULL }, /* 0x0e02 */ + { .altcode = NULL }, /* 0x0e03 */ + { .altcode = NULL }, /* 0x0e04 */ + { .altcode = NULL }, /* 0x0e05 */ + { .altcode = NULL }, /* 0x0e06 */ + { .altcode = NULL }, /* 0x0e07 */ + { .altcode = NULL }, /* 0x0e08 */ + { .altcode = NULL }, /* 0x0e09 */ + { .altcode = NULL }, /* 0x0e0a */ + { .altcode = NULL }, /* 0x0e0b */ + { .altcode = NULL }, /* 0x0e0c */ + { .altcode = NULL }, /* 0x0e0d */ + { .altcode = NULL }, /* 0x0e0e */ + { .altcode = NULL }, /* 0x0e0f */ + { .altcode = NULL }, /* 0x0e10 */ + { .altcode = NULL }, /* 0x0e11 */ + { .altcode = NULL }, /* 0x0e12 */ + { .altcode = NULL }, /* 0x0e13 */ + { .altcode = NULL }, /* 0x0e14 */ + { .altcode = NULL }, /* 0x0e15 */ + { .altcode = NULL }, /* 0x0e16 */ + { .altcode = NULL }, /* 0x0e17 */ + { .altcode = NULL }, /* 0x0e18 */ + { .altcode = NULL }, /* 0x0e19 */ + { .altcode = NULL }, /* 0x0e1a */ + { .altcode = NULL }, /* 0x0e1b */ + { .altcode = NULL }, /* 0x0e1c */ + { .altcode = NULL }, /* 0x0e1d */ + { .altcode = NULL }, /* 0x0e1e */ + { .altcode = NULL }, /* 0x0e1f */ + { .altcode = NULL }, /* 0x0e20 */ + { .altcode = NULL }, /* 0x0e21 */ + { .altcode = NULL }, /* 0x0e22 */ + { .altcode = NULL }, /* 0x0e23 */ + { .altcode = NULL }, /* 0x0e24 */ + { .altcode = NULL }, /* 0x0e25 */ + { .altcode = NULL }, /* 0x0e26 */ + { .altcode = NULL }, /* 0x0e27 */ + { .altcode = NULL }, /* 0x0e28 */ + { .altcode = NULL }, /* 0x0e29 */ + { .altcode = NULL }, /* 0x0e2a */ + { .altcode = NULL }, /* 0x0e2b */ + { .altcode = NULL }, /* 0x0e2c */ + { .altcode = NULL }, /* 0x0e2d */ + { .altcode = NULL }, /* 0x0e2e */ + { .altcode = NULL }, /* 0x0e2f */ + { .altcode = NULL }, /* 0x0e30 */ + { .altcode = NULL }, /* 0x0e31 */ + { .altcode = NULL }, /* 0x0e32 */ + { .altcode = NULL }, /* 0x0e33 */ + { .altcode = NULL }, /* 0x0e34 */ + { .altcode = NULL }, /* 0x0e35 */ + { .altcode = NULL }, /* 0x0e36 */ + { .altcode = NULL }, /* 0x0e37 */ + { .altcode = NULL }, /* 0x0e38 */ + { .altcode = NULL }, /* 0x0e39 */ + { .altcode = NULL }, /* 0x0e3a */ + { .altcode = NULL }, /* 0x0e3b */ + { .altcode = NULL }, /* 0x0e3c */ + { .altcode = NULL }, /* 0x0e3d */ + { .altcode = NULL }, /* 0x0e3e */ + { .altcode = NULL }, /* 0x0e3f */ + { .altcode = NULL }, /* 0x0e40 */ + { .altcode = NULL }, /* 0x0e41 */ + { .altcode = NULL }, /* 0x0e42 */ + { .altcode = NULL }, /* 0x0e43 */ + { .altcode = NULL }, /* 0x0e44 */ + { .altcode = NULL }, /* 0x0e45 */ + { .altcode = NULL }, /* 0x0e46 */ + { .altcode = NULL }, /* 0x0e47 */ + { .altcode = NULL }, /* 0x0e48 */ + { .altcode = NULL }, /* 0x0e49 */ + { .altcode = NULL }, /* 0x0e4a */ + { .altcode = NULL }, /* 0x0e4b */ + { .altcode = NULL }, /* 0x0e4c */ + { .altcode = NULL }, /* 0x0e4d */ + { .altcode = NULL }, /* 0x0e4e */ + { .altcode = NULL }, /* 0x0e4f */ + { .altcode = NULL }, /* 0x0e50 */ + { .altcode = NULL }, /* 0x0e51 */ + { .altcode = NULL }, /* 0x0e52 */ + { .altcode = NULL }, /* 0x0e53 */ + { .altcode = NULL }, /* 0x0e54 */ + { .altcode = NULL }, /* 0x0e55 */ + { .altcode = NULL }, /* 0x0e56 */ + { .altcode = NULL }, /* 0x0e57 */ + { .altcode = NULL }, /* 0x0e58 */ + { .altcode = NULL }, /* 0x0e59 */ + { .altcode = NULL }, /* 0x0e5a */ + { .altcode = NULL }, /* 0x0e5b */ + { .altcode = NULL }, /* 0x0e5c */ + { .altcode = NULL }, /* 0x0e5d */ + { .altcode = NULL }, /* 0x0e5e */ + { .altcode = NULL }, /* 0x0e5f */ + { .altcode = NULL }, /* 0x0e60 */ + { .altcode = NULL }, /* 0x0e61 */ + { .altcode = NULL }, /* 0x0e62 */ + { .altcode = NULL }, /* 0x0e63 */ + { .altcode = NULL }, /* 0x0e64 */ + { .altcode = NULL }, /* 0x0e65 */ + { .altcode = NULL }, /* 0x0e66 */ + { .altcode = NULL }, /* 0x0e67 */ + { .altcode = NULL }, /* 0x0e68 */ + { .altcode = NULL }, /* 0x0e69 */ + { .altcode = NULL }, /* 0x0e6a */ + { .altcode = NULL }, /* 0x0e6b */ + { .altcode = NULL }, /* 0x0e6c */ + { .altcode = NULL }, /* 0x0e6d */ + { .altcode = NULL }, /* 0x0e6e */ + { .altcode = NULL }, /* 0x0e6f */ + { .altcode = NULL }, /* 0x0e70 */ + { .altcode = NULL }, /* 0x0e71 */ + { .altcode = NULL }, /* 0x0e72 */ + { .altcode = NULL }, /* 0x0e73 */ + { .altcode = NULL }, /* 0x0e74 */ + { .altcode = NULL }, /* 0x0e75 */ + { .altcode = NULL }, /* 0x0e76 */ + { .altcode = NULL }, /* 0x0e77 */ + { .altcode = NULL }, /* 0x0e78 */ + { .altcode = NULL }, /* 0x0e79 */ + { .altcode = NULL }, /* 0x0e7a */ + { .altcode = NULL }, /* 0x0e7b */ + { .altcode = NULL }, /* 0x0e7c */ + { .altcode = NULL }, /* 0x0e7d */ + { .altcode = NULL }, /* 0x0e7e */ + { .altcode = NULL }, /* 0x0e7f */ + { .altcode = NULL }, /* 0x0e80 */ + { .altcode = NULL }, /* 0x0e81 */ + { .altcode = NULL }, /* 0x0e82 */ + { .altcode = NULL }, /* 0x0e83 */ + { .altcode = NULL }, /* 0x0e84 */ + { .altcode = NULL }, /* 0x0e85 */ + { .altcode = NULL }, /* 0x0e86 */ + { .altcode = NULL }, /* 0x0e87 */ + { .altcode = NULL }, /* 0x0e88 */ + { .altcode = NULL }, /* 0x0e89 */ + { .altcode = NULL }, /* 0x0e8a */ + { .altcode = NULL }, /* 0x0e8b */ + { .altcode = NULL }, /* 0x0e8c */ + { .altcode = NULL }, /* 0x0e8d */ + { .altcode = NULL }, /* 0x0e8e */ + { .altcode = NULL }, /* 0x0e8f */ + { .altcode = NULL }, /* 0x0e90 */ + { .altcode = NULL }, /* 0x0e91 */ + { .altcode = NULL }, /* 0x0e92 */ + { .altcode = NULL }, /* 0x0e93 */ + { .altcode = NULL }, /* 0x0e94 */ + { .altcode = NULL }, /* 0x0e95 */ + { .altcode = NULL }, /* 0x0e96 */ + { .altcode = NULL }, /* 0x0e97 */ + { .altcode = NULL }, /* 0x0e98 */ + { .altcode = NULL }, /* 0x0e99 */ + { .altcode = NULL }, /* 0x0e9a */ + { .altcode = NULL }, /* 0x0e9b */ + { .altcode = NULL }, /* 0x0e9c */ + { .altcode = NULL }, /* 0x0e9d */ + { .altcode = NULL }, /* 0x0e9e */ + { .altcode = NULL }, /* 0x0e9f */ + { .altcode = NULL }, /* 0x0ea0 */ + { .altcode = NULL }, /* 0x0ea1 (Hangul_Kiyeog) */ + { .altcode = NULL }, /* 0x0ea2 (Hangul_SsangKiyeog) */ + { .altcode = NULL }, /* 0x0ea3 (Hangul_KiyeogSios) */ + { .altcode = NULL }, /* 0x0ea4 (Hangul_Nieun) */ + { .altcode = NULL }, /* 0x0ea5 (Hangul_NieunJieuj) */ + { .altcode = NULL }, /* 0x0ea6 (Hangul_NieunHieuh) */ + { .altcode = NULL }, /* 0x0ea7 (Hangul_Dikeud) */ + { .altcode = NULL }, /* 0x0ea8 (Hangul_SsangDikeud) */ + { .altcode = NULL }, /* 0x0ea9 (Hangul_Rieul) */ + { .altcode = NULL }, /* 0x0eaa (Hangul_RieulKiyeog) */ + { .altcode = NULL }, /* 0x0eab (Hangul_RieulMieum) */ + { .altcode = NULL }, /* 0x0eac (Hangul_RieulPieub) */ + { .altcode = NULL }, /* 0x0ead (Hangul_RieulSios) */ + { .altcode = NULL }, /* 0x0eae (Hangul_RieulTieut) */ + { .altcode = NULL }, /* 0x0eaf (Hangul_RieulPhieuf) */ + { .altcode = NULL }, /* 0x0eb0 (Hangul_RieulHieuh) */ + { .altcode = NULL }, /* 0x0eb1 (Hangul_Mieum) */ + { .altcode = NULL }, /* 0x0eb2 (Hangul_Pieub) */ + { .altcode = NULL }, /* 0x0eb3 (Hangul_SsangPieub) */ + { .altcode = NULL }, /* 0x0eb4 (Hangul_PieubSios) */ + { .altcode = NULL }, /* 0x0eb5 (Hangul_Sios) */ + { .altcode = NULL }, /* 0x0eb6 (Hangul_SsangSios) */ + { .altcode = NULL }, /* 0x0eb7 (Hangul_Ieung) */ + { .altcode = NULL }, /* 0x0eb8 (Hangul_Jieuj) */ + { .altcode = NULL }, /* 0x0eb9 (Hangul_SsangJieuj) */ + { .altcode = NULL }, /* 0x0eba (Hangul_Cieuc) */ + { .altcode = NULL }, /* 0x0ebb (Hangul_Khieuq) */ + { .altcode = NULL }, /* 0x0ebc (Hangul_Tieut) */ + { .altcode = NULL }, /* 0x0ebd (Hangul_Phieuf) */ + { .altcode = NULL }, /* 0x0ebe (Hangul_Hieuh) */ + { .altcode = NULL }, /* 0x0ebf (Hangul_A) */ + { .altcode = NULL }, /* 0x0ec0 (Hangul_AE) */ + { .altcode = NULL }, /* 0x0ec1 (Hangul_YA) */ + { .altcode = NULL }, /* 0x0ec2 (Hangul_YAE) */ + { .altcode = NULL }, /* 0x0ec3 (Hangul_EO) */ + { .altcode = NULL }, /* 0x0ec4 (Hangul_E) */ + { .altcode = NULL }, /* 0x0ec5 (Hangul_YEO) */ + { .altcode = NULL }, /* 0x0ec6 (Hangul_YE) */ + { .altcode = NULL }, /* 0x0ec7 (Hangul_O) */ + { .altcode = NULL }, /* 0x0ec8 (Hangul_WA) */ + { .altcode = NULL }, /* 0x0ec9 (Hangul_WAE) */ + { .altcode = NULL }, /* 0x0eca (Hangul_OE) */ + { .altcode = NULL }, /* 0x0ecb (Hangul_YO) */ + { .altcode = NULL }, /* 0x0ecc (Hangul_U) */ + { .altcode = NULL }, /* 0x0ecd (Hangul_WEO) */ + { .altcode = NULL }, /* 0x0ece (Hangul_WE) */ + { .altcode = NULL }, /* 0x0ecf (Hangul_WI) */ + { .altcode = NULL }, /* 0x0ed0 (Hangul_YU) */ + { .altcode = NULL }, /* 0x0ed1 (Hangul_EU) */ + { .altcode = NULL }, /* 0x0ed2 (Hangul_YI) */ + { .altcode = NULL }, /* 0x0ed3 (Hangul_I) */ + { .altcode = NULL }, /* 0x0ed4 (Hangul_J_Kiyeog) */ + { .altcode = NULL }, /* 0x0ed5 (Hangul_J_SsangKiyeog) */ + { .altcode = NULL }, /* 0x0ed6 (Hangul_J_KiyeogSios) */ + { .altcode = NULL }, /* 0x0ed7 (Hangul_J_Nieun) */ + { .altcode = NULL }, /* 0x0ed8 (Hangul_J_NieunJieuj) */ + { .altcode = NULL }, /* 0x0ed9 (Hangul_J_NieunHieuh) */ + { .altcode = NULL }, /* 0x0eda (Hangul_J_Dikeud) */ + { .altcode = NULL }, /* 0x0edb (Hangul_J_Rieul) */ + { .altcode = NULL }, /* 0x0edc (Hangul_J_RieulKiyeog) */ + { .altcode = NULL }, /* 0x0edd (Hangul_J_RieulMieum) */ + { .altcode = NULL }, /* 0x0ede (Hangul_J_RieulPieub) */ + { .altcode = NULL }, /* 0x0edf (Hangul_J_RieulSios) */ + { .altcode = NULL }, /* 0x0ee0 (Hangul_J_RieulTieut) */ + { .altcode = NULL }, /* 0x0ee1 (Hangul_J_RieulPhieuf) */ + { .altcode = NULL }, /* 0x0ee2 (Hangul_J_RieulHieuh) */ + { .altcode = NULL }, /* 0x0ee3 (Hangul_J_Mieum) */ + { .altcode = NULL }, /* 0x0ee4 (Hangul_J_Pieub) */ + { .altcode = NULL }, /* 0x0ee5 (Hangul_J_PieubSios) */ + { .altcode = NULL }, /* 0x0ee6 (Hangul_J_Sios) */ + { .altcode = NULL }, /* 0x0ee7 (Hangul_J_SsangSios) */ + { .altcode = NULL }, /* 0x0ee8 (Hangul_J_Ieung) */ + { .altcode = NULL }, /* 0x0ee9 (Hangul_J_Jieuj) */ + { .altcode = NULL }, /* 0x0eea (Hangul_J_Cieuc) */ + { .altcode = NULL }, /* 0x0eeb (Hangul_J_Khieuq) */ + { .altcode = NULL }, /* 0x0eec (Hangul_J_Tieut) */ + { .altcode = NULL }, /* 0x0eed (Hangul_J_Phieuf) */ + { .altcode = NULL }, /* 0x0eee (Hangul_J_Hieuh) */ + { .altcode = NULL }, /* 0x0eef (Hangul_RieulYeorinHieuh) */ + { .altcode = NULL }, /* 0x0ef0 (Hangul_SunkyeongeumMieum) */ + { .altcode = NULL }, /* 0x0ef1 (Hangul_SunkyeongeumPieub) */ + { .altcode = NULL }, /* 0x0ef2 (Hangul_PanSios) */ + { .altcode = NULL }, /* 0x0ef3 (Hangul_KkogjiDalrinIeung) */ + { .altcode = NULL }, /* 0x0ef4 (Hangul_SunkyeongeumPhieuf) */ + { .altcode = NULL }, /* 0x0ef5 (Hangul_YeorinHieuh) */ + { .altcode = NULL }, /* 0x0ef6 (Hangul_AraeA) */ + { .altcode = NULL }, /* 0x0ef7 (Hangul_AraeAE) */ + { .altcode = NULL }, /* 0x0ef8 (Hangul_J_PanSios) */ + { .altcode = NULL }, /* 0x0ef9 (Hangul_J_KkogjiDalrinIeung) */ + { .altcode = NULL }, /* 0x0efa (Hangul_J_YeorinHieuh) */ + { .altcode = NULL }, /* 0x0efb */ + { .altcode = NULL }, /* 0x0efc */ + { .altcode = NULL }, /* 0x0efd */ + { .altcode = NULL }, /* 0x0efe */ + { .altcode = NULL }, /* 0x0eff (Korean_Won) */ }, - {{NULL}}, /* 0x0f?? */ - {{NULL}}, /* 0x10?? */ - {{NULL}}, /* 0x11?? */ - {{NULL}}, /* 0x12?? */ + {{NULL }}, /* 0x0f?? */ + {{NULL }}, /* 0x10?? */ + {{NULL }}, /* 0x11?? */ + {{NULL }}, /* 0x12?? */ { /* 0x13?? */ - { .altcode = NULL }, /* 0x1300 */ - { .altcode = NULL }, /* 0x1301 */ - { .altcode = NULL }, /* 0x1302 */ - { .altcode = NULL }, /* 0x1303 */ - { .altcode = NULL }, /* 0x1304 */ - { .altcode = NULL }, /* 0x1305 */ - { .altcode = NULL }, /* 0x1306 */ - { .altcode = NULL }, /* 0x1307 */ - { .altcode = NULL }, /* 0x1308 */ - { .altcode = NULL }, /* 0x1309 */ - { .altcode = NULL }, /* 0x130a */ - { .altcode = NULL }, /* 0x130b */ - { .altcode = NULL }, /* 0x130c */ - { .altcode = NULL }, /* 0x130d */ - { .altcode = NULL }, /* 0x130e */ - { .altcode = NULL }, /* 0x130f */ - { .altcode = NULL }, /* 0x1310 */ - { .altcode = NULL }, /* 0x1311 */ - { .altcode = NULL }, /* 0x1312 */ - { .altcode = NULL }, /* 0x1313 */ - { .altcode = NULL }, /* 0x1314 */ - { .altcode = NULL }, /* 0x1315 */ - { .altcode = NULL }, /* 0x1316 */ - { .altcode = NULL }, /* 0x1317 */ - { .altcode = NULL }, /* 0x1318 */ - { .altcode = NULL }, /* 0x1319 */ - { .altcode = NULL }, /* 0x131a */ - { .altcode = NULL }, /* 0x131b */ - { .altcode = NULL }, /* 0x131c */ - { .altcode = NULL }, /* 0x131d */ - { .altcode = NULL }, /* 0x131e */ - { .altcode = NULL }, /* 0x131f */ - { .altcode = NULL }, /* 0x1320 */ - { .altcode = NULL }, /* 0x1321 */ - { .altcode = NULL }, /* 0x1322 */ - { .altcode = NULL }, /* 0x1323 */ - { .altcode = NULL }, /* 0x1324 */ - { .altcode = NULL }, /* 0x1325 */ - { .altcode = NULL }, /* 0x1326 */ - { .altcode = NULL }, /* 0x1327 */ - { .altcode = NULL }, /* 0x1328 */ - { .altcode = NULL }, /* 0x1329 */ - { .altcode = NULL }, /* 0x132a */ - { .altcode = NULL }, /* 0x132b */ - { .altcode = NULL }, /* 0x132c */ - { .altcode = NULL }, /* 0x132d */ - { .altcode = NULL }, /* 0x132e */ - { .altcode = NULL }, /* 0x132f */ - { .altcode = NULL }, /* 0x1330 */ - { .altcode = NULL }, /* 0x1331 */ - { .altcode = NULL }, /* 0x1332 */ - { .altcode = NULL }, /* 0x1333 */ - { .altcode = NULL }, /* 0x1334 */ - { .altcode = NULL }, /* 0x1335 */ - { .altcode = NULL }, /* 0x1336 */ - { .altcode = NULL }, /* 0x1337 */ - { .altcode = NULL }, /* 0x1338 */ - { .altcode = NULL }, /* 0x1339 */ - { .altcode = NULL }, /* 0x133a */ - { .altcode = NULL }, /* 0x133b */ - { .altcode = NULL }, /* 0x133c */ - { .altcode = NULL }, /* 0x133d */ - { .altcode = NULL }, /* 0x133e */ - { .altcode = NULL }, /* 0x133f */ - { .altcode = NULL }, /* 0x1340 */ - { .altcode = NULL }, /* 0x1341 */ - { .altcode = NULL }, /* 0x1342 */ - { .altcode = NULL }, /* 0x1343 */ - { .altcode = NULL }, /* 0x1344 */ - { .altcode = NULL }, /* 0x1345 */ - { .altcode = NULL }, /* 0x1346 */ - { .altcode = NULL }, /* 0x1347 */ - { .altcode = NULL }, /* 0x1348 */ - { .altcode = NULL }, /* 0x1349 */ - { .altcode = NULL }, /* 0x134a */ - { .altcode = NULL }, /* 0x134b */ - { .altcode = NULL }, /* 0x134c */ - { .altcode = NULL }, /* 0x134d */ - { .altcode = NULL }, /* 0x134e */ - { .altcode = NULL }, /* 0x134f */ - { .altcode = NULL }, /* 0x1350 */ - { .altcode = NULL }, /* 0x1351 */ - { .altcode = NULL }, /* 0x1352 */ - { .altcode = NULL }, /* 0x1353 */ - { .altcode = NULL }, /* 0x1354 */ - { .altcode = NULL }, /* 0x1355 */ - { .altcode = NULL }, /* 0x1356 */ - { .altcode = NULL }, /* 0x1357 */ - { .altcode = NULL }, /* 0x1358 */ - { .altcode = NULL }, /* 0x1359 */ - { .altcode = NULL }, /* 0x135a */ - { .altcode = NULL }, /* 0x135b */ - { .altcode = NULL }, /* 0x135c */ - { .altcode = NULL }, /* 0x135d */ - { .altcode = NULL }, /* 0x135e */ - { .altcode = NULL }, /* 0x135f */ - { .altcode = NULL }, /* 0x1360 */ - { .altcode = NULL }, /* 0x1361 */ - { .altcode = NULL }, /* 0x1362 */ - { .altcode = NULL }, /* 0x1363 */ - { .altcode = NULL }, /* 0x1364 */ - { .altcode = NULL }, /* 0x1365 */ - { .altcode = NULL }, /* 0x1366 */ - { .altcode = NULL }, /* 0x1367 */ - { .altcode = NULL }, /* 0x1368 */ - { .altcode = NULL }, /* 0x1369 */ - { .altcode = NULL }, /* 0x136a */ - { .altcode = NULL }, /* 0x136b */ - { .altcode = NULL }, /* 0x136c */ - { .altcode = NULL }, /* 0x136d */ - { .altcode = NULL }, /* 0x136e */ - { .altcode = NULL }, /* 0x136f */ - { .altcode = NULL }, /* 0x1370 */ - { .altcode = NULL }, /* 0x1371 */ - { .altcode = NULL }, /* 0x1372 */ - { .altcode = NULL }, /* 0x1373 */ - { .altcode = NULL }, /* 0x1374 */ - { .altcode = NULL }, /* 0x1375 */ - { .altcode = NULL }, /* 0x1376 */ - { .altcode = NULL }, /* 0x1377 */ - { .altcode = NULL }, /* 0x1378 */ - { .altcode = NULL }, /* 0x1379 */ - { .altcode = NULL }, /* 0x137a */ - { .altcode = NULL }, /* 0x137b */ - { .altcode = NULL }, /* 0x137c */ - { .altcode = NULL }, /* 0x137d */ - { .altcode = NULL }, /* 0x137e */ - { .altcode = NULL }, /* 0x137f */ - { .altcode = NULL }, /* 0x1380 */ - { .altcode = NULL }, /* 0x1381 */ - { .altcode = NULL }, /* 0x1382 */ - { .altcode = NULL }, /* 0x1383 */ - { .altcode = NULL }, /* 0x1384 */ - { .altcode = NULL }, /* 0x1385 */ - { .altcode = NULL }, /* 0x1386 */ - { .altcode = NULL }, /* 0x1387 */ - { .altcode = NULL }, /* 0x1388 */ - { .altcode = NULL }, /* 0x1389 */ - { .altcode = NULL }, /* 0x138a */ - { .altcode = NULL }, /* 0x138b */ - { .altcode = NULL }, /* 0x138c */ - { .altcode = NULL }, /* 0x138d */ - { .altcode = NULL }, /* 0x138e */ - { .altcode = NULL }, /* 0x138f */ - { .altcode = NULL }, /* 0x1390 */ - { .altcode = NULL }, /* 0x1391 */ - { .altcode = NULL }, /* 0x1392 */ - { .altcode = NULL }, /* 0x1393 */ - { .altcode = NULL }, /* 0x1394 */ - { .altcode = NULL }, /* 0x1395 */ - { .altcode = NULL }, /* 0x1396 */ - { .altcode = NULL }, /* 0x1397 */ - { .altcode = NULL }, /* 0x1398 */ - { .altcode = NULL }, /* 0x1399 */ - { .altcode = NULL }, /* 0x139a */ - { .altcode = NULL }, /* 0x139b */ - { .altcode = NULL }, /* 0x139c */ - { .altcode = NULL }, /* 0x139d */ - { .altcode = NULL }, /* 0x139e */ - { .altcode = NULL }, /* 0x139f */ - { .altcode = NULL }, /* 0x13a0 */ - { .altcode = NULL }, /* 0x13a1 */ - { .altcode = NULL }, /* 0x13a2 */ - { .altcode = NULL }, /* 0x13a3 */ - { .altcode = NULL }, /* 0x13a4 */ - { .altcode = NULL }, /* 0x13a5 */ - { .altcode = NULL }, /* 0x13a6 */ - { .altcode = NULL }, /* 0x13a7 */ - { .altcode = NULL }, /* 0x13a8 */ - { .altcode = NULL }, /* 0x13a9 */ - { .altcode = NULL }, /* 0x13aa */ - { .altcode = NULL }, /* 0x13ab */ - { .altcode = NULL }, /* 0x13ac */ - { .altcode = NULL }, /* 0x13ad */ - { .altcode = NULL }, /* 0x13ae */ - { .altcode = NULL }, /* 0x13af */ - { .altcode = NULL }, /* 0x13b0 */ - { .altcode = NULL }, /* 0x13b1 */ - { .altcode = NULL }, /* 0x13b2 */ - { .altcode = NULL }, /* 0x13b3 */ - { .altcode = NULL }, /* 0x13b4 */ - { .altcode = NULL }, /* 0x13b5 */ - { .altcode = NULL }, /* 0x13b6 */ - { .altcode = NULL }, /* 0x13b7 */ - { .altcode = NULL }, /* 0x13b8 */ - { .altcode = NULL }, /* 0x13b9 */ - { .altcode = NULL }, /* 0x13ba */ - { .altcode = NULL }, /* 0x13bb */ - { .altcode = NULL }, /* 0x13bc (OE) */ - { .altcode = NULL }, /* 0x13bd (oe) */ - { .altcode = NULL }, /* 0x13be (Ydiaeresis) */ - { .altcode = NULL }, /* 0x13bf */ - { .altcode = NULL }, /* 0x13c0 */ - { .altcode = NULL }, /* 0x13c1 */ - { .altcode = NULL }, /* 0x13c2 */ - { .altcode = NULL }, /* 0x13c3 */ - { .altcode = NULL }, /* 0x13c4 */ - { .altcode = NULL }, /* 0x13c5 */ - { .altcode = NULL }, /* 0x13c6 */ - { .altcode = NULL }, /* 0x13c7 */ - { .altcode = NULL }, /* 0x13c8 */ - { .altcode = NULL }, /* 0x13c9 */ - { .altcode = NULL }, /* 0x13ca */ - { .altcode = NULL }, /* 0x13cb */ - { .altcode = NULL }, /* 0x13cc */ - { .altcode = NULL }, /* 0x13cd */ - { .altcode = NULL }, /* 0x13ce */ - { .altcode = NULL }, /* 0x13cf */ - { .altcode = NULL }, /* 0x13d0 */ - { .altcode = NULL }, /* 0x13d1 */ - { .altcode = NULL }, /* 0x13d2 */ - { .altcode = NULL }, /* 0x13d3 */ - { .altcode = NULL }, /* 0x13d4 */ - { .altcode = NULL }, /* 0x13d5 */ - { .altcode = NULL }, /* 0x13d6 */ - { .altcode = NULL }, /* 0x13d7 */ - { .altcode = NULL }, /* 0x13d8 */ - { .altcode = NULL }, /* 0x13d9 */ - { .altcode = NULL }, /* 0x13da */ - { .altcode = NULL }, /* 0x13db */ - { .altcode = NULL }, /* 0x13dc */ - { .altcode = NULL }, /* 0x13dd */ - { .altcode = NULL }, /* 0x13de */ - { .altcode = NULL }, /* 0x13df */ - { .altcode = NULL }, /* 0x13e0 */ - { .altcode = NULL }, /* 0x13e1 */ - { .altcode = NULL }, /* 0x13e2 */ - { .altcode = NULL }, /* 0x13e3 */ - { .altcode = NULL }, /* 0x13e4 */ - { .altcode = NULL }, /* 0x13e5 */ - { .altcode = NULL }, /* 0x13e6 */ - { .altcode = NULL }, /* 0x13e7 */ - { .altcode = NULL }, /* 0x13e8 */ - { .altcode = NULL }, /* 0x13e9 */ - { .altcode = NULL }, /* 0x13ea */ - { .altcode = NULL }, /* 0x13eb */ - { .altcode = NULL }, /* 0x13ec */ - { .altcode = NULL }, /* 0x13ed */ - { .altcode = NULL }, /* 0x13ee */ - { .altcode = NULL }, /* 0x13ef */ - { .altcode = NULL }, /* 0x13f0 */ - { .altcode = NULL }, /* 0x13f1 */ - { .altcode = NULL }, /* 0x13f2 */ - { .altcode = NULL }, /* 0x13f3 */ - { .altcode = NULL }, /* 0x13f4 */ - { .altcode = NULL }, /* 0x13f5 */ - { .altcode = NULL }, /* 0x13f6 */ - { .altcode = NULL }, /* 0x13f7 */ - { .altcode = NULL }, /* 0x13f8 */ - { .altcode = NULL }, /* 0x13f9 */ - { .altcode = NULL }, /* 0x13fa */ - { .altcode = NULL }, /* 0x13fb */ - { .altcode = NULL }, /* 0x13fc */ - { .altcode = NULL }, /* 0x13fd */ - { .altcode = NULL }, /* 0x13fe */ - { .altcode = NULL }, /* 0x13ff */ + { .altcode = NULL }, /* 0x1300 */ + { .altcode = NULL }, /* 0x1301 */ + { .altcode = NULL }, /* 0x1302 */ + { .altcode = NULL }, /* 0x1303 */ + { .altcode = NULL }, /* 0x1304 */ + { .altcode = NULL }, /* 0x1305 */ + { .altcode = NULL }, /* 0x1306 */ + { .altcode = NULL }, /* 0x1307 */ + { .altcode = NULL }, /* 0x1308 */ + { .altcode = NULL }, /* 0x1309 */ + { .altcode = NULL }, /* 0x130a */ + { .altcode = NULL }, /* 0x130b */ + { .altcode = NULL }, /* 0x130c */ + { .altcode = NULL }, /* 0x130d */ + { .altcode = NULL }, /* 0x130e */ + { .altcode = NULL }, /* 0x130f */ + { .altcode = NULL }, /* 0x1310 */ + { .altcode = NULL }, /* 0x1311 */ + { .altcode = NULL }, /* 0x1312 */ + { .altcode = NULL }, /* 0x1313 */ + { .altcode = NULL }, /* 0x1314 */ + { .altcode = NULL }, /* 0x1315 */ + { .altcode = NULL }, /* 0x1316 */ + { .altcode = NULL }, /* 0x1317 */ + { .altcode = NULL }, /* 0x1318 */ + { .altcode = NULL }, /* 0x1319 */ + { .altcode = NULL }, /* 0x131a */ + { .altcode = NULL }, /* 0x131b */ + { .altcode = NULL }, /* 0x131c */ + { .altcode = NULL }, /* 0x131d */ + { .altcode = NULL }, /* 0x131e */ + { .altcode = NULL }, /* 0x131f */ + { .altcode = NULL }, /* 0x1320 */ + { .altcode = NULL }, /* 0x1321 */ + { .altcode = NULL }, /* 0x1322 */ + { .altcode = NULL }, /* 0x1323 */ + { .altcode = NULL }, /* 0x1324 */ + { .altcode = NULL }, /* 0x1325 */ + { .altcode = NULL }, /* 0x1326 */ + { .altcode = NULL }, /* 0x1327 */ + { .altcode = NULL }, /* 0x1328 */ + { .altcode = NULL }, /* 0x1329 */ + { .altcode = NULL }, /* 0x132a */ + { .altcode = NULL }, /* 0x132b */ + { .altcode = NULL }, /* 0x132c */ + { .altcode = NULL }, /* 0x132d */ + { .altcode = NULL }, /* 0x132e */ + { .altcode = NULL }, /* 0x132f */ + { .altcode = NULL }, /* 0x1330 */ + { .altcode = NULL }, /* 0x1331 */ + { .altcode = NULL }, /* 0x1332 */ + { .altcode = NULL }, /* 0x1333 */ + { .altcode = NULL }, /* 0x1334 */ + { .altcode = NULL }, /* 0x1335 */ + { .altcode = NULL }, /* 0x1336 */ + { .altcode = NULL }, /* 0x1337 */ + { .altcode = NULL }, /* 0x1338 */ + { .altcode = NULL }, /* 0x1339 */ + { .altcode = NULL }, /* 0x133a */ + { .altcode = NULL }, /* 0x133b */ + { .altcode = NULL }, /* 0x133c */ + { .altcode = NULL }, /* 0x133d */ + { .altcode = NULL }, /* 0x133e */ + { .altcode = NULL }, /* 0x133f */ + { .altcode = NULL }, /* 0x1340 */ + { .altcode = NULL }, /* 0x1341 */ + { .altcode = NULL }, /* 0x1342 */ + { .altcode = NULL }, /* 0x1343 */ + { .altcode = NULL }, /* 0x1344 */ + { .altcode = NULL }, /* 0x1345 */ + { .altcode = NULL }, /* 0x1346 */ + { .altcode = NULL }, /* 0x1347 */ + { .altcode = NULL }, /* 0x1348 */ + { .altcode = NULL }, /* 0x1349 */ + { .altcode = NULL }, /* 0x134a */ + { .altcode = NULL }, /* 0x134b */ + { .altcode = NULL }, /* 0x134c */ + { .altcode = NULL }, /* 0x134d */ + { .altcode = NULL }, /* 0x134e */ + { .altcode = NULL }, /* 0x134f */ + { .altcode = NULL }, /* 0x1350 */ + { .altcode = NULL }, /* 0x1351 */ + { .altcode = NULL }, /* 0x1352 */ + { .altcode = NULL }, /* 0x1353 */ + { .altcode = NULL }, /* 0x1354 */ + { .altcode = NULL }, /* 0x1355 */ + { .altcode = NULL }, /* 0x1356 */ + { .altcode = NULL }, /* 0x1357 */ + { .altcode = NULL }, /* 0x1358 */ + { .altcode = NULL }, /* 0x1359 */ + { .altcode = NULL }, /* 0x135a */ + { .altcode = NULL }, /* 0x135b */ + { .altcode = NULL }, /* 0x135c */ + { .altcode = NULL }, /* 0x135d */ + { .altcode = NULL }, /* 0x135e */ + { .altcode = NULL }, /* 0x135f */ + { .altcode = NULL }, /* 0x1360 */ + { .altcode = NULL }, /* 0x1361 */ + { .altcode = NULL }, /* 0x1362 */ + { .altcode = NULL }, /* 0x1363 */ + { .altcode = NULL }, /* 0x1364 */ + { .altcode = NULL }, /* 0x1365 */ + { .altcode = NULL }, /* 0x1366 */ + { .altcode = NULL }, /* 0x1367 */ + { .altcode = NULL }, /* 0x1368 */ + { .altcode = NULL }, /* 0x1369 */ + { .altcode = NULL }, /* 0x136a */ + { .altcode = NULL }, /* 0x136b */ + { .altcode = NULL }, /* 0x136c */ + { .altcode = NULL }, /* 0x136d */ + { .altcode = NULL }, /* 0x136e */ + { .altcode = NULL }, /* 0x136f */ + { .altcode = NULL }, /* 0x1370 */ + { .altcode = NULL }, /* 0x1371 */ + { .altcode = NULL }, /* 0x1372 */ + { .altcode = NULL }, /* 0x1373 */ + { .altcode = NULL }, /* 0x1374 */ + { .altcode = NULL }, /* 0x1375 */ + { .altcode = NULL }, /* 0x1376 */ + { .altcode = NULL }, /* 0x1377 */ + { .altcode = NULL }, /* 0x1378 */ + { .altcode = NULL }, /* 0x1379 */ + { .altcode = NULL }, /* 0x137a */ + { .altcode = NULL }, /* 0x137b */ + { .altcode = NULL }, /* 0x137c */ + { .altcode = NULL }, /* 0x137d */ + { .altcode = NULL }, /* 0x137e */ + { .altcode = NULL }, /* 0x137f */ + { .altcode = NULL }, /* 0x1380 */ + { .altcode = NULL }, /* 0x1381 */ + { .altcode = NULL }, /* 0x1382 */ + { .altcode = NULL }, /* 0x1383 */ + { .altcode = NULL }, /* 0x1384 */ + { .altcode = NULL }, /* 0x1385 */ + { .altcode = NULL }, /* 0x1386 */ + { .altcode = NULL }, /* 0x1387 */ + { .altcode = NULL }, /* 0x1388 */ + { .altcode = NULL }, /* 0x1389 */ + { .altcode = NULL }, /* 0x138a */ + { .altcode = NULL }, /* 0x138b */ + { .altcode = NULL }, /* 0x138c */ + { .altcode = NULL }, /* 0x138d */ + { .altcode = NULL }, /* 0x138e */ + { .altcode = NULL }, /* 0x138f */ + { .altcode = NULL }, /* 0x1390 */ + { .altcode = NULL }, /* 0x1391 */ + { .altcode = NULL }, /* 0x1392 */ + { .altcode = NULL }, /* 0x1393 */ + { .altcode = NULL }, /* 0x1394 */ + { .altcode = NULL }, /* 0x1395 */ + { .altcode = NULL }, /* 0x1396 */ + { .altcode = NULL }, /* 0x1397 */ + { .altcode = NULL }, /* 0x1398 */ + { .altcode = NULL }, /* 0x1399 */ + { .altcode = NULL }, /* 0x139a */ + { .altcode = NULL }, /* 0x139b */ + { .altcode = NULL }, /* 0x139c */ + { .altcode = NULL }, /* 0x139d */ + { .altcode = NULL }, /* 0x139e */ + { .altcode = NULL }, /* 0x139f */ + { .altcode = NULL }, /* 0x13a0 */ + { .altcode = NULL }, /* 0x13a1 */ + { .altcode = NULL }, /* 0x13a2 */ + { .altcode = NULL }, /* 0x13a3 */ + { .altcode = NULL }, /* 0x13a4 */ + { .altcode = NULL }, /* 0x13a5 */ + { .altcode = NULL }, /* 0x13a6 */ + { .altcode = NULL }, /* 0x13a7 */ + { .altcode = NULL }, /* 0x13a8 */ + { .altcode = NULL }, /* 0x13a9 */ + { .altcode = NULL }, /* 0x13aa */ + { .altcode = NULL }, /* 0x13ab */ + { .altcode = NULL }, /* 0x13ac */ + { .altcode = NULL }, /* 0x13ad */ + { .altcode = NULL }, /* 0x13ae */ + { .altcode = NULL }, /* 0x13af */ + { .altcode = NULL }, /* 0x13b0 */ + { .altcode = NULL }, /* 0x13b1 */ + { .altcode = NULL }, /* 0x13b2 */ + { .altcode = NULL }, /* 0x13b3 */ + { .altcode = NULL }, /* 0x13b4 */ + { .altcode = NULL }, /* 0x13b5 */ + { .altcode = NULL }, /* 0x13b6 */ + { .altcode = NULL }, /* 0x13b7 */ + { .altcode = NULL }, /* 0x13b8 */ + { .altcode = NULL }, /* 0x13b9 */ + { .altcode = NULL }, /* 0x13ba */ + { .altcode = NULL }, /* 0x13bb */ + { .altcode = NULL }, /* 0x13bc (OE) */ + { .altcode = NULL }, /* 0x13bd (oe) */ + { .altcode = NULL }, /* 0x13be (Ydiaeresis) */ + { .altcode = NULL }, /* 0x13bf */ + { .altcode = NULL }, /* 0x13c0 */ + { .altcode = NULL }, /* 0x13c1 */ + { .altcode = NULL }, /* 0x13c2 */ + { .altcode = NULL }, /* 0x13c3 */ + { .altcode = NULL }, /* 0x13c4 */ + { .altcode = NULL }, /* 0x13c5 */ + { .altcode = NULL }, /* 0x13c6 */ + { .altcode = NULL }, /* 0x13c7 */ + { .altcode = NULL }, /* 0x13c8 */ + { .altcode = NULL }, /* 0x13c9 */ + { .altcode = NULL }, /* 0x13ca */ + { .altcode = NULL }, /* 0x13cb */ + { .altcode = NULL }, /* 0x13cc */ + { .altcode = NULL }, /* 0x13cd */ + { .altcode = NULL }, /* 0x13ce */ + { .altcode = NULL }, /* 0x13cf */ + { .altcode = NULL }, /* 0x13d0 */ + { .altcode = NULL }, /* 0x13d1 */ + { .altcode = NULL }, /* 0x13d2 */ + { .altcode = NULL }, /* 0x13d3 */ + { .altcode = NULL }, /* 0x13d4 */ + { .altcode = NULL }, /* 0x13d5 */ + { .altcode = NULL }, /* 0x13d6 */ + { .altcode = NULL }, /* 0x13d7 */ + { .altcode = NULL }, /* 0x13d8 */ + { .altcode = NULL }, /* 0x13d9 */ + { .altcode = NULL }, /* 0x13da */ + { .altcode = NULL }, /* 0x13db */ + { .altcode = NULL }, /* 0x13dc */ + { .altcode = NULL }, /* 0x13dd */ + { .altcode = NULL }, /* 0x13de */ + { .altcode = NULL }, /* 0x13df */ + { .altcode = NULL }, /* 0x13e0 */ + { .altcode = NULL }, /* 0x13e1 */ + { .altcode = NULL }, /* 0x13e2 */ + { .altcode = NULL }, /* 0x13e3 */ + { .altcode = NULL }, /* 0x13e4 */ + { .altcode = NULL }, /* 0x13e5 */ + { .altcode = NULL }, /* 0x13e6 */ + { .altcode = NULL }, /* 0x13e7 */ + { .altcode = NULL }, /* 0x13e8 */ + { .altcode = NULL }, /* 0x13e9 */ + { .altcode = NULL }, /* 0x13ea */ + { .altcode = NULL }, /* 0x13eb */ + { .altcode = NULL }, /* 0x13ec */ + { .altcode = NULL }, /* 0x13ed */ + { .altcode = NULL }, /* 0x13ee */ + { .altcode = NULL }, /* 0x13ef */ + { .altcode = NULL }, /* 0x13f0 */ + { .altcode = NULL }, /* 0x13f1 */ + { .altcode = NULL }, /* 0x13f2 */ + { .altcode = NULL }, /* 0x13f3 */ + { .altcode = NULL }, /* 0x13f4 */ + { .altcode = NULL }, /* 0x13f5 */ + { .altcode = NULL }, /* 0x13f6 */ + { .altcode = NULL }, /* 0x13f7 */ + { .altcode = NULL }, /* 0x13f8 */ + { .altcode = NULL }, /* 0x13f9 */ + { .altcode = NULL }, /* 0x13fa */ + { .altcode = NULL }, /* 0x13fb */ + { .altcode = NULL }, /* 0x13fc */ + { .altcode = NULL }, /* 0x13fd */ + { .altcode = NULL }, /* 0x13fe */ + { .altcode = NULL }, /* 0x13ff */ }, - {{NULL}}, /* 0x14?? */ - {{NULL}}, /* 0x15?? */ - {{NULL}}, /* 0x16?? */ - {{NULL}}, /* 0x17?? */ - {{NULL}}, /* 0x18?? */ - {{NULL}}, /* 0x19?? */ - {{NULL}}, /* 0x1a?? */ - {{NULL}}, /* 0x1b?? */ - {{NULL}}, /* 0x1c?? */ - {{NULL}}, /* 0x1d?? */ - {{NULL}}, /* 0x1e?? */ - {{NULL}}, /* 0x1f?? */ + {{NULL }}, /* 0x14?? */ + {{NULL }}, /* 0x15?? */ + {{NULL }}, /* 0x16?? */ + {{NULL }}, /* 0x17?? */ + {{NULL }}, /* 0x18?? */ + {{NULL }}, /* 0x19?? */ + {{NULL }}, /* 0x1a?? */ + {{NULL }}, /* 0x1b?? */ + {{NULL }}, /* 0x1c?? */ + {{NULL }}, /* 0x1d?? */ + {{NULL }}, /* 0x1e?? */ + {{NULL }}, /* 0x1f?? */ { /* 0x20?? */ - { .altcode = NULL }, /* 0x2000 */ - { .altcode = NULL }, /* 0x2001 */ - { .altcode = NULL }, /* 0x2002 */ - { .altcode = NULL }, /* 0x2003 */ - { .altcode = NULL }, /* 0x2004 */ - { .altcode = NULL }, /* 0x2005 */ - { .altcode = NULL }, /* 0x2006 */ - { .altcode = NULL }, /* 0x2007 */ - { .altcode = NULL }, /* 0x2008 */ - { .altcode = NULL }, /* 0x2009 */ - { .altcode = NULL }, /* 0x200a */ - { .altcode = NULL }, /* 0x200b */ - { .altcode = NULL }, /* 0x200c */ - { .altcode = NULL }, /* 0x200d */ - { .altcode = NULL }, /* 0x200e */ - { .altcode = NULL }, /* 0x200f */ - { .altcode = NULL }, /* 0x2010 */ - { .altcode = NULL }, /* 0x2011 */ - { .altcode = NULL }, /* 0x2012 */ - { .altcode = NULL }, /* 0x2013 */ - { .altcode = NULL }, /* 0x2014 */ - { .altcode = NULL }, /* 0x2015 */ - { .altcode = NULL }, /* 0x2016 */ - { .altcode = NULL }, /* 0x2017 */ - { .altcode = NULL }, /* 0x2018 */ - { .altcode = NULL }, /* 0x2019 */ - { .altcode = NULL }, /* 0x201a */ - { .altcode = NULL }, /* 0x201b */ - { .altcode = NULL }, /* 0x201c */ - { .altcode = NULL }, /* 0x201d */ - { .altcode = NULL }, /* 0x201e */ - { .altcode = NULL }, /* 0x201f */ - { .altcode = NULL }, /* 0x2020 */ - { .altcode = NULL }, /* 0x2021 */ - { .altcode = NULL }, /* 0x2022 */ - { .altcode = NULL }, /* 0x2023 */ - { .altcode = NULL }, /* 0x2024 */ - { .altcode = NULL }, /* 0x2025 */ - { .altcode = NULL }, /* 0x2026 */ - { .altcode = NULL }, /* 0x2027 */ - { .altcode = NULL }, /* 0x2028 */ - { .altcode = NULL }, /* 0x2029 */ - { .altcode = NULL }, /* 0x202a */ - { .altcode = NULL }, /* 0x202b */ - { .altcode = NULL }, /* 0x202c */ - { .altcode = NULL }, /* 0x202d */ - { .altcode = NULL }, /* 0x202e */ - { .altcode = NULL }, /* 0x202f */ - { .altcode = NULL }, /* 0x2030 */ - { .altcode = NULL }, /* 0x2031 */ - { .altcode = NULL }, /* 0x2032 */ - { .altcode = NULL }, /* 0x2033 */ - { .altcode = NULL }, /* 0x2034 */ - { .altcode = NULL }, /* 0x2035 */ - { .altcode = NULL }, /* 0x2036 */ - { .altcode = NULL }, /* 0x2037 */ - { .altcode = NULL }, /* 0x2038 */ - { .altcode = NULL }, /* 0x2039 */ - { .altcode = NULL }, /* 0x203a */ - { .altcode = NULL }, /* 0x203b */ - { .altcode = NULL }, /* 0x203c */ - { .altcode = NULL }, /* 0x203d */ - { .altcode = NULL }, /* 0x203e */ - { .altcode = NULL }, /* 0x203f */ - { .altcode = NULL }, /* 0x2040 */ - { .altcode = NULL }, /* 0x2041 */ - { .altcode = NULL }, /* 0x2042 */ - { .altcode = NULL }, /* 0x2043 */ - { .altcode = NULL }, /* 0x2044 */ - { .altcode = NULL }, /* 0x2045 */ - { .altcode = NULL }, /* 0x2046 */ - { .altcode = NULL }, /* 0x2047 */ - { .altcode = NULL }, /* 0x2048 */ - { .altcode = NULL }, /* 0x2049 */ - { .altcode = NULL }, /* 0x204a */ - { .altcode = NULL }, /* 0x204b */ - { .altcode = NULL }, /* 0x204c */ - { .altcode = NULL }, /* 0x204d */ - { .altcode = NULL }, /* 0x204e */ - { .altcode = NULL }, /* 0x204f */ - { .altcode = NULL }, /* 0x2050 */ - { .altcode = NULL }, /* 0x2051 */ - { .altcode = NULL }, /* 0x2052 */ - { .altcode = NULL }, /* 0x2053 */ - { .altcode = NULL }, /* 0x2054 */ - { .altcode = NULL }, /* 0x2055 */ - { .altcode = NULL }, /* 0x2056 */ - { .altcode = NULL }, /* 0x2057 */ - { .altcode = NULL }, /* 0x2058 */ - { .altcode = NULL }, /* 0x2059 */ - { .altcode = NULL }, /* 0x205a */ - { .altcode = NULL }, /* 0x205b */ - { .altcode = NULL }, /* 0x205c */ - { .altcode = NULL }, /* 0x205d */ - { .altcode = NULL }, /* 0x205e */ - { .altcode = NULL }, /* 0x205f */ - { .altcode = NULL }, /* 0x2060 */ - { .altcode = NULL }, /* 0x2061 */ - { .altcode = NULL }, /* 0x2062 */ - { .altcode = NULL }, /* 0x2063 */ - { .altcode = NULL }, /* 0x2064 */ - { .altcode = NULL }, /* 0x2065 */ - { .altcode = NULL }, /* 0x2066 */ - { .altcode = NULL }, /* 0x2067 */ - { .altcode = NULL }, /* 0x2068 */ - { .altcode = NULL }, /* 0x2069 */ - { .altcode = NULL }, /* 0x206a */ - { .altcode = NULL }, /* 0x206b */ - { .altcode = NULL }, /* 0x206c */ - { .altcode = NULL }, /* 0x206d */ - { .altcode = NULL }, /* 0x206e */ - { .altcode = NULL }, /* 0x206f */ - { .altcode = NULL }, /* 0x2070 */ - { .altcode = NULL }, /* 0x2071 */ - { .altcode = NULL }, /* 0x2072 */ - { .altcode = NULL }, /* 0x2073 */ - { .altcode = NULL }, /* 0x2074 */ - { .altcode = NULL }, /* 0x2075 */ - { .altcode = NULL }, /* 0x2076 */ - { .altcode = NULL }, /* 0x2077 */ - { .altcode = NULL }, /* 0x2078 */ - { .altcode = NULL }, /* 0x2079 */ - { .altcode = NULL }, /* 0x207a */ - { .altcode = NULL }, /* 0x207b */ - { .altcode = NULL }, /* 0x207c */ - { .altcode = NULL }, /* 0x207d */ - { .altcode = NULL }, /* 0x207e */ - { .altcode = NULL }, /* 0x207f */ - { .altcode = NULL }, /* 0x2080 */ - { .altcode = NULL }, /* 0x2081 */ - { .altcode = NULL }, /* 0x2082 */ - { .altcode = NULL }, /* 0x2083 */ - { .altcode = NULL }, /* 0x2084 */ - { .altcode = NULL }, /* 0x2085 */ - { .altcode = NULL }, /* 0x2086 */ - { .altcode = NULL }, /* 0x2087 */ - { .altcode = NULL }, /* 0x2088 */ - { .altcode = NULL }, /* 0x2089 */ - { .altcode = NULL }, /* 0x208a */ - { .altcode = NULL }, /* 0x208b */ - { .altcode = NULL }, /* 0x208c */ - { .altcode = NULL }, /* 0x208d */ - { .altcode = NULL }, /* 0x208e */ - { .altcode = NULL }, /* 0x208f */ - { .altcode = NULL }, /* 0x2090 */ - { .altcode = NULL }, /* 0x2091 */ - { .altcode = NULL }, /* 0x2092 */ - { .altcode = NULL }, /* 0x2093 */ - { .altcode = NULL }, /* 0x2094 */ - { .altcode = NULL }, /* 0x2095 */ - { .altcode = NULL }, /* 0x2096 */ - { .altcode = NULL }, /* 0x2097 */ - { .altcode = NULL }, /* 0x2098 */ - { .altcode = NULL }, /* 0x2099 */ - { .altcode = NULL }, /* 0x209a */ - { .altcode = NULL }, /* 0x209b */ - { .altcode = NULL }, /* 0x209c */ - { .altcode = NULL }, /* 0x209d */ - { .altcode = NULL }, /* 0x209e */ - { .altcode = NULL }, /* 0x209f */ - { .altcode = NULL }, /* 0x20a0 */ - { .altcode = NULL }, /* 0x20a1 */ - { .altcode = NULL }, /* 0x20a2 */ - { .altcode = NULL }, /* 0x20a3 */ - { .altcode = NULL }, /* 0x20a4 */ - { .altcode = NULL }, /* 0x20a5 */ - { .altcode = NULL }, /* 0x20a6 */ - { .altcode = NULL }, /* 0x20a7 */ - { .altcode = NULL }, /* 0x20a8 */ - { .altcode = NULL }, /* 0x20a9 */ - { .altcode = NULL }, /* 0x20aa */ - { .altcode = NULL }, /* 0x20ab */ - { .altcode = NULL }, /* 0x20ac (EuroSign) */ - { .altcode = NULL }, /* 0x20ad */ - { .altcode = NULL }, /* 0x20ae */ - { .altcode = NULL }, /* 0x20af */ - { .altcode = NULL }, /* 0x20b0 */ - { .altcode = NULL }, /* 0x20b1 */ - { .altcode = NULL }, /* 0x20b2 */ - { .altcode = NULL }, /* 0x20b3 */ - { .altcode = NULL }, /* 0x20b4 */ - { .altcode = NULL }, /* 0x20b5 */ - { .altcode = NULL }, /* 0x20b6 */ - { .altcode = NULL }, /* 0x20b7 */ - { .altcode = NULL }, /* 0x20b8 */ - { .altcode = NULL }, /* 0x20b9 */ - { .altcode = NULL }, /* 0x20ba */ - { .altcode = NULL }, /* 0x20bb */ - { .altcode = NULL }, /* 0x20bc */ - { .altcode = NULL }, /* 0x20bd */ - { .altcode = NULL }, /* 0x20be */ - { .altcode = NULL }, /* 0x20bf */ - { .altcode = NULL }, /* 0x20c0 */ - { .altcode = NULL }, /* 0x20c1 */ - { .altcode = NULL }, /* 0x20c2 */ - { .altcode = NULL }, /* 0x20c3 */ - { .altcode = NULL }, /* 0x20c4 */ - { .altcode = NULL }, /* 0x20c5 */ - { .altcode = NULL }, /* 0x20c6 */ - { .altcode = NULL }, /* 0x20c7 */ - { .altcode = NULL }, /* 0x20c8 */ - { .altcode = NULL }, /* 0x20c9 */ - { .altcode = NULL }, /* 0x20ca */ - { .altcode = NULL }, /* 0x20cb */ - { .altcode = NULL }, /* 0x20cc */ - { .altcode = NULL }, /* 0x20cd */ - { .altcode = NULL }, /* 0x20ce */ - { .altcode = NULL }, /* 0x20cf */ - { .altcode = NULL }, /* 0x20d0 */ - { .altcode = NULL }, /* 0x20d1 */ - { .altcode = NULL }, /* 0x20d2 */ - { .altcode = NULL }, /* 0x20d3 */ - { .altcode = NULL }, /* 0x20d4 */ - { .altcode = NULL }, /* 0x20d5 */ - { .altcode = NULL }, /* 0x20d6 */ - { .altcode = NULL }, /* 0x20d7 */ - { .altcode = NULL }, /* 0x20d8 */ - { .altcode = NULL }, /* 0x20d9 */ - { .altcode = NULL }, /* 0x20da */ - { .altcode = NULL }, /* 0x20db */ - { .altcode = NULL }, /* 0x20dc */ - { .altcode = NULL }, /* 0x20dd */ - { .altcode = NULL }, /* 0x20de */ - { .altcode = NULL }, /* 0x20df */ - { .altcode = NULL }, /* 0x20e0 */ - { .altcode = NULL }, /* 0x20e1 */ - { .altcode = NULL }, /* 0x20e2 */ - { .altcode = NULL }, /* 0x20e3 */ - { .altcode = NULL }, /* 0x20e4 */ - { .altcode = NULL }, /* 0x20e5 */ - { .altcode = NULL }, /* 0x20e6 */ - { .altcode = NULL }, /* 0x20e7 */ - { .altcode = NULL }, /* 0x20e8 */ - { .altcode = NULL }, /* 0x20e9 */ - { .altcode = NULL }, /* 0x20ea */ - { .altcode = NULL }, /* 0x20eb */ - { .altcode = NULL }, /* 0x20ec */ - { .altcode = NULL }, /* 0x20ed */ - { .altcode = NULL }, /* 0x20ee */ - { .altcode = NULL }, /* 0x20ef */ - { .altcode = NULL }, /* 0x20f0 */ - { .altcode = NULL }, /* 0x20f1 */ - { .altcode = NULL }, /* 0x20f2 */ - { .altcode = NULL }, /* 0x20f3 */ - { .altcode = NULL }, /* 0x20f4 */ - { .altcode = NULL }, /* 0x20f5 */ - { .altcode = NULL }, /* 0x20f6 */ - { .altcode = NULL }, /* 0x20f7 */ - { .altcode = NULL }, /* 0x20f8 */ - { .altcode = NULL }, /* 0x20f9 */ - { .altcode = NULL }, /* 0x20fa */ - { .altcode = NULL }, /* 0x20fb */ - { .altcode = NULL }, /* 0x20fc */ - { .altcode = NULL }, /* 0x20fd */ - { .altcode = NULL }, /* 0x20fe */ - { .altcode = NULL }, /* 0x20ff */ + { .altcode = NULL }, /* 0x2000 */ + { .altcode = NULL }, /* 0x2001 */ + { .altcode = NULL }, /* 0x2002 */ + { .altcode = NULL }, /* 0x2003 */ + { .altcode = NULL }, /* 0x2004 */ + { .altcode = NULL }, /* 0x2005 */ + { .altcode = NULL }, /* 0x2006 */ + { .altcode = NULL }, /* 0x2007 */ + { .altcode = NULL }, /* 0x2008 */ + { .altcode = NULL }, /* 0x2009 */ + { .altcode = NULL }, /* 0x200a */ + { .altcode = NULL }, /* 0x200b */ + { .altcode = NULL }, /* 0x200c */ + { .altcode = NULL }, /* 0x200d */ + { .altcode = NULL }, /* 0x200e */ + { .altcode = NULL }, /* 0x200f */ + { .altcode = NULL }, /* 0x2010 */ + { .altcode = NULL }, /* 0x2011 */ + { .altcode = NULL }, /* 0x2012 */ + { .altcode = NULL }, /* 0x2013 */ + { .altcode = NULL }, /* 0x2014 */ + { .altcode = NULL }, /* 0x2015 */ + { .altcode = NULL }, /* 0x2016 */ + { .altcode = NULL }, /* 0x2017 */ + { .altcode = NULL }, /* 0x2018 */ + { .altcode = NULL }, /* 0x2019 */ + { .altcode = NULL }, /* 0x201a */ + { .altcode = NULL }, /* 0x201b */ + { .altcode = NULL }, /* 0x201c */ + { .altcode = NULL }, /* 0x201d */ + { .altcode = NULL }, /* 0x201e */ + { .altcode = NULL }, /* 0x201f */ + { .altcode = NULL }, /* 0x2020 */ + { .altcode = NULL }, /* 0x2021 */ + { .altcode = NULL }, /* 0x2022 */ + { .altcode = NULL }, /* 0x2023 */ + { .altcode = NULL }, /* 0x2024 */ + { .altcode = NULL }, /* 0x2025 */ + { .altcode = NULL }, /* 0x2026 */ + { .altcode = NULL }, /* 0x2027 */ + { .altcode = NULL }, /* 0x2028 */ + { .altcode = NULL }, /* 0x2029 */ + { .altcode = NULL }, /* 0x202a */ + { .altcode = NULL }, /* 0x202b */ + { .altcode = NULL }, /* 0x202c */ + { .altcode = NULL }, /* 0x202d */ + { .altcode = NULL }, /* 0x202e */ + { .altcode = NULL }, /* 0x202f */ + { .altcode = NULL }, /* 0x2030 */ + { .altcode = NULL }, /* 0x2031 */ + { .altcode = NULL }, /* 0x2032 */ + { .altcode = NULL }, /* 0x2033 */ + { .altcode = NULL }, /* 0x2034 */ + { .altcode = NULL }, /* 0x2035 */ + { .altcode = NULL }, /* 0x2036 */ + { .altcode = NULL }, /* 0x2037 */ + { .altcode = NULL }, /* 0x2038 */ + { .altcode = NULL }, /* 0x2039 */ + { .altcode = NULL }, /* 0x203a */ + { .altcode = NULL }, /* 0x203b */ + { .altcode = NULL }, /* 0x203c */ + { .altcode = NULL }, /* 0x203d */ + { .altcode = NULL }, /* 0x203e */ + { .altcode = NULL }, /* 0x203f */ + { .altcode = NULL }, /* 0x2040 */ + { .altcode = NULL }, /* 0x2041 */ + { .altcode = NULL }, /* 0x2042 */ + { .altcode = NULL }, /* 0x2043 */ + { .altcode = NULL }, /* 0x2044 */ + { .altcode = NULL }, /* 0x2045 */ + { .altcode = NULL }, /* 0x2046 */ + { .altcode = NULL }, /* 0x2047 */ + { .altcode = NULL }, /* 0x2048 */ + { .altcode = NULL }, /* 0x2049 */ + { .altcode = NULL }, /* 0x204a */ + { .altcode = NULL }, /* 0x204b */ + { .altcode = NULL }, /* 0x204c */ + { .altcode = NULL }, /* 0x204d */ + { .altcode = NULL }, /* 0x204e */ + { .altcode = NULL }, /* 0x204f */ + { .altcode = NULL }, /* 0x2050 */ + { .altcode = NULL }, /* 0x2051 */ + { .altcode = NULL }, /* 0x2052 */ + { .altcode = NULL }, /* 0x2053 */ + { .altcode = NULL }, /* 0x2054 */ + { .altcode = NULL }, /* 0x2055 */ + { .altcode = NULL }, /* 0x2056 */ + { .altcode = NULL }, /* 0x2057 */ + { .altcode = NULL }, /* 0x2058 */ + { .altcode = NULL }, /* 0x2059 */ + { .altcode = NULL }, /* 0x205a */ + { .altcode = NULL }, /* 0x205b */ + { .altcode = NULL }, /* 0x205c */ + { .altcode = NULL }, /* 0x205d */ + { .altcode = NULL }, /* 0x205e */ + { .altcode = NULL }, /* 0x205f */ + { .altcode = NULL }, /* 0x2060 */ + { .altcode = NULL }, /* 0x2061 */ + { .altcode = NULL }, /* 0x2062 */ + { .altcode = NULL }, /* 0x2063 */ + { .altcode = NULL }, /* 0x2064 */ + { .altcode = NULL }, /* 0x2065 */ + { .altcode = NULL }, /* 0x2066 */ + { .altcode = NULL }, /* 0x2067 */ + { .altcode = NULL }, /* 0x2068 */ + { .altcode = NULL }, /* 0x2069 */ + { .altcode = NULL }, /* 0x206a */ + { .altcode = NULL }, /* 0x206b */ + { .altcode = NULL }, /* 0x206c */ + { .altcode = NULL }, /* 0x206d */ + { .altcode = NULL }, /* 0x206e */ + { .altcode = NULL }, /* 0x206f */ + { .altcode = NULL }, /* 0x2070 */ + { .altcode = NULL }, /* 0x2071 */ + { .altcode = NULL }, /* 0x2072 */ + { .altcode = NULL }, /* 0x2073 */ + { .altcode = NULL }, /* 0x2074 */ + { .altcode = NULL }, /* 0x2075 */ + { .altcode = NULL }, /* 0x2076 */ + { .altcode = NULL }, /* 0x2077 */ + { .altcode = NULL }, /* 0x2078 */ + { .altcode = NULL }, /* 0x2079 */ + { .altcode = NULL }, /* 0x207a */ + { .altcode = NULL }, /* 0x207b */ + { .altcode = NULL }, /* 0x207c */ + { .altcode = NULL }, /* 0x207d */ + { .altcode = NULL }, /* 0x207e */ + { .altcode = NULL }, /* 0x207f */ + { .altcode = NULL }, /* 0x2080 */ + { .altcode = NULL }, /* 0x2081 */ + { .altcode = NULL }, /* 0x2082 */ + { .altcode = NULL }, /* 0x2083 */ + { .altcode = NULL }, /* 0x2084 */ + { .altcode = NULL }, /* 0x2085 */ + { .altcode = NULL }, /* 0x2086 */ + { .altcode = NULL }, /* 0x2087 */ + { .altcode = NULL }, /* 0x2088 */ + { .altcode = NULL }, /* 0x2089 */ + { .altcode = NULL }, /* 0x208a */ + { .altcode = NULL }, /* 0x208b */ + { .altcode = NULL }, /* 0x208c */ + { .altcode = NULL }, /* 0x208d */ + { .altcode = NULL }, /* 0x208e */ + { .altcode = NULL }, /* 0x208f */ + { .altcode = NULL }, /* 0x2090 */ + { .altcode = NULL }, /* 0x2091 */ + { .altcode = NULL }, /* 0x2092 */ + { .altcode = NULL }, /* 0x2093 */ + { .altcode = NULL }, /* 0x2094 */ + { .altcode = NULL }, /* 0x2095 */ + { .altcode = NULL }, /* 0x2096 */ + { .altcode = NULL }, /* 0x2097 */ + { .altcode = NULL }, /* 0x2098 */ + { .altcode = NULL }, /* 0x2099 */ + { .altcode = NULL }, /* 0x209a */ + { .altcode = NULL }, /* 0x209b */ + { .altcode = NULL }, /* 0x209c */ + { .altcode = NULL }, /* 0x209d */ + { .altcode = NULL }, /* 0x209e */ + { .altcode = NULL }, /* 0x209f */ + { .altcode = NULL }, /* 0x20a0 */ + { .altcode = NULL }, /* 0x20a1 */ + { .altcode = NULL }, /* 0x20a2 */ + { .altcode = NULL }, /* 0x20a3 */ + { .altcode = NULL }, /* 0x20a4 */ + { .altcode = NULL }, /* 0x20a5 */ + { .altcode = NULL }, /* 0x20a6 */ + { .altcode = NULL }, /* 0x20a7 */ + { .altcode = NULL }, /* 0x20a8 */ + { .altcode = NULL }, /* 0x20a9 */ + { .altcode = NULL }, /* 0x20aa */ + { .altcode = NULL }, /* 0x20ab */ + { .altcode = NULL }, /* 0x20ac (EuroSign) */ + { .altcode = NULL }, /* 0x20ad */ + { .altcode = NULL }, /* 0x20ae */ + { .altcode = NULL }, /* 0x20af */ + { .altcode = NULL }, /* 0x20b0 */ + { .altcode = NULL }, /* 0x20b1 */ + { .altcode = NULL }, /* 0x20b2 */ + { .altcode = NULL }, /* 0x20b3 */ + { .altcode = NULL }, /* 0x20b4 */ + { .altcode = NULL }, /* 0x20b5 */ + { .altcode = NULL }, /* 0x20b6 */ + { .altcode = NULL }, /* 0x20b7 */ + { .altcode = NULL }, /* 0x20b8 */ + { .altcode = NULL }, /* 0x20b9 */ + { .altcode = NULL }, /* 0x20ba */ + { .altcode = NULL }, /* 0x20bb */ + { .altcode = NULL }, /* 0x20bc */ + { .altcode = NULL }, /* 0x20bd */ + { .altcode = NULL }, /* 0x20be */ + { .altcode = NULL }, /* 0x20bf */ + { .altcode = NULL }, /* 0x20c0 */ + { .altcode = NULL }, /* 0x20c1 */ + { .altcode = NULL }, /* 0x20c2 */ + { .altcode = NULL }, /* 0x20c3 */ + { .altcode = NULL }, /* 0x20c4 */ + { .altcode = NULL }, /* 0x20c5 */ + { .altcode = NULL }, /* 0x20c6 */ + { .altcode = NULL }, /* 0x20c7 */ + { .altcode = NULL }, /* 0x20c8 */ + { .altcode = NULL }, /* 0x20c9 */ + { .altcode = NULL }, /* 0x20ca */ + { .altcode = NULL }, /* 0x20cb */ + { .altcode = NULL }, /* 0x20cc */ + { .altcode = NULL }, /* 0x20cd */ + { .altcode = NULL }, /* 0x20ce */ + { .altcode = NULL }, /* 0x20cf */ + { .altcode = NULL }, /* 0x20d0 */ + { .altcode = NULL }, /* 0x20d1 */ + { .altcode = NULL }, /* 0x20d2 */ + { .altcode = NULL }, /* 0x20d3 */ + { .altcode = NULL }, /* 0x20d4 */ + { .altcode = NULL }, /* 0x20d5 */ + { .altcode = NULL }, /* 0x20d6 */ + { .altcode = NULL }, /* 0x20d7 */ + { .altcode = NULL }, /* 0x20d8 */ + { .altcode = NULL }, /* 0x20d9 */ + { .altcode = NULL }, /* 0x20da */ + { .altcode = NULL }, /* 0x20db */ + { .altcode = NULL }, /* 0x20dc */ + { .altcode = NULL }, /* 0x20dd */ + { .altcode = NULL }, /* 0x20de */ + { .altcode = NULL }, /* 0x20df */ + { .altcode = NULL }, /* 0x20e0 */ + { .altcode = NULL }, /* 0x20e1 */ + { .altcode = NULL }, /* 0x20e2 */ + { .altcode = NULL }, /* 0x20e3 */ + { .altcode = NULL }, /* 0x20e4 */ + { .altcode = NULL }, /* 0x20e5 */ + { .altcode = NULL }, /* 0x20e6 */ + { .altcode = NULL }, /* 0x20e7 */ + { .altcode = NULL }, /* 0x20e8 */ + { .altcode = NULL }, /* 0x20e9 */ + { .altcode = NULL }, /* 0x20ea */ + { .altcode = NULL }, /* 0x20eb */ + { .altcode = NULL }, /* 0x20ec */ + { .altcode = NULL }, /* 0x20ed */ + { .altcode = NULL }, /* 0x20ee */ + { .altcode = NULL }, /* 0x20ef */ + { .altcode = NULL }, /* 0x20f0 */ + { .altcode = NULL }, /* 0x20f1 */ + { .altcode = NULL }, /* 0x20f2 */ + { .altcode = NULL }, /* 0x20f3 */ + { .altcode = NULL }, /* 0x20f4 */ + { .altcode = NULL }, /* 0x20f5 */ + { .altcode = NULL }, /* 0x20f6 */ + { .altcode = NULL }, /* 0x20f7 */ + { .altcode = NULL }, /* 0x20f8 */ + { .altcode = NULL }, /* 0x20f9 */ + { .altcode = NULL }, /* 0x20fa */ + { .altcode = NULL }, /* 0x20fb */ + { .altcode = NULL }, /* 0x20fc */ + { .altcode = NULL }, /* 0x20fd */ + { .altcode = NULL }, /* 0x20fe */ + { .altcode = NULL }, /* 0x20ff */ }, - {{NULL}}, /* 0x21?? */ - {{NULL}}, /* 0x22?? */ - {{NULL}}, /* 0x23?? */ - {{NULL}}, /* 0x24?? */ - {{NULL}}, /* 0x25?? */ - {{NULL}}, /* 0x26?? */ - {{NULL}}, /* 0x27?? */ - {{NULL}}, /* 0x28?? */ - {{NULL}}, /* 0x29?? */ - {{NULL}}, /* 0x2a?? */ - {{NULL}}, /* 0x2b?? */ - {{NULL}}, /* 0x2c?? */ - {{NULL}}, /* 0x2d?? */ - {{NULL}}, /* 0x2e?? */ - {{NULL}}, /* 0x2f?? */ - {{NULL}}, /* 0x30?? */ - {{NULL}}, /* 0x31?? */ - {{NULL}}, /* 0x32?? */ - {{NULL}}, /* 0x33?? */ - {{NULL}}, /* 0x34?? */ - {{NULL}}, /* 0x35?? */ - {{NULL}}, /* 0x36?? */ - {{NULL}}, /* 0x37?? */ - {{NULL}}, /* 0x38?? */ - {{NULL}}, /* 0x39?? */ - {{NULL}}, /* 0x3a?? */ - {{NULL}}, /* 0x3b?? */ - {{NULL}}, /* 0x3c?? */ - {{NULL}}, /* 0x3d?? */ - {{NULL}}, /* 0x3e?? */ - {{NULL}}, /* 0x3f?? */ - {{NULL}}, /* 0x40?? */ - {{NULL}}, /* 0x41?? */ - {{NULL}}, /* 0x42?? */ - {{NULL}}, /* 0x43?? */ - {{NULL}}, /* 0x44?? */ - {{NULL}}, /* 0x45?? */ - {{NULL}}, /* 0x46?? */ - {{NULL}}, /* 0x47?? */ - {{NULL}}, /* 0x48?? */ - {{NULL}}, /* 0x49?? */ - {{NULL}}, /* 0x4a?? */ - {{NULL}}, /* 0x4b?? */ - {{NULL}}, /* 0x4c?? */ - {{NULL}}, /* 0x4d?? */ - {{NULL}}, /* 0x4e?? */ - {{NULL}}, /* 0x4f?? */ - {{NULL}}, /* 0x50?? */ - {{NULL}}, /* 0x51?? */ - {{NULL}}, /* 0x52?? */ - {{NULL}}, /* 0x53?? */ - {{NULL}}, /* 0x54?? */ - {{NULL}}, /* 0x55?? */ - {{NULL}}, /* 0x56?? */ - {{NULL}}, /* 0x57?? */ - {{NULL}}, /* 0x58?? */ - {{NULL}}, /* 0x59?? */ - {{NULL}}, /* 0x5a?? */ - {{NULL}}, /* 0x5b?? */ - {{NULL}}, /* 0x5c?? */ - {{NULL}}, /* 0x5d?? */ - {{NULL}}, /* 0x5e?? */ - {{NULL}}, /* 0x5f?? */ - {{NULL}}, /* 0x60?? */ - {{NULL}}, /* 0x61?? */ - {{NULL}}, /* 0x62?? */ - {{NULL}}, /* 0x63?? */ - {{NULL}}, /* 0x64?? */ - {{NULL}}, /* 0x65?? */ - {{NULL}}, /* 0x66?? */ - {{NULL}}, /* 0x67?? */ - {{NULL}}, /* 0x68?? */ - {{NULL}}, /* 0x69?? */ - {{NULL}}, /* 0x6a?? */ - {{NULL}}, /* 0x6b?? */ - {{NULL}}, /* 0x6c?? */ - {{NULL}}, /* 0x6d?? */ - {{NULL}}, /* 0x6e?? */ - {{NULL}}, /* 0x6f?? */ - {{NULL}}, /* 0x70?? */ - {{NULL}}, /* 0x71?? */ - {{NULL}}, /* 0x72?? */ - {{NULL}}, /* 0x73?? */ - {{NULL}}, /* 0x74?? */ - {{NULL}}, /* 0x75?? */ - {{NULL}}, /* 0x76?? */ - {{NULL}}, /* 0x77?? */ - {{NULL}}, /* 0x78?? */ - {{NULL}}, /* 0x79?? */ - {{NULL}}, /* 0x7a?? */ - {{NULL}}, /* 0x7b?? */ - {{NULL}}, /* 0x7c?? */ - {{NULL}}, /* 0x7d?? */ - {{NULL}}, /* 0x7e?? */ - {{NULL}}, /* 0x7f?? */ - {{NULL}}, /* 0x80?? */ - {{NULL}}, /* 0x81?? */ - {{NULL}}, /* 0x82?? */ - {{NULL}}, /* 0x83?? */ - {{NULL}}, /* 0x84?? */ - {{NULL}}, /* 0x85?? */ - {{NULL}}, /* 0x86?? */ - {{NULL}}, /* 0x87?? */ - {{NULL}}, /* 0x88?? */ - {{NULL}}, /* 0x89?? */ - {{NULL}}, /* 0x8a?? */ - {{NULL}}, /* 0x8b?? */ - {{NULL}}, /* 0x8c?? */ - {{NULL}}, /* 0x8d?? */ - {{NULL}}, /* 0x8e?? */ - {{NULL}}, /* 0x8f?? */ - {{NULL}}, /* 0x90?? */ - {{NULL}}, /* 0x91?? */ - {{NULL}}, /* 0x92?? */ - {{NULL}}, /* 0x93?? */ - {{NULL}}, /* 0x94?? */ - {{NULL}}, /* 0x95?? */ - {{NULL}}, /* 0x96?? */ - {{NULL}}, /* 0x97?? */ - {{NULL}}, /* 0x98?? */ - {{NULL}}, /* 0x99?? */ - {{NULL}}, /* 0x9a?? */ - {{NULL}}, /* 0x9b?? */ - {{NULL}}, /* 0x9c?? */ - {{NULL}}, /* 0x9d?? */ - {{NULL}}, /* 0x9e?? */ - {{NULL}}, /* 0x9f?? */ - {{NULL}}, /* 0xa0?? */ - {{NULL}}, /* 0xa1?? */ - {{NULL}}, /* 0xa2?? */ - {{NULL}}, /* 0xa3?? */ - {{NULL}}, /* 0xa4?? */ - {{NULL}}, /* 0xa5?? */ - {{NULL}}, /* 0xa6?? */ - {{NULL}}, /* 0xa7?? */ - {{NULL}}, /* 0xa8?? */ - {{NULL}}, /* 0xa9?? */ - {{NULL}}, /* 0xaa?? */ - {{NULL}}, /* 0xab?? */ - {{NULL}}, /* 0xac?? */ - {{NULL}}, /* 0xad?? */ - {{NULL}}, /* 0xae?? */ - {{NULL}}, /* 0xaf?? */ - {{NULL}}, /* 0xb0?? */ - {{NULL}}, /* 0xb1?? */ - {{NULL}}, /* 0xb2?? */ - {{NULL}}, /* 0xb3?? */ - {{NULL}}, /* 0xb4?? */ - {{NULL}}, /* 0xb5?? */ - {{NULL}}, /* 0xb6?? */ - {{NULL}}, /* 0xb7?? */ - {{NULL}}, /* 0xb8?? */ - {{NULL}}, /* 0xb9?? */ - {{NULL}}, /* 0xba?? */ - {{NULL}}, /* 0xbb?? */ - {{NULL}}, /* 0xbc?? */ - {{NULL}}, /* 0xbd?? */ - {{NULL}}, /* 0xbe?? */ - {{NULL}}, /* 0xbf?? */ - {{NULL}}, /* 0xc0?? */ - {{NULL}}, /* 0xc1?? */ - {{NULL}}, /* 0xc2?? */ - {{NULL}}, /* 0xc3?? */ - {{NULL}}, /* 0xc4?? */ - {{NULL}}, /* 0xc5?? */ - {{NULL}}, /* 0xc6?? */ - {{NULL}}, /* 0xc7?? */ - {{NULL}}, /* 0xc8?? */ - {{NULL}}, /* 0xc9?? */ - {{NULL}}, /* 0xca?? */ - {{NULL}}, /* 0xcb?? */ - {{NULL}}, /* 0xcc?? */ - {{NULL}}, /* 0xcd?? */ - {{NULL}}, /* 0xce?? */ - {{NULL}}, /* 0xcf?? */ - {{NULL}}, /* 0xd0?? */ - {{NULL}}, /* 0xd1?? */ - {{NULL}}, /* 0xd2?? */ - {{NULL}}, /* 0xd3?? */ - {{NULL}}, /* 0xd4?? */ - {{NULL}}, /* 0xd5?? */ - {{NULL}}, /* 0xd6?? */ - {{NULL}}, /* 0xd7?? */ - {{NULL}}, /* 0xd8?? */ - {{NULL}}, /* 0xd9?? */ - {{NULL}}, /* 0xda?? */ - {{NULL}}, /* 0xdb?? */ - {{NULL}}, /* 0xdc?? */ - {{NULL}}, /* 0xdd?? */ - {{NULL}}, /* 0xde?? */ - {{NULL}}, /* 0xdf?? */ - {{NULL}}, /* 0xe0?? */ - {{NULL}}, /* 0xe1?? */ - {{NULL}}, /* 0xe2?? */ - {{NULL}}, /* 0xe3?? */ - {{NULL}}, /* 0xe4?? */ - {{NULL}}, /* 0xe5?? */ - {{NULL}}, /* 0xe6?? */ - {{NULL}}, /* 0xe7?? */ - {{NULL}}, /* 0xe8?? */ - {{NULL}}, /* 0xe9?? */ - {{NULL}}, /* 0xea?? */ - {{NULL}}, /* 0xeb?? */ - {{NULL}}, /* 0xec?? */ - {{NULL}}, /* 0xed?? */ - {{NULL}}, /* 0xee?? */ - {{NULL}}, /* 0xef?? */ - {{NULL}}, /* 0xf0?? */ - {{NULL}}, /* 0xf1?? */ - {{NULL}}, /* 0xf2?? */ - {{NULL}}, /* 0xf3?? */ - {{NULL}}, /* 0xf4?? */ - {{NULL}}, /* 0xf5?? */ - {{NULL}}, /* 0xf6?? */ - {{NULL}}, /* 0xf7?? */ - {{NULL}}, /* 0xf8?? */ - {{NULL}}, /* 0xf9?? */ - {{NULL}}, /* 0xfa?? */ - {{NULL}}, /* 0xfb?? */ - {{NULL}}, /* 0xfc?? */ + {{NULL }}, /* 0x21?? */ + {{NULL }}, /* 0x22?? */ + {{NULL }}, /* 0x23?? */ + {{NULL }}, /* 0x24?? */ + {{NULL }}, /* 0x25?? */ + {{NULL }}, /* 0x26?? */ + {{NULL }}, /* 0x27?? */ + {{NULL }}, /* 0x28?? */ + {{NULL }}, /* 0x29?? */ + {{NULL }}, /* 0x2a?? */ + {{NULL }}, /* 0x2b?? */ + {{NULL }}, /* 0x2c?? */ + {{NULL }}, /* 0x2d?? */ + {{NULL }}, /* 0x2e?? */ + {{NULL }}, /* 0x2f?? */ + {{NULL }}, /* 0x30?? */ + {{NULL }}, /* 0x31?? */ + {{NULL }}, /* 0x32?? */ + {{NULL }}, /* 0x33?? */ + {{NULL }}, /* 0x34?? */ + {{NULL }}, /* 0x35?? */ + {{NULL }}, /* 0x36?? */ + {{NULL }}, /* 0x37?? */ + {{NULL }}, /* 0x38?? */ + {{NULL }}, /* 0x39?? */ + {{NULL }}, /* 0x3a?? */ + {{NULL }}, /* 0x3b?? */ + {{NULL }}, /* 0x3c?? */ + {{NULL }}, /* 0x3d?? */ + {{NULL }}, /* 0x3e?? */ + {{NULL }}, /* 0x3f?? */ + {{NULL }}, /* 0x40?? */ + {{NULL }}, /* 0x41?? */ + {{NULL }}, /* 0x42?? */ + {{NULL }}, /* 0x43?? */ + {{NULL }}, /* 0x44?? */ + {{NULL }}, /* 0x45?? */ + {{NULL }}, /* 0x46?? */ + {{NULL }}, /* 0x47?? */ + {{NULL }}, /* 0x48?? */ + {{NULL }}, /* 0x49?? */ + {{NULL }}, /* 0x4a?? */ + {{NULL }}, /* 0x4b?? */ + {{NULL }}, /* 0x4c?? */ + {{NULL }}, /* 0x4d?? */ + {{NULL }}, /* 0x4e?? */ + {{NULL }}, /* 0x4f?? */ + {{NULL }}, /* 0x50?? */ + {{NULL }}, /* 0x51?? */ + {{NULL }}, /* 0x52?? */ + {{NULL }}, /* 0x53?? */ + {{NULL }}, /* 0x54?? */ + {{NULL }}, /* 0x55?? */ + {{NULL }}, /* 0x56?? */ + {{NULL }}, /* 0x57?? */ + {{NULL }}, /* 0x58?? */ + {{NULL }}, /* 0x59?? */ + {{NULL }}, /* 0x5a?? */ + {{NULL }}, /* 0x5b?? */ + {{NULL }}, /* 0x5c?? */ + {{NULL }}, /* 0x5d?? */ + {{NULL }}, /* 0x5e?? */ + {{NULL }}, /* 0x5f?? */ + {{NULL }}, /* 0x60?? */ + {{NULL }}, /* 0x61?? */ + {{NULL }}, /* 0x62?? */ + {{NULL }}, /* 0x63?? */ + {{NULL }}, /* 0x64?? */ + {{NULL }}, /* 0x65?? */ + {{NULL }}, /* 0x66?? */ + {{NULL }}, /* 0x67?? */ + {{NULL }}, /* 0x68?? */ + {{NULL }}, /* 0x69?? */ + {{NULL }}, /* 0x6a?? */ + {{NULL }}, /* 0x6b?? */ + {{NULL }}, /* 0x6c?? */ + {{NULL }}, /* 0x6d?? */ + {{NULL }}, /* 0x6e?? */ + {{NULL }}, /* 0x6f?? */ + {{NULL }}, /* 0x70?? */ + {{NULL }}, /* 0x71?? */ + {{NULL }}, /* 0x72?? */ + {{NULL }}, /* 0x73?? */ + {{NULL }}, /* 0x74?? */ + {{NULL }}, /* 0x75?? */ + {{NULL }}, /* 0x76?? */ + {{NULL }}, /* 0x77?? */ + {{NULL }}, /* 0x78?? */ + {{NULL }}, /* 0x79?? */ + {{NULL }}, /* 0x7a?? */ + {{NULL }}, /* 0x7b?? */ + {{NULL }}, /* 0x7c?? */ + {{NULL }}, /* 0x7d?? */ + {{NULL }}, /* 0x7e?? */ + {{NULL }}, /* 0x7f?? */ + {{NULL }}, /* 0x80?? */ + {{NULL }}, /* 0x81?? */ + {{NULL }}, /* 0x82?? */ + {{NULL }}, /* 0x83?? */ + {{NULL }}, /* 0x84?? */ + {{NULL }}, /* 0x85?? */ + {{NULL }}, /* 0x86?? */ + {{NULL }}, /* 0x87?? */ + {{NULL }}, /* 0x88?? */ + {{NULL }}, /* 0x89?? */ + {{NULL }}, /* 0x8a?? */ + {{NULL }}, /* 0x8b?? */ + {{NULL }}, /* 0x8c?? */ + {{NULL }}, /* 0x8d?? */ + {{NULL }}, /* 0x8e?? */ + {{NULL }}, /* 0x8f?? */ + {{NULL }}, /* 0x90?? */ + {{NULL }}, /* 0x91?? */ + {{NULL }}, /* 0x92?? */ + {{NULL }}, /* 0x93?? */ + {{NULL }}, /* 0x94?? */ + {{NULL }}, /* 0x95?? */ + {{NULL }}, /* 0x96?? */ + {{NULL }}, /* 0x97?? */ + {{NULL }}, /* 0x98?? */ + {{NULL }}, /* 0x99?? */ + {{NULL }}, /* 0x9a?? */ + {{NULL }}, /* 0x9b?? */ + {{NULL }}, /* 0x9c?? */ + {{NULL }}, /* 0x9d?? */ + {{NULL }}, /* 0x9e?? */ + {{NULL }}, /* 0x9f?? */ + {{NULL }}, /* 0xa0?? */ + {{NULL }}, /* 0xa1?? */ + {{NULL }}, /* 0xa2?? */ + {{NULL }}, /* 0xa3?? */ + {{NULL }}, /* 0xa4?? */ + {{NULL }}, /* 0xa5?? */ + {{NULL }}, /* 0xa6?? */ + {{NULL }}, /* 0xa7?? */ + {{NULL }}, /* 0xa8?? */ + {{NULL }}, /* 0xa9?? */ + {{NULL }}, /* 0xaa?? */ + {{NULL }}, /* 0xab?? */ + {{NULL }}, /* 0xac?? */ + {{NULL }}, /* 0xad?? */ + {{NULL }}, /* 0xae?? */ + {{NULL }}, /* 0xaf?? */ + {{NULL }}, /* 0xb0?? */ + {{NULL }}, /* 0xb1?? */ + {{NULL }}, /* 0xb2?? */ + {{NULL }}, /* 0xb3?? */ + {{NULL }}, /* 0xb4?? */ + {{NULL }}, /* 0xb5?? */ + {{NULL }}, /* 0xb6?? */ + {{NULL }}, /* 0xb7?? */ + {{NULL }}, /* 0xb8?? */ + {{NULL }}, /* 0xb9?? */ + {{NULL }}, /* 0xba?? */ + {{NULL }}, /* 0xbb?? */ + {{NULL }}, /* 0xbc?? */ + {{NULL }}, /* 0xbd?? */ + {{NULL }}, /* 0xbe?? */ + {{NULL }}, /* 0xbf?? */ + {{NULL }}, /* 0xc0?? */ + {{NULL }}, /* 0xc1?? */ + {{NULL }}, /* 0xc2?? */ + {{NULL }}, /* 0xc3?? */ + {{NULL }}, /* 0xc4?? */ + {{NULL }}, /* 0xc5?? */ + {{NULL }}, /* 0xc6?? */ + {{NULL }}, /* 0xc7?? */ + {{NULL }}, /* 0xc8?? */ + {{NULL }}, /* 0xc9?? */ + {{NULL }}, /* 0xca?? */ + {{NULL }}, /* 0xcb?? */ + {{NULL }}, /* 0xcc?? */ + {{NULL }}, /* 0xcd?? */ + {{NULL }}, /* 0xce?? */ + {{NULL }}, /* 0xcf?? */ + {{NULL }}, /* 0xd0?? */ + {{NULL }}, /* 0xd1?? */ + {{NULL }}, /* 0xd2?? */ + {{NULL }}, /* 0xd3?? */ + {{NULL }}, /* 0xd4?? */ + {{NULL }}, /* 0xd5?? */ + {{NULL }}, /* 0xd6?? */ + {{NULL }}, /* 0xd7?? */ + {{NULL }}, /* 0xd8?? */ + {{NULL }}, /* 0xd9?? */ + {{NULL }}, /* 0xda?? */ + {{NULL }}, /* 0xdb?? */ + {{NULL }}, /* 0xdc?? */ + {{NULL }}, /* 0xdd?? */ + {{NULL }}, /* 0xde?? */ + {{NULL }}, /* 0xdf?? */ + {{NULL }}, /* 0xe0?? */ + {{NULL }}, /* 0xe1?? */ + {{NULL }}, /* 0xe2?? */ + {{NULL }}, /* 0xe3?? */ + {{NULL }}, /* 0xe4?? */ + {{NULL }}, /* 0xe5?? */ + {{NULL }}, /* 0xe6?? */ + {{NULL }}, /* 0xe7?? */ + {{NULL }}, /* 0xe8?? */ + {{NULL }}, /* 0xe9?? */ + {{NULL }}, /* 0xea?? */ + {{NULL }}, /* 0xeb?? */ + {{NULL }}, /* 0xec?? */ + {{NULL }}, /* 0xed?? */ + {{NULL }}, /* 0xee?? */ + {{NULL }}, /* 0xef?? */ + {{NULL }}, /* 0xf0?? */ + {{NULL }}, /* 0xf1?? */ + {{NULL }}, /* 0xf2?? */ + {{NULL }}, /* 0xf3?? */ + {{NULL }}, /* 0xf4?? */ + {{NULL }}, /* 0xf5?? */ + {{NULL }}, /* 0xf6?? */ + {{NULL }}, /* 0xf7?? */ + {{NULL }}, /* 0xf8?? */ + {{NULL }}, /* 0xf9?? */ + {{NULL }}, /* 0xfa?? */ + {{NULL }}, /* 0xfb?? */ + {{NULL }}, /* 0xfc?? */ { /* 0xfd?? */ - { .altcode = NULL }, /* 0xfd00 */ - { .altcode = NULL }, /* 0xfd01 (3270_Duplicate) */ - { .altcode = NULL }, /* 0xfd02 (3270_FieldMark) */ - { .altcode = NULL }, /* 0xfd03 (3270_Right2) */ - { .altcode = NULL }, /* 0xfd04 (3270_Left2) */ - { .altcode = NULL }, /* 0xfd05 (3270_BackTab) */ - { .altcode = NULL }, /* 0xfd06 (3270_EraseEOF) */ - { .altcode = NULL }, /* 0xfd07 (3270_EraseInput) */ - { .altcode = NULL }, /* 0xfd08 (3270_Reset) */ - { .altcode = NULL }, /* 0xfd09 (3270_Quit) */ - { .altcode = NULL }, /* 0xfd0a (3270_PA1) */ - { .altcode = NULL }, /* 0xfd0b (3270_PA2) */ - { .altcode = NULL }, /* 0xfd0c (3270_PA3) */ - { .altcode = NULL }, /* 0xfd0d (3270_Test) */ - { .altcode = NULL }, /* 0xfd0e (3270_Attn) */ - { .altcode = NULL }, /* 0xfd0f (3270_CursorBlink) */ - { .altcode = NULL }, /* 0xfd10 (3270_AltCursor) */ - { .altcode = NULL }, /* 0xfd11 (3270_KeyClick) */ - { .altcode = NULL }, /* 0xfd12 (3270_Jump) */ - { .altcode = NULL }, /* 0xfd13 (3270_Ident) */ - { .altcode = NULL }, /* 0xfd14 (3270_Rule) */ - { .altcode = NULL }, /* 0xfd15 (3270_Copy) */ - { .altcode = NULL }, /* 0xfd16 (3270_Play) */ - { .altcode = NULL }, /* 0xfd17 (3270_Setup) */ - { .altcode = NULL }, /* 0xfd18 (3270_Record) */ - { .altcode = NULL }, /* 0xfd19 (3270_ChangeScreen) */ - { .altcode = NULL }, /* 0xfd1a (3270_DeleteWord) */ - { .altcode = NULL }, /* 0xfd1b (3270_ExSelect) */ - { .altcode = NULL }, /* 0xfd1c (3270_CursorSelect) */ - { .altcode = NULL }, /* 0xfd1d (3270_PrintScreen) */ - { .altcode = NULL }, /* 0xfd1e (3270_Enter) */ - { .altcode = NULL }, /* 0xfd1f */ - { .altcode = NULL }, /* 0xfd20 */ - { .altcode = NULL }, /* 0xfd21 */ - { .altcode = NULL }, /* 0xfd22 */ - { .altcode = NULL }, /* 0xfd23 */ - { .altcode = NULL }, /* 0xfd24 */ - { .altcode = NULL }, /* 0xfd25 */ - { .altcode = NULL }, /* 0xfd26 */ - { .altcode = NULL }, /* 0xfd27 */ - { .altcode = NULL }, /* 0xfd28 */ - { .altcode = NULL }, /* 0xfd29 */ - { .altcode = NULL }, /* 0xfd2a */ - { .altcode = NULL }, /* 0xfd2b */ - { .altcode = NULL }, /* 0xfd2c */ - { .altcode = NULL }, /* 0xfd2d */ - { .altcode = NULL }, /* 0xfd2e */ - { .altcode = NULL }, /* 0xfd2f */ - { .altcode = NULL }, /* 0xfd30 */ - { .altcode = NULL }, /* 0xfd31 */ - { .altcode = NULL }, /* 0xfd32 */ - { .altcode = NULL }, /* 0xfd33 */ - { .altcode = NULL }, /* 0xfd34 */ - { .altcode = NULL }, /* 0xfd35 */ - { .altcode = NULL }, /* 0xfd36 */ - { .altcode = NULL }, /* 0xfd37 */ - { .altcode = NULL }, /* 0xfd38 */ - { .altcode = NULL }, /* 0xfd39 */ - { .altcode = NULL }, /* 0xfd3a */ - { .altcode = NULL }, /* 0xfd3b */ - { .altcode = NULL }, /* 0xfd3c */ - { .altcode = NULL }, /* 0xfd3d */ - { .altcode = NULL }, /* 0xfd3e */ - { .altcode = NULL }, /* 0xfd3f */ - { .altcode = NULL }, /* 0xfd40 */ - { .altcode = NULL }, /* 0xfd41 */ - { .altcode = NULL }, /* 0xfd42 */ - { .altcode = NULL }, /* 0xfd43 */ - { .altcode = NULL }, /* 0xfd44 */ - { .altcode = NULL }, /* 0xfd45 */ - { .altcode = NULL }, /* 0xfd46 */ - { .altcode = NULL }, /* 0xfd47 */ - { .altcode = NULL }, /* 0xfd48 */ - { .altcode = NULL }, /* 0xfd49 */ - { .altcode = NULL }, /* 0xfd4a */ - { .altcode = NULL }, /* 0xfd4b */ - { .altcode = NULL }, /* 0xfd4c */ - { .altcode = NULL }, /* 0xfd4d */ - { .altcode = NULL }, /* 0xfd4e */ - { .altcode = NULL }, /* 0xfd4f */ - { .altcode = NULL }, /* 0xfd50 */ - { .altcode = NULL }, /* 0xfd51 */ - { .altcode = NULL }, /* 0xfd52 */ - { .altcode = NULL }, /* 0xfd53 */ - { .altcode = NULL }, /* 0xfd54 */ - { .altcode = NULL }, /* 0xfd55 */ - { .altcode = NULL }, /* 0xfd56 */ - { .altcode = NULL }, /* 0xfd57 */ - { .altcode = NULL }, /* 0xfd58 */ - { .altcode = NULL }, /* 0xfd59 */ - { .altcode = NULL }, /* 0xfd5a */ - { .altcode = NULL }, /* 0xfd5b */ - { .altcode = NULL }, /* 0xfd5c */ - { .altcode = NULL }, /* 0xfd5d */ - { .altcode = NULL }, /* 0xfd5e */ - { .altcode = NULL }, /* 0xfd5f */ - { .altcode = NULL }, /* 0xfd60 */ - { .altcode = NULL }, /* 0xfd61 */ - { .altcode = NULL }, /* 0xfd62 */ - { .altcode = NULL }, /* 0xfd63 */ - { .altcode = NULL }, /* 0xfd64 */ - { .altcode = NULL }, /* 0xfd65 */ - { .altcode = NULL }, /* 0xfd66 */ - { .altcode = NULL }, /* 0xfd67 */ - { .altcode = NULL }, /* 0xfd68 */ - { .altcode = NULL }, /* 0xfd69 */ - { .altcode = NULL }, /* 0xfd6a */ - { .altcode = NULL }, /* 0xfd6b */ - { .altcode = NULL }, /* 0xfd6c */ - { .altcode = NULL }, /* 0xfd6d */ - { .altcode = NULL }, /* 0xfd6e */ - { .altcode = NULL }, /* 0xfd6f */ - { .altcode = NULL }, /* 0xfd70 */ - { .altcode = NULL }, /* 0xfd71 */ - { .altcode = NULL }, /* 0xfd72 */ - { .altcode = NULL }, /* 0xfd73 */ - { .altcode = NULL }, /* 0xfd74 */ - { .altcode = NULL }, /* 0xfd75 */ - { .altcode = NULL }, /* 0xfd76 */ - { .altcode = NULL }, /* 0xfd77 */ - { .altcode = NULL }, /* 0xfd78 */ - { .altcode = NULL }, /* 0xfd79 */ - { .altcode = NULL }, /* 0xfd7a */ - { .altcode = NULL }, /* 0xfd7b */ - { .altcode = NULL }, /* 0xfd7c */ - { .altcode = NULL }, /* 0xfd7d */ - { .altcode = NULL }, /* 0xfd7e */ - { .altcode = NULL }, /* 0xfd7f */ - { .altcode = NULL }, /* 0xfd80 */ - { .altcode = NULL }, /* 0xfd81 */ - { .altcode = NULL }, /* 0xfd82 */ - { .altcode = NULL }, /* 0xfd83 */ - { .altcode = NULL }, /* 0xfd84 */ - { .altcode = NULL }, /* 0xfd85 */ - { .altcode = NULL }, /* 0xfd86 */ - { .altcode = NULL }, /* 0xfd87 */ - { .altcode = NULL }, /* 0xfd88 */ - { .altcode = NULL }, /* 0xfd89 */ - { .altcode = NULL }, /* 0xfd8a */ - { .altcode = NULL }, /* 0xfd8b */ - { .altcode = NULL }, /* 0xfd8c */ - { .altcode = NULL }, /* 0xfd8d */ - { .altcode = NULL }, /* 0xfd8e */ - { .altcode = NULL }, /* 0xfd8f */ - { .altcode = NULL }, /* 0xfd90 */ - { .altcode = NULL }, /* 0xfd91 */ - { .altcode = NULL }, /* 0xfd92 */ - { .altcode = NULL }, /* 0xfd93 */ - { .altcode = NULL }, /* 0xfd94 */ - { .altcode = NULL }, /* 0xfd95 */ - { .altcode = NULL }, /* 0xfd96 */ - { .altcode = NULL }, /* 0xfd97 */ - { .altcode = NULL }, /* 0xfd98 */ - { .altcode = NULL }, /* 0xfd99 */ - { .altcode = NULL }, /* 0xfd9a */ - { .altcode = NULL }, /* 0xfd9b */ - { .altcode = NULL }, /* 0xfd9c */ - { .altcode = NULL }, /* 0xfd9d */ - { .altcode = NULL }, /* 0xfd9e */ - { .altcode = NULL }, /* 0xfd9f */ - { .altcode = NULL }, /* 0xfda0 */ - { .altcode = NULL }, /* 0xfda1 */ - { .altcode = NULL }, /* 0xfda2 */ - { .altcode = NULL }, /* 0xfda3 */ - { .altcode = NULL }, /* 0xfda4 */ - { .altcode = NULL }, /* 0xfda5 */ - { .altcode = NULL }, /* 0xfda6 */ - { .altcode = NULL }, /* 0xfda7 */ - { .altcode = NULL }, /* 0xfda8 */ - { .altcode = NULL }, /* 0xfda9 */ - { .altcode = NULL }, /* 0xfdaa */ - { .altcode = NULL }, /* 0xfdab */ - { .altcode = NULL }, /* 0xfdac */ - { .altcode = NULL }, /* 0xfdad */ - { .altcode = NULL }, /* 0xfdae */ - { .altcode = NULL }, /* 0xfdaf */ - { .altcode = NULL }, /* 0xfdb0 */ - { .altcode = NULL }, /* 0xfdb1 */ - { .altcode = NULL }, /* 0xfdb2 */ - { .altcode = NULL }, /* 0xfdb3 */ - { .altcode = NULL }, /* 0xfdb4 */ - { .altcode = NULL }, /* 0xfdb5 */ - { .altcode = NULL }, /* 0xfdb6 */ - { .altcode = NULL }, /* 0xfdb7 */ - { .altcode = NULL }, /* 0xfdb8 */ - { .altcode = NULL }, /* 0xfdb9 */ - { .altcode = NULL }, /* 0xfdba */ - { .altcode = NULL }, /* 0xfdbb */ - { .altcode = NULL }, /* 0xfdbc */ - { .altcode = NULL }, /* 0xfdbd */ - { .altcode = NULL }, /* 0xfdbe */ - { .altcode = NULL }, /* 0xfdbf */ - { .altcode = NULL }, /* 0xfdc0 */ - { .altcode = NULL }, /* 0xfdc1 */ - { .altcode = NULL }, /* 0xfdc2 */ - { .altcode = NULL }, /* 0xfdc3 */ - { .altcode = NULL }, /* 0xfdc4 */ - { .altcode = NULL }, /* 0xfdc5 */ - { .altcode = NULL }, /* 0xfdc6 */ - { .altcode = NULL }, /* 0xfdc7 */ - { .altcode = NULL }, /* 0xfdc8 */ - { .altcode = NULL }, /* 0xfdc9 */ - { .altcode = NULL }, /* 0xfdca */ - { .altcode = NULL }, /* 0xfdcb */ - { .altcode = NULL }, /* 0xfdcc */ - { .altcode = NULL }, /* 0xfdcd */ - { .altcode = NULL }, /* 0xfdce */ - { .altcode = NULL }, /* 0xfdcf */ - { .altcode = NULL }, /* 0xfdd0 */ - { .altcode = NULL }, /* 0xfdd1 */ - { .altcode = NULL }, /* 0xfdd2 */ - { .altcode = NULL }, /* 0xfdd3 */ - { .altcode = NULL }, /* 0xfdd4 */ - { .altcode = NULL }, /* 0xfdd5 */ - { .altcode = NULL }, /* 0xfdd6 */ - { .altcode = NULL }, /* 0xfdd7 */ - { .altcode = NULL }, /* 0xfdd8 */ - { .altcode = NULL }, /* 0xfdd9 */ - { .altcode = NULL }, /* 0xfdda */ - { .altcode = NULL }, /* 0xfddb */ - { .altcode = NULL }, /* 0xfddc */ - { .altcode = NULL }, /* 0xfddd */ - { .altcode = NULL }, /* 0xfdde */ - { .altcode = NULL }, /* 0xfddf */ - { .altcode = NULL }, /* 0xfde0 */ - { .altcode = NULL }, /* 0xfde1 */ - { .altcode = NULL }, /* 0xfde2 */ - { .altcode = NULL }, /* 0xfde3 */ - { .altcode = NULL }, /* 0xfde4 */ - { .altcode = NULL }, /* 0xfde5 */ - { .altcode = NULL }, /* 0xfde6 */ - { .altcode = NULL }, /* 0xfde7 */ - { .altcode = NULL }, /* 0xfde8 */ - { .altcode = NULL }, /* 0xfde9 */ - { .altcode = NULL }, /* 0xfdea */ - { .altcode = NULL }, /* 0xfdeb */ - { .altcode = NULL }, /* 0xfdec */ - { .altcode = NULL }, /* 0xfded */ - { .altcode = NULL }, /* 0xfdee */ - { .altcode = NULL }, /* 0xfdef */ - { .altcode = NULL }, /* 0xfdf0 */ - { .altcode = NULL }, /* 0xfdf1 */ - { .altcode = NULL }, /* 0xfdf2 */ - { .altcode = NULL }, /* 0xfdf3 */ - { .altcode = NULL }, /* 0xfdf4 */ - { .altcode = NULL }, /* 0xfdf5 */ - { .altcode = NULL }, /* 0xfdf6 */ - { .altcode = NULL }, /* 0xfdf7 */ - { .altcode = NULL }, /* 0xfdf8 */ - { .altcode = NULL }, /* 0xfdf9 */ - { .altcode = NULL }, /* 0xfdfa */ - { .altcode = NULL }, /* 0xfdfb */ - { .altcode = NULL }, /* 0xfdfc */ - { .altcode = NULL }, /* 0xfdfd */ - { .altcode = NULL }, /* 0xfdfe */ - { .altcode = NULL }, /* 0xfdff */ + { .altcode = NULL }, /* 0xfd00 */ + { .altcode = NULL }, /* 0xfd01 (3270_Duplicate) */ + { .altcode = NULL }, /* 0xfd02 (3270_FieldMark) */ + { .altcode = NULL }, /* 0xfd03 (3270_Right2) */ + { .altcode = NULL }, /* 0xfd04 (3270_Left2) */ + { .altcode = NULL }, /* 0xfd05 (3270_BackTab) */ + { .altcode = NULL }, /* 0xfd06 (3270_EraseEOF) */ + { .altcode = NULL }, /* 0xfd07 (3270_EraseInput) */ + { .altcode = NULL }, /* 0xfd08 (3270_Reset) */ + { .altcode = NULL }, /* 0xfd09 (3270_Quit) */ + { .altcode = NULL }, /* 0xfd0a (3270_PA1) */ + { .altcode = NULL }, /* 0xfd0b (3270_PA2) */ + { .altcode = NULL }, /* 0xfd0c (3270_PA3) */ + { .altcode = NULL }, /* 0xfd0d (3270_Test) */ + { .altcode = NULL }, /* 0xfd0e (3270_Attn) */ + { .altcode = NULL }, /* 0xfd0f (3270_CursorBlink) */ + { .altcode = NULL }, /* 0xfd10 (3270_AltCursor) */ + { .altcode = NULL }, /* 0xfd11 (3270_KeyClick) */ + { .altcode = NULL }, /* 0xfd12 (3270_Jump) */ + { .altcode = NULL }, /* 0xfd13 (3270_Ident) */ + { .altcode = NULL }, /* 0xfd14 (3270_Rule) */ + { .altcode = NULL }, /* 0xfd15 (3270_Copy) */ + { .altcode = NULL }, /* 0xfd16 (3270_Play) */ + { .altcode = NULL }, /* 0xfd17 (3270_Setup) */ + { .altcode = NULL }, /* 0xfd18 (3270_Record) */ + { .altcode = NULL }, /* 0xfd19 (3270_ChangeScreen) */ + { .altcode = NULL }, /* 0xfd1a (3270_DeleteWord) */ + { .altcode = NULL }, /* 0xfd1b (3270_ExSelect) */ + { .altcode = NULL }, /* 0xfd1c (3270_CursorSelect) */ + { .altcode = NULL }, /* 0xfd1d (3270_PrintScreen) */ + { .altcode = NULL }, /* 0xfd1e (3270_Enter) */ + { .altcode = NULL }, /* 0xfd1f */ + { .altcode = NULL }, /* 0xfd20 */ + { .altcode = NULL }, /* 0xfd21 */ + { .altcode = NULL }, /* 0xfd22 */ + { .altcode = NULL }, /* 0xfd23 */ + { .altcode = NULL }, /* 0xfd24 */ + { .altcode = NULL }, /* 0xfd25 */ + { .altcode = NULL }, /* 0xfd26 */ + { .altcode = NULL }, /* 0xfd27 */ + { .altcode = NULL }, /* 0xfd28 */ + { .altcode = NULL }, /* 0xfd29 */ + { .altcode = NULL }, /* 0xfd2a */ + { .altcode = NULL }, /* 0xfd2b */ + { .altcode = NULL }, /* 0xfd2c */ + { .altcode = NULL }, /* 0xfd2d */ + { .altcode = NULL }, /* 0xfd2e */ + { .altcode = NULL }, /* 0xfd2f */ + { .altcode = NULL }, /* 0xfd30 */ + { .altcode = NULL }, /* 0xfd31 */ + { .altcode = NULL }, /* 0xfd32 */ + { .altcode = NULL }, /* 0xfd33 */ + { .altcode = NULL }, /* 0xfd34 */ + { .altcode = NULL }, /* 0xfd35 */ + { .altcode = NULL }, /* 0xfd36 */ + { .altcode = NULL }, /* 0xfd37 */ + { .altcode = NULL }, /* 0xfd38 */ + { .altcode = NULL }, /* 0xfd39 */ + { .altcode = NULL }, /* 0xfd3a */ + { .altcode = NULL }, /* 0xfd3b */ + { .altcode = NULL }, /* 0xfd3c */ + { .altcode = NULL }, /* 0xfd3d */ + { .altcode = NULL }, /* 0xfd3e */ + { .altcode = NULL }, /* 0xfd3f */ + { .altcode = NULL }, /* 0xfd40 */ + { .altcode = NULL }, /* 0xfd41 */ + { .altcode = NULL }, /* 0xfd42 */ + { .altcode = NULL }, /* 0xfd43 */ + { .altcode = NULL }, /* 0xfd44 */ + { .altcode = NULL }, /* 0xfd45 */ + { .altcode = NULL }, /* 0xfd46 */ + { .altcode = NULL }, /* 0xfd47 */ + { .altcode = NULL }, /* 0xfd48 */ + { .altcode = NULL }, /* 0xfd49 */ + { .altcode = NULL }, /* 0xfd4a */ + { .altcode = NULL }, /* 0xfd4b */ + { .altcode = NULL }, /* 0xfd4c */ + { .altcode = NULL }, /* 0xfd4d */ + { .altcode = NULL }, /* 0xfd4e */ + { .altcode = NULL }, /* 0xfd4f */ + { .altcode = NULL }, /* 0xfd50 */ + { .altcode = NULL }, /* 0xfd51 */ + { .altcode = NULL }, /* 0xfd52 */ + { .altcode = NULL }, /* 0xfd53 */ + { .altcode = NULL }, /* 0xfd54 */ + { .altcode = NULL }, /* 0xfd55 */ + { .altcode = NULL }, /* 0xfd56 */ + { .altcode = NULL }, /* 0xfd57 */ + { .altcode = NULL }, /* 0xfd58 */ + { .altcode = NULL }, /* 0xfd59 */ + { .altcode = NULL }, /* 0xfd5a */ + { .altcode = NULL }, /* 0xfd5b */ + { .altcode = NULL }, /* 0xfd5c */ + { .altcode = NULL }, /* 0xfd5d */ + { .altcode = NULL }, /* 0xfd5e */ + { .altcode = NULL }, /* 0xfd5f */ + { .altcode = NULL }, /* 0xfd60 */ + { .altcode = NULL }, /* 0xfd61 */ + { .altcode = NULL }, /* 0xfd62 */ + { .altcode = NULL }, /* 0xfd63 */ + { .altcode = NULL }, /* 0xfd64 */ + { .altcode = NULL }, /* 0xfd65 */ + { .altcode = NULL }, /* 0xfd66 */ + { .altcode = NULL }, /* 0xfd67 */ + { .altcode = NULL }, /* 0xfd68 */ + { .altcode = NULL }, /* 0xfd69 */ + { .altcode = NULL }, /* 0xfd6a */ + { .altcode = NULL }, /* 0xfd6b */ + { .altcode = NULL }, /* 0xfd6c */ + { .altcode = NULL }, /* 0xfd6d */ + { .altcode = NULL }, /* 0xfd6e */ + { .altcode = NULL }, /* 0xfd6f */ + { .altcode = NULL }, /* 0xfd70 */ + { .altcode = NULL }, /* 0xfd71 */ + { .altcode = NULL }, /* 0xfd72 */ + { .altcode = NULL }, /* 0xfd73 */ + { .altcode = NULL }, /* 0xfd74 */ + { .altcode = NULL }, /* 0xfd75 */ + { .altcode = NULL }, /* 0xfd76 */ + { .altcode = NULL }, /* 0xfd77 */ + { .altcode = NULL }, /* 0xfd78 */ + { .altcode = NULL }, /* 0xfd79 */ + { .altcode = NULL }, /* 0xfd7a */ + { .altcode = NULL }, /* 0xfd7b */ + { .altcode = NULL }, /* 0xfd7c */ + { .altcode = NULL }, /* 0xfd7d */ + { .altcode = NULL }, /* 0xfd7e */ + { .altcode = NULL }, /* 0xfd7f */ + { .altcode = NULL }, /* 0xfd80 */ + { .altcode = NULL }, /* 0xfd81 */ + { .altcode = NULL }, /* 0xfd82 */ + { .altcode = NULL }, /* 0xfd83 */ + { .altcode = NULL }, /* 0xfd84 */ + { .altcode = NULL }, /* 0xfd85 */ + { .altcode = NULL }, /* 0xfd86 */ + { .altcode = NULL }, /* 0xfd87 */ + { .altcode = NULL }, /* 0xfd88 */ + { .altcode = NULL }, /* 0xfd89 */ + { .altcode = NULL }, /* 0xfd8a */ + { .altcode = NULL }, /* 0xfd8b */ + { .altcode = NULL }, /* 0xfd8c */ + { .altcode = NULL }, /* 0xfd8d */ + { .altcode = NULL }, /* 0xfd8e */ + { .altcode = NULL }, /* 0xfd8f */ + { .altcode = NULL }, /* 0xfd90 */ + { .altcode = NULL }, /* 0xfd91 */ + { .altcode = NULL }, /* 0xfd92 */ + { .altcode = NULL }, /* 0xfd93 */ + { .altcode = NULL }, /* 0xfd94 */ + { .altcode = NULL }, /* 0xfd95 */ + { .altcode = NULL }, /* 0xfd96 */ + { .altcode = NULL }, /* 0xfd97 */ + { .altcode = NULL }, /* 0xfd98 */ + { .altcode = NULL }, /* 0xfd99 */ + { .altcode = NULL }, /* 0xfd9a */ + { .altcode = NULL }, /* 0xfd9b */ + { .altcode = NULL }, /* 0xfd9c */ + { .altcode = NULL }, /* 0xfd9d */ + { .altcode = NULL }, /* 0xfd9e */ + { .altcode = NULL }, /* 0xfd9f */ + { .altcode = NULL }, /* 0xfda0 */ + { .altcode = NULL }, /* 0xfda1 */ + { .altcode = NULL }, /* 0xfda2 */ + { .altcode = NULL }, /* 0xfda3 */ + { .altcode = NULL }, /* 0xfda4 */ + { .altcode = NULL }, /* 0xfda5 */ + { .altcode = NULL }, /* 0xfda6 */ + { .altcode = NULL }, /* 0xfda7 */ + { .altcode = NULL }, /* 0xfda8 */ + { .altcode = NULL }, /* 0xfda9 */ + { .altcode = NULL }, /* 0xfdaa */ + { .altcode = NULL }, /* 0xfdab */ + { .altcode = NULL }, /* 0xfdac */ + { .altcode = NULL }, /* 0xfdad */ + { .altcode = NULL }, /* 0xfdae */ + { .altcode = NULL }, /* 0xfdaf */ + { .altcode = NULL }, /* 0xfdb0 */ + { .altcode = NULL }, /* 0xfdb1 */ + { .altcode = NULL }, /* 0xfdb2 */ + { .altcode = NULL }, /* 0xfdb3 */ + { .altcode = NULL }, /* 0xfdb4 */ + { .altcode = NULL }, /* 0xfdb5 */ + { .altcode = NULL }, /* 0xfdb6 */ + { .altcode = NULL }, /* 0xfdb7 */ + { .altcode = NULL }, /* 0xfdb8 */ + { .altcode = NULL }, /* 0xfdb9 */ + { .altcode = NULL }, /* 0xfdba */ + { .altcode = NULL }, /* 0xfdbb */ + { .altcode = NULL }, /* 0xfdbc */ + { .altcode = NULL }, /* 0xfdbd */ + { .altcode = NULL }, /* 0xfdbe */ + { .altcode = NULL }, /* 0xfdbf */ + { .altcode = NULL }, /* 0xfdc0 */ + { .altcode = NULL }, /* 0xfdc1 */ + { .altcode = NULL }, /* 0xfdc2 */ + { .altcode = NULL }, /* 0xfdc3 */ + { .altcode = NULL }, /* 0xfdc4 */ + { .altcode = NULL }, /* 0xfdc5 */ + { .altcode = NULL }, /* 0xfdc6 */ + { .altcode = NULL }, /* 0xfdc7 */ + { .altcode = NULL }, /* 0xfdc8 */ + { .altcode = NULL }, /* 0xfdc9 */ + { .altcode = NULL }, /* 0xfdca */ + { .altcode = NULL }, /* 0xfdcb */ + { .altcode = NULL }, /* 0xfdcc */ + { .altcode = NULL }, /* 0xfdcd */ + { .altcode = NULL }, /* 0xfdce */ + { .altcode = NULL }, /* 0xfdcf */ + { .altcode = NULL }, /* 0xfdd0 */ + { .altcode = NULL }, /* 0xfdd1 */ + { .altcode = NULL }, /* 0xfdd2 */ + { .altcode = NULL }, /* 0xfdd3 */ + { .altcode = NULL }, /* 0xfdd4 */ + { .altcode = NULL }, /* 0xfdd5 */ + { .altcode = NULL }, /* 0xfdd6 */ + { .altcode = NULL }, /* 0xfdd7 */ + { .altcode = NULL }, /* 0xfdd8 */ + { .altcode = NULL }, /* 0xfdd9 */ + { .altcode = NULL }, /* 0xfdda */ + { .altcode = NULL }, /* 0xfddb */ + { .altcode = NULL }, /* 0xfddc */ + { .altcode = NULL }, /* 0xfddd */ + { .altcode = NULL }, /* 0xfdde */ + { .altcode = NULL }, /* 0xfddf */ + { .altcode = NULL }, /* 0xfde0 */ + { .altcode = NULL }, /* 0xfde1 */ + { .altcode = NULL }, /* 0xfde2 */ + { .altcode = NULL }, /* 0xfde3 */ + { .altcode = NULL }, /* 0xfde4 */ + { .altcode = NULL }, /* 0xfde5 */ + { .altcode = NULL }, /* 0xfde6 */ + { .altcode = NULL }, /* 0xfde7 */ + { .altcode = NULL }, /* 0xfde8 */ + { .altcode = NULL }, /* 0xfde9 */ + { .altcode = NULL }, /* 0xfdea */ + { .altcode = NULL }, /* 0xfdeb */ + { .altcode = NULL }, /* 0xfdec */ + { .altcode = NULL }, /* 0xfded */ + { .altcode = NULL }, /* 0xfdee */ + { .altcode = NULL }, /* 0xfdef */ + { .altcode = NULL }, /* 0xfdf0 */ + { .altcode = NULL }, /* 0xfdf1 */ + { .altcode = NULL }, /* 0xfdf2 */ + { .altcode = NULL }, /* 0xfdf3 */ + { .altcode = NULL }, /* 0xfdf4 */ + { .altcode = NULL }, /* 0xfdf5 */ + { .altcode = NULL }, /* 0xfdf6 */ + { .altcode = NULL }, /* 0xfdf7 */ + { .altcode = NULL }, /* 0xfdf8 */ + { .altcode = NULL }, /* 0xfdf9 */ + { .altcode = NULL }, /* 0xfdfa */ + { .altcode = NULL }, /* 0xfdfb */ + { .altcode = NULL }, /* 0xfdfc */ + { .altcode = NULL }, /* 0xfdfd */ + { .altcode = NULL }, /* 0xfdfe */ + { .altcode = NULL }, /* 0xfdff */ }, { /* 0xfe?? */ - { .altcode = NULL }, /* 0xfe00 */ - { .altcode = NULL }, /* 0xfe01 (ISO_Lock) */ - { .altcode = NULL }, /* 0xfe02 (ISO_Level2_Latch) */ - { .altcode = NULL }, /* 0xfe03 (ISO_Level3_Shift) */ - { .altcode = NULL }, /* 0xfe04 (ISO_Level3_Latch) */ - { .altcode = NULL }, /* 0xfe05 (ISO_Level3_Lock) */ - { .altcode = NULL }, /* 0xfe06 (ISO_Group_Latch) */ - { .altcode = NULL }, /* 0xfe07 (ISO_Group_Lock) */ - { .altcode = NULL }, /* 0xfe08 (ISO_Next_Group) */ - { .altcode = NULL }, /* 0xfe09 (ISO_Next_Group_Lock) */ - { .altcode = NULL }, /* 0xfe0a (ISO_Prev_Group) */ - { .altcode = NULL }, /* 0xfe0b (ISO_Prev_Group_Lock) */ - { .altcode = NULL }, /* 0xfe0c (ISO_First_Group) */ - { .altcode = NULL }, /* 0xfe0d (ISO_First_Group_Lock) */ - { .altcode = NULL }, /* 0xfe0e (ISO_Last_Group) */ - { .altcode = NULL }, /* 0xfe0f (ISO_Last_Group_Lock) */ - { .altcode = NULL }, /* 0xfe10 */ - { .altcode = NULL }, /* 0xfe11 (ISO_Level5_Shift) */ - { .altcode = NULL }, /* 0xfe12 (ISO_Level5_Latch) */ - { .altcode = NULL }, /* 0xfe13 (ISO_Level5_Lock) */ - { .altcode = NULL }, /* 0xfe14 */ - { .altcode = NULL }, /* 0xfe15 */ - { .altcode = NULL }, /* 0xfe16 */ - { .altcode = NULL }, /* 0xfe17 */ - { .altcode = NULL }, /* 0xfe18 */ - { .altcode = NULL }, /* 0xfe19 */ - { .altcode = NULL }, /* 0xfe1a */ - { .altcode = NULL }, /* 0xfe1b */ - { .altcode = NULL }, /* 0xfe1c */ - { .altcode = NULL }, /* 0xfe1d */ - { .altcode = NULL }, /* 0xfe1e */ - { .altcode = NULL }, /* 0xfe1f */ - { .altcode = NULL }, /* 0xfe20 (ISO_Left_Tab) */ - { .altcode = NULL }, /* 0xfe21 (ISO_Move_Line_Up) */ - { .altcode = NULL }, /* 0xfe22 (ISO_Move_Line_Down) */ - { .altcode = NULL }, /* 0xfe23 (ISO_Partial_Line_Up) */ - { .altcode = NULL }, /* 0xfe24 (ISO_Partial_Line_Down) */ - { .altcode = NULL }, /* 0xfe25 (ISO_Partial_Space_Left) */ - { .altcode = NULL }, /* 0xfe26 (ISO_Partial_Space_Right) */ - { .altcode = NULL }, /* 0xfe27 (ISO_Set_Margin_Left) */ - { .altcode = NULL }, /* 0xfe28 (ISO_Set_Margin_Right) */ - { .altcode = NULL }, /* 0xfe29 (ISO_Release_Margin_Left) */ - { .altcode = NULL }, /* 0xfe2a (ISO_Release_Margin_Right) */ - { .altcode = NULL }, /* 0xfe2b (ISO_Release_Both_Margins) */ - { .altcode = NULL }, /* 0xfe2c (ISO_Fast_Cursor_Left) */ - { .altcode = NULL }, /* 0xfe2d (ISO_Fast_Cursor_Right) */ - { .altcode = NULL }, /* 0xfe2e (ISO_Fast_Cursor_Up) */ - { .altcode = NULL }, /* 0xfe2f (ISO_Fast_Cursor_Down) */ - { .altcode = NULL }, /* 0xfe30 (ISO_Continuous_Underline) */ - { .altcode = NULL }, /* 0xfe31 (ISO_Discontinuous_Underline) */ - { .altcode = NULL }, /* 0xfe32 (ISO_Emphasize) */ - { .altcode = NULL }, /* 0xfe33 (ISO_Center_Object) */ - { .altcode = NULL }, /* 0xfe34 (ISO_Enter) */ - { .altcode = NULL }, /* 0xfe35 */ - { .altcode = NULL }, /* 0xfe36 */ - { .altcode = NULL }, /* 0xfe37 */ - { .altcode = NULL }, /* 0xfe38 */ - { .altcode = NULL }, /* 0xfe39 */ - { .altcode = NULL }, /* 0xfe3a */ - { .altcode = NULL }, /* 0xfe3b */ - { .altcode = NULL }, /* 0xfe3c */ - { .altcode = NULL }, /* 0xfe3d */ - { .altcode = NULL }, /* 0xfe3e */ - { .altcode = NULL }, /* 0xfe3f */ - { .altcode = NULL }, /* 0xfe40 */ - { .altcode = NULL }, /* 0xfe41 */ - { .altcode = NULL }, /* 0xfe42 */ - { .altcode = NULL }, /* 0xfe43 */ - { .altcode = NULL }, /* 0xfe44 */ - { .altcode = NULL }, /* 0xfe45 */ - { .altcode = NULL }, /* 0xfe46 */ - { .altcode = NULL }, /* 0xfe47 */ - { .altcode = NULL }, /* 0xfe48 */ - { .altcode = NULL }, /* 0xfe49 */ - { .altcode = NULL }, /* 0xfe4a */ - { .altcode = NULL }, /* 0xfe4b */ - { .altcode = NULL }, /* 0xfe4c */ - { .altcode = NULL }, /* 0xfe4d */ - { .altcode = NULL }, /* 0xfe4e */ - { .altcode = NULL }, /* 0xfe4f */ - { .altcode = NULL }, /* 0xfe50 (dead_grave) */ - { .altcode = NULL }, /* 0xfe51 (dead_acute) */ - { .altcode = NULL }, /* 0xfe52 (dead_circumflex) */ - { .altcode = NULL }, /* 0xfe53 (dead_perispomeni) */ - { .altcode = NULL }, /* 0xfe54 (dead_macron) */ - { .altcode = NULL }, /* 0xfe55 (dead_breve) */ - { .altcode = NULL }, /* 0xfe56 (dead_abovedot) */ - { .altcode = NULL }, /* 0xfe57 (dead_diaeresis) */ - { .altcode = NULL }, /* 0xfe58 (dead_abovering) */ - { .altcode = NULL }, /* 0xfe59 (dead_doubleacute) */ - { .altcode = NULL }, /* 0xfe5a (dead_caron) */ - { .altcode = NULL }, /* 0xfe5b (dead_cedilla) */ - { .altcode = NULL }, /* 0xfe5c (dead_ogonek) */ - { .altcode = NULL }, /* 0xfe5d (dead_iota) */ - { .altcode = NULL }, /* 0xfe5e (dead_voiced_sound) */ - { .altcode = NULL }, /* 0xfe5f (dead_semivoiced_sound) */ - { .altcode = NULL }, /* 0xfe60 (dead_belowdot) */ - { .altcode = NULL }, /* 0xfe61 (dead_hook) */ - { .altcode = NULL }, /* 0xfe62 (dead_horn) */ - { .altcode = NULL }, /* 0xfe63 (dead_stroke) */ - { .altcode = NULL }, /* 0xfe64 (dead_psili) */ - { .altcode = NULL }, /* 0xfe65 (dead_dasia) */ - { .altcode = NULL }, /* 0xfe66 (dead_doublegrave) */ - { .altcode = NULL }, /* 0xfe67 (dead_belowring) */ - { .altcode = NULL }, /* 0xfe68 (dead_belowmacron) */ - { .altcode = NULL }, /* 0xfe69 (dead_belowcircumflex) */ - { .altcode = NULL }, /* 0xfe6a (dead_belowtilde) */ - { .altcode = NULL }, /* 0xfe6b (dead_belowbreve) */ - { .altcode = NULL }, /* 0xfe6c (dead_belowdiaeresis) */ - { .altcode = NULL }, /* 0xfe6d (dead_invertedbreve) */ - { .altcode = NULL }, /* 0xfe6e (dead_belowcomma) */ - { .altcode = NULL }, /* 0xfe6f (dead_currency) */ - { .altcode = NULL }, /* 0xfe70 (AccessX_Enable) */ - { .altcode = NULL }, /* 0xfe71 (AccessX_Feedback_Enable) */ - { .altcode = NULL }, /* 0xfe72 (RepeatKeys_Enable) */ - { .altcode = NULL }, /* 0xfe73 (SlowKeys_Enable) */ - { .altcode = NULL }, /* 0xfe74 (BounceKeys_Enable) */ - { .altcode = NULL }, /* 0xfe75 (StickyKeys_Enable) */ - { .altcode = NULL }, /* 0xfe76 (MouseKeys_Enable) */ - { .altcode = NULL }, /* 0xfe77 (MouseKeys_Accel_Enable) */ - { .altcode = NULL }, /* 0xfe78 (Overlay1_Enable) */ - { .altcode = NULL }, /* 0xfe79 (Overlay2_Enable) */ - { .altcode = NULL }, /* 0xfe7a (AudibleBell_Enable) */ - { .altcode = NULL }, /* 0xfe7b */ - { .altcode = NULL }, /* 0xfe7c */ - { .altcode = NULL }, /* 0xfe7d */ - { .altcode = NULL }, /* 0xfe7e */ - { .altcode = NULL }, /* 0xfe7f */ - { .altcode = NULL }, /* 0xfe80 (dead_a) */ - { .altcode = NULL }, /* 0xfe81 (dead_A) */ - { .altcode = NULL }, /* 0xfe82 (dead_e) */ - { .altcode = NULL }, /* 0xfe83 (dead_E) */ - { .altcode = NULL }, /* 0xfe84 (dead_i) */ - { .altcode = NULL }, /* 0xfe85 (dead_I) */ - { .altcode = NULL }, /* 0xfe86 (dead_o) */ - { .altcode = NULL }, /* 0xfe87 (dead_O) */ - { .altcode = NULL }, /* 0xfe88 (dead_u) */ - { .altcode = NULL }, /* 0xfe89 (dead_U) */ - { .altcode = NULL }, /* 0xfe8a (dead_small_schwa) */ - { .altcode = NULL }, /* 0xfe8b (dead_capital_schwa) */ - { .altcode = NULL }, /* 0xfe8c */ - { .altcode = NULL }, /* 0xfe8d */ - { .altcode = NULL }, /* 0xfe8e */ - { .altcode = NULL }, /* 0xfe8f */ - { .altcode = NULL }, /* 0xfe90 */ - { .altcode = NULL }, /* 0xfe91 */ - { .altcode = NULL }, /* 0xfe92 */ - { .altcode = NULL }, /* 0xfe93 */ - { .altcode = NULL }, /* 0xfe94 */ - { .altcode = NULL }, /* 0xfe95 */ - { .altcode = NULL }, /* 0xfe96 */ - { .altcode = NULL }, /* 0xfe97 */ - { .altcode = NULL }, /* 0xfe98 */ - { .altcode = NULL }, /* 0xfe99 */ - { .altcode = NULL }, /* 0xfe9a */ - { .altcode = NULL }, /* 0xfe9b */ - { .altcode = NULL }, /* 0xfe9c */ - { .altcode = NULL }, /* 0xfe9d */ - { .altcode = NULL }, /* 0xfe9e */ - { .altcode = NULL }, /* 0xfe9f */ - { .altcode = NULL }, /* 0xfea0 */ - { .altcode = NULL }, /* 0xfea1 */ - { .altcode = NULL }, /* 0xfea2 */ - { .altcode = NULL }, /* 0xfea3 */ - { .altcode = NULL }, /* 0xfea4 */ - { .altcode = NULL }, /* 0xfea5 */ - { .altcode = NULL }, /* 0xfea6 */ - { .altcode = NULL }, /* 0xfea7 */ - { .altcode = NULL }, /* 0xfea8 */ - { .altcode = NULL }, /* 0xfea9 */ - { .altcode = NULL }, /* 0xfeaa */ - { .altcode = NULL }, /* 0xfeab */ - { .altcode = NULL }, /* 0xfeac */ - { .altcode = NULL }, /* 0xfead */ - { .altcode = NULL }, /* 0xfeae */ - { .altcode = NULL }, /* 0xfeaf */ - { .altcode = NULL }, /* 0xfeb0 */ - { .altcode = NULL }, /* 0xfeb1 */ - { .altcode = NULL }, /* 0xfeb2 */ - { .altcode = NULL }, /* 0xfeb3 */ - { .altcode = NULL }, /* 0xfeb4 */ - { .altcode = NULL }, /* 0xfeb5 */ - { .altcode = NULL }, /* 0xfeb6 */ - { .altcode = NULL }, /* 0xfeb7 */ - { .altcode = NULL }, /* 0xfeb8 */ - { .altcode = NULL }, /* 0xfeb9 */ - { .altcode = NULL }, /* 0xfeba */ - { .altcode = NULL }, /* 0xfebb */ - { .altcode = NULL }, /* 0xfebc */ - { .altcode = NULL }, /* 0xfebd */ - { .altcode = NULL }, /* 0xfebe */ - { .altcode = NULL }, /* 0xfebf */ - { .altcode = NULL }, /* 0xfec0 */ - { .altcode = NULL }, /* 0xfec1 */ - { .altcode = NULL }, /* 0xfec2 */ - { .altcode = NULL }, /* 0xfec3 */ - { .altcode = NULL }, /* 0xfec4 */ - { .altcode = NULL }, /* 0xfec5 */ - { .altcode = NULL }, /* 0xfec6 */ - { .altcode = NULL }, /* 0xfec7 */ - { .altcode = NULL }, /* 0xfec8 */ - { .altcode = NULL }, /* 0xfec9 */ - { .altcode = NULL }, /* 0xfeca */ - { .altcode = NULL }, /* 0xfecb */ - { .altcode = NULL }, /* 0xfecc */ - { .altcode = NULL }, /* 0xfecd */ - { .altcode = NULL }, /* 0xfece */ - { .altcode = NULL }, /* 0xfecf */ - { .altcode = NULL }, /* 0xfed0 (First_Virtual_Screen) */ - { .altcode = NULL }, /* 0xfed1 (Prev_Virtual_Screen) */ - { .altcode = NULL }, /* 0xfed2 (Next_Virtual_Screen) */ - { .altcode = NULL }, /* 0xfed3 */ - { .altcode = NULL }, /* 0xfed4 (Last_Virtual_Screen) */ - { .altcode = NULL }, /* 0xfed5 (Terminate_Server) */ - { .altcode = NULL }, /* 0xfed6 */ - { .altcode = NULL }, /* 0xfed7 */ - { .altcode = NULL }, /* 0xfed8 */ - { .altcode = NULL }, /* 0xfed9 */ - { .altcode = NULL }, /* 0xfeda */ - { .altcode = NULL }, /* 0xfedb */ - { .altcode = NULL }, /* 0xfedc */ - { .altcode = NULL }, /* 0xfedd */ - { .altcode = NULL }, /* 0xfede */ - { .altcode = NULL }, /* 0xfedf */ - { .altcode = NULL }, /* 0xfee0 (Pointer_Left) */ - { .altcode = NULL }, /* 0xfee1 (Pointer_Right) */ - { .altcode = NULL }, /* 0xfee2 (Pointer_Up) */ - { .altcode = NULL }, /* 0xfee3 (Pointer_Down) */ - { .altcode = NULL }, /* 0xfee4 (Pointer_UpLeft) */ - { .altcode = NULL }, /* 0xfee5 (Pointer_UpRight) */ - { .altcode = NULL }, /* 0xfee6 (Pointer_DownLeft) */ - { .altcode = NULL }, /* 0xfee7 (Pointer_DownRight) */ - { .altcode = NULL }, /* 0xfee8 (Pointer_Button_Dflt) */ - { .altcode = NULL }, /* 0xfee9 (Pointer_Button1) */ - { .altcode = NULL }, /* 0xfeea (Pointer_Button2) */ - { .altcode = NULL }, /* 0xfeeb (Pointer_Button3) */ - { .altcode = NULL }, /* 0xfeec (Pointer_Button4) */ - { .altcode = NULL }, /* 0xfeed (Pointer_Button5) */ - { .altcode = NULL }, /* 0xfeee (Pointer_DblClick_Dflt) */ - { .altcode = NULL }, /* 0xfeef (Pointer_DblClick1) */ - { .altcode = NULL }, /* 0xfef0 (Pointer_DblClick2) */ - { .altcode = NULL }, /* 0xfef1 (Pointer_DblClick3) */ - { .altcode = NULL }, /* 0xfef2 (Pointer_DblClick4) */ - { .altcode = NULL }, /* 0xfef3 (Pointer_DblClick5) */ - { .altcode = NULL }, /* 0xfef4 (Pointer_Drag_Dflt) */ - { .altcode = NULL }, /* 0xfef5 (Pointer_Drag1) */ - { .altcode = NULL }, /* 0xfef6 (Pointer_Drag2) */ - { .altcode = NULL }, /* 0xfef7 (Pointer_Drag3) */ - { .altcode = NULL }, /* 0xfef8 (Pointer_Drag4) */ - { .altcode = NULL }, /* 0xfef9 (Pointer_EnableKeys) */ - { .altcode = NULL }, /* 0xfefa (Pointer_Accelerate) */ - { .altcode = NULL }, /* 0xfefb (Pointer_DfltBtnNext) */ - { .altcode = NULL }, /* 0xfefc (Pointer_DfltBtnPrev) */ - { .altcode = NULL }, /* 0xfefd (Pointer_Drag5) */ - { .altcode = NULL }, /* 0xfefe */ - { .altcode = NULL }, /* 0xfeff */ + { .altcode = NULL }, /* 0xfe00 */ + { .altcode = NULL }, /* 0xfe01 (ISO_Lock) */ + { .altcode = NULL }, /* 0xfe02 (ISO_Level2_Latch) */ + { .altcode = NULL }, /* 0xfe03 (ISO_Level3_Shift) */ + { .altcode = NULL }, /* 0xfe04 (ISO_Level3_Latch) */ + { .altcode = NULL }, /* 0xfe05 (ISO_Level3_Lock) */ + { .altcode = NULL }, /* 0xfe06 (ISO_Group_Latch) */ + { .altcode = NULL }, /* 0xfe07 (ISO_Group_Lock) */ + { .altcode = NULL }, /* 0xfe08 (ISO_Next_Group) */ + { .altcode = NULL }, /* 0xfe09 (ISO_Next_Group_Lock) */ + { .altcode = NULL }, /* 0xfe0a (ISO_Prev_Group) */ + { .altcode = NULL }, /* 0xfe0b (ISO_Prev_Group_Lock) */ + { .altcode = NULL }, /* 0xfe0c (ISO_First_Group) */ + { .altcode = NULL }, /* 0xfe0d (ISO_First_Group_Lock) */ + { .altcode = NULL }, /* 0xfe0e (ISO_Last_Group) */ + { .altcode = NULL }, /* 0xfe0f (ISO_Last_Group_Lock) */ + { .altcode = NULL }, /* 0xfe10 */ + { .altcode = NULL }, /* 0xfe11 (ISO_Level5_Shift) */ + { .altcode = NULL }, /* 0xfe12 (ISO_Level5_Latch) */ + { .altcode = NULL }, /* 0xfe13 (ISO_Level5_Lock) */ + { .altcode = NULL }, /* 0xfe14 */ + { .altcode = NULL }, /* 0xfe15 */ + { .altcode = NULL }, /* 0xfe16 */ + { .altcode = NULL }, /* 0xfe17 */ + { .altcode = NULL }, /* 0xfe18 */ + { .altcode = NULL }, /* 0xfe19 */ + { .altcode = NULL }, /* 0xfe1a */ + { .altcode = NULL }, /* 0xfe1b */ + { .altcode = NULL }, /* 0xfe1c */ + { .altcode = NULL }, /* 0xfe1d */ + { .altcode = NULL }, /* 0xfe1e */ + { .altcode = NULL }, /* 0xfe1f */ + { .altcode = NULL }, /* 0xfe20 (ISO_Left_Tab) */ + { .altcode = NULL }, /* 0xfe21 (ISO_Move_Line_Up) */ + { .altcode = NULL }, /* 0xfe22 (ISO_Move_Line_Down) */ + { .altcode = NULL }, /* 0xfe23 (ISO_Partial_Line_Up) */ + { .altcode = NULL }, /* 0xfe24 (ISO_Partial_Line_Down) */ + { .altcode = NULL }, /* 0xfe25 (ISO_Partial_Space_Left) */ + { .altcode = NULL }, /* 0xfe26 (ISO_Partial_Space_Right) */ + { .altcode = NULL }, /* 0xfe27 (ISO_Set_Margin_Left) */ + { .altcode = NULL }, /* 0xfe28 (ISO_Set_Margin_Right) */ + { .altcode = NULL }, /* 0xfe29 (ISO_Release_Margin_Left) */ + { .altcode = NULL }, /* 0xfe2a (ISO_Release_Margin_Right) */ + { .altcode = NULL }, /* 0xfe2b (ISO_Release_Both_Margins) */ + { .altcode = NULL }, /* 0xfe2c (ISO_Fast_Cursor_Left) */ + { .altcode = NULL }, /* 0xfe2d (ISO_Fast_Cursor_Right) */ + { .altcode = NULL }, /* 0xfe2e (ISO_Fast_Cursor_Up) */ + { .altcode = NULL }, /* 0xfe2f (ISO_Fast_Cursor_Down) */ + { .altcode = NULL }, /* 0xfe30 (ISO_Continuous_Underline) */ + { .altcode = NULL }, /* 0xfe31 (ISO_Discontinuous_Underline) */ + { .altcode = NULL }, /* 0xfe32 (ISO_Emphasize) */ + { .altcode = NULL }, /* 0xfe33 (ISO_Center_Object) */ + { .altcode = NULL }, /* 0xfe34 (ISO_Enter) */ + { .altcode = NULL }, /* 0xfe35 */ + { .altcode = NULL }, /* 0xfe36 */ + { .altcode = NULL }, /* 0xfe37 */ + { .altcode = NULL }, /* 0xfe38 */ + { .altcode = NULL }, /* 0xfe39 */ + { .altcode = NULL }, /* 0xfe3a */ + { .altcode = NULL }, /* 0xfe3b */ + { .altcode = NULL }, /* 0xfe3c */ + { .altcode = NULL }, /* 0xfe3d */ + { .altcode = NULL }, /* 0xfe3e */ + { .altcode = NULL }, /* 0xfe3f */ + { .altcode = NULL }, /* 0xfe40 */ + { .altcode = NULL }, /* 0xfe41 */ + { .altcode = NULL }, /* 0xfe42 */ + { .altcode = NULL }, /* 0xfe43 */ + { .altcode = NULL }, /* 0xfe44 */ + { .altcode = NULL }, /* 0xfe45 */ + { .altcode = NULL }, /* 0xfe46 */ + { .altcode = NULL }, /* 0xfe47 */ + { .altcode = NULL }, /* 0xfe48 */ + { .altcode = NULL }, /* 0xfe49 */ + { .altcode = NULL }, /* 0xfe4a */ + { .altcode = NULL }, /* 0xfe4b */ + { .altcode = NULL }, /* 0xfe4c */ + { .altcode = NULL }, /* 0xfe4d */ + { .altcode = NULL }, /* 0xfe4e */ + { .altcode = NULL }, /* 0xfe4f */ + { .altcode = NULL }, /* 0xfe50 (dead_grave) */ + { .altcode = NULL }, /* 0xfe51 (dead_acute) */ + { .altcode = NULL }, /* 0xfe52 (dead_circumflex) */ + { .altcode = NULL }, /* 0xfe53 (dead_perispomeni) */ + { .altcode = NULL }, /* 0xfe54 (dead_macron) */ + { .altcode = NULL }, /* 0xfe55 (dead_breve) */ + { .altcode = NULL }, /* 0xfe56 (dead_abovedot) */ + { .altcode = NULL }, /* 0xfe57 (dead_diaeresis) */ + { .altcode = NULL }, /* 0xfe58 (dead_abovering) */ + { .altcode = NULL }, /* 0xfe59 (dead_doubleacute) */ + { .altcode = NULL }, /* 0xfe5a (dead_caron) */ + { .altcode = NULL }, /* 0xfe5b (dead_cedilla) */ + { .altcode = NULL }, /* 0xfe5c (dead_ogonek) */ + { .altcode = NULL }, /* 0xfe5d (dead_iota) */ + { .altcode = NULL }, /* 0xfe5e (dead_voiced_sound) */ + { .altcode = NULL }, /* 0xfe5f (dead_semivoiced_sound) */ + { .altcode = NULL }, /* 0xfe60 (dead_belowdot) */ + { .altcode = NULL }, /* 0xfe61 (dead_hook) */ + { .altcode = NULL }, /* 0xfe62 (dead_horn) */ + { .altcode = NULL }, /* 0xfe63 (dead_stroke) */ + { .altcode = NULL }, /* 0xfe64 (dead_psili) */ + { .altcode = NULL }, /* 0xfe65 (dead_dasia) */ + { .altcode = NULL }, /* 0xfe66 (dead_doublegrave) */ + { .altcode = NULL }, /* 0xfe67 (dead_belowring) */ + { .altcode = NULL }, /* 0xfe68 (dead_belowmacron) */ + { .altcode = NULL }, /* 0xfe69 (dead_belowcircumflex) */ + { .altcode = NULL }, /* 0xfe6a (dead_belowtilde) */ + { .altcode = NULL }, /* 0xfe6b (dead_belowbreve) */ + { .altcode = NULL }, /* 0xfe6c (dead_belowdiaeresis) */ + { .altcode = NULL }, /* 0xfe6d (dead_invertedbreve) */ + { .altcode = NULL }, /* 0xfe6e (dead_belowcomma) */ + { .altcode = NULL }, /* 0xfe6f (dead_currency) */ + { .altcode = NULL }, /* 0xfe70 (AccessX_Enable) */ + { .altcode = NULL }, /* 0xfe71 (AccessX_Feedback_Enable) */ + { .altcode = NULL }, /* 0xfe72 (RepeatKeys_Enable) */ + { .altcode = NULL }, /* 0xfe73 (SlowKeys_Enable) */ + { .altcode = NULL }, /* 0xfe74 (BounceKeys_Enable) */ + { .altcode = NULL }, /* 0xfe75 (StickyKeys_Enable) */ + { .altcode = NULL }, /* 0xfe76 (MouseKeys_Enable) */ + { .altcode = NULL }, /* 0xfe77 (MouseKeys_Accel_Enable) */ + { .altcode = NULL }, /* 0xfe78 (Overlay1_Enable) */ + { .altcode = NULL }, /* 0xfe79 (Overlay2_Enable) */ + { .altcode = NULL }, /* 0xfe7a (AudibleBell_Enable) */ + { .altcode = NULL }, /* 0xfe7b */ + { .altcode = NULL }, /* 0xfe7c */ + { .altcode = NULL }, /* 0xfe7d */ + { .altcode = NULL }, /* 0xfe7e */ + { .altcode = NULL }, /* 0xfe7f */ + { .altcode = NULL }, /* 0xfe80 (dead_a) */ + { .altcode = NULL }, /* 0xfe81 (dead_A) */ + { .altcode = NULL }, /* 0xfe82 (dead_e) */ + { .altcode = NULL }, /* 0xfe83 (dead_E) */ + { .altcode = NULL }, /* 0xfe84 (dead_i) */ + { .altcode = NULL }, /* 0xfe85 (dead_I) */ + { .altcode = NULL }, /* 0xfe86 (dead_o) */ + { .altcode = NULL }, /* 0xfe87 (dead_O) */ + { .altcode = NULL }, /* 0xfe88 (dead_u) */ + { .altcode = NULL }, /* 0xfe89 (dead_U) */ + { .altcode = NULL }, /* 0xfe8a (dead_small_schwa) */ + { .altcode = NULL }, /* 0xfe8b (dead_capital_schwa) */ + { .altcode = NULL }, /* 0xfe8c */ + { .altcode = NULL }, /* 0xfe8d */ + { .altcode = NULL }, /* 0xfe8e */ + { .altcode = NULL }, /* 0xfe8f */ + { .altcode = NULL }, /* 0xfe90 */ + { .altcode = NULL }, /* 0xfe91 */ + { .altcode = NULL }, /* 0xfe92 */ + { .altcode = NULL }, /* 0xfe93 */ + { .altcode = NULL }, /* 0xfe94 */ + { .altcode = NULL }, /* 0xfe95 */ + { .altcode = NULL }, /* 0xfe96 */ + { .altcode = NULL }, /* 0xfe97 */ + { .altcode = NULL }, /* 0xfe98 */ + { .altcode = NULL }, /* 0xfe99 */ + { .altcode = NULL }, /* 0xfe9a */ + { .altcode = NULL }, /* 0xfe9b */ + { .altcode = NULL }, /* 0xfe9c */ + { .altcode = NULL }, /* 0xfe9d */ + { .altcode = NULL }, /* 0xfe9e */ + { .altcode = NULL }, /* 0xfe9f */ + { .altcode = NULL }, /* 0xfea0 */ + { .altcode = NULL }, /* 0xfea1 */ + { .altcode = NULL }, /* 0xfea2 */ + { .altcode = NULL }, /* 0xfea3 */ + { .altcode = NULL }, /* 0xfea4 */ + { .altcode = NULL }, /* 0xfea5 */ + { .altcode = NULL }, /* 0xfea6 */ + { .altcode = NULL }, /* 0xfea7 */ + { .altcode = NULL }, /* 0xfea8 */ + { .altcode = NULL }, /* 0xfea9 */ + { .altcode = NULL }, /* 0xfeaa */ + { .altcode = NULL }, /* 0xfeab */ + { .altcode = NULL }, /* 0xfeac */ + { .altcode = NULL }, /* 0xfead */ + { .altcode = NULL }, /* 0xfeae */ + { .altcode = NULL }, /* 0xfeaf */ + { .altcode = NULL }, /* 0xfeb0 */ + { .altcode = NULL }, /* 0xfeb1 */ + { .altcode = NULL }, /* 0xfeb2 */ + { .altcode = NULL }, /* 0xfeb3 */ + { .altcode = NULL }, /* 0xfeb4 */ + { .altcode = NULL }, /* 0xfeb5 */ + { .altcode = NULL }, /* 0xfeb6 */ + { .altcode = NULL }, /* 0xfeb7 */ + { .altcode = NULL }, /* 0xfeb8 */ + { .altcode = NULL }, /* 0xfeb9 */ + { .altcode = NULL }, /* 0xfeba */ + { .altcode = NULL }, /* 0xfebb */ + { .altcode = NULL }, /* 0xfebc */ + { .altcode = NULL }, /* 0xfebd */ + { .altcode = NULL }, /* 0xfebe */ + { .altcode = NULL }, /* 0xfebf */ + { .altcode = NULL }, /* 0xfec0 */ + { .altcode = NULL }, /* 0xfec1 */ + { .altcode = NULL }, /* 0xfec2 */ + { .altcode = NULL }, /* 0xfec3 */ + { .altcode = NULL }, /* 0xfec4 */ + { .altcode = NULL }, /* 0xfec5 */ + { .altcode = NULL }, /* 0xfec6 */ + { .altcode = NULL }, /* 0xfec7 */ + { .altcode = NULL }, /* 0xfec8 */ + { .altcode = NULL }, /* 0xfec9 */ + { .altcode = NULL }, /* 0xfeca */ + { .altcode = NULL }, /* 0xfecb */ + { .altcode = NULL }, /* 0xfecc */ + { .altcode = NULL }, /* 0xfecd */ + { .altcode = NULL }, /* 0xfece */ + { .altcode = NULL }, /* 0xfecf */ + { .altcode = NULL }, /* 0xfed0 (First_Virtual_Screen) */ + { .altcode = NULL }, /* 0xfed1 (Prev_Virtual_Screen) */ + { .altcode = NULL }, /* 0xfed2 (Next_Virtual_Screen) */ + { .altcode = NULL }, /* 0xfed3 */ + { .altcode = NULL }, /* 0xfed4 (Last_Virtual_Screen) */ + { .altcode = NULL }, /* 0xfed5 (Terminate_Server) */ + { .altcode = NULL }, /* 0xfed6 */ + { .altcode = NULL }, /* 0xfed7 */ + { .altcode = NULL }, /* 0xfed8 */ + { .altcode = NULL }, /* 0xfed9 */ + { .altcode = NULL }, /* 0xfeda */ + { .altcode = NULL }, /* 0xfedb */ + { .altcode = NULL }, /* 0xfedc */ + { .altcode = NULL }, /* 0xfedd */ + { .altcode = NULL }, /* 0xfede */ + { .altcode = NULL }, /* 0xfedf */ + { .altcode = NULL }, /* 0xfee0 (Pointer_Left) */ + { .altcode = NULL }, /* 0xfee1 (Pointer_Right) */ + { .altcode = NULL }, /* 0xfee2 (Pointer_Up) */ + { .altcode = NULL }, /* 0xfee3 (Pointer_Down) */ + { .altcode = NULL }, /* 0xfee4 (Pointer_UpLeft) */ + { .altcode = NULL }, /* 0xfee5 (Pointer_UpRight) */ + { .altcode = NULL }, /* 0xfee6 (Pointer_DownLeft) */ + { .altcode = NULL }, /* 0xfee7 (Pointer_DownRight) */ + { .altcode = NULL }, /* 0xfee8 (Pointer_Button_Dflt) */ + { .altcode = NULL }, /* 0xfee9 (Pointer_Button1) */ + { .altcode = NULL }, /* 0xfeea (Pointer_Button2) */ + { .altcode = NULL }, /* 0xfeeb (Pointer_Button3) */ + { .altcode = NULL }, /* 0xfeec (Pointer_Button4) */ + { .altcode = NULL }, /* 0xfeed (Pointer_Button5) */ + { .altcode = NULL }, /* 0xfeee (Pointer_DblClick_Dflt) */ + { .altcode = NULL }, /* 0xfeef (Pointer_DblClick1) */ + { .altcode = NULL }, /* 0xfef0 (Pointer_DblClick2) */ + { .altcode = NULL }, /* 0xfef1 (Pointer_DblClick3) */ + { .altcode = NULL }, /* 0xfef2 (Pointer_DblClick4) */ + { .altcode = NULL }, /* 0xfef3 (Pointer_DblClick5) */ + { .altcode = NULL }, /* 0xfef4 (Pointer_Drag_Dflt) */ + { .altcode = NULL }, /* 0xfef5 (Pointer_Drag1) */ + { .altcode = NULL }, /* 0xfef6 (Pointer_Drag2) */ + { .altcode = NULL }, /* 0xfef7 (Pointer_Drag3) */ + { .altcode = NULL }, /* 0xfef8 (Pointer_Drag4) */ + { .altcode = NULL }, /* 0xfef9 (Pointer_EnableKeys) */ + { .altcode = NULL }, /* 0xfefa (Pointer_Accelerate) */ + { .altcode = NULL }, /* 0xfefb (Pointer_DfltBtnNext) */ + { .altcode = NULL }, /* 0xfefc (Pointer_DfltBtnPrev) */ + { .altcode = NULL }, /* 0xfefd (Pointer_Drag5) */ + { .altcode = NULL }, /* 0xfefe */ + { .altcode = NULL }, /* 0xfeff */ }, { /* 0xff?? */ - { .altcode = NULL }, /* 0xff00 */ - { .altcode = NULL }, /* 0xff01 */ - { .altcode = NULL }, /* 0xff02 */ - { .altcode = NULL }, /* 0xff03 */ - { .altcode = NULL }, /* 0xff04 */ - { .altcode = NULL }, /* 0xff05 */ - { .altcode = NULL }, /* 0xff06 */ - { .altcode = NULL }, /* 0xff07 */ - { .altcode = NULL }, /* 0xff08 (BackSpace) */ - { .altcode = NULL }, /* 0xff09 (Tab) */ - { .altcode = NULL }, /* 0xff0a (Linefeed) */ - { .altcode = NULL }, /* 0xff0b (Clear) */ - { .altcode = NULL }, /* 0xff0c */ - { .altcode = NULL }, /* 0xff0d (Return) */ - { .altcode = NULL }, /* 0xff0e */ - { .altcode = NULL }, /* 0xff0f */ - { .altcode = NULL }, /* 0xff10 */ - { .altcode = NULL }, /* 0xff11 */ - { .altcode = NULL }, /* 0xff12 */ - { .altcode = NULL }, /* 0xff13 (Pause) */ - { .altcode = NULL }, /* 0xff14 (Scroll_Lock) */ - { .altcode = NULL }, /* 0xff15 (Sys_Req) */ - { .altcode = NULL }, /* 0xff16 */ - { .altcode = NULL }, /* 0xff17 */ - { .altcode = NULL }, /* 0xff18 */ - { .altcode = NULL }, /* 0xff19 */ - { .altcode = NULL }, /* 0xff1a */ - { .altcode = NULL }, /* 0xff1b (Escape) */ - { .altcode = NULL }, /* 0xff1c */ - { .altcode = NULL }, /* 0xff1d */ - { .altcode = NULL }, /* 0xff1e */ - { .altcode = NULL }, /* 0xff1f */ - { .altcode = NULL }, /* 0xff20 (Multi_key) */ - { .altcode = NULL }, /* 0xff21 (Kanji) */ - { .altcode = NULL }, /* 0xff22 (Muhenkan) */ - { .altcode = NULL }, /* 0xff23 (Henkan) */ - { .altcode = NULL }, /* 0xff24 (Romaji) */ - { .altcode = NULL }, /* 0xff25 (Hiragana) */ - { .altcode = NULL }, /* 0xff26 (Katakana) */ - { .altcode = NULL }, /* 0xff27 (Hiragana_Katakana) */ - { .altcode = NULL }, /* 0xff28 (Zenkaku) */ - { .altcode = NULL }, /* 0xff29 (Hankaku) */ - { .altcode = NULL }, /* 0xff2a (Zenkaku_Hankaku) */ - { .altcode = NULL }, /* 0xff2b (Touroku) */ - { .altcode = NULL }, /* 0xff2c (Massyo) */ - { .altcode = NULL }, /* 0xff2d (Kana_Lock) */ - { .altcode = NULL }, /* 0xff2e (Kana_Shift) */ - { .altcode = NULL }, /* 0xff2f (Eisu_Shift) */ - { .altcode = NULL }, /* 0xff30 (Eisu_toggle) */ - { .altcode = NULL }, /* 0xff31 (Hangul) */ - { .altcode = NULL }, /* 0xff32 (Hangul_Start) */ - { .altcode = NULL }, /* 0xff33 (Hangul_End) */ - { .altcode = NULL }, /* 0xff34 (Hangul_Hanja) */ - { .altcode = NULL }, /* 0xff35 (Hangul_Jamo) */ - { .altcode = NULL }, /* 0xff36 (Hangul_Romaja) */ - { .altcode = NULL }, /* 0xff37 (Hangul_Codeinput) */ - { .altcode = NULL }, /* 0xff38 (Hangul_Jeonja) */ - { .altcode = NULL }, /* 0xff39 (Hangul_Banja) */ - { .altcode = NULL }, /* 0xff3a (Hangul_PreHanja) */ - { .altcode = NULL }, /* 0xff3b (Hangul_PostHanja) */ - { .altcode = NULL }, /* 0xff3c (Hangul_SingleCandidate) */ - { .altcode = NULL }, /* 0xff3d (Hangul_MultipleCandidate) */ - { .altcode = NULL }, /* 0xff3e (Hangul_PreviousCandidate) */ - { .altcode = NULL }, /* 0xff3f (Hangul_Special) */ - { .altcode = NULL }, /* 0xff40 */ - { .altcode = NULL }, /* 0xff41 */ - { .altcode = NULL }, /* 0xff42 */ - { .altcode = NULL }, /* 0xff43 */ - { .altcode = NULL }, /* 0xff44 */ - { .altcode = NULL }, /* 0xff45 */ - { .altcode = NULL }, /* 0xff46 */ - { .altcode = NULL }, /* 0xff47 */ - { .altcode = NULL }, /* 0xff48 */ - { .altcode = NULL }, /* 0xff49 */ - { .altcode = NULL }, /* 0xff4a */ - { .altcode = NULL }, /* 0xff4b */ - { .altcode = NULL }, /* 0xff4c */ - { .altcode = NULL }, /* 0xff4d */ - { .altcode = NULL }, /* 0xff4e */ - { .altcode = NULL }, /* 0xff4f */ - { .altcode = NULL }, /* 0xff50 (Home) */ - { .altcode = NULL }, /* 0xff51 (Left) */ - { .altcode = NULL }, /* 0xff52 (Up) */ - { .altcode = NULL }, /* 0xff53 (Right) */ - { .altcode = NULL }, /* 0xff54 (Down) */ - { .altcode = NULL }, /* 0xff55 (Page_Up) */ - { .altcode = NULL }, /* 0xff56 (Page_Down) */ - { .altcode = NULL }, /* 0xff57 (End) */ - { .altcode = NULL }, /* 0xff58 (Begin) */ - { .altcode = NULL }, /* 0xff59 */ - { .altcode = NULL }, /* 0xff5a */ - { .altcode = NULL }, /* 0xff5b */ - { .altcode = NULL }, /* 0xff5c */ - { .altcode = NULL }, /* 0xff5d */ - { .altcode = NULL }, /* 0xff5e */ - { .altcode = NULL }, /* 0xff5f */ - { .altcode = NULL }, /* 0xff60 (Select) */ - { .altcode = NULL }, /* 0xff61 (Print) */ - { .altcode = NULL }, /* 0xff62 (Execute) */ - { .altcode = NULL }, /* 0xff63 (Insert) */ - { .altcode = NULL }, /* 0xff64 */ - { .altcode = NULL }, /* 0xff65 (Undo) */ - { .altcode = NULL }, /* 0xff66 (Redo) */ - { .altcode = NULL }, /* 0xff67 (Menu) */ - { .altcode = NULL }, /* 0xff68 (Find) */ - { .altcode = NULL }, /* 0xff69 (Cancel) */ - { .altcode = NULL }, /* 0xff6a (Help) */ - { .altcode = NULL }, /* 0xff6b (Break) */ - { .altcode = NULL }, /* 0xff6c */ - { .altcode = NULL }, /* 0xff6d */ - { .altcode = NULL }, /* 0xff6e */ - { .altcode = NULL }, /* 0xff6f */ - { .altcode = NULL }, /* 0xff70 */ - { .altcode = NULL }, /* 0xff71 */ - { .altcode = NULL }, /* 0xff72 */ - { .altcode = NULL }, /* 0xff73 */ - { .altcode = NULL }, /* 0xff74 */ - { .altcode = NULL }, /* 0xff75 */ - { .altcode = NULL }, /* 0xff76 */ - { .altcode = NULL }, /* 0xff77 */ - { .altcode = NULL }, /* 0xff78 */ - { .altcode = NULL }, /* 0xff79 */ - { .altcode = NULL }, /* 0xff7a */ - { .altcode = NULL }, /* 0xff7b */ - { .altcode = NULL }, /* 0xff7c */ - { .altcode = NULL }, /* 0xff7d */ - { .altcode = NULL }, /* 0xff7e (Hangul_switch) */ - { .altcode = NULL }, /* 0xff7f (Num_Lock) */ - { .altcode = NULL }, /* 0xff80 (KP_Space) */ - { .altcode = NULL }, /* 0xff81 */ - { .altcode = NULL }, /* 0xff82 */ - { .altcode = NULL }, /* 0xff83 */ - { .altcode = NULL }, /* 0xff84 */ - { .altcode = NULL }, /* 0xff85 */ - { .altcode = NULL }, /* 0xff86 */ - { .altcode = NULL }, /* 0xff87 */ - { .altcode = NULL }, /* 0xff88 */ - { .altcode = NULL }, /* 0xff89 (KP_Tab) */ - { .altcode = NULL }, /* 0xff8a */ - { .altcode = NULL }, /* 0xff8b */ - { .altcode = NULL }, /* 0xff8c */ - { .altcode = NULL }, /* 0xff8d (KP_Enter) */ - { .altcode = NULL }, /* 0xff8e */ - { .altcode = NULL }, /* 0xff8f */ - { .altcode = NULL }, /* 0xff90 */ - { .altcode = NULL }, /* 0xff91 (KP_F1) */ - { .altcode = NULL }, /* 0xff92 (KP_F2) */ - { .altcode = NULL }, /* 0xff93 (KP_F3) */ - { .altcode = NULL }, /* 0xff94 (KP_F4) */ - { .altcode = NULL }, /* 0xff95 (KP_Home) */ - { .altcode = NULL }, /* 0xff96 (KP_Left) */ - { .altcode = NULL }, /* 0xff97 (KP_Up) */ - { .altcode = NULL }, /* 0xff98 (KP_Right) */ - { .altcode = NULL }, /* 0xff99 (KP_Down) */ - { .altcode = NULL }, /* 0xff9a (KP_Page_Up) */ - { .altcode = NULL }, /* 0xff9b (KP_Page_Down) */ - { .altcode = NULL }, /* 0xff9c (KP_End) */ - { .altcode = NULL }, /* 0xff9d (KP_Begin) */ - { .altcode = NULL }, /* 0xff9e (KP_Insert) */ - { .altcode = NULL }, /* 0xff9f (KP_Delete) */ - { .altcode = NULL }, /* 0xffa0 */ - { .altcode = NULL }, /* 0xffa1 */ - { .altcode = NULL }, /* 0xffa2 */ - { .altcode = NULL }, /* 0xffa3 */ - { .altcode = NULL }, /* 0xffa4 */ - { .altcode = NULL }, /* 0xffa5 */ - { .altcode = NULL }, /* 0xffa6 */ - { .altcode = NULL }, /* 0xffa7 */ - { .altcode = NULL }, /* 0xffa8 */ - { .altcode = NULL }, /* 0xffa9 */ - { .altcode = NULL }, /* 0xffaa (KP_Multiply) */ - { .altcode = NULL }, /* 0xffab (KP_Add) */ - { .altcode = NULL }, /* 0xffac (KP_Separator) */ - { .altcode = NULL }, /* 0xffad (KP_Subtract) */ - { .altcode = NULL }, /* 0xffae (KP_Decimal) */ - { .altcode = NULL }, /* 0xffaf (KP_Divide) */ - { .altcode = NULL }, /* 0xffb0 (KP_0) */ - { .altcode = NULL }, /* 0xffb1 (KP_1) */ - { .altcode = NULL }, /* 0xffb2 (KP_2) */ - { .altcode = NULL }, /* 0xffb3 (KP_3) */ - { .altcode = NULL }, /* 0xffb4 (KP_4) */ - { .altcode = NULL }, /* 0xffb5 (KP_5) */ - { .altcode = NULL }, /* 0xffb6 (KP_6) */ - { .altcode = NULL }, /* 0xffb7 (KP_7) */ - { .altcode = NULL }, /* 0xffb8 (KP_8) */ - { .altcode = NULL }, /* 0xffb9 (KP_9) */ - { .altcode = NULL }, /* 0xffba */ - { .altcode = NULL }, /* 0xffbb */ - { .altcode = NULL }, /* 0xffbc */ - { .altcode = NULL }, /* 0xffbd (KP_Equal) */ - { .altcode = NULL }, /* 0xffbe (F1) */ - { .altcode = NULL }, /* 0xffbf (F2) */ - { .altcode = NULL }, /* 0xffc0 (F3) */ - { .altcode = NULL }, /* 0xffc1 (F4) */ - { .altcode = NULL }, /* 0xffc2 (F5) */ - { .altcode = NULL }, /* 0xffc3 (F6) */ - { .altcode = NULL }, /* 0xffc4 (F7) */ - { .altcode = NULL }, /* 0xffc5 (F8) */ - { .altcode = NULL }, /* 0xffc6 (F9) */ - { .altcode = NULL }, /* 0xffc7 (F10) */ - { .altcode = NULL }, /* 0xffc8 (L1) */ - { .altcode = NULL }, /* 0xffc9 (L2) */ - { .altcode = NULL }, /* 0xffca (L3) */ - { .altcode = NULL }, /* 0xffcb (L4) */ - { .altcode = NULL }, /* 0xffcc (L5) */ - { .altcode = NULL }, /* 0xffcd (L6) */ - { .altcode = NULL }, /* 0xffce (L7) */ - { .altcode = NULL }, /* 0xffcf (L8) */ - { .altcode = NULL }, /* 0xffd0 (L9) */ - { .altcode = NULL }, /* 0xffd1 (L10) */ - { .altcode = NULL }, /* 0xffd2 (R1) */ - { .altcode = NULL }, /* 0xffd3 (R2) */ - { .altcode = NULL }, /* 0xffd4 (R3) */ - { .altcode = NULL }, /* 0xffd5 (R4) */ - { .altcode = NULL }, /* 0xffd6 (R5) */ - { .altcode = NULL }, /* 0xffd7 (R6) */ - { .altcode = NULL }, /* 0xffd8 (R7) */ - { .altcode = NULL }, /* 0xffd9 (R8) */ - { .altcode = NULL }, /* 0xffda (R9) */ - { .altcode = NULL }, /* 0xffdb (R10) */ - { .altcode = NULL }, /* 0xffdc (R11) */ - { .altcode = NULL }, /* 0xffdd (R12) */ - { .altcode = NULL }, /* 0xffde (R13) */ - { .altcode = NULL }, /* 0xffdf (R14) */ - { .altcode = NULL }, /* 0xffe0 (R15) */ - { .altcode = NULL }, /* 0xffe1 (Shift_L) */ - { .altcode = NULL }, /* 0xffe2 (Shift_R) */ - { .altcode = NULL }, /* 0xffe3 (Control_L) */ - { .altcode = NULL }, /* 0xffe4 (Control_R) */ - { .altcode = NULL }, /* 0xffe5 (Caps_Lock) */ - { .altcode = NULL }, /* 0xffe6 (Shift_Lock) */ - { .altcode = NULL }, /* 0xffe7 (Meta_L) */ - { .altcode = NULL }, /* 0xffe8 (Meta_R) */ - { .altcode = NULL }, /* 0xffe9 (Alt_L) */ - { .altcode = NULL }, /* 0xffea (Alt_R) */ - { .altcode = NULL }, /* 0xffeb (Super_L) */ - { .altcode = NULL }, /* 0xffec (Super_R) */ - { .altcode = NULL }, /* 0xffed (Hyper_L) */ - { .altcode = NULL }, /* 0xffee (Hyper_R) */ - { .altcode = NULL }, /* 0xffef */ - { .altcode = NULL }, /* 0xfff0 */ - { .altcode = NULL }, /* 0xfff1 (braille_dot_1) */ - { .altcode = NULL }, /* 0xfff2 (braille_dot_2) */ - { .altcode = NULL }, /* 0xfff3 (braille_dot_3) */ - { .altcode = NULL }, /* 0xfff4 (braille_dot_4) */ - { .altcode = NULL }, /* 0xfff5 (braille_dot_5) */ - { .altcode = NULL }, /* 0xfff6 (braille_dot_6) */ - { .altcode = NULL }, /* 0xfff7 (braille_dot_7) */ - { .altcode = NULL }, /* 0xfff8 (braille_dot_8) */ - { .altcode = NULL }, /* 0xfff9 (braille_dot_9) */ - { .altcode = NULL }, /* 0xfffa (braille_dot_10) */ - { .altcode = NULL }, /* 0xfffb */ - { .altcode = NULL }, /* 0xfffc */ - { .altcode = NULL }, /* 0xfffd */ - { .altcode = NULL }, /* 0xfffe */ - { .altcode = NULL }, /* 0xffff (Delete) */ + { .altcode = NULL }, /* 0xff00 */ + { .altcode = NULL }, /* 0xff01 */ + { .altcode = NULL }, /* 0xff02 */ + { .altcode = NULL }, /* 0xff03 */ + { .altcode = NULL }, /* 0xff04 */ + { .altcode = NULL }, /* 0xff05 */ + { .altcode = NULL }, /* 0xff06 */ + { .altcode = NULL }, /* 0xff07 */ + { .altcode = NULL }, /* 0xff08 (BackSpace) */ + { .altcode = NULL }, /* 0xff09 (Tab) */ + { .altcode = NULL }, /* 0xff0a (Linefeed) */ + { .altcode = NULL }, /* 0xff0b (Clear) */ + { .altcode = NULL }, /* 0xff0c */ + { .altcode = NULL }, /* 0xff0d (Return) */ + { .altcode = NULL }, /* 0xff0e */ + { .altcode = NULL }, /* 0xff0f */ + { .altcode = NULL }, /* 0xff10 */ + { .altcode = NULL }, /* 0xff11 */ + { .altcode = NULL }, /* 0xff12 */ + { .altcode = NULL }, /* 0xff13 (Pause) */ + { .altcode = NULL }, /* 0xff14 (Scroll_Lock) */ + { .altcode = NULL }, /* 0xff15 (Sys_Req) */ + { .altcode = NULL }, /* 0xff16 */ + { .altcode = NULL }, /* 0xff17 */ + { .altcode = NULL }, /* 0xff18 */ + { .altcode = NULL }, /* 0xff19 */ + { .altcode = NULL }, /* 0xff1a */ + { .altcode = NULL }, /* 0xff1b (Escape) */ + { .altcode = NULL }, /* 0xff1c */ + { .altcode = NULL }, /* 0xff1d */ + { .altcode = NULL }, /* 0xff1e */ + { .altcode = NULL }, /* 0xff1f */ + { .altcode = NULL }, /* 0xff20 (Multi_key) */ + { .altcode = NULL }, /* 0xff21 (Kanji) */ + { .altcode = NULL }, /* 0xff22 (Muhenkan) */ + { .altcode = NULL }, /* 0xff23 (Henkan) */ + { .altcode = NULL }, /* 0xff24 (Romaji) */ + { .altcode = NULL }, /* 0xff25 (Hiragana) */ + { .altcode = NULL }, /* 0xff26 (Katakana) */ + { .altcode = NULL }, /* 0xff27 (Hiragana_Katakana) */ + { .altcode = NULL }, /* 0xff28 (Zenkaku) */ + { .altcode = NULL }, /* 0xff29 (Hankaku) */ + { .altcode = NULL }, /* 0xff2a (Zenkaku_Hankaku) */ + { .altcode = NULL }, /* 0xff2b (Touroku) */ + { .altcode = NULL }, /* 0xff2c (Massyo) */ + { .altcode = NULL }, /* 0xff2d (Kana_Lock) */ + { .altcode = NULL }, /* 0xff2e (Kana_Shift) */ + { .altcode = NULL }, /* 0xff2f (Eisu_Shift) */ + { .altcode = NULL }, /* 0xff30 (Eisu_toggle) */ + { .altcode = NULL }, /* 0xff31 (Hangul) */ + { .altcode = NULL }, /* 0xff32 (Hangul_Start) */ + { .altcode = NULL }, /* 0xff33 (Hangul_End) */ + { .altcode = NULL }, /* 0xff34 (Hangul_Hanja) */ + { .altcode = NULL }, /* 0xff35 (Hangul_Jamo) */ + { .altcode = NULL }, /* 0xff36 (Hangul_Romaja) */ + { .altcode = NULL }, /* 0xff37 (Hangul_Codeinput) */ + { .altcode = NULL }, /* 0xff38 (Hangul_Jeonja) */ + { .altcode = NULL }, /* 0xff39 (Hangul_Banja) */ + { .altcode = NULL }, /* 0xff3a (Hangul_PreHanja) */ + { .altcode = NULL }, /* 0xff3b (Hangul_PostHanja) */ + { .altcode = NULL }, /* 0xff3c (Hangul_SingleCandidate) */ + { .altcode = NULL }, /* 0xff3d (Hangul_MultipleCandidate) */ + { .altcode = NULL }, /* 0xff3e (Hangul_PreviousCandidate) */ + { .altcode = NULL }, /* 0xff3f (Hangul_Special) */ + { .altcode = NULL }, /* 0xff40 */ + { .altcode = NULL }, /* 0xff41 */ + { .altcode = NULL }, /* 0xff42 */ + { .altcode = NULL }, /* 0xff43 */ + { .altcode = NULL }, /* 0xff44 */ + { .altcode = NULL }, /* 0xff45 */ + { .altcode = NULL }, /* 0xff46 */ + { .altcode = NULL }, /* 0xff47 */ + { .altcode = NULL }, /* 0xff48 */ + { .altcode = NULL }, /* 0xff49 */ + { .altcode = NULL }, /* 0xff4a */ + { .altcode = NULL }, /* 0xff4b */ + { .altcode = NULL }, /* 0xff4c */ + { .altcode = NULL }, /* 0xff4d */ + { .altcode = NULL }, /* 0xff4e */ + { .altcode = NULL }, /* 0xff4f */ + { .altcode = NULL }, /* 0xff50 (Home) */ + { .altcode = NULL }, /* 0xff51 (Left) */ + { .altcode = NULL }, /* 0xff52 (Up) */ + { .altcode = NULL }, /* 0xff53 (Right) */ + { .altcode = NULL }, /* 0xff54 (Down) */ + { .altcode = NULL }, /* 0xff55 (Page_Up) */ + { .altcode = NULL }, /* 0xff56 (Page_Down) */ + { .altcode = NULL }, /* 0xff57 (End) */ + { .altcode = NULL }, /* 0xff58 (Begin) */ + { .altcode = NULL }, /* 0xff59 */ + { .altcode = NULL }, /* 0xff5a */ + { .altcode = NULL }, /* 0xff5b */ + { .altcode = NULL }, /* 0xff5c */ + { .altcode = NULL }, /* 0xff5d */ + { .altcode = NULL }, /* 0xff5e */ + { .altcode = NULL }, /* 0xff5f */ + { .altcode = NULL }, /* 0xff60 (Select) */ + { .altcode = NULL }, /* 0xff61 (Print) */ + { .altcode = NULL }, /* 0xff62 (Execute) */ + { .altcode = NULL }, /* 0xff63 (Insert) */ + { .altcode = NULL }, /* 0xff64 */ + { .altcode = NULL }, /* 0xff65 (Undo) */ + { .altcode = NULL }, /* 0xff66 (Redo) */ + { .altcode = NULL }, /* 0xff67 (Menu) */ + { .altcode = NULL }, /* 0xff68 (Find) */ + { .altcode = NULL }, /* 0xff69 (Cancel) */ + { .altcode = NULL }, /* 0xff6a (Help) */ + { .altcode = NULL }, /* 0xff6b (Break) */ + { .altcode = NULL }, /* 0xff6c */ + { .altcode = NULL }, /* 0xff6d */ + { .altcode = NULL }, /* 0xff6e */ + { .altcode = NULL }, /* 0xff6f */ + { .altcode = NULL }, /* 0xff70 */ + { .altcode = NULL }, /* 0xff71 */ + { .altcode = NULL }, /* 0xff72 */ + { .altcode = NULL }, /* 0xff73 */ + { .altcode = NULL }, /* 0xff74 */ + { .altcode = NULL }, /* 0xff75 */ + { .altcode = NULL }, /* 0xff76 */ + { .altcode = NULL }, /* 0xff77 */ + { .altcode = NULL }, /* 0xff78 */ + { .altcode = NULL }, /* 0xff79 */ + { .altcode = NULL }, /* 0xff7a */ + { .altcode = NULL }, /* 0xff7b */ + { .altcode = NULL }, /* 0xff7c */ + { .altcode = NULL }, /* 0xff7d */ + { .altcode = NULL }, /* 0xff7e (Hangul_switch) */ + { .altcode = NULL }, /* 0xff7f (Num_Lock) */ + { .altcode = NULL }, /* 0xff80 (KP_Space) */ + { .altcode = NULL }, /* 0xff81 */ + { .altcode = NULL }, /* 0xff82 */ + { .altcode = NULL }, /* 0xff83 */ + { .altcode = NULL }, /* 0xff84 */ + { .altcode = NULL }, /* 0xff85 */ + { .altcode = NULL }, /* 0xff86 */ + { .altcode = NULL }, /* 0xff87 */ + { .altcode = NULL }, /* 0xff88 */ + { .altcode = NULL }, /* 0xff89 (KP_Tab) */ + { .altcode = NULL }, /* 0xff8a */ + { .altcode = NULL }, /* 0xff8b */ + { .altcode = NULL }, /* 0xff8c */ + { .altcode = NULL }, /* 0xff8d (KP_Enter) */ + { .altcode = NULL }, /* 0xff8e */ + { .altcode = NULL }, /* 0xff8f */ + { .altcode = NULL }, /* 0xff90 */ + { .altcode = NULL }, /* 0xff91 (KP_F1) */ + { .altcode = NULL }, /* 0xff92 (KP_F2) */ + { .altcode = NULL }, /* 0xff93 (KP_F3) */ + { .altcode = NULL }, /* 0xff94 (KP_F4) */ + { .altcode = NULL }, /* 0xff95 (KP_Home) */ + { .altcode = NULL }, /* 0xff96 (KP_Left) */ + { .altcode = NULL }, /* 0xff97 (KP_Up) */ + { .altcode = NULL }, /* 0xff98 (KP_Right) */ + { .altcode = NULL }, /* 0xff99 (KP_Down) */ + { .altcode = NULL }, /* 0xff9a (KP_Page_Up) */ + { .altcode = NULL }, /* 0xff9b (KP_Page_Down) */ + { .altcode = NULL }, /* 0xff9c (KP_End) */ + { .altcode = NULL }, /* 0xff9d (KP_Begin) */ + { .altcode = NULL }, /* 0xff9e (KP_Insert) */ + { .altcode = NULL }, /* 0xff9f (KP_Delete) */ + { .altcode = NULL }, /* 0xffa0 */ + { .altcode = NULL }, /* 0xffa1 */ + { .altcode = NULL }, /* 0xffa2 */ + { .altcode = NULL }, /* 0xffa3 */ + { .altcode = NULL }, /* 0xffa4 */ + { .altcode = NULL }, /* 0xffa5 */ + { .altcode = NULL }, /* 0xffa6 */ + { .altcode = NULL }, /* 0xffa7 */ + { .altcode = NULL }, /* 0xffa8 */ + { .altcode = NULL }, /* 0xffa9 */ + { .altcode = NULL }, /* 0xffaa (KP_Multiply) */ + { .altcode = NULL }, /* 0xffab (KP_Add) */ + { .altcode = NULL }, /* 0xffac (KP_Separator) */ + { .altcode = NULL }, /* 0xffad (KP_Subtract) */ + { .altcode = NULL }, /* 0xffae (KP_Decimal) */ + { .altcode = NULL }, /* 0xffaf (KP_Divide) */ + { .altcode = NULL }, /* 0xffb0 (KP_0) */ + { .altcode = NULL }, /* 0xffb1 (KP_1) */ + { .altcode = NULL }, /* 0xffb2 (KP_2) */ + { .altcode = NULL }, /* 0xffb3 (KP_3) */ + { .altcode = NULL }, /* 0xffb4 (KP_4) */ + { .altcode = NULL }, /* 0xffb5 (KP_5) */ + { .altcode = NULL }, /* 0xffb6 (KP_6) */ + { .altcode = NULL }, /* 0xffb7 (KP_7) */ + { .altcode = NULL }, /* 0xffb8 (KP_8) */ + { .altcode = NULL }, /* 0xffb9 (KP_9) */ + { .altcode = NULL }, /* 0xffba */ + { .altcode = NULL }, /* 0xffbb */ + { .altcode = NULL }, /* 0xffbc */ + { .altcode = NULL }, /* 0xffbd (KP_Equal) */ + { .altcode = NULL }, /* 0xffbe (F1) */ + { .altcode = NULL }, /* 0xffbf (F2) */ + { .altcode = NULL }, /* 0xffc0 (F3) */ + { .altcode = NULL }, /* 0xffc1 (F4) */ + { .altcode = NULL }, /* 0xffc2 (F5) */ + { .altcode = NULL }, /* 0xffc3 (F6) */ + { .altcode = NULL }, /* 0xffc4 (F7) */ + { .altcode = NULL }, /* 0xffc5 (F8) */ + { .altcode = NULL }, /* 0xffc6 (F9) */ + { .altcode = NULL }, /* 0xffc7 (F10) */ + { .altcode = NULL }, /* 0xffc8 (L1) */ + { .altcode = NULL }, /* 0xffc9 (L2) */ + { .altcode = NULL }, /* 0xffca (L3) */ + { .altcode = NULL }, /* 0xffcb (L4) */ + { .altcode = NULL }, /* 0xffcc (L5) */ + { .altcode = NULL }, /* 0xffcd (L6) */ + { .altcode = NULL }, /* 0xffce (L7) */ + { .altcode = NULL }, /* 0xffcf (L8) */ + { .altcode = NULL }, /* 0xffd0 (L9) */ + { .altcode = NULL }, /* 0xffd1 (L10) */ + { .altcode = NULL }, /* 0xffd2 (R1) */ + { .altcode = NULL }, /* 0xffd3 (R2) */ + { .altcode = NULL }, /* 0xffd4 (R3) */ + { .altcode = NULL }, /* 0xffd5 (R4) */ + { .altcode = NULL }, /* 0xffd6 (R5) */ + { .altcode = NULL }, /* 0xffd7 (R6) */ + { .altcode = NULL }, /* 0xffd8 (R7) */ + { .altcode = NULL }, /* 0xffd9 (R8) */ + { .altcode = NULL }, /* 0xffda (R9) */ + { .altcode = NULL }, /* 0xffdb (R10) */ + { .altcode = NULL }, /* 0xffdc (R11) */ + { .altcode = NULL }, /* 0xffdd (R12) */ + { .altcode = NULL }, /* 0xffde (R13) */ + { .altcode = NULL }, /* 0xffdf (R14) */ + { .altcode = NULL }, /* 0xffe0 (R15) */ + { .altcode = NULL }, /* 0xffe1 (Shift_L) */ + { .altcode = NULL }, /* 0xffe2 (Shift_R) */ + { .altcode = NULL }, /* 0xffe3 (Control_L) */ + { .altcode = NULL }, /* 0xffe4 (Control_R) */ + { .altcode = NULL }, /* 0xffe5 (Caps_Lock) */ + { .altcode = NULL }, /* 0xffe6 (Shift_Lock) */ + { .altcode = NULL }, /* 0xffe7 (Meta_L) */ + { .altcode = NULL }, /* 0xffe8 (Meta_R) */ + { .altcode = NULL }, /* 0xffe9 (Alt_L) */ + { .altcode = NULL }, /* 0xffea (Alt_R) */ + { .altcode = NULL }, /* 0xffeb (Super_L) */ + { .altcode = NULL }, /* 0xffec (Super_R) */ + { .altcode = NULL }, /* 0xffed (Hyper_L) */ + { .altcode = NULL }, /* 0xffee (Hyper_R) */ + { .altcode = NULL }, /* 0xffef */ + { .altcode = NULL }, /* 0xfff0 */ + { .altcode = NULL }, /* 0xfff1 (braille_dot_1) */ + { .altcode = NULL }, /* 0xfff2 (braille_dot_2) */ + { .altcode = NULL }, /* 0xfff3 (braille_dot_3) */ + { .altcode = NULL }, /* 0xfff4 (braille_dot_4) */ + { .altcode = NULL }, /* 0xfff5 (braille_dot_5) */ + { .altcode = NULL }, /* 0xfff6 (braille_dot_6) */ + { .altcode = NULL }, /* 0xfff7 (braille_dot_7) */ + { .altcode = NULL }, /* 0xfff8 (braille_dot_8) */ + { .altcode = NULL }, /* 0xfff9 (braille_dot_9) */ + { .altcode = NULL }, /* 0xfffa (braille_dot_10) */ + { .altcode = NULL }, /* 0xfffb */ + { .altcode = NULL }, /* 0xfffc */ + { .altcode = NULL }, /* 0xfffd */ + { .altcode = NULL }, /* 0xfffe */ + { .altcode = NULL }, /* 0xffff (Delete) */ }, }; From 65ee5e86b40845b3f621cf8a86ef52336de6acf5 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Tue, 20 Mar 2012 21:10:15 -0700 Subject: [PATCH 116/253] Fix padding for comment-only lines. --- protocols/rdp/src/rdp_keymap_alt.c | 40 +++++++++++++++--------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/protocols/rdp/src/rdp_keymap_alt.c b/protocols/rdp/src/rdp_keymap_alt.c index 70b5a805..af361fba 100644 --- a/protocols/rdp/src/rdp_keymap_alt.c +++ b/protocols/rdp/src/rdp_keymap_alt.c @@ -41,7 +41,7 @@ #include "rdp_keymap.h" const guac_rdp_keysym_altcode_map guac_rdp_keysym_altcode = { - { /* 0x00?? */ + { /* 0x00?? */ { .altcode = NULL }, /* 0x0000 */ { .altcode = NULL }, /* 0x0001 */ { .altcode = NULL }, /* 0x0002 */ @@ -299,7 +299,7 @@ const guac_rdp_keysym_altcode_map guac_rdp_keysym_altcode = { { .altcode = NULL }, /* 0x00fe (thorn) */ { .altcode = NULL }, /* 0x00ff (ydiaeresis) */ }, - { /* 0x01?? */ + { /* 0x01?? */ { .altcode = NULL }, /* 0x0100 */ { .altcode = NULL }, /* 0x0101 */ { .altcode = NULL }, /* 0x0102 */ @@ -557,7 +557,7 @@ const guac_rdp_keysym_altcode_map guac_rdp_keysym_altcode = { { .altcode = NULL }, /* 0x01fe (tcedilla) */ { .altcode = NULL }, /* 0x01ff (abovedot) */ }, - { /* 0x02?? */ + { /* 0x02?? */ { .altcode = NULL }, /* 0x0200 */ { .altcode = NULL }, /* 0x0201 */ { .altcode = NULL }, /* 0x0202 */ @@ -815,7 +815,7 @@ const guac_rdp_keysym_altcode_map guac_rdp_keysym_altcode = { { .altcode = NULL }, /* 0x02fe (scircumflex) */ { .altcode = NULL }, /* 0x02ff */ }, - { /* 0x03?? */ + { /* 0x03?? */ { .altcode = NULL }, /* 0x0300 */ { .altcode = NULL }, /* 0x0301 */ { .altcode = NULL }, /* 0x0302 */ @@ -1073,7 +1073,7 @@ const guac_rdp_keysym_altcode_map guac_rdp_keysym_altcode = { { .altcode = NULL }, /* 0x03fe (umacron) */ { .altcode = NULL }, /* 0x03ff */ }, - { /* 0x04?? */ + { /* 0x04?? */ { .altcode = NULL }, /* 0x0400 */ { .altcode = NULL }, /* 0x0401 */ { .altcode = NULL }, /* 0x0402 */ @@ -1331,7 +1331,7 @@ const guac_rdp_keysym_altcode_map guac_rdp_keysym_altcode = { { .altcode = NULL }, /* 0x04fe */ { .altcode = NULL }, /* 0x04ff */ }, - { /* 0x05?? */ + { /* 0x05?? */ { .altcode = NULL }, /* 0x0500 */ { .altcode = NULL }, /* 0x0501 */ { .altcode = NULL }, /* 0x0502 */ @@ -1589,7 +1589,7 @@ const guac_rdp_keysym_altcode_map guac_rdp_keysym_altcode = { { .altcode = NULL }, /* 0x05fe */ { .altcode = NULL }, /* 0x05ff */ }, - { /* 0x06?? */ + { /* 0x06?? */ { .altcode = NULL }, /* 0x0600 */ { .altcode = NULL }, /* 0x0601 */ { .altcode = NULL }, /* 0x0602 */ @@ -1847,7 +1847,7 @@ const guac_rdp_keysym_altcode_map guac_rdp_keysym_altcode = { { .altcode = NULL }, /* 0x06fe (Cyrillic_CHE) */ { .altcode = NULL }, /* 0x06ff (Cyrillic_HARDSIGN) */ }, - { /* 0x07?? */ + { /* 0x07?? */ { .altcode = NULL }, /* 0x0700 */ { .altcode = NULL }, /* 0x0701 */ { .altcode = NULL }, /* 0x0702 */ @@ -2105,7 +2105,7 @@ const guac_rdp_keysym_altcode_map guac_rdp_keysym_altcode = { { .altcode = NULL }, /* 0x07fe */ { .altcode = NULL }, /* 0x07ff */ }, - { /* 0x08?? */ + { /* 0x08?? */ { .altcode = NULL }, /* 0x0800 */ { .altcode = NULL }, /* 0x0801 */ { .altcode = NULL }, /* 0x0802 */ @@ -2363,7 +2363,7 @@ const guac_rdp_keysym_altcode_map guac_rdp_keysym_altcode = { { .altcode = NULL }, /* 0x08fe (downarrow) */ { .altcode = NULL }, /* 0x08ff */ }, - { /* 0x09?? */ + { /* 0x09?? */ { .altcode = NULL }, /* 0x0900 */ { .altcode = NULL }, /* 0x0901 */ { .altcode = NULL }, /* 0x0902 */ @@ -2621,7 +2621,7 @@ const guac_rdp_keysym_altcode_map guac_rdp_keysym_altcode = { { .altcode = NULL }, /* 0x09fe */ { .altcode = NULL }, /* 0x09ff */ }, - { /* 0x0a?? */ + { /* 0x0a?? */ { .altcode = NULL }, /* 0x0a00 */ { .altcode = NULL }, /* 0x0a01 */ { .altcode = NULL }, /* 0x0a02 */ @@ -2879,7 +2879,7 @@ const guac_rdp_keysym_altcode_map guac_rdp_keysym_altcode = { { .altcode = NULL }, /* 0x0afe (doublelowquotemark) */ { .altcode = NULL }, /* 0x0aff (cursor) */ }, - { /* 0x0b?? */ + { /* 0x0b?? */ { .altcode = NULL }, /* 0x0b00 */ { .altcode = NULL }, /* 0x0b01 */ { .altcode = NULL }, /* 0x0b02 */ @@ -3137,7 +3137,7 @@ const guac_rdp_keysym_altcode_map guac_rdp_keysym_altcode = { { .altcode = NULL }, /* 0x0bfe */ { .altcode = NULL }, /* 0x0bff */ }, - { /* 0x0c?? */ + { /* 0x0c?? */ { .altcode = NULL }, /* 0x0c00 */ { .altcode = NULL }, /* 0x0c01 */ { .altcode = NULL }, /* 0x0c02 */ @@ -3395,7 +3395,7 @@ const guac_rdp_keysym_altcode_map guac_rdp_keysym_altcode = { { .altcode = NULL }, /* 0x0cfe */ { .altcode = NULL }, /* 0x0cff */ }, - { /* 0x0d?? */ + { /* 0x0d?? */ { .altcode = NULL }, /* 0x0d00 */ { .altcode = NULL }, /* 0x0d01 */ { .altcode = NULL }, /* 0x0d02 */ @@ -3653,7 +3653,7 @@ const guac_rdp_keysym_altcode_map guac_rdp_keysym_altcode = { { .altcode = NULL }, /* 0x0dfe */ { .altcode = NULL }, /* 0x0dff */ }, - { /* 0x0e?? */ + { /* 0x0e?? */ { .altcode = NULL }, /* 0x0e00 */ { .altcode = NULL }, /* 0x0e01 */ { .altcode = NULL }, /* 0x0e02 */ @@ -3915,7 +3915,7 @@ const guac_rdp_keysym_altcode_map guac_rdp_keysym_altcode = { {{NULL }}, /* 0x10?? */ {{NULL }}, /* 0x11?? */ {{NULL }}, /* 0x12?? */ - { /* 0x13?? */ + { /* 0x13?? */ { .altcode = NULL }, /* 0x1300 */ { .altcode = NULL }, /* 0x1301 */ { .altcode = NULL }, /* 0x1302 */ @@ -4185,7 +4185,7 @@ const guac_rdp_keysym_altcode_map guac_rdp_keysym_altcode = { {{NULL }}, /* 0x1d?? */ {{NULL }}, /* 0x1e?? */ {{NULL }}, /* 0x1f?? */ - { /* 0x20?? */ + { /* 0x20?? */ { .altcode = NULL }, /* 0x2000 */ { .altcode = NULL }, /* 0x2001 */ { .altcode = NULL }, /* 0x2002 */ @@ -4663,7 +4663,7 @@ const guac_rdp_keysym_altcode_map guac_rdp_keysym_altcode = { {{NULL }}, /* 0xfa?? */ {{NULL }}, /* 0xfb?? */ {{NULL }}, /* 0xfc?? */ - { /* 0xfd?? */ + { /* 0xfd?? */ { .altcode = NULL }, /* 0xfd00 */ { .altcode = NULL }, /* 0xfd01 (3270_Duplicate) */ { .altcode = NULL }, /* 0xfd02 (3270_FieldMark) */ @@ -4921,7 +4921,7 @@ const guac_rdp_keysym_altcode_map guac_rdp_keysym_altcode = { { .altcode = NULL }, /* 0xfdfe */ { .altcode = NULL }, /* 0xfdff */ }, - { /* 0xfe?? */ + { /* 0xfe?? */ { .altcode = NULL }, /* 0xfe00 */ { .altcode = NULL }, /* 0xfe01 (ISO_Lock) */ { .altcode = NULL }, /* 0xfe02 (ISO_Level2_Latch) */ @@ -5179,7 +5179,7 @@ const guac_rdp_keysym_altcode_map guac_rdp_keysym_altcode = { { .altcode = NULL }, /* 0xfefe */ { .altcode = NULL }, /* 0xfeff */ }, - { /* 0xff?? */ + { /* 0xff?? */ { .altcode = NULL }, /* 0xff00 */ { .altcode = NULL }, /* 0xff01 */ { .altcode = NULL }, /* 0xff02 */ From 52eddf515af440f521f527368f0a9550a2e4fed7 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Tue, 20 Mar 2012 22:11:50 -0700 Subject: [PATCH 117/253] Added translation for entirety of CP1252. --- protocols/rdp/src/rdp_keymap_alt.c | 930 ++++++++++++++--------------- 1 file changed, 465 insertions(+), 465 deletions(-) diff --git a/protocols/rdp/src/rdp_keymap_alt.c b/protocols/rdp/src/rdp_keymap_alt.c index af361fba..de404b86 100644 --- a/protocols/rdp/src/rdp_keymap_alt.c +++ b/protocols/rdp/src/rdp_keymap_alt.c @@ -42,136 +42,136 @@ const guac_rdp_keysym_altcode_map guac_rdp_keysym_altcode = { { /* 0x00?? */ - { .altcode = NULL }, /* 0x0000 */ - { .altcode = NULL }, /* 0x0001 */ - { .altcode = NULL }, /* 0x0002 */ - { .altcode = NULL }, /* 0x0003 */ - { .altcode = NULL }, /* 0x0004 */ - { .altcode = NULL }, /* 0x0005 */ - { .altcode = NULL }, /* 0x0006 */ - { .altcode = NULL }, /* 0x0007 */ - { .altcode = NULL }, /* 0x0008 */ - { .altcode = NULL }, /* 0x0009 */ - { .altcode = NULL }, /* 0x000a */ - { .altcode = NULL }, /* 0x000b */ - { .altcode = NULL }, /* 0x000c */ - { .altcode = NULL }, /* 0x000d */ - { .altcode = NULL }, /* 0x000e */ - { .altcode = NULL }, /* 0x000f */ - { .altcode = NULL }, /* 0x0010 */ - { .altcode = NULL }, /* 0x0011 */ - { .altcode = NULL }, /* 0x0012 */ - { .altcode = NULL }, /* 0x0013 */ - { .altcode = NULL }, /* 0x0014 */ - { .altcode = NULL }, /* 0x0015 */ - { .altcode = NULL }, /* 0x0016 */ - { .altcode = NULL }, /* 0x0017 */ - { .altcode = NULL }, /* 0x0018 */ - { .altcode = NULL }, /* 0x0019 */ - { .altcode = NULL }, /* 0x001a */ - { .altcode = NULL }, /* 0x001b */ - { .altcode = NULL }, /* 0x001c */ - { .altcode = NULL }, /* 0x001d */ - { .altcode = NULL }, /* 0x001e */ - { .altcode = NULL }, /* 0x001f */ - { .altcode = NULL }, /* 0x0020 (space) */ - { .altcode = NULL }, /* 0x0021 (exclam) */ - { .altcode = NULL }, /* 0x0022 (quotedbl) */ - { .altcode = NULL }, /* 0x0023 (numbersign) */ - { .altcode = NULL }, /* 0x0024 (dollar) */ - { .altcode = NULL }, /* 0x0025 (percent) */ - { .altcode = NULL }, /* 0x0026 (ampersand) */ - { .altcode = NULL }, /* 0x0027 (quoteright) */ - { .altcode = NULL }, /* 0x0028 (parenleft) */ - { .altcode = NULL }, /* 0x0029 (parenright) */ - { .altcode = NULL }, /* 0x002a (asterisk) */ - { .altcode = NULL }, /* 0x002b (plus) */ - { .altcode = NULL }, /* 0x002c (comma) */ - { .altcode = NULL }, /* 0x002d (minus) */ - { .altcode = NULL }, /* 0x002e (period) */ - { .altcode = NULL }, /* 0x002f (slash) */ - { .altcode = NULL }, /* 0x0030 (0) */ - { .altcode = NULL }, /* 0x0031 (1) */ - { .altcode = NULL }, /* 0x0032 (2) */ - { .altcode = NULL }, /* 0x0033 (3) */ - { .altcode = NULL }, /* 0x0034 (4) */ - { .altcode = NULL }, /* 0x0035 (5) */ - { .altcode = NULL }, /* 0x0036 (6) */ - { .altcode = NULL }, /* 0x0037 (7) */ - { .altcode = NULL }, /* 0x0038 (8) */ - { .altcode = NULL }, /* 0x0039 (9) */ - { .altcode = NULL }, /* 0x003a (colon) */ - { .altcode = NULL }, /* 0x003b (semicolon) */ - { .altcode = NULL }, /* 0x003c (less) */ - { .altcode = NULL }, /* 0x003d (equal) */ - { .altcode = NULL }, /* 0x003e (greater) */ - { .altcode = NULL }, /* 0x003f (question) */ - { .altcode = NULL }, /* 0x0040 (at) */ - { .altcode = NULL }, /* 0x0041 (A) */ - { .altcode = NULL }, /* 0x0042 (B) */ - { .altcode = NULL }, /* 0x0043 (C) */ - { .altcode = NULL }, /* 0x0044 (D) */ - { .altcode = NULL }, /* 0x0045 (E) */ - { .altcode = NULL }, /* 0x0046 (F) */ - { .altcode = NULL }, /* 0x0047 (G) */ - { .altcode = NULL }, /* 0x0048 (H) */ - { .altcode = NULL }, /* 0x0049 (I) */ - { .altcode = NULL }, /* 0x004a (J) */ - { .altcode = NULL }, /* 0x004b (K) */ - { .altcode = NULL }, /* 0x004c (L) */ - { .altcode = NULL }, /* 0x004d (M) */ - { .altcode = NULL }, /* 0x004e (N) */ - { .altcode = NULL }, /* 0x004f (O) */ - { .altcode = NULL }, /* 0x0050 (P) */ - { .altcode = NULL }, /* 0x0051 (Q) */ - { .altcode = NULL }, /* 0x0052 (R) */ - { .altcode = NULL }, /* 0x0053 (S) */ - { .altcode = NULL }, /* 0x0054 (T) */ - { .altcode = NULL }, /* 0x0055 (U) */ - { .altcode = NULL }, /* 0x0056 (V) */ - { .altcode = NULL }, /* 0x0057 (W) */ - { .altcode = NULL }, /* 0x0058 (X) */ - { .altcode = NULL }, /* 0x0059 (Y) */ - { .altcode = NULL }, /* 0x005a (Z) */ - { .altcode = NULL }, /* 0x005b (bracketleft) */ - { .altcode = NULL }, /* 0x005c (backslash) */ - { .altcode = NULL }, /* 0x005d (bracketright) */ - { .altcode = NULL }, /* 0x005e (asciicircum) */ - { .altcode = NULL }, /* 0x005f (underscore) */ - { .altcode = NULL }, /* 0x0060 (quoteleft) */ - { .altcode = NULL }, /* 0x0061 (a) */ - { .altcode = NULL }, /* 0x0062 (b) */ - { .altcode = NULL }, /* 0x0063 (c) */ - { .altcode = NULL }, /* 0x0064 (d) */ - { .altcode = NULL }, /* 0x0065 (e) */ - { .altcode = NULL }, /* 0x0066 (f) */ - { .altcode = NULL }, /* 0x0067 (g) */ - { .altcode = NULL }, /* 0x0068 (h) */ - { .altcode = NULL }, /* 0x0069 (i) */ - { .altcode = NULL }, /* 0x006a (j) */ - { .altcode = NULL }, /* 0x006b (k) */ - { .altcode = NULL }, /* 0x006c (l) */ - { .altcode = NULL }, /* 0x006d (m) */ - { .altcode = NULL }, /* 0x006e (n) */ - { .altcode = NULL }, /* 0x006f (o) */ - { .altcode = NULL }, /* 0x0070 (p) */ - { .altcode = NULL }, /* 0x0071 (q) */ - { .altcode = NULL }, /* 0x0072 (r) */ - { .altcode = NULL }, /* 0x0073 (s) */ - { .altcode = NULL }, /* 0x0074 (t) */ - { .altcode = NULL }, /* 0x0075 (u) */ - { .altcode = NULL }, /* 0x0076 (v) */ - { .altcode = NULL }, /* 0x0077 (w) */ - { .altcode = NULL }, /* 0x0078 (x) */ - { .altcode = NULL }, /* 0x0079 (y) */ - { .altcode = NULL }, /* 0x007a (z) */ - { .altcode = NULL }, /* 0x007b (braceleft) */ - { .altcode = NULL }, /* 0x007c (bar) */ - { .altcode = NULL }, /* 0x007d (braceright) */ - { .altcode = NULL }, /* 0x007e (asciitilde) */ - { .altcode = NULL }, /* 0x007f */ + { .altcode = "0000" }, /* 0x0000 */ + { .altcode = "0001" }, /* 0x0001 */ + { .altcode = "0002" }, /* 0x0002 */ + { .altcode = "0003" }, /* 0x0003 */ + { .altcode = "0004" }, /* 0x0004 */ + { .altcode = "0005" }, /* 0x0005 */ + { .altcode = "0006" }, /* 0x0006 */ + { .altcode = "0007" }, /* 0x0007 */ + { .altcode = "0008" }, /* 0x0008 */ + { .altcode = "0009" }, /* 0x0009 */ + { .altcode = "0010" }, /* 0x000a */ + { .altcode = "0011" }, /* 0x000b */ + { .altcode = "0012" }, /* 0x000c */ + { .altcode = "0013" }, /* 0x000d */ + { .altcode = "0014" }, /* 0x000e */ + { .altcode = "0015" }, /* 0x000f */ + { .altcode = "0016" }, /* 0x0010 */ + { .altcode = "0017" }, /* 0x0011 */ + { .altcode = "0018" }, /* 0x0012 */ + { .altcode = "0019" }, /* 0x0013 */ + { .altcode = "0020" }, /* 0x0014 */ + { .altcode = "0021" }, /* 0x0015 */ + { .altcode = "0022" }, /* 0x0016 */ + { .altcode = "0023" }, /* 0x0017 */ + { .altcode = "0024" }, /* 0x0018 */ + { .altcode = "0025" }, /* 0x0019 */ + { .altcode = "0026" }, /* 0x001a */ + { .altcode = "0027" }, /* 0x001b */ + { .altcode = "0028" }, /* 0x001c */ + { .altcode = "0029" }, /* 0x001d */ + { .altcode = "0030" }, /* 0x001e */ + { .altcode = "0031" }, /* 0x001f */ + { .altcode = "0032" }, /* 0x0020 (space) */ + { .altcode = "0033" }, /* 0x0021 (exclam) */ + { .altcode = "0034" }, /* 0x0022 (quotedbl) */ + { .altcode = "0035" }, /* 0x0023 (numbersign) */ + { .altcode = "0036" }, /* 0x0024 (dollar) */ + { .altcode = "0037" }, /* 0x0025 (percent) */ + { .altcode = "0038" }, /* 0x0026 (ampersand) */ + { .altcode = "0039" }, /* 0x0027 (quoteright) */ + { .altcode = "0040" }, /* 0x0028 (parenleft) */ + { .altcode = "0041" }, /* 0x0029 (parenright) */ + { .altcode = "0042" }, /* 0x002a (asterisk) */ + { .altcode = "0043" }, /* 0x002b (plus) */ + { .altcode = "0044" }, /* 0x002c (comma) */ + { .altcode = "0045" }, /* 0x002d (minus) */ + { .altcode = "0046" }, /* 0x002e (period) */ + { .altcode = "0047" }, /* 0x002f (slash) */ + { .altcode = "0048" }, /* 0x0030 (0) */ + { .altcode = "0049" }, /* 0x0031 (1) */ + { .altcode = "0050" }, /* 0x0032 (2) */ + { .altcode = "0051" }, /* 0x0033 (3) */ + { .altcode = "0052" }, /* 0x0034 (4) */ + { .altcode = "0053" }, /* 0x0035 (5) */ + { .altcode = "0054" }, /* 0x0036 (6) */ + { .altcode = "0055" }, /* 0x0037 (7) */ + { .altcode = "0056" }, /* 0x0038 (8) */ + { .altcode = "0057" }, /* 0x0039 (9) */ + { .altcode = "0058" }, /* 0x003a (colon) */ + { .altcode = "0059" }, /* 0x003b (semicolon) */ + { .altcode = "0060" }, /* 0x003c (less) */ + { .altcode = "0061" }, /* 0x003d (equal) */ + { .altcode = "0062" }, /* 0x003e (greater) */ + { .altcode = "0063" }, /* 0x003f (question) */ + { .altcode = "0064" }, /* 0x0040 (at) */ + { .altcode = "0065" }, /* 0x0041 (A) */ + { .altcode = "0066" }, /* 0x0042 (B) */ + { .altcode = "0067" }, /* 0x0043 (C) */ + { .altcode = "0068" }, /* 0x0044 (D) */ + { .altcode = "0069" }, /* 0x0045 (E) */ + { .altcode = "0070" }, /* 0x0046 (F) */ + { .altcode = "0071" }, /* 0x0047 (G) */ + { .altcode = "0072" }, /* 0x0048 (H) */ + { .altcode = "0073" }, /* 0x0049 (I) */ + { .altcode = "0074" }, /* 0x004a (J) */ + { .altcode = "0075" }, /* 0x004b (K) */ + { .altcode = "0076" }, /* 0x004c (L) */ + { .altcode = "0077" }, /* 0x004d (M) */ + { .altcode = "0078" }, /* 0x004e (N) */ + { .altcode = "0079" }, /* 0x004f (O) */ + { .altcode = "0080" }, /* 0x0050 (P) */ + { .altcode = "0081" }, /* 0x0051 (Q) */ + { .altcode = "0082" }, /* 0x0052 (R) */ + { .altcode = "0083" }, /* 0x0053 (S) */ + { .altcode = "0084" }, /* 0x0054 (T) */ + { .altcode = "0085" }, /* 0x0055 (U) */ + { .altcode = "0086" }, /* 0x0056 (V) */ + { .altcode = "0087" }, /* 0x0057 (W) */ + { .altcode = "0088" }, /* 0x0058 (X) */ + { .altcode = "0089" }, /* 0x0059 (Y) */ + { .altcode = "0090" }, /* 0x005a (Z) */ + { .altcode = "0091" }, /* 0x005b (bracketleft) */ + { .altcode = "0092" }, /* 0x005c (backslash) */ + { .altcode = "0093" }, /* 0x005d (bracketright) */ + { .altcode = "0094" }, /* 0x005e (asciicircum) */ + { .altcode = "0095" }, /* 0x005f (underscore) */ + { .altcode = "0096" }, /* 0x0060 (quoteleft) */ + { .altcode = "0097" }, /* 0x0061 (a) */ + { .altcode = "0098" }, /* 0x0062 (b) */ + { .altcode = "0099" }, /* 0x0063 (c) */ + { .altcode = "0100" }, /* 0x0064 (d) */ + { .altcode = "0101" }, /* 0x0065 (e) */ + { .altcode = "0102" }, /* 0x0066 (f) */ + { .altcode = "0103" }, /* 0x0067 (g) */ + { .altcode = "0104" }, /* 0x0068 (h) */ + { .altcode = "0105" }, /* 0x0069 (i) */ + { .altcode = "0106" }, /* 0x006a (j) */ + { .altcode = "0107" }, /* 0x006b (k) */ + { .altcode = "0108" }, /* 0x006c (l) */ + { .altcode = "0109" }, /* 0x006d (m) */ + { .altcode = "0110" }, /* 0x006e (n) */ + { .altcode = "0111" }, /* 0x006f (o) */ + { .altcode = "0112" }, /* 0x0070 (p) */ + { .altcode = "0113" }, /* 0x0071 (q) */ + { .altcode = "0114" }, /* 0x0072 (r) */ + { .altcode = "0115" }, /* 0x0073 (s) */ + { .altcode = "0116" }, /* 0x0074 (t) */ + { .altcode = "0117" }, /* 0x0075 (u) */ + { .altcode = "0118" }, /* 0x0076 (v) */ + { .altcode = "0119" }, /* 0x0077 (w) */ + { .altcode = "0120" }, /* 0x0078 (x) */ + { .altcode = "0121" }, /* 0x0079 (y) */ + { .altcode = "0122" }, /* 0x007a (z) */ + { .altcode = "0123" }, /* 0x007b (braceleft) */ + { .altcode = "0124" }, /* 0x007c (bar) */ + { .altcode = "0125" }, /* 0x007d (braceright) */ + { .altcode = "0126" }, /* 0x007e (asciitilde) */ + { .altcode = "0127" }, /* 0x007f */ { .altcode = NULL }, /* 0x0080 */ - { .altcode = NULL }, /* 0x0081 */ + { .altcode = "0129" }, /* 0x0081 */ { .altcode = NULL }, /* 0x0082 */ { .altcode = NULL }, /* 0x0083 */ { .altcode = NULL }, /* 0x0084 */ @@ -183,10 +183,10 @@ const guac_rdp_keysym_altcode_map guac_rdp_keysym_altcode = { { .altcode = NULL }, /* 0x008a */ { .altcode = NULL }, /* 0x008b */ { .altcode = NULL }, /* 0x008c */ - { .altcode = NULL }, /* 0x008d */ + { .altcode = "0141" }, /* 0x008d */ { .altcode = NULL }, /* 0x008e */ - { .altcode = NULL }, /* 0x008f */ - { .altcode = NULL }, /* 0x0090 */ + { .altcode = "0143" }, /* 0x008f */ + { .altcode = "0144" }, /* 0x0090 */ { .altcode = NULL }, /* 0x0091 */ { .altcode = NULL }, /* 0x0092 */ { .altcode = NULL }, /* 0x0093 */ @@ -199,105 +199,105 @@ const guac_rdp_keysym_altcode_map guac_rdp_keysym_altcode = { { .altcode = NULL }, /* 0x009a */ { .altcode = NULL }, /* 0x009b */ { .altcode = NULL }, /* 0x009c */ - { .altcode = NULL }, /* 0x009d */ + { .altcode = "0157" }, /* 0x009d */ { .altcode = NULL }, /* 0x009e */ { .altcode = NULL }, /* 0x009f */ - { .altcode = NULL }, /* 0x00a0 (nobreakspace) */ - { .altcode = NULL }, /* 0x00a1 (exclamdown) */ - { .altcode = NULL }, /* 0x00a2 (cent) */ - { .altcode = NULL }, /* 0x00a3 (sterling) */ - { .altcode = NULL }, /* 0x00a4 (currency) */ - { .altcode = NULL }, /* 0x00a5 (yen) */ - { .altcode = NULL }, /* 0x00a6 (brokenbar) */ - { .altcode = NULL }, /* 0x00a7 (section) */ - { .altcode = NULL }, /* 0x00a8 (diaeresis) */ - { .altcode = NULL }, /* 0x00a9 (copyright) */ - { .altcode = NULL }, /* 0x00aa (ordfeminine) */ - { .altcode = NULL }, /* 0x00ab (guillemotleft) */ - { .altcode = NULL }, /* 0x00ac (notsign) */ - { .altcode = NULL }, /* 0x00ad (hyphen) */ - { .altcode = NULL }, /* 0x00ae (registered) */ - { .altcode = NULL }, /* 0x00af (macron) */ - { .altcode = NULL }, /* 0x00b0 (degree) */ - { .altcode = NULL }, /* 0x00b1 (plusminus) */ - { .altcode = NULL }, /* 0x00b2 (twosuperior) */ - { .altcode = NULL }, /* 0x00b3 (threesuperior) */ - { .altcode = NULL }, /* 0x00b4 (acute) */ - { .altcode = NULL }, /* 0x00b5 (mu) */ - { .altcode = NULL }, /* 0x00b6 (paragraph) */ - { .altcode = NULL }, /* 0x00b7 (periodcentered) */ - { .altcode = NULL }, /* 0x00b8 (cedilla) */ - { .altcode = NULL }, /* 0x00b9 (onesuperior) */ - { .altcode = NULL }, /* 0x00ba (masculine) */ - { .altcode = NULL }, /* 0x00bb (guillemotright) */ - { .altcode = NULL }, /* 0x00bc (onequarter) */ - { .altcode = NULL }, /* 0x00bd (onehalf) */ - { .altcode = NULL }, /* 0x00be (threequarters) */ - { .altcode = NULL }, /* 0x00bf (questiondown) */ - { .altcode = NULL }, /* 0x00c0 (Agrave) */ - { .altcode = NULL }, /* 0x00c1 (Aacute) */ - { .altcode = NULL }, /* 0x00c2 (Acircumflex) */ - { .altcode = NULL }, /* 0x00c3 (Atilde) */ - { .altcode = NULL }, /* 0x00c4 (Adiaeresis) */ - { .altcode = NULL }, /* 0x00c5 (Aring) */ - { .altcode = NULL }, /* 0x00c6 (AE) */ - { .altcode = NULL }, /* 0x00c7 (Ccedilla) */ - { .altcode = NULL }, /* 0x00c8 (Egrave) */ - { .altcode = NULL }, /* 0x00c9 (Eacute) */ - { .altcode = NULL }, /* 0x00ca (Ecircumflex) */ - { .altcode = NULL }, /* 0x00cb (Ediaeresis) */ - { .altcode = NULL }, /* 0x00cc (Igrave) */ - { .altcode = NULL }, /* 0x00cd (Iacute) */ - { .altcode = NULL }, /* 0x00ce (Icircumflex) */ - { .altcode = NULL }, /* 0x00cf (Idiaeresis) */ - { .altcode = NULL }, /* 0x00d0 (Eth) */ - { .altcode = NULL }, /* 0x00d1 (Ntilde) */ - { .altcode = NULL }, /* 0x00d2 (Ograve) */ - { .altcode = NULL }, /* 0x00d3 (Oacute) */ - { .altcode = NULL }, /* 0x00d4 (Ocircumflex) */ - { .altcode = NULL }, /* 0x00d5 (Otilde) */ - { .altcode = NULL }, /* 0x00d6 (Odiaeresis) */ - { .altcode = NULL }, /* 0x00d7 (multiply) */ - { .altcode = NULL }, /* 0x00d8 (Ooblique) */ - { .altcode = NULL }, /* 0x00d9 (Ugrave) */ - { .altcode = NULL }, /* 0x00da (Uacute) */ - { .altcode = NULL }, /* 0x00db (Ucircumflex) */ - { .altcode = NULL }, /* 0x00dc (Udiaeresis) */ - { .altcode = NULL }, /* 0x00dd (Yacute) */ - { .altcode = NULL }, /* 0x00de (Thorn) */ - { .altcode = NULL }, /* 0x00df (ssharp) */ - { .altcode = NULL }, /* 0x00e0 (agrave) */ - { .altcode = NULL }, /* 0x00e1 (aacute) */ - { .altcode = NULL }, /* 0x00e2 (acircumflex) */ - { .altcode = NULL }, /* 0x00e3 (atilde) */ - { .altcode = NULL }, /* 0x00e4 (adiaeresis) */ - { .altcode = NULL }, /* 0x00e5 (aring) */ - { .altcode = NULL }, /* 0x00e6 (ae) */ - { .altcode = NULL }, /* 0x00e7 (ccedilla) */ - { .altcode = NULL }, /* 0x00e8 (egrave) */ - { .altcode = NULL }, /* 0x00e9 (eacute) */ - { .altcode = NULL }, /* 0x00ea (ecircumflex) */ - { .altcode = NULL }, /* 0x00eb (ediaeresis) */ - { .altcode = NULL }, /* 0x00ec (igrave) */ - { .altcode = NULL }, /* 0x00ed (iacute) */ - { .altcode = NULL }, /* 0x00ee (icircumflex) */ - { .altcode = NULL }, /* 0x00ef (idiaeresis) */ - { .altcode = NULL }, /* 0x00f0 (eth) */ - { .altcode = NULL }, /* 0x00f1 (ntilde) */ - { .altcode = NULL }, /* 0x00f2 (ograve) */ - { .altcode = NULL }, /* 0x00f3 (oacute) */ - { .altcode = NULL }, /* 0x00f4 (ocircumflex) */ - { .altcode = NULL }, /* 0x00f5 (otilde) */ - { .altcode = NULL }, /* 0x00f6 (odiaeresis) */ - { .altcode = NULL }, /* 0x00f7 (division) */ - { .altcode = NULL }, /* 0x00f8 (ooblique) */ - { .altcode = NULL }, /* 0x00f9 (ugrave) */ - { .altcode = NULL }, /* 0x00fa (uacute) */ - { .altcode = NULL }, /* 0x00fb (ucircumflex) */ - { .altcode = NULL }, /* 0x00fc (udiaeresis) */ - { .altcode = NULL }, /* 0x00fd (yacute) */ - { .altcode = NULL }, /* 0x00fe (thorn) */ - { .altcode = NULL }, /* 0x00ff (ydiaeresis) */ + { .altcode = "0160" }, /* 0x00a0 (nobreakspace) */ + { .altcode = "0161" }, /* 0x00a1 (exclamdown) */ + { .altcode = "0162" }, /* 0x00a2 (cent) */ + { .altcode = "0163" }, /* 0x00a3 (sterling) */ + { .altcode = "0164" }, /* 0x00a4 (currency) */ + { .altcode = "0165" }, /* 0x00a5 (yen) */ + { .altcode = "0166" }, /* 0x00a6 (brokenbar) */ + { .altcode = "0167" }, /* 0x00a7 (section) */ + { .altcode = "0168" }, /* 0x00a8 (diaeresis) */ + { .altcode = "0169" }, /* 0x00a9 (copyright) */ + { .altcode = "0170" }, /* 0x00aa (ordfeminine) */ + { .altcode = "0171" }, /* 0x00ab (guillemotleft) */ + { .altcode = "0172" }, /* 0x00ac (notsign) */ + { .altcode = "0173" }, /* 0x00ad (hyphen) */ + { .altcode = "0174" }, /* 0x00ae (registered) */ + { .altcode = "0175" }, /* 0x00af (macron) */ + { .altcode = "0176" }, /* 0x00b0 (degree) */ + { .altcode = "0177" }, /* 0x00b1 (plusminus) */ + { .altcode = "0178" }, /* 0x00b2 (twosuperior) */ + { .altcode = "0179" }, /* 0x00b3 (threesuperior) */ + { .altcode = "0180" }, /* 0x00b4 (acute) */ + { .altcode = "0181" }, /* 0x00b5 (mu) */ + { .altcode = "0182" }, /* 0x00b6 (paragraph) */ + { .altcode = "0183" }, /* 0x00b7 (periodcentered) */ + { .altcode = "0184" }, /* 0x00b8 (cedilla) */ + { .altcode = "0185" }, /* 0x00b9 (onesuperior) */ + { .altcode = "0186" }, /* 0x00ba (masculine) */ + { .altcode = "0187" }, /* 0x00bb (guillemotright) */ + { .altcode = "0188" }, /* 0x00bc (onequarter) */ + { .altcode = "0189" }, /* 0x00bd (onehalf) */ + { .altcode = "0190" }, /* 0x00be (threequarters) */ + { .altcode = "0191" }, /* 0x00bf (questiondown) */ + { .altcode = "0192" }, /* 0x00c0 (Agrave) */ + { .altcode = "0193" }, /* 0x00c1 (Aacute) */ + { .altcode = "0194" }, /* 0x00c2 (Acircumflex) */ + { .altcode = "0195" }, /* 0x00c3 (Atilde) */ + { .altcode = "0196" }, /* 0x00c4 (Adiaeresis) */ + { .altcode = "0197" }, /* 0x00c5 (Aring) */ + { .altcode = "0198" }, /* 0x00c6 (AE) */ + { .altcode = "0199" }, /* 0x00c7 (Ccedilla) */ + { .altcode = "0200" }, /* 0x00c8 (Egrave) */ + { .altcode = "0201" }, /* 0x00c9 (Eacute) */ + { .altcode = "0202" }, /* 0x00ca (Ecircumflex) */ + { .altcode = "0203" }, /* 0x00cb (Ediaeresis) */ + { .altcode = "0204" }, /* 0x00cc (Igrave) */ + { .altcode = "0205" }, /* 0x00cd (Iacute) */ + { .altcode = "0206" }, /* 0x00ce (Icircumflex) */ + { .altcode = "0207" }, /* 0x00cf (Idiaeresis) */ + { .altcode = "0208" }, /* 0x00d0 (Eth) */ + { .altcode = "0209" }, /* 0x00d1 (Ntilde) */ + { .altcode = "0210" }, /* 0x00d2 (Ograve) */ + { .altcode = "0211" }, /* 0x00d3 (Oacute) */ + { .altcode = "0212" }, /* 0x00d4 (Ocircumflex) */ + { .altcode = "0213" }, /* 0x00d5 (Otilde) */ + { .altcode = "0214" }, /* 0x00d6 (Odiaeresis) */ + { .altcode = "0215" }, /* 0x00d7 (multiply) */ + { .altcode = "0216" }, /* 0x00d8 (Ooblique) */ + { .altcode = "0217" }, /* 0x00d9 (Ugrave) */ + { .altcode = "0218" }, /* 0x00da (Uacute) */ + { .altcode = "0219" }, /* 0x00db (Ucircumflex) */ + { .altcode = "0220" }, /* 0x00dc (Udiaeresis) */ + { .altcode = "0221" }, /* 0x00dd (Yacute) */ + { .altcode = "0222" }, /* 0x00de (Thorn) */ + { .altcode = "0223" }, /* 0x00df (ssharp) */ + { .altcode = "0224" }, /* 0x00e0 (agrave) */ + { .altcode = "0225" }, /* 0x00e1 (aacute) */ + { .altcode = "0226" }, /* 0x00e2 (acircumflex) */ + { .altcode = "0227" }, /* 0x00e3 (atilde) */ + { .altcode = "0228" }, /* 0x00e4 (adiaeresis) */ + { .altcode = "0229" }, /* 0x00e5 (aring) */ + { .altcode = "0230" }, /* 0x00e6 (ae) */ + { .altcode = "0231" }, /* 0x00e7 (ccedilla) */ + { .altcode = "0232" }, /* 0x00e8 (egrave) */ + { .altcode = "0233" }, /* 0x00e9 (eacute) */ + { .altcode = "0234" }, /* 0x00ea (ecircumflex) */ + { .altcode = "0235" }, /* 0x00eb (ediaeresis) */ + { .altcode = "0236" }, /* 0x00ec (igrave) */ + { .altcode = "0237" }, /* 0x00ed (iacute) */ + { .altcode = "0238" }, /* 0x00ee (icircumflex) */ + { .altcode = "0239" }, /* 0x00ef (idiaeresis) */ + { .altcode = "0240" }, /* 0x00f0 (eth) */ + { .altcode = "0241" }, /* 0x00f1 (ntilde) */ + { .altcode = "0242" }, /* 0x00f2 (ograve) */ + { .altcode = "0243" }, /* 0x00f3 (oacute) */ + { .altcode = "0244" }, /* 0x00f4 (ocircumflex) */ + { .altcode = "0245" }, /* 0x00f5 (otilde) */ + { .altcode = "0246" }, /* 0x00f6 (odiaeresis) */ + { .altcode = "0247" }, /* 0x00f7 (division) */ + { .altcode = "0248" }, /* 0x00f8 (ooblique) */ + { .altcode = "0249" }, /* 0x00f9 (ugrave) */ + { .altcode = "0250" }, /* 0x00fa (uacute) */ + { .altcode = "0251" }, /* 0x00fb (ucircumflex) */ + { .altcode = "0252" }, /* 0x00fc (udiaeresis) */ + { .altcode = "0253" }, /* 0x00fd (yacute) */ + { .altcode = "0254" }, /* 0x00fe (thorn) */ + { .altcode = "0255" }, /* 0x00ff (ydiaeresis) */ }, { /* 0x01?? */ { .altcode = NULL }, /* 0x0100 */ @@ -3911,10 +3911,10 @@ const guac_rdp_keysym_altcode_map guac_rdp_keysym_altcode = { { .altcode = NULL }, /* 0x0efe */ { .altcode = NULL }, /* 0x0eff (Korean_Won) */ }, - {{NULL }}, /* 0x0f?? */ - {{NULL }}, /* 0x10?? */ - {{NULL }}, /* 0x11?? */ - {{NULL }}, /* 0x12?? */ + {{NULL}}, /* 0x0f?? */ + {{NULL}}, /* 0x10?? */ + {{NULL}}, /* 0x11?? */ + {{NULL}}, /* 0x12?? */ { /* 0x13?? */ { .altcode = NULL }, /* 0x1300 */ { .altcode = NULL }, /* 0x1301 */ @@ -4173,18 +4173,18 @@ const guac_rdp_keysym_altcode_map guac_rdp_keysym_altcode = { { .altcode = NULL }, /* 0x13fe */ { .altcode = NULL }, /* 0x13ff */ }, - {{NULL }}, /* 0x14?? */ - {{NULL }}, /* 0x15?? */ - {{NULL }}, /* 0x16?? */ - {{NULL }}, /* 0x17?? */ - {{NULL }}, /* 0x18?? */ - {{NULL }}, /* 0x19?? */ - {{NULL }}, /* 0x1a?? */ - {{NULL }}, /* 0x1b?? */ - {{NULL }}, /* 0x1c?? */ - {{NULL }}, /* 0x1d?? */ - {{NULL }}, /* 0x1e?? */ - {{NULL }}, /* 0x1f?? */ + {{NULL}}, /* 0x14?? */ + {{NULL}}, /* 0x15?? */ + {{NULL}}, /* 0x16?? */ + {{NULL}}, /* 0x17?? */ + {{NULL}}, /* 0x18?? */ + {{NULL}}, /* 0x19?? */ + {{NULL}}, /* 0x1a?? */ + {{NULL}}, /* 0x1b?? */ + {{NULL}}, /* 0x1c?? */ + {{NULL}}, /* 0x1d?? */ + {{NULL}}, /* 0x1e?? */ + {{NULL}}, /* 0x1f?? */ { /* 0x20?? */ { .altcode = NULL }, /* 0x2000 */ { .altcode = NULL }, /* 0x2001 */ @@ -4443,226 +4443,226 @@ const guac_rdp_keysym_altcode_map guac_rdp_keysym_altcode = { { .altcode = NULL }, /* 0x20fe */ { .altcode = NULL }, /* 0x20ff */ }, - {{NULL }}, /* 0x21?? */ - {{NULL }}, /* 0x22?? */ - {{NULL }}, /* 0x23?? */ - {{NULL }}, /* 0x24?? */ - {{NULL }}, /* 0x25?? */ - {{NULL }}, /* 0x26?? */ - {{NULL }}, /* 0x27?? */ - {{NULL }}, /* 0x28?? */ - {{NULL }}, /* 0x29?? */ - {{NULL }}, /* 0x2a?? */ - {{NULL }}, /* 0x2b?? */ - {{NULL }}, /* 0x2c?? */ - {{NULL }}, /* 0x2d?? */ - {{NULL }}, /* 0x2e?? */ - {{NULL }}, /* 0x2f?? */ - {{NULL }}, /* 0x30?? */ - {{NULL }}, /* 0x31?? */ - {{NULL }}, /* 0x32?? */ - {{NULL }}, /* 0x33?? */ - {{NULL }}, /* 0x34?? */ - {{NULL }}, /* 0x35?? */ - {{NULL }}, /* 0x36?? */ - {{NULL }}, /* 0x37?? */ - {{NULL }}, /* 0x38?? */ - {{NULL }}, /* 0x39?? */ - {{NULL }}, /* 0x3a?? */ - {{NULL }}, /* 0x3b?? */ - {{NULL }}, /* 0x3c?? */ - {{NULL }}, /* 0x3d?? */ - {{NULL }}, /* 0x3e?? */ - {{NULL }}, /* 0x3f?? */ - {{NULL }}, /* 0x40?? */ - {{NULL }}, /* 0x41?? */ - {{NULL }}, /* 0x42?? */ - {{NULL }}, /* 0x43?? */ - {{NULL }}, /* 0x44?? */ - {{NULL }}, /* 0x45?? */ - {{NULL }}, /* 0x46?? */ - {{NULL }}, /* 0x47?? */ - {{NULL }}, /* 0x48?? */ - {{NULL }}, /* 0x49?? */ - {{NULL }}, /* 0x4a?? */ - {{NULL }}, /* 0x4b?? */ - {{NULL }}, /* 0x4c?? */ - {{NULL }}, /* 0x4d?? */ - {{NULL }}, /* 0x4e?? */ - {{NULL }}, /* 0x4f?? */ - {{NULL }}, /* 0x50?? */ - {{NULL }}, /* 0x51?? */ - {{NULL }}, /* 0x52?? */ - {{NULL }}, /* 0x53?? */ - {{NULL }}, /* 0x54?? */ - {{NULL }}, /* 0x55?? */ - {{NULL }}, /* 0x56?? */ - {{NULL }}, /* 0x57?? */ - {{NULL }}, /* 0x58?? */ - {{NULL }}, /* 0x59?? */ - {{NULL }}, /* 0x5a?? */ - {{NULL }}, /* 0x5b?? */ - {{NULL }}, /* 0x5c?? */ - {{NULL }}, /* 0x5d?? */ - {{NULL }}, /* 0x5e?? */ - {{NULL }}, /* 0x5f?? */ - {{NULL }}, /* 0x60?? */ - {{NULL }}, /* 0x61?? */ - {{NULL }}, /* 0x62?? */ - {{NULL }}, /* 0x63?? */ - {{NULL }}, /* 0x64?? */ - {{NULL }}, /* 0x65?? */ - {{NULL }}, /* 0x66?? */ - {{NULL }}, /* 0x67?? */ - {{NULL }}, /* 0x68?? */ - {{NULL }}, /* 0x69?? */ - {{NULL }}, /* 0x6a?? */ - {{NULL }}, /* 0x6b?? */ - {{NULL }}, /* 0x6c?? */ - {{NULL }}, /* 0x6d?? */ - {{NULL }}, /* 0x6e?? */ - {{NULL }}, /* 0x6f?? */ - {{NULL }}, /* 0x70?? */ - {{NULL }}, /* 0x71?? */ - {{NULL }}, /* 0x72?? */ - {{NULL }}, /* 0x73?? */ - {{NULL }}, /* 0x74?? */ - {{NULL }}, /* 0x75?? */ - {{NULL }}, /* 0x76?? */ - {{NULL }}, /* 0x77?? */ - {{NULL }}, /* 0x78?? */ - {{NULL }}, /* 0x79?? */ - {{NULL }}, /* 0x7a?? */ - {{NULL }}, /* 0x7b?? */ - {{NULL }}, /* 0x7c?? */ - {{NULL }}, /* 0x7d?? */ - {{NULL }}, /* 0x7e?? */ - {{NULL }}, /* 0x7f?? */ - {{NULL }}, /* 0x80?? */ - {{NULL }}, /* 0x81?? */ - {{NULL }}, /* 0x82?? */ - {{NULL }}, /* 0x83?? */ - {{NULL }}, /* 0x84?? */ - {{NULL }}, /* 0x85?? */ - {{NULL }}, /* 0x86?? */ - {{NULL }}, /* 0x87?? */ - {{NULL }}, /* 0x88?? */ - {{NULL }}, /* 0x89?? */ - {{NULL }}, /* 0x8a?? */ - {{NULL }}, /* 0x8b?? */ - {{NULL }}, /* 0x8c?? */ - {{NULL }}, /* 0x8d?? */ - {{NULL }}, /* 0x8e?? */ - {{NULL }}, /* 0x8f?? */ - {{NULL }}, /* 0x90?? */ - {{NULL }}, /* 0x91?? */ - {{NULL }}, /* 0x92?? */ - {{NULL }}, /* 0x93?? */ - {{NULL }}, /* 0x94?? */ - {{NULL }}, /* 0x95?? */ - {{NULL }}, /* 0x96?? */ - {{NULL }}, /* 0x97?? */ - {{NULL }}, /* 0x98?? */ - {{NULL }}, /* 0x99?? */ - {{NULL }}, /* 0x9a?? */ - {{NULL }}, /* 0x9b?? */ - {{NULL }}, /* 0x9c?? */ - {{NULL }}, /* 0x9d?? */ - {{NULL }}, /* 0x9e?? */ - {{NULL }}, /* 0x9f?? */ - {{NULL }}, /* 0xa0?? */ - {{NULL }}, /* 0xa1?? */ - {{NULL }}, /* 0xa2?? */ - {{NULL }}, /* 0xa3?? */ - {{NULL }}, /* 0xa4?? */ - {{NULL }}, /* 0xa5?? */ - {{NULL }}, /* 0xa6?? */ - {{NULL }}, /* 0xa7?? */ - {{NULL }}, /* 0xa8?? */ - {{NULL }}, /* 0xa9?? */ - {{NULL }}, /* 0xaa?? */ - {{NULL }}, /* 0xab?? */ - {{NULL }}, /* 0xac?? */ - {{NULL }}, /* 0xad?? */ - {{NULL }}, /* 0xae?? */ - {{NULL }}, /* 0xaf?? */ - {{NULL }}, /* 0xb0?? */ - {{NULL }}, /* 0xb1?? */ - {{NULL }}, /* 0xb2?? */ - {{NULL }}, /* 0xb3?? */ - {{NULL }}, /* 0xb4?? */ - {{NULL }}, /* 0xb5?? */ - {{NULL }}, /* 0xb6?? */ - {{NULL }}, /* 0xb7?? */ - {{NULL }}, /* 0xb8?? */ - {{NULL }}, /* 0xb9?? */ - {{NULL }}, /* 0xba?? */ - {{NULL }}, /* 0xbb?? */ - {{NULL }}, /* 0xbc?? */ - {{NULL }}, /* 0xbd?? */ - {{NULL }}, /* 0xbe?? */ - {{NULL }}, /* 0xbf?? */ - {{NULL }}, /* 0xc0?? */ - {{NULL }}, /* 0xc1?? */ - {{NULL }}, /* 0xc2?? */ - {{NULL }}, /* 0xc3?? */ - {{NULL }}, /* 0xc4?? */ - {{NULL }}, /* 0xc5?? */ - {{NULL }}, /* 0xc6?? */ - {{NULL }}, /* 0xc7?? */ - {{NULL }}, /* 0xc8?? */ - {{NULL }}, /* 0xc9?? */ - {{NULL }}, /* 0xca?? */ - {{NULL }}, /* 0xcb?? */ - {{NULL }}, /* 0xcc?? */ - {{NULL }}, /* 0xcd?? */ - {{NULL }}, /* 0xce?? */ - {{NULL }}, /* 0xcf?? */ - {{NULL }}, /* 0xd0?? */ - {{NULL }}, /* 0xd1?? */ - {{NULL }}, /* 0xd2?? */ - {{NULL }}, /* 0xd3?? */ - {{NULL }}, /* 0xd4?? */ - {{NULL }}, /* 0xd5?? */ - {{NULL }}, /* 0xd6?? */ - {{NULL }}, /* 0xd7?? */ - {{NULL }}, /* 0xd8?? */ - {{NULL }}, /* 0xd9?? */ - {{NULL }}, /* 0xda?? */ - {{NULL }}, /* 0xdb?? */ - {{NULL }}, /* 0xdc?? */ - {{NULL }}, /* 0xdd?? */ - {{NULL }}, /* 0xde?? */ - {{NULL }}, /* 0xdf?? */ - {{NULL }}, /* 0xe0?? */ - {{NULL }}, /* 0xe1?? */ - {{NULL }}, /* 0xe2?? */ - {{NULL }}, /* 0xe3?? */ - {{NULL }}, /* 0xe4?? */ - {{NULL }}, /* 0xe5?? */ - {{NULL }}, /* 0xe6?? */ - {{NULL }}, /* 0xe7?? */ - {{NULL }}, /* 0xe8?? */ - {{NULL }}, /* 0xe9?? */ - {{NULL }}, /* 0xea?? */ - {{NULL }}, /* 0xeb?? */ - {{NULL }}, /* 0xec?? */ - {{NULL }}, /* 0xed?? */ - {{NULL }}, /* 0xee?? */ - {{NULL }}, /* 0xef?? */ - {{NULL }}, /* 0xf0?? */ - {{NULL }}, /* 0xf1?? */ - {{NULL }}, /* 0xf2?? */ - {{NULL }}, /* 0xf3?? */ - {{NULL }}, /* 0xf4?? */ - {{NULL }}, /* 0xf5?? */ - {{NULL }}, /* 0xf6?? */ - {{NULL }}, /* 0xf7?? */ - {{NULL }}, /* 0xf8?? */ - {{NULL }}, /* 0xf9?? */ - {{NULL }}, /* 0xfa?? */ - {{NULL }}, /* 0xfb?? */ - {{NULL }}, /* 0xfc?? */ + {{NULL}}, /* 0x21?? */ + {{NULL}}, /* 0x22?? */ + {{NULL}}, /* 0x23?? */ + {{NULL}}, /* 0x24?? */ + {{NULL}}, /* 0x25?? */ + {{NULL}}, /* 0x26?? */ + {{NULL}}, /* 0x27?? */ + {{NULL}}, /* 0x28?? */ + {{NULL}}, /* 0x29?? */ + {{NULL}}, /* 0x2a?? */ + {{NULL}}, /* 0x2b?? */ + {{NULL}}, /* 0x2c?? */ + {{NULL}}, /* 0x2d?? */ + {{NULL}}, /* 0x2e?? */ + {{NULL}}, /* 0x2f?? */ + {{NULL}}, /* 0x30?? */ + {{NULL}}, /* 0x31?? */ + {{NULL}}, /* 0x32?? */ + {{NULL}}, /* 0x33?? */ + {{NULL}}, /* 0x34?? */ + {{NULL}}, /* 0x35?? */ + {{NULL}}, /* 0x36?? */ + {{NULL}}, /* 0x37?? */ + {{NULL}}, /* 0x38?? */ + {{NULL}}, /* 0x39?? */ + {{NULL}}, /* 0x3a?? */ + {{NULL}}, /* 0x3b?? */ + {{NULL}}, /* 0x3c?? */ + {{NULL}}, /* 0x3d?? */ + {{NULL}}, /* 0x3e?? */ + {{NULL}}, /* 0x3f?? */ + {{NULL}}, /* 0x40?? */ + {{NULL}}, /* 0x41?? */ + {{NULL}}, /* 0x42?? */ + {{NULL}}, /* 0x43?? */ + {{NULL}}, /* 0x44?? */ + {{NULL}}, /* 0x45?? */ + {{NULL}}, /* 0x46?? */ + {{NULL}}, /* 0x47?? */ + {{NULL}}, /* 0x48?? */ + {{NULL}}, /* 0x49?? */ + {{NULL}}, /* 0x4a?? */ + {{NULL}}, /* 0x4b?? */ + {{NULL}}, /* 0x4c?? */ + {{NULL}}, /* 0x4d?? */ + {{NULL}}, /* 0x4e?? */ + {{NULL}}, /* 0x4f?? */ + {{NULL}}, /* 0x50?? */ + {{NULL}}, /* 0x51?? */ + {{NULL}}, /* 0x52?? */ + {{NULL}}, /* 0x53?? */ + {{NULL}}, /* 0x54?? */ + {{NULL}}, /* 0x55?? */ + {{NULL}}, /* 0x56?? */ + {{NULL}}, /* 0x57?? */ + {{NULL}}, /* 0x58?? */ + {{NULL}}, /* 0x59?? */ + {{NULL}}, /* 0x5a?? */ + {{NULL}}, /* 0x5b?? */ + {{NULL}}, /* 0x5c?? */ + {{NULL}}, /* 0x5d?? */ + {{NULL}}, /* 0x5e?? */ + {{NULL}}, /* 0x5f?? */ + {{NULL}}, /* 0x60?? */ + {{NULL}}, /* 0x61?? */ + {{NULL}}, /* 0x62?? */ + {{NULL}}, /* 0x63?? */ + {{NULL}}, /* 0x64?? */ + {{NULL}}, /* 0x65?? */ + {{NULL}}, /* 0x66?? */ + {{NULL}}, /* 0x67?? */ + {{NULL}}, /* 0x68?? */ + {{NULL}}, /* 0x69?? */ + {{NULL}}, /* 0x6a?? */ + {{NULL}}, /* 0x6b?? */ + {{NULL}}, /* 0x6c?? */ + {{NULL}}, /* 0x6d?? */ + {{NULL}}, /* 0x6e?? */ + {{NULL}}, /* 0x6f?? */ + {{NULL}}, /* 0x70?? */ + {{NULL}}, /* 0x71?? */ + {{NULL}}, /* 0x72?? */ + {{NULL}}, /* 0x73?? */ + {{NULL}}, /* 0x74?? */ + {{NULL}}, /* 0x75?? */ + {{NULL}}, /* 0x76?? */ + {{NULL}}, /* 0x77?? */ + {{NULL}}, /* 0x78?? */ + {{NULL}}, /* 0x79?? */ + {{NULL}}, /* 0x7a?? */ + {{NULL}}, /* 0x7b?? */ + {{NULL}}, /* 0x7c?? */ + {{NULL}}, /* 0x7d?? */ + {{NULL}}, /* 0x7e?? */ + {{NULL}}, /* 0x7f?? */ + {{NULL}}, /* 0x80?? */ + {{NULL}}, /* 0x81?? */ + {{NULL}}, /* 0x82?? */ + {{NULL}}, /* 0x83?? */ + {{NULL}}, /* 0x84?? */ + {{NULL}}, /* 0x85?? */ + {{NULL}}, /* 0x86?? */ + {{NULL}}, /* 0x87?? */ + {{NULL}}, /* 0x88?? */ + {{NULL}}, /* 0x89?? */ + {{NULL}}, /* 0x8a?? */ + {{NULL}}, /* 0x8b?? */ + {{NULL}}, /* 0x8c?? */ + {{NULL}}, /* 0x8d?? */ + {{NULL}}, /* 0x8e?? */ + {{NULL}}, /* 0x8f?? */ + {{NULL}}, /* 0x90?? */ + {{NULL}}, /* 0x91?? */ + {{NULL}}, /* 0x92?? */ + {{NULL}}, /* 0x93?? */ + {{NULL}}, /* 0x94?? */ + {{NULL}}, /* 0x95?? */ + {{NULL}}, /* 0x96?? */ + {{NULL}}, /* 0x97?? */ + {{NULL}}, /* 0x98?? */ + {{NULL}}, /* 0x99?? */ + {{NULL}}, /* 0x9a?? */ + {{NULL}}, /* 0x9b?? */ + {{NULL}}, /* 0x9c?? */ + {{NULL}}, /* 0x9d?? */ + {{NULL}}, /* 0x9e?? */ + {{NULL}}, /* 0x9f?? */ + {{NULL}}, /* 0xa0?? */ + {{NULL}}, /* 0xa1?? */ + {{NULL}}, /* 0xa2?? */ + {{NULL}}, /* 0xa3?? */ + {{NULL}}, /* 0xa4?? */ + {{NULL}}, /* 0xa5?? */ + {{NULL}}, /* 0xa6?? */ + {{NULL}}, /* 0xa7?? */ + {{NULL}}, /* 0xa8?? */ + {{NULL}}, /* 0xa9?? */ + {{NULL}}, /* 0xaa?? */ + {{NULL}}, /* 0xab?? */ + {{NULL}}, /* 0xac?? */ + {{NULL}}, /* 0xad?? */ + {{NULL}}, /* 0xae?? */ + {{NULL}}, /* 0xaf?? */ + {{NULL}}, /* 0xb0?? */ + {{NULL}}, /* 0xb1?? */ + {{NULL}}, /* 0xb2?? */ + {{NULL}}, /* 0xb3?? */ + {{NULL}}, /* 0xb4?? */ + {{NULL}}, /* 0xb5?? */ + {{NULL}}, /* 0xb6?? */ + {{NULL}}, /* 0xb7?? */ + {{NULL}}, /* 0xb8?? */ + {{NULL}}, /* 0xb9?? */ + {{NULL}}, /* 0xba?? */ + {{NULL}}, /* 0xbb?? */ + {{NULL}}, /* 0xbc?? */ + {{NULL}}, /* 0xbd?? */ + {{NULL}}, /* 0xbe?? */ + {{NULL}}, /* 0xbf?? */ + {{NULL}}, /* 0xc0?? */ + {{NULL}}, /* 0xc1?? */ + {{NULL}}, /* 0xc2?? */ + {{NULL}}, /* 0xc3?? */ + {{NULL}}, /* 0xc4?? */ + {{NULL}}, /* 0xc5?? */ + {{NULL}}, /* 0xc6?? */ + {{NULL}}, /* 0xc7?? */ + {{NULL}}, /* 0xc8?? */ + {{NULL}}, /* 0xc9?? */ + {{NULL}}, /* 0xca?? */ + {{NULL}}, /* 0xcb?? */ + {{NULL}}, /* 0xcc?? */ + {{NULL}}, /* 0xcd?? */ + {{NULL}}, /* 0xce?? */ + {{NULL}}, /* 0xcf?? */ + {{NULL}}, /* 0xd0?? */ + {{NULL}}, /* 0xd1?? */ + {{NULL}}, /* 0xd2?? */ + {{NULL}}, /* 0xd3?? */ + {{NULL}}, /* 0xd4?? */ + {{NULL}}, /* 0xd5?? */ + {{NULL}}, /* 0xd6?? */ + {{NULL}}, /* 0xd7?? */ + {{NULL}}, /* 0xd8?? */ + {{NULL}}, /* 0xd9?? */ + {{NULL}}, /* 0xda?? */ + {{NULL}}, /* 0xdb?? */ + {{NULL}}, /* 0xdc?? */ + {{NULL}}, /* 0xdd?? */ + {{NULL}}, /* 0xde?? */ + {{NULL}}, /* 0xdf?? */ + {{NULL}}, /* 0xe0?? */ + {{NULL}}, /* 0xe1?? */ + {{NULL}}, /* 0xe2?? */ + {{NULL}}, /* 0xe3?? */ + {{NULL}}, /* 0xe4?? */ + {{NULL}}, /* 0xe5?? */ + {{NULL}}, /* 0xe6?? */ + {{NULL}}, /* 0xe7?? */ + {{NULL}}, /* 0xe8?? */ + {{NULL}}, /* 0xe9?? */ + {{NULL}}, /* 0xea?? */ + {{NULL}}, /* 0xeb?? */ + {{NULL}}, /* 0xec?? */ + {{NULL}}, /* 0xed?? */ + {{NULL}}, /* 0xee?? */ + {{NULL}}, /* 0xef?? */ + {{NULL}}, /* 0xf0?? */ + {{NULL}}, /* 0xf1?? */ + {{NULL}}, /* 0xf2?? */ + {{NULL}}, /* 0xf3?? */ + {{NULL}}, /* 0xf4?? */ + {{NULL}}, /* 0xf5?? */ + {{NULL}}, /* 0xf6?? */ + {{NULL}}, /* 0xf7?? */ + {{NULL}}, /* 0xf8?? */ + {{NULL}}, /* 0xf9?? */ + {{NULL}}, /* 0xfa?? */ + {{NULL}}, /* 0xfb?? */ + {{NULL}}, /* 0xfc?? */ { /* 0xfd?? */ { .altcode = NULL }, /* 0xfd00 */ { .altcode = NULL }, /* 0xfd01 (3270_Duplicate) */ From af4d4681e130797bdb4b6c8c36a08f5152617bea Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Tue, 20 Mar 2012 22:48:18 -0700 Subject: [PATCH 118/253] Removed Alt-code mapping, using convenient identity relationship between keysyms and Alt-codes instead. --- protocols/rdp/Makefile.am | 3 +- protocols/rdp/include/rdp_keymap.h | 25 - protocols/rdp/src/guac_handlers.c | 42 +- protocols/rdp/src/rdp_keymap_alt.c | 5441 ---------------------------- 4 files changed, 23 insertions(+), 5488 deletions(-) delete mode 100644 protocols/rdp/src/rdp_keymap_alt.c diff --git a/protocols/rdp/Makefile.am b/protocols/rdp/Makefile.am index f8406d94..78803885 100644 --- a/protocols/rdp/Makefile.am +++ b/protocols/rdp/Makefile.am @@ -43,8 +43,7 @@ lib_LTLIBRARIES = libguac-client-rdp.la libguac_client_rdp_la_SOURCES = src/client.c src/rdp_bitmap.c src/rdp_glyph.c src/rdp_pointer.c src/rdp_gdi.c src/guac_handlers.c \ src/rdp_keymap.c \ - src/rdp_keymap_en_us.c \ - src/rdp_keymap_alt.c + src/rdp_keymap_en_us.c libguac_client_rdp_la_LDFLAGS = -version-info 0:0:0 diff --git a/protocols/rdp/include/rdp_keymap.h b/protocols/rdp/include/rdp_keymap.h index 0aaa19da..bf426269 100644 --- a/protocols/rdp/include/rdp_keymap.h +++ b/protocols/rdp/include/rdp_keymap.h @@ -68,21 +68,6 @@ typedef struct guac_rdp_scancode_map { } guac_rdp_scancode_map; -/** - * Represents the Alt-code which types a given keysym. This is used as a - * fallback mapping, should a particular keymap not support a certain keysym. - * - * See: http://en.wikipedia.org/wiki/Alt_code - */ -typedef struct guac_rdp_altcode_map { - - /** - * The 4-digit Alt-code which types this keysym. - */ - const char* altcode; - -} guac_rdp_altcode_map; - /** * Mapping from keysym to current state */ @@ -93,21 +78,11 @@ typedef int guac_rdp_keysym_state_map[256][256]; */ typedef guac_rdp_scancode_map guac_rdp_keysym_scancode_map[256][256]; -/** - * Static mapping from keysyms to Alt-codes. - */ -typedef guac_rdp_altcode_map guac_rdp_keysym_altcode_map[256][256]; - /** * Map of X11 keysyms to RDP scancodes (US English). */ extern const guac_rdp_keysym_scancode_map guac_rdp_keysym_scancode_en_us; -/** - * Map of X11 keysyms to Windows Alt-codes. - */ -extern const guac_rdp_keysym_altcode_map guac_rdp_keysym_altcode; - /** * Simple macro for referencing the mapped value of an altcode or scancode for a given keysym. */ diff --git a/protocols/rdp/src/guac_handlers.c b/protocols/rdp/src/guac_handlers.c index 051166a2..896a7a3d 100644 --- a/protocols/rdp/src/guac_handlers.c +++ b/protocols/rdp/src/guac_handlers.c @@ -56,7 +56,7 @@ void __guac_rdp_update_keysyms(guac_client* client, const int* keysym_string, int from, int to); int __guac_rdp_send_keysym(guac_client* client, int keysym, int pressed); -void __guac_rdp_send_altcode(guac_client* client, const char* altcode); +void __guac_rdp_send_altcode(guac_client* client, int altcode); int rdp_guac_client_free_handler(guac_client* client) { @@ -227,11 +227,12 @@ int rdp_guac_client_mouse_handler(guac_client* client, int x, int y, int mask) { return 0; } -void __guac_rdp_send_altcode(guac_client* client, const char* altcode) { +void __guac_rdp_send_altcode(guac_client* client, int altcode) { rdp_guac_client_data* guac_client_data = (rdp_guac_client_data*) client->data; freerdp* rdp_inst = guac_client_data->rdp_inst; const guac_rdp_keysym_scancode_map* keysym_scancodes = guac_client_data->keysym_scancodes; + int i; /* Lookup scancode for Alt */ int alt = GUAC_RDP_KEYSYM_LOOKUP(*keysym_scancodes, 0xFFE9 /* Alt_L */).scancode; @@ -242,18 +243,22 @@ void __guac_rdp_send_altcode(guac_client* client, const char* altcode) { /* Press Alt */ rdp_inst->input->KeyboardEvent(rdp_inst->input, KBD_FLAGS_DOWN, alt); - /* For each character in Alt-code ... */ - while (*altcode != '\0') { + /* For each character in four-digit Alt-code ... */ + for (i=0; i<4; i++) { /* Get scancode of keypad digit */ - int scancode = GUAC_RDP_KEYSYM_LOOKUP(*keysym_scancodes, 0xFFB0 + (*altcode) - '0').scancode; + int scancode = GUAC_RDP_KEYSYM_LOOKUP( + *keysym_scancodes, + 0xFFB0 + (altcode / 1000) + ).scancode; /* Press and release digit */ rdp_inst->input->KeyboardEvent(rdp_inst->input, KBD_FLAGS_DOWN, scancode); rdp_inst->input->KeyboardEvent(rdp_inst->input, KBD_FLAGS_RELEASE, scancode); - /* Next character */ - altcode++; + /* Shift digits left by one place */ + altcode = (altcode * 10) % 10000; + } /* Release Alt */ @@ -304,24 +309,21 @@ int __guac_rdp_send_keysym(guac_client* client, int keysym, int pressed) { } - /* If undefined, try to type using Alt-code */ - else { + /* If undefined but has Alt-code, use Alt-Code */ + else if (keysym <= 0xFF) { - const guac_rdp_altcode_map* altcode_map = &GUAC_RDP_KEYSYM_LOOKUP(guac_rdp_keysym_altcode, keysym); - if (altcode_map->altcode != NULL) { + /* NOTE: The Alt-codes are conveniently identical to keysyms. */ - /* Only send Alt-code on press */ - if (pressed) - __guac_rdp_send_altcode(client, altcode_map->altcode); - - } - - /* If no defined Alt-code, log warning */ - else - guac_client_log_info(client, "unmapped keysym: 0x%x", keysym); + /* Only send Alt-code on press */ + if (pressed) + __guac_rdp_send_altcode(client, keysym); } + /* If no defined Alt-code, log warning */ + else + guac_client_log_info(client, "unmapped keysym: 0x%x", keysym); + } return 0; diff --git a/protocols/rdp/src/rdp_keymap_alt.c b/protocols/rdp/src/rdp_keymap_alt.c deleted file mode 100644 index de404b86..00000000 --- a/protocols/rdp/src/rdp_keymap_alt.c +++ /dev/null @@ -1,5441 +0,0 @@ - -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is libguac-client-rdp. - * - * The Initial Developer of the Original Code is - * Michael Jumper. - * Portions created by the Initial Developer are Copyright (C) 2011 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * Matt Hortman - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ - -#include - -#include "rdp_keymap.h" - -const guac_rdp_keysym_altcode_map guac_rdp_keysym_altcode = { - { /* 0x00?? */ - { .altcode = "0000" }, /* 0x0000 */ - { .altcode = "0001" }, /* 0x0001 */ - { .altcode = "0002" }, /* 0x0002 */ - { .altcode = "0003" }, /* 0x0003 */ - { .altcode = "0004" }, /* 0x0004 */ - { .altcode = "0005" }, /* 0x0005 */ - { .altcode = "0006" }, /* 0x0006 */ - { .altcode = "0007" }, /* 0x0007 */ - { .altcode = "0008" }, /* 0x0008 */ - { .altcode = "0009" }, /* 0x0009 */ - { .altcode = "0010" }, /* 0x000a */ - { .altcode = "0011" }, /* 0x000b */ - { .altcode = "0012" }, /* 0x000c */ - { .altcode = "0013" }, /* 0x000d */ - { .altcode = "0014" }, /* 0x000e */ - { .altcode = "0015" }, /* 0x000f */ - { .altcode = "0016" }, /* 0x0010 */ - { .altcode = "0017" }, /* 0x0011 */ - { .altcode = "0018" }, /* 0x0012 */ - { .altcode = "0019" }, /* 0x0013 */ - { .altcode = "0020" }, /* 0x0014 */ - { .altcode = "0021" }, /* 0x0015 */ - { .altcode = "0022" }, /* 0x0016 */ - { .altcode = "0023" }, /* 0x0017 */ - { .altcode = "0024" }, /* 0x0018 */ - { .altcode = "0025" }, /* 0x0019 */ - { .altcode = "0026" }, /* 0x001a */ - { .altcode = "0027" }, /* 0x001b */ - { .altcode = "0028" }, /* 0x001c */ - { .altcode = "0029" }, /* 0x001d */ - { .altcode = "0030" }, /* 0x001e */ - { .altcode = "0031" }, /* 0x001f */ - { .altcode = "0032" }, /* 0x0020 (space) */ - { .altcode = "0033" }, /* 0x0021 (exclam) */ - { .altcode = "0034" }, /* 0x0022 (quotedbl) */ - { .altcode = "0035" }, /* 0x0023 (numbersign) */ - { .altcode = "0036" }, /* 0x0024 (dollar) */ - { .altcode = "0037" }, /* 0x0025 (percent) */ - { .altcode = "0038" }, /* 0x0026 (ampersand) */ - { .altcode = "0039" }, /* 0x0027 (quoteright) */ - { .altcode = "0040" }, /* 0x0028 (parenleft) */ - { .altcode = "0041" }, /* 0x0029 (parenright) */ - { .altcode = "0042" }, /* 0x002a (asterisk) */ - { .altcode = "0043" }, /* 0x002b (plus) */ - { .altcode = "0044" }, /* 0x002c (comma) */ - { .altcode = "0045" }, /* 0x002d (minus) */ - { .altcode = "0046" }, /* 0x002e (period) */ - { .altcode = "0047" }, /* 0x002f (slash) */ - { .altcode = "0048" }, /* 0x0030 (0) */ - { .altcode = "0049" }, /* 0x0031 (1) */ - { .altcode = "0050" }, /* 0x0032 (2) */ - { .altcode = "0051" }, /* 0x0033 (3) */ - { .altcode = "0052" }, /* 0x0034 (4) */ - { .altcode = "0053" }, /* 0x0035 (5) */ - { .altcode = "0054" }, /* 0x0036 (6) */ - { .altcode = "0055" }, /* 0x0037 (7) */ - { .altcode = "0056" }, /* 0x0038 (8) */ - { .altcode = "0057" }, /* 0x0039 (9) */ - { .altcode = "0058" }, /* 0x003a (colon) */ - { .altcode = "0059" }, /* 0x003b (semicolon) */ - { .altcode = "0060" }, /* 0x003c (less) */ - { .altcode = "0061" }, /* 0x003d (equal) */ - { .altcode = "0062" }, /* 0x003e (greater) */ - { .altcode = "0063" }, /* 0x003f (question) */ - { .altcode = "0064" }, /* 0x0040 (at) */ - { .altcode = "0065" }, /* 0x0041 (A) */ - { .altcode = "0066" }, /* 0x0042 (B) */ - { .altcode = "0067" }, /* 0x0043 (C) */ - { .altcode = "0068" }, /* 0x0044 (D) */ - { .altcode = "0069" }, /* 0x0045 (E) */ - { .altcode = "0070" }, /* 0x0046 (F) */ - { .altcode = "0071" }, /* 0x0047 (G) */ - { .altcode = "0072" }, /* 0x0048 (H) */ - { .altcode = "0073" }, /* 0x0049 (I) */ - { .altcode = "0074" }, /* 0x004a (J) */ - { .altcode = "0075" }, /* 0x004b (K) */ - { .altcode = "0076" }, /* 0x004c (L) */ - { .altcode = "0077" }, /* 0x004d (M) */ - { .altcode = "0078" }, /* 0x004e (N) */ - { .altcode = "0079" }, /* 0x004f (O) */ - { .altcode = "0080" }, /* 0x0050 (P) */ - { .altcode = "0081" }, /* 0x0051 (Q) */ - { .altcode = "0082" }, /* 0x0052 (R) */ - { .altcode = "0083" }, /* 0x0053 (S) */ - { .altcode = "0084" }, /* 0x0054 (T) */ - { .altcode = "0085" }, /* 0x0055 (U) */ - { .altcode = "0086" }, /* 0x0056 (V) */ - { .altcode = "0087" }, /* 0x0057 (W) */ - { .altcode = "0088" }, /* 0x0058 (X) */ - { .altcode = "0089" }, /* 0x0059 (Y) */ - { .altcode = "0090" }, /* 0x005a (Z) */ - { .altcode = "0091" }, /* 0x005b (bracketleft) */ - { .altcode = "0092" }, /* 0x005c (backslash) */ - { .altcode = "0093" }, /* 0x005d (bracketright) */ - { .altcode = "0094" }, /* 0x005e (asciicircum) */ - { .altcode = "0095" }, /* 0x005f (underscore) */ - { .altcode = "0096" }, /* 0x0060 (quoteleft) */ - { .altcode = "0097" }, /* 0x0061 (a) */ - { .altcode = "0098" }, /* 0x0062 (b) */ - { .altcode = "0099" }, /* 0x0063 (c) */ - { .altcode = "0100" }, /* 0x0064 (d) */ - { .altcode = "0101" }, /* 0x0065 (e) */ - { .altcode = "0102" }, /* 0x0066 (f) */ - { .altcode = "0103" }, /* 0x0067 (g) */ - { .altcode = "0104" }, /* 0x0068 (h) */ - { .altcode = "0105" }, /* 0x0069 (i) */ - { .altcode = "0106" }, /* 0x006a (j) */ - { .altcode = "0107" }, /* 0x006b (k) */ - { .altcode = "0108" }, /* 0x006c (l) */ - { .altcode = "0109" }, /* 0x006d (m) */ - { .altcode = "0110" }, /* 0x006e (n) */ - { .altcode = "0111" }, /* 0x006f (o) */ - { .altcode = "0112" }, /* 0x0070 (p) */ - { .altcode = "0113" }, /* 0x0071 (q) */ - { .altcode = "0114" }, /* 0x0072 (r) */ - { .altcode = "0115" }, /* 0x0073 (s) */ - { .altcode = "0116" }, /* 0x0074 (t) */ - { .altcode = "0117" }, /* 0x0075 (u) */ - { .altcode = "0118" }, /* 0x0076 (v) */ - { .altcode = "0119" }, /* 0x0077 (w) */ - { .altcode = "0120" }, /* 0x0078 (x) */ - { .altcode = "0121" }, /* 0x0079 (y) */ - { .altcode = "0122" }, /* 0x007a (z) */ - { .altcode = "0123" }, /* 0x007b (braceleft) */ - { .altcode = "0124" }, /* 0x007c (bar) */ - { .altcode = "0125" }, /* 0x007d (braceright) */ - { .altcode = "0126" }, /* 0x007e (asciitilde) */ - { .altcode = "0127" }, /* 0x007f */ - { .altcode = NULL }, /* 0x0080 */ - { .altcode = "0129" }, /* 0x0081 */ - { .altcode = NULL }, /* 0x0082 */ - { .altcode = NULL }, /* 0x0083 */ - { .altcode = NULL }, /* 0x0084 */ - { .altcode = NULL }, /* 0x0085 */ - { .altcode = NULL }, /* 0x0086 */ - { .altcode = NULL }, /* 0x0087 */ - { .altcode = NULL }, /* 0x0088 */ - { .altcode = NULL }, /* 0x0089 */ - { .altcode = NULL }, /* 0x008a */ - { .altcode = NULL }, /* 0x008b */ - { .altcode = NULL }, /* 0x008c */ - { .altcode = "0141" }, /* 0x008d */ - { .altcode = NULL }, /* 0x008e */ - { .altcode = "0143" }, /* 0x008f */ - { .altcode = "0144" }, /* 0x0090 */ - { .altcode = NULL }, /* 0x0091 */ - { .altcode = NULL }, /* 0x0092 */ - { .altcode = NULL }, /* 0x0093 */ - { .altcode = NULL }, /* 0x0094 */ - { .altcode = NULL }, /* 0x0095 */ - { .altcode = NULL }, /* 0x0096 */ - { .altcode = NULL }, /* 0x0097 */ - { .altcode = NULL }, /* 0x0098 */ - { .altcode = NULL }, /* 0x0099 */ - { .altcode = NULL }, /* 0x009a */ - { .altcode = NULL }, /* 0x009b */ - { .altcode = NULL }, /* 0x009c */ - { .altcode = "0157" }, /* 0x009d */ - { .altcode = NULL }, /* 0x009e */ - { .altcode = NULL }, /* 0x009f */ - { .altcode = "0160" }, /* 0x00a0 (nobreakspace) */ - { .altcode = "0161" }, /* 0x00a1 (exclamdown) */ - { .altcode = "0162" }, /* 0x00a2 (cent) */ - { .altcode = "0163" }, /* 0x00a3 (sterling) */ - { .altcode = "0164" }, /* 0x00a4 (currency) */ - { .altcode = "0165" }, /* 0x00a5 (yen) */ - { .altcode = "0166" }, /* 0x00a6 (brokenbar) */ - { .altcode = "0167" }, /* 0x00a7 (section) */ - { .altcode = "0168" }, /* 0x00a8 (diaeresis) */ - { .altcode = "0169" }, /* 0x00a9 (copyright) */ - { .altcode = "0170" }, /* 0x00aa (ordfeminine) */ - { .altcode = "0171" }, /* 0x00ab (guillemotleft) */ - { .altcode = "0172" }, /* 0x00ac (notsign) */ - { .altcode = "0173" }, /* 0x00ad (hyphen) */ - { .altcode = "0174" }, /* 0x00ae (registered) */ - { .altcode = "0175" }, /* 0x00af (macron) */ - { .altcode = "0176" }, /* 0x00b0 (degree) */ - { .altcode = "0177" }, /* 0x00b1 (plusminus) */ - { .altcode = "0178" }, /* 0x00b2 (twosuperior) */ - { .altcode = "0179" }, /* 0x00b3 (threesuperior) */ - { .altcode = "0180" }, /* 0x00b4 (acute) */ - { .altcode = "0181" }, /* 0x00b5 (mu) */ - { .altcode = "0182" }, /* 0x00b6 (paragraph) */ - { .altcode = "0183" }, /* 0x00b7 (periodcentered) */ - { .altcode = "0184" }, /* 0x00b8 (cedilla) */ - { .altcode = "0185" }, /* 0x00b9 (onesuperior) */ - { .altcode = "0186" }, /* 0x00ba (masculine) */ - { .altcode = "0187" }, /* 0x00bb (guillemotright) */ - { .altcode = "0188" }, /* 0x00bc (onequarter) */ - { .altcode = "0189" }, /* 0x00bd (onehalf) */ - { .altcode = "0190" }, /* 0x00be (threequarters) */ - { .altcode = "0191" }, /* 0x00bf (questiondown) */ - { .altcode = "0192" }, /* 0x00c0 (Agrave) */ - { .altcode = "0193" }, /* 0x00c1 (Aacute) */ - { .altcode = "0194" }, /* 0x00c2 (Acircumflex) */ - { .altcode = "0195" }, /* 0x00c3 (Atilde) */ - { .altcode = "0196" }, /* 0x00c4 (Adiaeresis) */ - { .altcode = "0197" }, /* 0x00c5 (Aring) */ - { .altcode = "0198" }, /* 0x00c6 (AE) */ - { .altcode = "0199" }, /* 0x00c7 (Ccedilla) */ - { .altcode = "0200" }, /* 0x00c8 (Egrave) */ - { .altcode = "0201" }, /* 0x00c9 (Eacute) */ - { .altcode = "0202" }, /* 0x00ca (Ecircumflex) */ - { .altcode = "0203" }, /* 0x00cb (Ediaeresis) */ - { .altcode = "0204" }, /* 0x00cc (Igrave) */ - { .altcode = "0205" }, /* 0x00cd (Iacute) */ - { .altcode = "0206" }, /* 0x00ce (Icircumflex) */ - { .altcode = "0207" }, /* 0x00cf (Idiaeresis) */ - { .altcode = "0208" }, /* 0x00d0 (Eth) */ - { .altcode = "0209" }, /* 0x00d1 (Ntilde) */ - { .altcode = "0210" }, /* 0x00d2 (Ograve) */ - { .altcode = "0211" }, /* 0x00d3 (Oacute) */ - { .altcode = "0212" }, /* 0x00d4 (Ocircumflex) */ - { .altcode = "0213" }, /* 0x00d5 (Otilde) */ - { .altcode = "0214" }, /* 0x00d6 (Odiaeresis) */ - { .altcode = "0215" }, /* 0x00d7 (multiply) */ - { .altcode = "0216" }, /* 0x00d8 (Ooblique) */ - { .altcode = "0217" }, /* 0x00d9 (Ugrave) */ - { .altcode = "0218" }, /* 0x00da (Uacute) */ - { .altcode = "0219" }, /* 0x00db (Ucircumflex) */ - { .altcode = "0220" }, /* 0x00dc (Udiaeresis) */ - { .altcode = "0221" }, /* 0x00dd (Yacute) */ - { .altcode = "0222" }, /* 0x00de (Thorn) */ - { .altcode = "0223" }, /* 0x00df (ssharp) */ - { .altcode = "0224" }, /* 0x00e0 (agrave) */ - { .altcode = "0225" }, /* 0x00e1 (aacute) */ - { .altcode = "0226" }, /* 0x00e2 (acircumflex) */ - { .altcode = "0227" }, /* 0x00e3 (atilde) */ - { .altcode = "0228" }, /* 0x00e4 (adiaeresis) */ - { .altcode = "0229" }, /* 0x00e5 (aring) */ - { .altcode = "0230" }, /* 0x00e6 (ae) */ - { .altcode = "0231" }, /* 0x00e7 (ccedilla) */ - { .altcode = "0232" }, /* 0x00e8 (egrave) */ - { .altcode = "0233" }, /* 0x00e9 (eacute) */ - { .altcode = "0234" }, /* 0x00ea (ecircumflex) */ - { .altcode = "0235" }, /* 0x00eb (ediaeresis) */ - { .altcode = "0236" }, /* 0x00ec (igrave) */ - { .altcode = "0237" }, /* 0x00ed (iacute) */ - { .altcode = "0238" }, /* 0x00ee (icircumflex) */ - { .altcode = "0239" }, /* 0x00ef (idiaeresis) */ - { .altcode = "0240" }, /* 0x00f0 (eth) */ - { .altcode = "0241" }, /* 0x00f1 (ntilde) */ - { .altcode = "0242" }, /* 0x00f2 (ograve) */ - { .altcode = "0243" }, /* 0x00f3 (oacute) */ - { .altcode = "0244" }, /* 0x00f4 (ocircumflex) */ - { .altcode = "0245" }, /* 0x00f5 (otilde) */ - { .altcode = "0246" }, /* 0x00f6 (odiaeresis) */ - { .altcode = "0247" }, /* 0x00f7 (division) */ - { .altcode = "0248" }, /* 0x00f8 (ooblique) */ - { .altcode = "0249" }, /* 0x00f9 (ugrave) */ - { .altcode = "0250" }, /* 0x00fa (uacute) */ - { .altcode = "0251" }, /* 0x00fb (ucircumflex) */ - { .altcode = "0252" }, /* 0x00fc (udiaeresis) */ - { .altcode = "0253" }, /* 0x00fd (yacute) */ - { .altcode = "0254" }, /* 0x00fe (thorn) */ - { .altcode = "0255" }, /* 0x00ff (ydiaeresis) */ - }, - { /* 0x01?? */ - { .altcode = NULL }, /* 0x0100 */ - { .altcode = NULL }, /* 0x0101 */ - { .altcode = NULL }, /* 0x0102 */ - { .altcode = NULL }, /* 0x0103 */ - { .altcode = NULL }, /* 0x0104 */ - { .altcode = NULL }, /* 0x0105 */ - { .altcode = NULL }, /* 0x0106 */ - { .altcode = NULL }, /* 0x0107 */ - { .altcode = NULL }, /* 0x0108 */ - { .altcode = NULL }, /* 0x0109 */ - { .altcode = NULL }, /* 0x010a */ - { .altcode = NULL }, /* 0x010b */ - { .altcode = NULL }, /* 0x010c */ - { .altcode = NULL }, /* 0x010d */ - { .altcode = NULL }, /* 0x010e */ - { .altcode = NULL }, /* 0x010f */ - { .altcode = NULL }, /* 0x0110 */ - { .altcode = NULL }, /* 0x0111 */ - { .altcode = NULL }, /* 0x0112 */ - { .altcode = NULL }, /* 0x0113 */ - { .altcode = NULL }, /* 0x0114 */ - { .altcode = NULL }, /* 0x0115 */ - { .altcode = NULL }, /* 0x0116 */ - { .altcode = NULL }, /* 0x0117 */ - { .altcode = NULL }, /* 0x0118 */ - { .altcode = NULL }, /* 0x0119 */ - { .altcode = NULL }, /* 0x011a */ - { .altcode = NULL }, /* 0x011b */ - { .altcode = NULL }, /* 0x011c */ - { .altcode = NULL }, /* 0x011d */ - { .altcode = NULL }, /* 0x011e */ - { .altcode = NULL }, /* 0x011f */ - { .altcode = NULL }, /* 0x0120 */ - { .altcode = NULL }, /* 0x0121 */ - { .altcode = NULL }, /* 0x0122 */ - { .altcode = NULL }, /* 0x0123 */ - { .altcode = NULL }, /* 0x0124 */ - { .altcode = NULL }, /* 0x0125 */ - { .altcode = NULL }, /* 0x0126 */ - { .altcode = NULL }, /* 0x0127 */ - { .altcode = NULL }, /* 0x0128 */ - { .altcode = NULL }, /* 0x0129 */ - { .altcode = NULL }, /* 0x012a */ - { .altcode = NULL }, /* 0x012b */ - { .altcode = NULL }, /* 0x012c */ - { .altcode = NULL }, /* 0x012d */ - { .altcode = NULL }, /* 0x012e */ - { .altcode = NULL }, /* 0x012f */ - { .altcode = NULL }, /* 0x0130 */ - { .altcode = NULL }, /* 0x0131 */ - { .altcode = NULL }, /* 0x0132 */ - { .altcode = NULL }, /* 0x0133 */ - { .altcode = NULL }, /* 0x0134 */ - { .altcode = NULL }, /* 0x0135 */ - { .altcode = NULL }, /* 0x0136 */ - { .altcode = NULL }, /* 0x0137 */ - { .altcode = NULL }, /* 0x0138 */ - { .altcode = NULL }, /* 0x0139 */ - { .altcode = NULL }, /* 0x013a */ - { .altcode = NULL }, /* 0x013b */ - { .altcode = NULL }, /* 0x013c */ - { .altcode = NULL }, /* 0x013d */ - { .altcode = NULL }, /* 0x013e */ - { .altcode = NULL }, /* 0x013f */ - { .altcode = NULL }, /* 0x0140 */ - { .altcode = NULL }, /* 0x0141 */ - { .altcode = NULL }, /* 0x0142 */ - { .altcode = NULL }, /* 0x0143 */ - { .altcode = NULL }, /* 0x0144 */ - { .altcode = NULL }, /* 0x0145 */ - { .altcode = NULL }, /* 0x0146 */ - { .altcode = NULL }, /* 0x0147 */ - { .altcode = NULL }, /* 0x0148 */ - { .altcode = NULL }, /* 0x0149 */ - { .altcode = NULL }, /* 0x014a */ - { .altcode = NULL }, /* 0x014b */ - { .altcode = NULL }, /* 0x014c */ - { .altcode = NULL }, /* 0x014d */ - { .altcode = NULL }, /* 0x014e */ - { .altcode = NULL }, /* 0x014f */ - { .altcode = NULL }, /* 0x0150 */ - { .altcode = NULL }, /* 0x0151 */ - { .altcode = NULL }, /* 0x0152 */ - { .altcode = NULL }, /* 0x0153 */ - { .altcode = NULL }, /* 0x0154 */ - { .altcode = NULL }, /* 0x0155 */ - { .altcode = NULL }, /* 0x0156 */ - { .altcode = NULL }, /* 0x0157 */ - { .altcode = NULL }, /* 0x0158 */ - { .altcode = NULL }, /* 0x0159 */ - { .altcode = NULL }, /* 0x015a */ - { .altcode = NULL }, /* 0x015b */ - { .altcode = NULL }, /* 0x015c */ - { .altcode = NULL }, /* 0x015d */ - { .altcode = NULL }, /* 0x015e */ - { .altcode = NULL }, /* 0x015f */ - { .altcode = NULL }, /* 0x0160 */ - { .altcode = NULL }, /* 0x0161 */ - { .altcode = NULL }, /* 0x0162 */ - { .altcode = NULL }, /* 0x0163 */ - { .altcode = NULL }, /* 0x0164 */ - { .altcode = NULL }, /* 0x0165 */ - { .altcode = NULL }, /* 0x0166 */ - { .altcode = NULL }, /* 0x0167 */ - { .altcode = NULL }, /* 0x0168 */ - { .altcode = NULL }, /* 0x0169 */ - { .altcode = NULL }, /* 0x016a */ - { .altcode = NULL }, /* 0x016b */ - { .altcode = NULL }, /* 0x016c */ - { .altcode = NULL }, /* 0x016d */ - { .altcode = NULL }, /* 0x016e */ - { .altcode = NULL }, /* 0x016f */ - { .altcode = NULL }, /* 0x0170 */ - { .altcode = NULL }, /* 0x0171 */ - { .altcode = NULL }, /* 0x0172 */ - { .altcode = NULL }, /* 0x0173 */ - { .altcode = NULL }, /* 0x0174 */ - { .altcode = NULL }, /* 0x0175 */ - { .altcode = NULL }, /* 0x0176 */ - { .altcode = NULL }, /* 0x0177 */ - { .altcode = NULL }, /* 0x0178 */ - { .altcode = NULL }, /* 0x0179 */ - { .altcode = NULL }, /* 0x017a */ - { .altcode = NULL }, /* 0x017b */ - { .altcode = NULL }, /* 0x017c */ - { .altcode = NULL }, /* 0x017d */ - { .altcode = NULL }, /* 0x017e */ - { .altcode = NULL }, /* 0x017f */ - { .altcode = NULL }, /* 0x0180 */ - { .altcode = NULL }, /* 0x0181 */ - { .altcode = NULL }, /* 0x0182 */ - { .altcode = NULL }, /* 0x0183 */ - { .altcode = NULL }, /* 0x0184 */ - { .altcode = NULL }, /* 0x0185 */ - { .altcode = NULL }, /* 0x0186 */ - { .altcode = NULL }, /* 0x0187 */ - { .altcode = NULL }, /* 0x0188 */ - { .altcode = NULL }, /* 0x0189 */ - { .altcode = NULL }, /* 0x018a */ - { .altcode = NULL }, /* 0x018b */ - { .altcode = NULL }, /* 0x018c */ - { .altcode = NULL }, /* 0x018d */ - { .altcode = NULL }, /* 0x018e */ - { .altcode = NULL }, /* 0x018f */ - { .altcode = NULL }, /* 0x0190 */ - { .altcode = NULL }, /* 0x0191 */ - { .altcode = NULL }, /* 0x0192 */ - { .altcode = NULL }, /* 0x0193 */ - { .altcode = NULL }, /* 0x0194 */ - { .altcode = NULL }, /* 0x0195 */ - { .altcode = NULL }, /* 0x0196 */ - { .altcode = NULL }, /* 0x0197 */ - { .altcode = NULL }, /* 0x0198 */ - { .altcode = NULL }, /* 0x0199 */ - { .altcode = NULL }, /* 0x019a */ - { .altcode = NULL }, /* 0x019b */ - { .altcode = NULL }, /* 0x019c */ - { .altcode = NULL }, /* 0x019d */ - { .altcode = NULL }, /* 0x019e */ - { .altcode = NULL }, /* 0x019f */ - { .altcode = NULL }, /* 0x01a0 */ - { .altcode = NULL }, /* 0x01a1 (Aogonek) */ - { .altcode = NULL }, /* 0x01a2 (breve) */ - { .altcode = NULL }, /* 0x01a3 (Lstroke) */ - { .altcode = NULL }, /* 0x01a4 */ - { .altcode = NULL }, /* 0x01a5 (Lcaron) */ - { .altcode = NULL }, /* 0x01a6 (Sacute) */ - { .altcode = NULL }, /* 0x01a7 */ - { .altcode = NULL }, /* 0x01a8 */ - { .altcode = NULL }, /* 0x01a9 (Scaron) */ - { .altcode = NULL }, /* 0x01aa (Scedilla) */ - { .altcode = NULL }, /* 0x01ab (Tcaron) */ - { .altcode = NULL }, /* 0x01ac (Zacute) */ - { .altcode = NULL }, /* 0x01ad */ - { .altcode = NULL }, /* 0x01ae (Zcaron) */ - { .altcode = NULL }, /* 0x01af (Zabovedot) */ - { .altcode = NULL }, /* 0x01b0 */ - { .altcode = NULL }, /* 0x01b1 (aogonek) */ - { .altcode = NULL }, /* 0x01b2 (ogonek) */ - { .altcode = NULL }, /* 0x01b3 (lstroke) */ - { .altcode = NULL }, /* 0x01b4 */ - { .altcode = NULL }, /* 0x01b5 (lcaron) */ - { .altcode = NULL }, /* 0x01b6 (sacute) */ - { .altcode = NULL }, /* 0x01b7 (caron) */ - { .altcode = NULL }, /* 0x01b8 */ - { .altcode = NULL }, /* 0x01b9 (scaron) */ - { .altcode = NULL }, /* 0x01ba (scedilla) */ - { .altcode = NULL }, /* 0x01bb (tcaron) */ - { .altcode = NULL }, /* 0x01bc (zacute) */ - { .altcode = NULL }, /* 0x01bd (doubleacute) */ - { .altcode = NULL }, /* 0x01be (zcaron) */ - { .altcode = NULL }, /* 0x01bf (zabovedot) */ - { .altcode = NULL }, /* 0x01c0 (Racute) */ - { .altcode = NULL }, /* 0x01c1 */ - { .altcode = NULL }, /* 0x01c2 */ - { .altcode = NULL }, /* 0x01c3 (Abreve) */ - { .altcode = NULL }, /* 0x01c4 */ - { .altcode = NULL }, /* 0x01c5 (Lacute) */ - { .altcode = NULL }, /* 0x01c6 (Cacute) */ - { .altcode = NULL }, /* 0x01c7 */ - { .altcode = NULL }, /* 0x01c8 (Ccaron) */ - { .altcode = NULL }, /* 0x01c9 */ - { .altcode = NULL }, /* 0x01ca (Eogonek) */ - { .altcode = NULL }, /* 0x01cb */ - { .altcode = NULL }, /* 0x01cc (Ecaron) */ - { .altcode = NULL }, /* 0x01cd */ - { .altcode = NULL }, /* 0x01ce */ - { .altcode = NULL }, /* 0x01cf (Dcaron) */ - { .altcode = NULL }, /* 0x01d0 (Dstroke) */ - { .altcode = NULL }, /* 0x01d1 (Nacute) */ - { .altcode = NULL }, /* 0x01d2 (Ncaron) */ - { .altcode = NULL }, /* 0x01d3 */ - { .altcode = NULL }, /* 0x01d4 */ - { .altcode = NULL }, /* 0x01d5 (Odoubleacute) */ - { .altcode = NULL }, /* 0x01d6 */ - { .altcode = NULL }, /* 0x01d7 */ - { .altcode = NULL }, /* 0x01d8 (Rcaron) */ - { .altcode = NULL }, /* 0x01d9 (Uring) */ - { .altcode = NULL }, /* 0x01da */ - { .altcode = NULL }, /* 0x01db (Udoubleacute) */ - { .altcode = NULL }, /* 0x01dc */ - { .altcode = NULL }, /* 0x01dd */ - { .altcode = NULL }, /* 0x01de (Tcedilla) */ - { .altcode = NULL }, /* 0x01df */ - { .altcode = NULL }, /* 0x01e0 (racute) */ - { .altcode = NULL }, /* 0x01e1 */ - { .altcode = NULL }, /* 0x01e2 */ - { .altcode = NULL }, /* 0x01e3 (abreve) */ - { .altcode = NULL }, /* 0x01e4 */ - { .altcode = NULL }, /* 0x01e5 (lacute) */ - { .altcode = NULL }, /* 0x01e6 (cacute) */ - { .altcode = NULL }, /* 0x01e7 */ - { .altcode = NULL }, /* 0x01e8 (ccaron) */ - { .altcode = NULL }, /* 0x01e9 */ - { .altcode = NULL }, /* 0x01ea (eogonek) */ - { .altcode = NULL }, /* 0x01eb */ - { .altcode = NULL }, /* 0x01ec (ecaron) */ - { .altcode = NULL }, /* 0x01ed */ - { .altcode = NULL }, /* 0x01ee */ - { .altcode = NULL }, /* 0x01ef (dcaron) */ - { .altcode = NULL }, /* 0x01f0 (dstroke) */ - { .altcode = NULL }, /* 0x01f1 (nacute) */ - { .altcode = NULL }, /* 0x01f2 (ncaron) */ - { .altcode = NULL }, /* 0x01f3 */ - { .altcode = NULL }, /* 0x01f4 */ - { .altcode = NULL }, /* 0x01f5 (odoubleacute) */ - { .altcode = NULL }, /* 0x01f6 */ - { .altcode = NULL }, /* 0x01f7 */ - { .altcode = NULL }, /* 0x01f8 (rcaron) */ - { .altcode = NULL }, /* 0x01f9 (uring) */ - { .altcode = NULL }, /* 0x01fa */ - { .altcode = NULL }, /* 0x01fb (udoubleacute) */ - { .altcode = NULL }, /* 0x01fc */ - { .altcode = NULL }, /* 0x01fd */ - { .altcode = NULL }, /* 0x01fe (tcedilla) */ - { .altcode = NULL }, /* 0x01ff (abovedot) */ - }, - { /* 0x02?? */ - { .altcode = NULL }, /* 0x0200 */ - { .altcode = NULL }, /* 0x0201 */ - { .altcode = NULL }, /* 0x0202 */ - { .altcode = NULL }, /* 0x0203 */ - { .altcode = NULL }, /* 0x0204 */ - { .altcode = NULL }, /* 0x0205 */ - { .altcode = NULL }, /* 0x0206 */ - { .altcode = NULL }, /* 0x0207 */ - { .altcode = NULL }, /* 0x0208 */ - { .altcode = NULL }, /* 0x0209 */ - { .altcode = NULL }, /* 0x020a */ - { .altcode = NULL }, /* 0x020b */ - { .altcode = NULL }, /* 0x020c */ - { .altcode = NULL }, /* 0x020d */ - { .altcode = NULL }, /* 0x020e */ - { .altcode = NULL }, /* 0x020f */ - { .altcode = NULL }, /* 0x0210 */ - { .altcode = NULL }, /* 0x0211 */ - { .altcode = NULL }, /* 0x0212 */ - { .altcode = NULL }, /* 0x0213 */ - { .altcode = NULL }, /* 0x0214 */ - { .altcode = NULL }, /* 0x0215 */ - { .altcode = NULL }, /* 0x0216 */ - { .altcode = NULL }, /* 0x0217 */ - { .altcode = NULL }, /* 0x0218 */ - { .altcode = NULL }, /* 0x0219 */ - { .altcode = NULL }, /* 0x021a */ - { .altcode = NULL }, /* 0x021b */ - { .altcode = NULL }, /* 0x021c */ - { .altcode = NULL }, /* 0x021d */ - { .altcode = NULL }, /* 0x021e */ - { .altcode = NULL }, /* 0x021f */ - { .altcode = NULL }, /* 0x0220 */ - { .altcode = NULL }, /* 0x0221 */ - { .altcode = NULL }, /* 0x0222 */ - { .altcode = NULL }, /* 0x0223 */ - { .altcode = NULL }, /* 0x0224 */ - { .altcode = NULL }, /* 0x0225 */ - { .altcode = NULL }, /* 0x0226 */ - { .altcode = NULL }, /* 0x0227 */ - { .altcode = NULL }, /* 0x0228 */ - { .altcode = NULL }, /* 0x0229 */ - { .altcode = NULL }, /* 0x022a */ - { .altcode = NULL }, /* 0x022b */ - { .altcode = NULL }, /* 0x022c */ - { .altcode = NULL }, /* 0x022d */ - { .altcode = NULL }, /* 0x022e */ - { .altcode = NULL }, /* 0x022f */ - { .altcode = NULL }, /* 0x0230 */ - { .altcode = NULL }, /* 0x0231 */ - { .altcode = NULL }, /* 0x0232 */ - { .altcode = NULL }, /* 0x0233 */ - { .altcode = NULL }, /* 0x0234 */ - { .altcode = NULL }, /* 0x0235 */ - { .altcode = NULL }, /* 0x0236 */ - { .altcode = NULL }, /* 0x0237 */ - { .altcode = NULL }, /* 0x0238 */ - { .altcode = NULL }, /* 0x0239 */ - { .altcode = NULL }, /* 0x023a */ - { .altcode = NULL }, /* 0x023b */ - { .altcode = NULL }, /* 0x023c */ - { .altcode = NULL }, /* 0x023d */ - { .altcode = NULL }, /* 0x023e */ - { .altcode = NULL }, /* 0x023f */ - { .altcode = NULL }, /* 0x0240 */ - { .altcode = NULL }, /* 0x0241 */ - { .altcode = NULL }, /* 0x0242 */ - { .altcode = NULL }, /* 0x0243 */ - { .altcode = NULL }, /* 0x0244 */ - { .altcode = NULL }, /* 0x0245 */ - { .altcode = NULL }, /* 0x0246 */ - { .altcode = NULL }, /* 0x0247 */ - { .altcode = NULL }, /* 0x0248 */ - { .altcode = NULL }, /* 0x0249 */ - { .altcode = NULL }, /* 0x024a */ - { .altcode = NULL }, /* 0x024b */ - { .altcode = NULL }, /* 0x024c */ - { .altcode = NULL }, /* 0x024d */ - { .altcode = NULL }, /* 0x024e */ - { .altcode = NULL }, /* 0x024f */ - { .altcode = NULL }, /* 0x0250 */ - { .altcode = NULL }, /* 0x0251 */ - { .altcode = NULL }, /* 0x0252 */ - { .altcode = NULL }, /* 0x0253 */ - { .altcode = NULL }, /* 0x0254 */ - { .altcode = NULL }, /* 0x0255 */ - { .altcode = NULL }, /* 0x0256 */ - { .altcode = NULL }, /* 0x0257 */ - { .altcode = NULL }, /* 0x0258 */ - { .altcode = NULL }, /* 0x0259 */ - { .altcode = NULL }, /* 0x025a */ - { .altcode = NULL }, /* 0x025b */ - { .altcode = NULL }, /* 0x025c */ - { .altcode = NULL }, /* 0x025d */ - { .altcode = NULL }, /* 0x025e */ - { .altcode = NULL }, /* 0x025f */ - { .altcode = NULL }, /* 0x0260 */ - { .altcode = NULL }, /* 0x0261 */ - { .altcode = NULL }, /* 0x0262 */ - { .altcode = NULL }, /* 0x0263 */ - { .altcode = NULL }, /* 0x0264 */ - { .altcode = NULL }, /* 0x0265 */ - { .altcode = NULL }, /* 0x0266 */ - { .altcode = NULL }, /* 0x0267 */ - { .altcode = NULL }, /* 0x0268 */ - { .altcode = NULL }, /* 0x0269 */ - { .altcode = NULL }, /* 0x026a */ - { .altcode = NULL }, /* 0x026b */ - { .altcode = NULL }, /* 0x026c */ - { .altcode = NULL }, /* 0x026d */ - { .altcode = NULL }, /* 0x026e */ - { .altcode = NULL }, /* 0x026f */ - { .altcode = NULL }, /* 0x0270 */ - { .altcode = NULL }, /* 0x0271 */ - { .altcode = NULL }, /* 0x0272 */ - { .altcode = NULL }, /* 0x0273 */ - { .altcode = NULL }, /* 0x0274 */ - { .altcode = NULL }, /* 0x0275 */ - { .altcode = NULL }, /* 0x0276 */ - { .altcode = NULL }, /* 0x0277 */ - { .altcode = NULL }, /* 0x0278 */ - { .altcode = NULL }, /* 0x0279 */ - { .altcode = NULL }, /* 0x027a */ - { .altcode = NULL }, /* 0x027b */ - { .altcode = NULL }, /* 0x027c */ - { .altcode = NULL }, /* 0x027d */ - { .altcode = NULL }, /* 0x027e */ - { .altcode = NULL }, /* 0x027f */ - { .altcode = NULL }, /* 0x0280 */ - { .altcode = NULL }, /* 0x0281 */ - { .altcode = NULL }, /* 0x0282 */ - { .altcode = NULL }, /* 0x0283 */ - { .altcode = NULL }, /* 0x0284 */ - { .altcode = NULL }, /* 0x0285 */ - { .altcode = NULL }, /* 0x0286 */ - { .altcode = NULL }, /* 0x0287 */ - { .altcode = NULL }, /* 0x0288 */ - { .altcode = NULL }, /* 0x0289 */ - { .altcode = NULL }, /* 0x028a */ - { .altcode = NULL }, /* 0x028b */ - { .altcode = NULL }, /* 0x028c */ - { .altcode = NULL }, /* 0x028d */ - { .altcode = NULL }, /* 0x028e */ - { .altcode = NULL }, /* 0x028f */ - { .altcode = NULL }, /* 0x0290 */ - { .altcode = NULL }, /* 0x0291 */ - { .altcode = NULL }, /* 0x0292 */ - { .altcode = NULL }, /* 0x0293 */ - { .altcode = NULL }, /* 0x0294 */ - { .altcode = NULL }, /* 0x0295 */ - { .altcode = NULL }, /* 0x0296 */ - { .altcode = NULL }, /* 0x0297 */ - { .altcode = NULL }, /* 0x0298 */ - { .altcode = NULL }, /* 0x0299 */ - { .altcode = NULL }, /* 0x029a */ - { .altcode = NULL }, /* 0x029b */ - { .altcode = NULL }, /* 0x029c */ - { .altcode = NULL }, /* 0x029d */ - { .altcode = NULL }, /* 0x029e */ - { .altcode = NULL }, /* 0x029f */ - { .altcode = NULL }, /* 0x02a0 */ - { .altcode = NULL }, /* 0x02a1 (Hstroke) */ - { .altcode = NULL }, /* 0x02a2 */ - { .altcode = NULL }, /* 0x02a3 */ - { .altcode = NULL }, /* 0x02a4 */ - { .altcode = NULL }, /* 0x02a5 */ - { .altcode = NULL }, /* 0x02a6 (Hcircumflex) */ - { .altcode = NULL }, /* 0x02a7 */ - { .altcode = NULL }, /* 0x02a8 */ - { .altcode = NULL }, /* 0x02a9 (Iabovedot) */ - { .altcode = NULL }, /* 0x02aa */ - { .altcode = NULL }, /* 0x02ab (Gbreve) */ - { .altcode = NULL }, /* 0x02ac (Jcircumflex) */ - { .altcode = NULL }, /* 0x02ad */ - { .altcode = NULL }, /* 0x02ae */ - { .altcode = NULL }, /* 0x02af */ - { .altcode = NULL }, /* 0x02b0 */ - { .altcode = NULL }, /* 0x02b1 (hstroke) */ - { .altcode = NULL }, /* 0x02b2 */ - { .altcode = NULL }, /* 0x02b3 */ - { .altcode = NULL }, /* 0x02b4 */ - { .altcode = NULL }, /* 0x02b5 */ - { .altcode = NULL }, /* 0x02b6 (hcircumflex) */ - { .altcode = NULL }, /* 0x02b7 */ - { .altcode = NULL }, /* 0x02b8 */ - { .altcode = NULL }, /* 0x02b9 (idotless) */ - { .altcode = NULL }, /* 0x02ba */ - { .altcode = NULL }, /* 0x02bb (gbreve) */ - { .altcode = NULL }, /* 0x02bc (jcircumflex) */ - { .altcode = NULL }, /* 0x02bd */ - { .altcode = NULL }, /* 0x02be */ - { .altcode = NULL }, /* 0x02bf */ - { .altcode = NULL }, /* 0x02c0 */ - { .altcode = NULL }, /* 0x02c1 */ - { .altcode = NULL }, /* 0x02c2 */ - { .altcode = NULL }, /* 0x02c3 */ - { .altcode = NULL }, /* 0x02c4 */ - { .altcode = NULL }, /* 0x02c5 (Cabovedot) */ - { .altcode = NULL }, /* 0x02c6 (Ccircumflex) */ - { .altcode = NULL }, /* 0x02c7 */ - { .altcode = NULL }, /* 0x02c8 */ - { .altcode = NULL }, /* 0x02c9 */ - { .altcode = NULL }, /* 0x02ca */ - { .altcode = NULL }, /* 0x02cb */ - { .altcode = NULL }, /* 0x02cc */ - { .altcode = NULL }, /* 0x02cd */ - { .altcode = NULL }, /* 0x02ce */ - { .altcode = NULL }, /* 0x02cf */ - { .altcode = NULL }, /* 0x02d0 */ - { .altcode = NULL }, /* 0x02d1 */ - { .altcode = NULL }, /* 0x02d2 */ - { .altcode = NULL }, /* 0x02d3 */ - { .altcode = NULL }, /* 0x02d4 */ - { .altcode = NULL }, /* 0x02d5 (Gabovedot) */ - { .altcode = NULL }, /* 0x02d6 */ - { .altcode = NULL }, /* 0x02d7 */ - { .altcode = NULL }, /* 0x02d8 (Gcircumflex) */ - { .altcode = NULL }, /* 0x02d9 */ - { .altcode = NULL }, /* 0x02da */ - { .altcode = NULL }, /* 0x02db */ - { .altcode = NULL }, /* 0x02dc */ - { .altcode = NULL }, /* 0x02dd (Ubreve) */ - { .altcode = NULL }, /* 0x02de (Scircumflex) */ - { .altcode = NULL }, /* 0x02df */ - { .altcode = NULL }, /* 0x02e0 */ - { .altcode = NULL }, /* 0x02e1 */ - { .altcode = NULL }, /* 0x02e2 */ - { .altcode = NULL }, /* 0x02e3 */ - { .altcode = NULL }, /* 0x02e4 */ - { .altcode = NULL }, /* 0x02e5 (cabovedot) */ - { .altcode = NULL }, /* 0x02e6 (ccircumflex) */ - { .altcode = NULL }, /* 0x02e7 */ - { .altcode = NULL }, /* 0x02e8 */ - { .altcode = NULL }, /* 0x02e9 */ - { .altcode = NULL }, /* 0x02ea */ - { .altcode = NULL }, /* 0x02eb */ - { .altcode = NULL }, /* 0x02ec */ - { .altcode = NULL }, /* 0x02ed */ - { .altcode = NULL }, /* 0x02ee */ - { .altcode = NULL }, /* 0x02ef */ - { .altcode = NULL }, /* 0x02f0 */ - { .altcode = NULL }, /* 0x02f1 */ - { .altcode = NULL }, /* 0x02f2 */ - { .altcode = NULL }, /* 0x02f3 */ - { .altcode = NULL }, /* 0x02f4 */ - { .altcode = NULL }, /* 0x02f5 (gabovedot) */ - { .altcode = NULL }, /* 0x02f6 */ - { .altcode = NULL }, /* 0x02f7 */ - { .altcode = NULL }, /* 0x02f8 (gcircumflex) */ - { .altcode = NULL }, /* 0x02f9 */ - { .altcode = NULL }, /* 0x02fa */ - { .altcode = NULL }, /* 0x02fb */ - { .altcode = NULL }, /* 0x02fc */ - { .altcode = NULL }, /* 0x02fd (ubreve) */ - { .altcode = NULL }, /* 0x02fe (scircumflex) */ - { .altcode = NULL }, /* 0x02ff */ - }, - { /* 0x03?? */ - { .altcode = NULL }, /* 0x0300 */ - { .altcode = NULL }, /* 0x0301 */ - { .altcode = NULL }, /* 0x0302 */ - { .altcode = NULL }, /* 0x0303 */ - { .altcode = NULL }, /* 0x0304 */ - { .altcode = NULL }, /* 0x0305 */ - { .altcode = NULL }, /* 0x0306 */ - { .altcode = NULL }, /* 0x0307 */ - { .altcode = NULL }, /* 0x0308 */ - { .altcode = NULL }, /* 0x0309 */ - { .altcode = NULL }, /* 0x030a */ - { .altcode = NULL }, /* 0x030b */ - { .altcode = NULL }, /* 0x030c */ - { .altcode = NULL }, /* 0x030d */ - { .altcode = NULL }, /* 0x030e */ - { .altcode = NULL }, /* 0x030f */ - { .altcode = NULL }, /* 0x0310 */ - { .altcode = NULL }, /* 0x0311 */ - { .altcode = NULL }, /* 0x0312 */ - { .altcode = NULL }, /* 0x0313 */ - { .altcode = NULL }, /* 0x0314 */ - { .altcode = NULL }, /* 0x0315 */ - { .altcode = NULL }, /* 0x0316 */ - { .altcode = NULL }, /* 0x0317 */ - { .altcode = NULL }, /* 0x0318 */ - { .altcode = NULL }, /* 0x0319 */ - { .altcode = NULL }, /* 0x031a */ - { .altcode = NULL }, /* 0x031b */ - { .altcode = NULL }, /* 0x031c */ - { .altcode = NULL }, /* 0x031d */ - { .altcode = NULL }, /* 0x031e */ - { .altcode = NULL }, /* 0x031f */ - { .altcode = NULL }, /* 0x0320 */ - { .altcode = NULL }, /* 0x0321 */ - { .altcode = NULL }, /* 0x0322 */ - { .altcode = NULL }, /* 0x0323 */ - { .altcode = NULL }, /* 0x0324 */ - { .altcode = NULL }, /* 0x0325 */ - { .altcode = NULL }, /* 0x0326 */ - { .altcode = NULL }, /* 0x0327 */ - { .altcode = NULL }, /* 0x0328 */ - { .altcode = NULL }, /* 0x0329 */ - { .altcode = NULL }, /* 0x032a */ - { .altcode = NULL }, /* 0x032b */ - { .altcode = NULL }, /* 0x032c */ - { .altcode = NULL }, /* 0x032d */ - { .altcode = NULL }, /* 0x032e */ - { .altcode = NULL }, /* 0x032f */ - { .altcode = NULL }, /* 0x0330 */ - { .altcode = NULL }, /* 0x0331 */ - { .altcode = NULL }, /* 0x0332 */ - { .altcode = NULL }, /* 0x0333 */ - { .altcode = NULL }, /* 0x0334 */ - { .altcode = NULL }, /* 0x0335 */ - { .altcode = NULL }, /* 0x0336 */ - { .altcode = NULL }, /* 0x0337 */ - { .altcode = NULL }, /* 0x0338 */ - { .altcode = NULL }, /* 0x0339 */ - { .altcode = NULL }, /* 0x033a */ - { .altcode = NULL }, /* 0x033b */ - { .altcode = NULL }, /* 0x033c */ - { .altcode = NULL }, /* 0x033d */ - { .altcode = NULL }, /* 0x033e */ - { .altcode = NULL }, /* 0x033f */ - { .altcode = NULL }, /* 0x0340 */ - { .altcode = NULL }, /* 0x0341 */ - { .altcode = NULL }, /* 0x0342 */ - { .altcode = NULL }, /* 0x0343 */ - { .altcode = NULL }, /* 0x0344 */ - { .altcode = NULL }, /* 0x0345 */ - { .altcode = NULL }, /* 0x0346 */ - { .altcode = NULL }, /* 0x0347 */ - { .altcode = NULL }, /* 0x0348 */ - { .altcode = NULL }, /* 0x0349 */ - { .altcode = NULL }, /* 0x034a */ - { .altcode = NULL }, /* 0x034b */ - { .altcode = NULL }, /* 0x034c */ - { .altcode = NULL }, /* 0x034d */ - { .altcode = NULL }, /* 0x034e */ - { .altcode = NULL }, /* 0x034f */ - { .altcode = NULL }, /* 0x0350 */ - { .altcode = NULL }, /* 0x0351 */ - { .altcode = NULL }, /* 0x0352 */ - { .altcode = NULL }, /* 0x0353 */ - { .altcode = NULL }, /* 0x0354 */ - { .altcode = NULL }, /* 0x0355 */ - { .altcode = NULL }, /* 0x0356 */ - { .altcode = NULL }, /* 0x0357 */ - { .altcode = NULL }, /* 0x0358 */ - { .altcode = NULL }, /* 0x0359 */ - { .altcode = NULL }, /* 0x035a */ - { .altcode = NULL }, /* 0x035b */ - { .altcode = NULL }, /* 0x035c */ - { .altcode = NULL }, /* 0x035d */ - { .altcode = NULL }, /* 0x035e */ - { .altcode = NULL }, /* 0x035f */ - { .altcode = NULL }, /* 0x0360 */ - { .altcode = NULL }, /* 0x0361 */ - { .altcode = NULL }, /* 0x0362 */ - { .altcode = NULL }, /* 0x0363 */ - { .altcode = NULL }, /* 0x0364 */ - { .altcode = NULL }, /* 0x0365 */ - { .altcode = NULL }, /* 0x0366 */ - { .altcode = NULL }, /* 0x0367 */ - { .altcode = NULL }, /* 0x0368 */ - { .altcode = NULL }, /* 0x0369 */ - { .altcode = NULL }, /* 0x036a */ - { .altcode = NULL }, /* 0x036b */ - { .altcode = NULL }, /* 0x036c */ - { .altcode = NULL }, /* 0x036d */ - { .altcode = NULL }, /* 0x036e */ - { .altcode = NULL }, /* 0x036f */ - { .altcode = NULL }, /* 0x0370 */ - { .altcode = NULL }, /* 0x0371 */ - { .altcode = NULL }, /* 0x0372 */ - { .altcode = NULL }, /* 0x0373 */ - { .altcode = NULL }, /* 0x0374 */ - { .altcode = NULL }, /* 0x0375 */ - { .altcode = NULL }, /* 0x0376 */ - { .altcode = NULL }, /* 0x0377 */ - { .altcode = NULL }, /* 0x0378 */ - { .altcode = NULL }, /* 0x0379 */ - { .altcode = NULL }, /* 0x037a */ - { .altcode = NULL }, /* 0x037b */ - { .altcode = NULL }, /* 0x037c */ - { .altcode = NULL }, /* 0x037d */ - { .altcode = NULL }, /* 0x037e */ - { .altcode = NULL }, /* 0x037f */ - { .altcode = NULL }, /* 0x0380 */ - { .altcode = NULL }, /* 0x0381 */ - { .altcode = NULL }, /* 0x0382 */ - { .altcode = NULL }, /* 0x0383 */ - { .altcode = NULL }, /* 0x0384 */ - { .altcode = NULL }, /* 0x0385 */ - { .altcode = NULL }, /* 0x0386 */ - { .altcode = NULL }, /* 0x0387 */ - { .altcode = NULL }, /* 0x0388 */ - { .altcode = NULL }, /* 0x0389 */ - { .altcode = NULL }, /* 0x038a */ - { .altcode = NULL }, /* 0x038b */ - { .altcode = NULL }, /* 0x038c */ - { .altcode = NULL }, /* 0x038d */ - { .altcode = NULL }, /* 0x038e */ - { .altcode = NULL }, /* 0x038f */ - { .altcode = NULL }, /* 0x0390 */ - { .altcode = NULL }, /* 0x0391 */ - { .altcode = NULL }, /* 0x0392 */ - { .altcode = NULL }, /* 0x0393 */ - { .altcode = NULL }, /* 0x0394 */ - { .altcode = NULL }, /* 0x0395 */ - { .altcode = NULL }, /* 0x0396 */ - { .altcode = NULL }, /* 0x0397 */ - { .altcode = NULL }, /* 0x0398 */ - { .altcode = NULL }, /* 0x0399 */ - { .altcode = NULL }, /* 0x039a */ - { .altcode = NULL }, /* 0x039b */ - { .altcode = NULL }, /* 0x039c */ - { .altcode = NULL }, /* 0x039d */ - { .altcode = NULL }, /* 0x039e */ - { .altcode = NULL }, /* 0x039f */ - { .altcode = NULL }, /* 0x03a0 */ - { .altcode = NULL }, /* 0x03a1 */ - { .altcode = NULL }, /* 0x03a2 (kappa) */ - { .altcode = NULL }, /* 0x03a3 (Rcedilla) */ - { .altcode = NULL }, /* 0x03a4 */ - { .altcode = NULL }, /* 0x03a5 (Itilde) */ - { .altcode = NULL }, /* 0x03a6 (Lcedilla) */ - { .altcode = NULL }, /* 0x03a7 */ - { .altcode = NULL }, /* 0x03a8 */ - { .altcode = NULL }, /* 0x03a9 */ - { .altcode = NULL }, /* 0x03aa (Emacron) */ - { .altcode = NULL }, /* 0x03ab (Gcedilla) */ - { .altcode = NULL }, /* 0x03ac (Tslash) */ - { .altcode = NULL }, /* 0x03ad */ - { .altcode = NULL }, /* 0x03ae */ - { .altcode = NULL }, /* 0x03af */ - { .altcode = NULL }, /* 0x03b0 */ - { .altcode = NULL }, /* 0x03b1 */ - { .altcode = NULL }, /* 0x03b2 */ - { .altcode = NULL }, /* 0x03b3 (rcedilla) */ - { .altcode = NULL }, /* 0x03b4 */ - { .altcode = NULL }, /* 0x03b5 (itilde) */ - { .altcode = NULL }, /* 0x03b6 (lcedilla) */ - { .altcode = NULL }, /* 0x03b7 */ - { .altcode = NULL }, /* 0x03b8 */ - { .altcode = NULL }, /* 0x03b9 */ - { .altcode = NULL }, /* 0x03ba (emacron) */ - { .altcode = NULL }, /* 0x03bb (gcedilla) */ - { .altcode = NULL }, /* 0x03bc (tslash) */ - { .altcode = NULL }, /* 0x03bd (ENG) */ - { .altcode = NULL }, /* 0x03be */ - { .altcode = NULL }, /* 0x03bf (eng) */ - { .altcode = NULL }, /* 0x03c0 (Amacron) */ - { .altcode = NULL }, /* 0x03c1 */ - { .altcode = NULL }, /* 0x03c2 */ - { .altcode = NULL }, /* 0x03c3 */ - { .altcode = NULL }, /* 0x03c4 */ - { .altcode = NULL }, /* 0x03c5 */ - { .altcode = NULL }, /* 0x03c6 */ - { .altcode = NULL }, /* 0x03c7 (Iogonek) */ - { .altcode = NULL }, /* 0x03c8 */ - { .altcode = NULL }, /* 0x03c9 */ - { .altcode = NULL }, /* 0x03ca */ - { .altcode = NULL }, /* 0x03cb */ - { .altcode = NULL }, /* 0x03cc (Eabovedot) */ - { .altcode = NULL }, /* 0x03cd */ - { .altcode = NULL }, /* 0x03ce */ - { .altcode = NULL }, /* 0x03cf (Imacron) */ - { .altcode = NULL }, /* 0x03d0 */ - { .altcode = NULL }, /* 0x03d1 (Ncedilla) */ - { .altcode = NULL }, /* 0x03d2 (Omacron) */ - { .altcode = NULL }, /* 0x03d3 (Kcedilla) */ - { .altcode = NULL }, /* 0x03d4 */ - { .altcode = NULL }, /* 0x03d5 */ - { .altcode = NULL }, /* 0x03d6 */ - { .altcode = NULL }, /* 0x03d7 */ - { .altcode = NULL }, /* 0x03d8 */ - { .altcode = NULL }, /* 0x03d9 (Uogonek) */ - { .altcode = NULL }, /* 0x03da */ - { .altcode = NULL }, /* 0x03db */ - { .altcode = NULL }, /* 0x03dc */ - { .altcode = NULL }, /* 0x03dd (Utilde) */ - { .altcode = NULL }, /* 0x03de (Umacron) */ - { .altcode = NULL }, /* 0x03df */ - { .altcode = NULL }, /* 0x03e0 (amacron) */ - { .altcode = NULL }, /* 0x03e1 */ - { .altcode = NULL }, /* 0x03e2 */ - { .altcode = NULL }, /* 0x03e3 */ - { .altcode = NULL }, /* 0x03e4 */ - { .altcode = NULL }, /* 0x03e5 */ - { .altcode = NULL }, /* 0x03e6 */ - { .altcode = NULL }, /* 0x03e7 (iogonek) */ - { .altcode = NULL }, /* 0x03e8 */ - { .altcode = NULL }, /* 0x03e9 */ - { .altcode = NULL }, /* 0x03ea */ - { .altcode = NULL }, /* 0x03eb */ - { .altcode = NULL }, /* 0x03ec (eabovedot) */ - { .altcode = NULL }, /* 0x03ed */ - { .altcode = NULL }, /* 0x03ee */ - { .altcode = NULL }, /* 0x03ef (imacron) */ - { .altcode = NULL }, /* 0x03f0 */ - { .altcode = NULL }, /* 0x03f1 (ncedilla) */ - { .altcode = NULL }, /* 0x03f2 (omacron) */ - { .altcode = NULL }, /* 0x03f3 (kcedilla) */ - { .altcode = NULL }, /* 0x03f4 */ - { .altcode = NULL }, /* 0x03f5 */ - { .altcode = NULL }, /* 0x03f6 */ - { .altcode = NULL }, /* 0x03f7 */ - { .altcode = NULL }, /* 0x03f8 */ - { .altcode = NULL }, /* 0x03f9 (uogonek) */ - { .altcode = NULL }, /* 0x03fa */ - { .altcode = NULL }, /* 0x03fb */ - { .altcode = NULL }, /* 0x03fc */ - { .altcode = NULL }, /* 0x03fd (utilde) */ - { .altcode = NULL }, /* 0x03fe (umacron) */ - { .altcode = NULL }, /* 0x03ff */ - }, - { /* 0x04?? */ - { .altcode = NULL }, /* 0x0400 */ - { .altcode = NULL }, /* 0x0401 */ - { .altcode = NULL }, /* 0x0402 */ - { .altcode = NULL }, /* 0x0403 */ - { .altcode = NULL }, /* 0x0404 */ - { .altcode = NULL }, /* 0x0405 */ - { .altcode = NULL }, /* 0x0406 */ - { .altcode = NULL }, /* 0x0407 */ - { .altcode = NULL }, /* 0x0408 */ - { .altcode = NULL }, /* 0x0409 */ - { .altcode = NULL }, /* 0x040a */ - { .altcode = NULL }, /* 0x040b */ - { .altcode = NULL }, /* 0x040c */ - { .altcode = NULL }, /* 0x040d */ - { .altcode = NULL }, /* 0x040e */ - { .altcode = NULL }, /* 0x040f */ - { .altcode = NULL }, /* 0x0410 */ - { .altcode = NULL }, /* 0x0411 */ - { .altcode = NULL }, /* 0x0412 */ - { .altcode = NULL }, /* 0x0413 */ - { .altcode = NULL }, /* 0x0414 */ - { .altcode = NULL }, /* 0x0415 */ - { .altcode = NULL }, /* 0x0416 */ - { .altcode = NULL }, /* 0x0417 */ - { .altcode = NULL }, /* 0x0418 */ - { .altcode = NULL }, /* 0x0419 */ - { .altcode = NULL }, /* 0x041a */ - { .altcode = NULL }, /* 0x041b */ - { .altcode = NULL }, /* 0x041c */ - { .altcode = NULL }, /* 0x041d */ - { .altcode = NULL }, /* 0x041e */ - { .altcode = NULL }, /* 0x041f */ - { .altcode = NULL }, /* 0x0420 */ - { .altcode = NULL }, /* 0x0421 */ - { .altcode = NULL }, /* 0x0422 */ - { .altcode = NULL }, /* 0x0423 */ - { .altcode = NULL }, /* 0x0424 */ - { .altcode = NULL }, /* 0x0425 */ - { .altcode = NULL }, /* 0x0426 */ - { .altcode = NULL }, /* 0x0427 */ - { .altcode = NULL }, /* 0x0428 */ - { .altcode = NULL }, /* 0x0429 */ - { .altcode = NULL }, /* 0x042a */ - { .altcode = NULL }, /* 0x042b */ - { .altcode = NULL }, /* 0x042c */ - { .altcode = NULL }, /* 0x042d */ - { .altcode = NULL }, /* 0x042e */ - { .altcode = NULL }, /* 0x042f */ - { .altcode = NULL }, /* 0x0430 */ - { .altcode = NULL }, /* 0x0431 */ - { .altcode = NULL }, /* 0x0432 */ - { .altcode = NULL }, /* 0x0433 */ - { .altcode = NULL }, /* 0x0434 */ - { .altcode = NULL }, /* 0x0435 */ - { .altcode = NULL }, /* 0x0436 */ - { .altcode = NULL }, /* 0x0437 */ - { .altcode = NULL }, /* 0x0438 */ - { .altcode = NULL }, /* 0x0439 */ - { .altcode = NULL }, /* 0x043a */ - { .altcode = NULL }, /* 0x043b */ - { .altcode = NULL }, /* 0x043c */ - { .altcode = NULL }, /* 0x043d */ - { .altcode = NULL }, /* 0x043e */ - { .altcode = NULL }, /* 0x043f */ - { .altcode = NULL }, /* 0x0440 */ - { .altcode = NULL }, /* 0x0441 */ - { .altcode = NULL }, /* 0x0442 */ - { .altcode = NULL }, /* 0x0443 */ - { .altcode = NULL }, /* 0x0444 */ - { .altcode = NULL }, /* 0x0445 */ - { .altcode = NULL }, /* 0x0446 */ - { .altcode = NULL }, /* 0x0447 */ - { .altcode = NULL }, /* 0x0448 */ - { .altcode = NULL }, /* 0x0449 */ - { .altcode = NULL }, /* 0x044a */ - { .altcode = NULL }, /* 0x044b */ - { .altcode = NULL }, /* 0x044c */ - { .altcode = NULL }, /* 0x044d */ - { .altcode = NULL }, /* 0x044e */ - { .altcode = NULL }, /* 0x044f */ - { .altcode = NULL }, /* 0x0450 */ - { .altcode = NULL }, /* 0x0451 */ - { .altcode = NULL }, /* 0x0452 */ - { .altcode = NULL }, /* 0x0453 */ - { .altcode = NULL }, /* 0x0454 */ - { .altcode = NULL }, /* 0x0455 */ - { .altcode = NULL }, /* 0x0456 */ - { .altcode = NULL }, /* 0x0457 */ - { .altcode = NULL }, /* 0x0458 */ - { .altcode = NULL }, /* 0x0459 */ - { .altcode = NULL }, /* 0x045a */ - { .altcode = NULL }, /* 0x045b */ - { .altcode = NULL }, /* 0x045c */ - { .altcode = NULL }, /* 0x045d */ - { .altcode = NULL }, /* 0x045e */ - { .altcode = NULL }, /* 0x045f */ - { .altcode = NULL }, /* 0x0460 */ - { .altcode = NULL }, /* 0x0461 */ - { .altcode = NULL }, /* 0x0462 */ - { .altcode = NULL }, /* 0x0463 */ - { .altcode = NULL }, /* 0x0464 */ - { .altcode = NULL }, /* 0x0465 */ - { .altcode = NULL }, /* 0x0466 */ - { .altcode = NULL }, /* 0x0467 */ - { .altcode = NULL }, /* 0x0468 */ - { .altcode = NULL }, /* 0x0469 */ - { .altcode = NULL }, /* 0x046a */ - { .altcode = NULL }, /* 0x046b */ - { .altcode = NULL }, /* 0x046c */ - { .altcode = NULL }, /* 0x046d */ - { .altcode = NULL }, /* 0x046e */ - { .altcode = NULL }, /* 0x046f */ - { .altcode = NULL }, /* 0x0470 */ - { .altcode = NULL }, /* 0x0471 */ - { .altcode = NULL }, /* 0x0472 */ - { .altcode = NULL }, /* 0x0473 */ - { .altcode = NULL }, /* 0x0474 */ - { .altcode = NULL }, /* 0x0475 */ - { .altcode = NULL }, /* 0x0476 */ - { .altcode = NULL }, /* 0x0477 */ - { .altcode = NULL }, /* 0x0478 */ - { .altcode = NULL }, /* 0x0479 */ - { .altcode = NULL }, /* 0x047a */ - { .altcode = NULL }, /* 0x047b */ - { .altcode = NULL }, /* 0x047c */ - { .altcode = NULL }, /* 0x047d */ - { .altcode = NULL }, /* 0x047e (overline) */ - { .altcode = NULL }, /* 0x047f */ - { .altcode = NULL }, /* 0x0480 */ - { .altcode = NULL }, /* 0x0481 */ - { .altcode = NULL }, /* 0x0482 */ - { .altcode = NULL }, /* 0x0483 */ - { .altcode = NULL }, /* 0x0484 */ - { .altcode = NULL }, /* 0x0485 */ - { .altcode = NULL }, /* 0x0486 */ - { .altcode = NULL }, /* 0x0487 */ - { .altcode = NULL }, /* 0x0488 */ - { .altcode = NULL }, /* 0x0489 */ - { .altcode = NULL }, /* 0x048a */ - { .altcode = NULL }, /* 0x048b */ - { .altcode = NULL }, /* 0x048c */ - { .altcode = NULL }, /* 0x048d */ - { .altcode = NULL }, /* 0x048e */ - { .altcode = NULL }, /* 0x048f */ - { .altcode = NULL }, /* 0x0490 */ - { .altcode = NULL }, /* 0x0491 */ - { .altcode = NULL }, /* 0x0492 */ - { .altcode = NULL }, /* 0x0493 */ - { .altcode = NULL }, /* 0x0494 */ - { .altcode = NULL }, /* 0x0495 */ - { .altcode = NULL }, /* 0x0496 */ - { .altcode = NULL }, /* 0x0497 */ - { .altcode = NULL }, /* 0x0498 */ - { .altcode = NULL }, /* 0x0499 */ - { .altcode = NULL }, /* 0x049a */ - { .altcode = NULL }, /* 0x049b */ - { .altcode = NULL }, /* 0x049c */ - { .altcode = NULL }, /* 0x049d */ - { .altcode = NULL }, /* 0x049e */ - { .altcode = NULL }, /* 0x049f */ - { .altcode = NULL }, /* 0x04a0 */ - { .altcode = NULL }, /* 0x04a1 (kana_fullstop) */ - { .altcode = NULL }, /* 0x04a2 (kana_openingbracket) */ - { .altcode = NULL }, /* 0x04a3 (kana_closingbracket) */ - { .altcode = NULL }, /* 0x04a4 (kana_comma) */ - { .altcode = NULL }, /* 0x04a5 (kana_middledot) */ - { .altcode = NULL }, /* 0x04a6 (kana_WO) */ - { .altcode = NULL }, /* 0x04a7 (kana_a) */ - { .altcode = NULL }, /* 0x04a8 (kana_i) */ - { .altcode = NULL }, /* 0x04a9 (kana_u) */ - { .altcode = NULL }, /* 0x04aa (kana_e) */ - { .altcode = NULL }, /* 0x04ab (kana_o) */ - { .altcode = NULL }, /* 0x04ac (kana_ya) */ - { .altcode = NULL }, /* 0x04ad (kana_yu) */ - { .altcode = NULL }, /* 0x04ae (kana_yo) */ - { .altcode = NULL }, /* 0x04af (kana_tu) */ - { .altcode = NULL }, /* 0x04b0 (prolongedsound) */ - { .altcode = NULL }, /* 0x04b1 (kana_A) */ - { .altcode = NULL }, /* 0x04b2 (kana_I) */ - { .altcode = NULL }, /* 0x04b3 (kana_U) */ - { .altcode = NULL }, /* 0x04b4 (kana_E) */ - { .altcode = NULL }, /* 0x04b5 (kana_O) */ - { .altcode = NULL }, /* 0x04b6 (kana_KA) */ - { .altcode = NULL }, /* 0x04b7 (kana_KI) */ - { .altcode = NULL }, /* 0x04b8 (kana_KU) */ - { .altcode = NULL }, /* 0x04b9 (kana_KE) */ - { .altcode = NULL }, /* 0x04ba (kana_KO) */ - { .altcode = NULL }, /* 0x04bb (kana_SA) */ - { .altcode = NULL }, /* 0x04bc (kana_SHI) */ - { .altcode = NULL }, /* 0x04bd (kana_SU) */ - { .altcode = NULL }, /* 0x04be (kana_SE) */ - { .altcode = NULL }, /* 0x04bf (kana_SO) */ - { .altcode = NULL }, /* 0x04c0 (kana_TA) */ - { .altcode = NULL }, /* 0x04c1 (kana_TI) */ - { .altcode = NULL }, /* 0x04c2 (kana_TU) */ - { .altcode = NULL }, /* 0x04c3 (kana_TE) */ - { .altcode = NULL }, /* 0x04c4 (kana_TO) */ - { .altcode = NULL }, /* 0x04c5 (kana_NA) */ - { .altcode = NULL }, /* 0x04c6 (kana_NI) */ - { .altcode = NULL }, /* 0x04c7 (kana_NU) */ - { .altcode = NULL }, /* 0x04c8 (kana_NE) */ - { .altcode = NULL }, /* 0x04c9 (kana_NO) */ - { .altcode = NULL }, /* 0x04ca (kana_HA) */ - { .altcode = NULL }, /* 0x04cb (kana_HI) */ - { .altcode = NULL }, /* 0x04cc (kana_HU) */ - { .altcode = NULL }, /* 0x04cd (kana_HE) */ - { .altcode = NULL }, /* 0x04ce (kana_HO) */ - { .altcode = NULL }, /* 0x04cf (kana_MA) */ - { .altcode = NULL }, /* 0x04d0 (kana_MI) */ - { .altcode = NULL }, /* 0x04d1 (kana_MU) */ - { .altcode = NULL }, /* 0x04d2 (kana_ME) */ - { .altcode = NULL }, /* 0x04d3 (kana_MO) */ - { .altcode = NULL }, /* 0x04d4 (kana_YA) */ - { .altcode = NULL }, /* 0x04d5 (kana_YU) */ - { .altcode = NULL }, /* 0x04d6 (kana_YO) */ - { .altcode = NULL }, /* 0x04d7 (kana_RA) */ - { .altcode = NULL }, /* 0x04d8 (kana_RI) */ - { .altcode = NULL }, /* 0x04d9 (kana_RU) */ - { .altcode = NULL }, /* 0x04da (kana_RE) */ - { .altcode = NULL }, /* 0x04db (kana_RO) */ - { .altcode = NULL }, /* 0x04dc (kana_WA) */ - { .altcode = NULL }, /* 0x04dd (kana_N) */ - { .altcode = NULL }, /* 0x04de (voicedsound) */ - { .altcode = NULL }, /* 0x04df (semivoicedsound) */ - { .altcode = NULL }, /* 0x04e0 */ - { .altcode = NULL }, /* 0x04e1 */ - { .altcode = NULL }, /* 0x04e2 */ - { .altcode = NULL }, /* 0x04e3 */ - { .altcode = NULL }, /* 0x04e4 */ - { .altcode = NULL }, /* 0x04e5 */ - { .altcode = NULL }, /* 0x04e6 */ - { .altcode = NULL }, /* 0x04e7 */ - { .altcode = NULL }, /* 0x04e8 */ - { .altcode = NULL }, /* 0x04e9 */ - { .altcode = NULL }, /* 0x04ea */ - { .altcode = NULL }, /* 0x04eb */ - { .altcode = NULL }, /* 0x04ec */ - { .altcode = NULL }, /* 0x04ed */ - { .altcode = NULL }, /* 0x04ee */ - { .altcode = NULL }, /* 0x04ef */ - { .altcode = NULL }, /* 0x04f0 */ - { .altcode = NULL }, /* 0x04f1 */ - { .altcode = NULL }, /* 0x04f2 */ - { .altcode = NULL }, /* 0x04f3 */ - { .altcode = NULL }, /* 0x04f4 */ - { .altcode = NULL }, /* 0x04f5 */ - { .altcode = NULL }, /* 0x04f6 */ - { .altcode = NULL }, /* 0x04f7 */ - { .altcode = NULL }, /* 0x04f8 */ - { .altcode = NULL }, /* 0x04f9 */ - { .altcode = NULL }, /* 0x04fa */ - { .altcode = NULL }, /* 0x04fb */ - { .altcode = NULL }, /* 0x04fc */ - { .altcode = NULL }, /* 0x04fd */ - { .altcode = NULL }, /* 0x04fe */ - { .altcode = NULL }, /* 0x04ff */ - }, - { /* 0x05?? */ - { .altcode = NULL }, /* 0x0500 */ - { .altcode = NULL }, /* 0x0501 */ - { .altcode = NULL }, /* 0x0502 */ - { .altcode = NULL }, /* 0x0503 */ - { .altcode = NULL }, /* 0x0504 */ - { .altcode = NULL }, /* 0x0505 */ - { .altcode = NULL }, /* 0x0506 */ - { .altcode = NULL }, /* 0x0507 */ - { .altcode = NULL }, /* 0x0508 */ - { .altcode = NULL }, /* 0x0509 */ - { .altcode = NULL }, /* 0x050a */ - { .altcode = NULL }, /* 0x050b */ - { .altcode = NULL }, /* 0x050c */ - { .altcode = NULL }, /* 0x050d */ - { .altcode = NULL }, /* 0x050e */ - { .altcode = NULL }, /* 0x050f */ - { .altcode = NULL }, /* 0x0510 */ - { .altcode = NULL }, /* 0x0511 */ - { .altcode = NULL }, /* 0x0512 */ - { .altcode = NULL }, /* 0x0513 */ - { .altcode = NULL }, /* 0x0514 */ - { .altcode = NULL }, /* 0x0515 */ - { .altcode = NULL }, /* 0x0516 */ - { .altcode = NULL }, /* 0x0517 */ - { .altcode = NULL }, /* 0x0518 */ - { .altcode = NULL }, /* 0x0519 */ - { .altcode = NULL }, /* 0x051a */ - { .altcode = NULL }, /* 0x051b */ - { .altcode = NULL }, /* 0x051c */ - { .altcode = NULL }, /* 0x051d */ - { .altcode = NULL }, /* 0x051e */ - { .altcode = NULL }, /* 0x051f */ - { .altcode = NULL }, /* 0x0520 */ - { .altcode = NULL }, /* 0x0521 */ - { .altcode = NULL }, /* 0x0522 */ - { .altcode = NULL }, /* 0x0523 */ - { .altcode = NULL }, /* 0x0524 */ - { .altcode = NULL }, /* 0x0525 */ - { .altcode = NULL }, /* 0x0526 */ - { .altcode = NULL }, /* 0x0527 */ - { .altcode = NULL }, /* 0x0528 */ - { .altcode = NULL }, /* 0x0529 */ - { .altcode = NULL }, /* 0x052a */ - { .altcode = NULL }, /* 0x052b */ - { .altcode = NULL }, /* 0x052c */ - { .altcode = NULL }, /* 0x052d */ - { .altcode = NULL }, /* 0x052e */ - { .altcode = NULL }, /* 0x052f */ - { .altcode = NULL }, /* 0x0530 */ - { .altcode = NULL }, /* 0x0531 */ - { .altcode = NULL }, /* 0x0532 */ - { .altcode = NULL }, /* 0x0533 */ - { .altcode = NULL }, /* 0x0534 */ - { .altcode = NULL }, /* 0x0535 */ - { .altcode = NULL }, /* 0x0536 */ - { .altcode = NULL }, /* 0x0537 */ - { .altcode = NULL }, /* 0x0538 */ - { .altcode = NULL }, /* 0x0539 */ - { .altcode = NULL }, /* 0x053a */ - { .altcode = NULL }, /* 0x053b */ - { .altcode = NULL }, /* 0x053c */ - { .altcode = NULL }, /* 0x053d */ - { .altcode = NULL }, /* 0x053e */ - { .altcode = NULL }, /* 0x053f */ - { .altcode = NULL }, /* 0x0540 */ - { .altcode = NULL }, /* 0x0541 */ - { .altcode = NULL }, /* 0x0542 */ - { .altcode = NULL }, /* 0x0543 */ - { .altcode = NULL }, /* 0x0544 */ - { .altcode = NULL }, /* 0x0545 */ - { .altcode = NULL }, /* 0x0546 */ - { .altcode = NULL }, /* 0x0547 */ - { .altcode = NULL }, /* 0x0548 */ - { .altcode = NULL }, /* 0x0549 */ - { .altcode = NULL }, /* 0x054a */ - { .altcode = NULL }, /* 0x054b */ - { .altcode = NULL }, /* 0x054c */ - { .altcode = NULL }, /* 0x054d */ - { .altcode = NULL }, /* 0x054e */ - { .altcode = NULL }, /* 0x054f */ - { .altcode = NULL }, /* 0x0550 */ - { .altcode = NULL }, /* 0x0551 */ - { .altcode = NULL }, /* 0x0552 */ - { .altcode = NULL }, /* 0x0553 */ - { .altcode = NULL }, /* 0x0554 */ - { .altcode = NULL }, /* 0x0555 */ - { .altcode = NULL }, /* 0x0556 */ - { .altcode = NULL }, /* 0x0557 */ - { .altcode = NULL }, /* 0x0558 */ - { .altcode = NULL }, /* 0x0559 */ - { .altcode = NULL }, /* 0x055a */ - { .altcode = NULL }, /* 0x055b */ - { .altcode = NULL }, /* 0x055c */ - { .altcode = NULL }, /* 0x055d */ - { .altcode = NULL }, /* 0x055e */ - { .altcode = NULL }, /* 0x055f */ - { .altcode = NULL }, /* 0x0560 */ - { .altcode = NULL }, /* 0x0561 */ - { .altcode = NULL }, /* 0x0562 */ - { .altcode = NULL }, /* 0x0563 */ - { .altcode = NULL }, /* 0x0564 */ - { .altcode = NULL }, /* 0x0565 */ - { .altcode = NULL }, /* 0x0566 */ - { .altcode = NULL }, /* 0x0567 */ - { .altcode = NULL }, /* 0x0568 */ - { .altcode = NULL }, /* 0x0569 */ - { .altcode = NULL }, /* 0x056a */ - { .altcode = NULL }, /* 0x056b */ - { .altcode = NULL }, /* 0x056c */ - { .altcode = NULL }, /* 0x056d */ - { .altcode = NULL }, /* 0x056e */ - { .altcode = NULL }, /* 0x056f */ - { .altcode = NULL }, /* 0x0570 */ - { .altcode = NULL }, /* 0x0571 */ - { .altcode = NULL }, /* 0x0572 */ - { .altcode = NULL }, /* 0x0573 */ - { .altcode = NULL }, /* 0x0574 */ - { .altcode = NULL }, /* 0x0575 */ - { .altcode = NULL }, /* 0x0576 */ - { .altcode = NULL }, /* 0x0577 */ - { .altcode = NULL }, /* 0x0578 */ - { .altcode = NULL }, /* 0x0579 */ - { .altcode = NULL }, /* 0x057a */ - { .altcode = NULL }, /* 0x057b */ - { .altcode = NULL }, /* 0x057c */ - { .altcode = NULL }, /* 0x057d */ - { .altcode = NULL }, /* 0x057e */ - { .altcode = NULL }, /* 0x057f */ - { .altcode = NULL }, /* 0x0580 */ - { .altcode = NULL }, /* 0x0581 */ - { .altcode = NULL }, /* 0x0582 */ - { .altcode = NULL }, /* 0x0583 */ - { .altcode = NULL }, /* 0x0584 */ - { .altcode = NULL }, /* 0x0585 */ - { .altcode = NULL }, /* 0x0586 */ - { .altcode = NULL }, /* 0x0587 */ - { .altcode = NULL }, /* 0x0588 */ - { .altcode = NULL }, /* 0x0589 */ - { .altcode = NULL }, /* 0x058a */ - { .altcode = NULL }, /* 0x058b */ - { .altcode = NULL }, /* 0x058c */ - { .altcode = NULL }, /* 0x058d */ - { .altcode = NULL }, /* 0x058e */ - { .altcode = NULL }, /* 0x058f */ - { .altcode = NULL }, /* 0x0590 */ - { .altcode = NULL }, /* 0x0591 */ - { .altcode = NULL }, /* 0x0592 */ - { .altcode = NULL }, /* 0x0593 */ - { .altcode = NULL }, /* 0x0594 */ - { .altcode = NULL }, /* 0x0595 */ - { .altcode = NULL }, /* 0x0596 */ - { .altcode = NULL }, /* 0x0597 */ - { .altcode = NULL }, /* 0x0598 */ - { .altcode = NULL }, /* 0x0599 */ - { .altcode = NULL }, /* 0x059a */ - { .altcode = NULL }, /* 0x059b */ - { .altcode = NULL }, /* 0x059c */ - { .altcode = NULL }, /* 0x059d */ - { .altcode = NULL }, /* 0x059e */ - { .altcode = NULL }, /* 0x059f */ - { .altcode = NULL }, /* 0x05a0 */ - { .altcode = NULL }, /* 0x05a1 */ - { .altcode = NULL }, /* 0x05a2 */ - { .altcode = NULL }, /* 0x05a3 */ - { .altcode = NULL }, /* 0x05a4 */ - { .altcode = NULL }, /* 0x05a5 */ - { .altcode = NULL }, /* 0x05a6 */ - { .altcode = NULL }, /* 0x05a7 */ - { .altcode = NULL }, /* 0x05a8 */ - { .altcode = NULL }, /* 0x05a9 */ - { .altcode = NULL }, /* 0x05aa */ - { .altcode = NULL }, /* 0x05ab */ - { .altcode = NULL }, /* 0x05ac (Arabic_comma) */ - { .altcode = NULL }, /* 0x05ad */ - { .altcode = NULL }, /* 0x05ae */ - { .altcode = NULL }, /* 0x05af */ - { .altcode = NULL }, /* 0x05b0 */ - { .altcode = NULL }, /* 0x05b1 */ - { .altcode = NULL }, /* 0x05b2 */ - { .altcode = NULL }, /* 0x05b3 */ - { .altcode = NULL }, /* 0x05b4 */ - { .altcode = NULL }, /* 0x05b5 */ - { .altcode = NULL }, /* 0x05b6 */ - { .altcode = NULL }, /* 0x05b7 */ - { .altcode = NULL }, /* 0x05b8 */ - { .altcode = NULL }, /* 0x05b9 */ - { .altcode = NULL }, /* 0x05ba */ - { .altcode = NULL }, /* 0x05bb (Arabic_semicolon) */ - { .altcode = NULL }, /* 0x05bc */ - { .altcode = NULL }, /* 0x05bd */ - { .altcode = NULL }, /* 0x05be */ - { .altcode = NULL }, /* 0x05bf (Arabic_question_mark) */ - { .altcode = NULL }, /* 0x05c0 */ - { .altcode = NULL }, /* 0x05c1 (Arabic_hamza) */ - { .altcode = NULL }, /* 0x05c2 (Arabic_maddaonalef) */ - { .altcode = NULL }, /* 0x05c3 (Arabic_hamzaonalef) */ - { .altcode = NULL }, /* 0x05c4 (Arabic_hamzaonwaw) */ - { .altcode = NULL }, /* 0x05c5 (Arabic_hamzaunderalef) */ - { .altcode = NULL }, /* 0x05c6 (Arabic_hamzaonyeh) */ - { .altcode = NULL }, /* 0x05c7 (Arabic_alef) */ - { .altcode = NULL }, /* 0x05c8 (Arabic_beh) */ - { .altcode = NULL }, /* 0x05c9 (Arabic_tehmarbuta) */ - { .altcode = NULL }, /* 0x05ca (Arabic_teh) */ - { .altcode = NULL }, /* 0x05cb (Arabic_theh) */ - { .altcode = NULL }, /* 0x05cc (Arabic_jeem) */ - { .altcode = NULL }, /* 0x05cd (Arabic_hah) */ - { .altcode = NULL }, /* 0x05ce (Arabic_khah) */ - { .altcode = NULL }, /* 0x05cf (Arabic_dal) */ - { .altcode = NULL }, /* 0x05d0 (Arabic_thal) */ - { .altcode = NULL }, /* 0x05d1 (Arabic_ra) */ - { .altcode = NULL }, /* 0x05d2 (Arabic_zain) */ - { .altcode = NULL }, /* 0x05d3 (Arabic_seen) */ - { .altcode = NULL }, /* 0x05d4 (Arabic_sheen) */ - { .altcode = NULL }, /* 0x05d5 (Arabic_sad) */ - { .altcode = NULL }, /* 0x05d6 (Arabic_dad) */ - { .altcode = NULL }, /* 0x05d7 (Arabic_tah) */ - { .altcode = NULL }, /* 0x05d8 (Arabic_zah) */ - { .altcode = NULL }, /* 0x05d9 (Arabic_ain) */ - { .altcode = NULL }, /* 0x05da (Arabic_ghain) */ - { .altcode = NULL }, /* 0x05db */ - { .altcode = NULL }, /* 0x05dc */ - { .altcode = NULL }, /* 0x05dd */ - { .altcode = NULL }, /* 0x05de */ - { .altcode = NULL }, /* 0x05df */ - { .altcode = NULL }, /* 0x05e0 (Arabic_tatweel) */ - { .altcode = NULL }, /* 0x05e1 (Arabic_feh) */ - { .altcode = NULL }, /* 0x05e2 (Arabic_qaf) */ - { .altcode = NULL }, /* 0x05e3 (Arabic_kaf) */ - { .altcode = NULL }, /* 0x05e4 (Arabic_lam) */ - { .altcode = NULL }, /* 0x05e5 (Arabic_meem) */ - { .altcode = NULL }, /* 0x05e6 (Arabic_noon) */ - { .altcode = NULL }, /* 0x05e7 (Arabic_heh) */ - { .altcode = NULL }, /* 0x05e8 (Arabic_waw) */ - { .altcode = NULL }, /* 0x05e9 (Arabic_alefmaksura) */ - { .altcode = NULL }, /* 0x05ea (Arabic_yeh) */ - { .altcode = NULL }, /* 0x05eb (Arabic_fathatan) */ - { .altcode = NULL }, /* 0x05ec (Arabic_dammatan) */ - { .altcode = NULL }, /* 0x05ed (Arabic_kasratan) */ - { .altcode = NULL }, /* 0x05ee (Arabic_fatha) */ - { .altcode = NULL }, /* 0x05ef (Arabic_damma) */ - { .altcode = NULL }, /* 0x05f0 (Arabic_kasra) */ - { .altcode = NULL }, /* 0x05f1 (Arabic_shadda) */ - { .altcode = NULL }, /* 0x05f2 (Arabic_sukun) */ - { .altcode = NULL }, /* 0x05f3 */ - { .altcode = NULL }, /* 0x05f4 */ - { .altcode = NULL }, /* 0x05f5 */ - { .altcode = NULL }, /* 0x05f6 */ - { .altcode = NULL }, /* 0x05f7 */ - { .altcode = NULL }, /* 0x05f8 */ - { .altcode = NULL }, /* 0x05f9 */ - { .altcode = NULL }, /* 0x05fa */ - { .altcode = NULL }, /* 0x05fb */ - { .altcode = NULL }, /* 0x05fc */ - { .altcode = NULL }, /* 0x05fd */ - { .altcode = NULL }, /* 0x05fe */ - { .altcode = NULL }, /* 0x05ff */ - }, - { /* 0x06?? */ - { .altcode = NULL }, /* 0x0600 */ - { .altcode = NULL }, /* 0x0601 */ - { .altcode = NULL }, /* 0x0602 */ - { .altcode = NULL }, /* 0x0603 */ - { .altcode = NULL }, /* 0x0604 */ - { .altcode = NULL }, /* 0x0605 */ - { .altcode = NULL }, /* 0x0606 */ - { .altcode = NULL }, /* 0x0607 */ - { .altcode = NULL }, /* 0x0608 */ - { .altcode = NULL }, /* 0x0609 */ - { .altcode = NULL }, /* 0x060a */ - { .altcode = NULL }, /* 0x060b */ - { .altcode = NULL }, /* 0x060c */ - { .altcode = NULL }, /* 0x060d */ - { .altcode = NULL }, /* 0x060e */ - { .altcode = NULL }, /* 0x060f */ - { .altcode = NULL }, /* 0x0610 */ - { .altcode = NULL }, /* 0x0611 */ - { .altcode = NULL }, /* 0x0612 */ - { .altcode = NULL }, /* 0x0613 */ - { .altcode = NULL }, /* 0x0614 */ - { .altcode = NULL }, /* 0x0615 */ - { .altcode = NULL }, /* 0x0616 */ - { .altcode = NULL }, /* 0x0617 */ - { .altcode = NULL }, /* 0x0618 */ - { .altcode = NULL }, /* 0x0619 */ - { .altcode = NULL }, /* 0x061a */ - { .altcode = NULL }, /* 0x061b */ - { .altcode = NULL }, /* 0x061c */ - { .altcode = NULL }, /* 0x061d */ - { .altcode = NULL }, /* 0x061e */ - { .altcode = NULL }, /* 0x061f */ - { .altcode = NULL }, /* 0x0620 */ - { .altcode = NULL }, /* 0x0621 */ - { .altcode = NULL }, /* 0x0622 */ - { .altcode = NULL }, /* 0x0623 */ - { .altcode = NULL }, /* 0x0624 */ - { .altcode = NULL }, /* 0x0625 */ - { .altcode = NULL }, /* 0x0626 */ - { .altcode = NULL }, /* 0x0627 */ - { .altcode = NULL }, /* 0x0628 */ - { .altcode = NULL }, /* 0x0629 */ - { .altcode = NULL }, /* 0x062a */ - { .altcode = NULL }, /* 0x062b */ - { .altcode = NULL }, /* 0x062c */ - { .altcode = NULL }, /* 0x062d */ - { .altcode = NULL }, /* 0x062e */ - { .altcode = NULL }, /* 0x062f */ - { .altcode = NULL }, /* 0x0630 */ - { .altcode = NULL }, /* 0x0631 */ - { .altcode = NULL }, /* 0x0632 */ - { .altcode = NULL }, /* 0x0633 */ - { .altcode = NULL }, /* 0x0634 */ - { .altcode = NULL }, /* 0x0635 */ - { .altcode = NULL }, /* 0x0636 */ - { .altcode = NULL }, /* 0x0637 */ - { .altcode = NULL }, /* 0x0638 */ - { .altcode = NULL }, /* 0x0639 */ - { .altcode = NULL }, /* 0x063a */ - { .altcode = NULL }, /* 0x063b */ - { .altcode = NULL }, /* 0x063c */ - { .altcode = NULL }, /* 0x063d */ - { .altcode = NULL }, /* 0x063e */ - { .altcode = NULL }, /* 0x063f */ - { .altcode = NULL }, /* 0x0640 */ - { .altcode = NULL }, /* 0x0641 */ - { .altcode = NULL }, /* 0x0642 */ - { .altcode = NULL }, /* 0x0643 */ - { .altcode = NULL }, /* 0x0644 */ - { .altcode = NULL }, /* 0x0645 */ - { .altcode = NULL }, /* 0x0646 */ - { .altcode = NULL }, /* 0x0647 */ - { .altcode = NULL }, /* 0x0648 */ - { .altcode = NULL }, /* 0x0649 */ - { .altcode = NULL }, /* 0x064a */ - { .altcode = NULL }, /* 0x064b */ - { .altcode = NULL }, /* 0x064c */ - { .altcode = NULL }, /* 0x064d */ - { .altcode = NULL }, /* 0x064e */ - { .altcode = NULL }, /* 0x064f */ - { .altcode = NULL }, /* 0x0650 */ - { .altcode = NULL }, /* 0x0651 */ - { .altcode = NULL }, /* 0x0652 */ - { .altcode = NULL }, /* 0x0653 */ - { .altcode = NULL }, /* 0x0654 */ - { .altcode = NULL }, /* 0x0655 */ - { .altcode = NULL }, /* 0x0656 */ - { .altcode = NULL }, /* 0x0657 */ - { .altcode = NULL }, /* 0x0658 */ - { .altcode = NULL }, /* 0x0659 */ - { .altcode = NULL }, /* 0x065a */ - { .altcode = NULL }, /* 0x065b */ - { .altcode = NULL }, /* 0x065c */ - { .altcode = NULL }, /* 0x065d */ - { .altcode = NULL }, /* 0x065e */ - { .altcode = NULL }, /* 0x065f */ - { .altcode = NULL }, /* 0x0660 */ - { .altcode = NULL }, /* 0x0661 */ - { .altcode = NULL }, /* 0x0662 */ - { .altcode = NULL }, /* 0x0663 */ - { .altcode = NULL }, /* 0x0664 */ - { .altcode = NULL }, /* 0x0665 */ - { .altcode = NULL }, /* 0x0666 */ - { .altcode = NULL }, /* 0x0667 */ - { .altcode = NULL }, /* 0x0668 */ - { .altcode = NULL }, /* 0x0669 */ - { .altcode = NULL }, /* 0x066a */ - { .altcode = NULL }, /* 0x066b */ - { .altcode = NULL }, /* 0x066c */ - { .altcode = NULL }, /* 0x066d */ - { .altcode = NULL }, /* 0x066e */ - { .altcode = NULL }, /* 0x066f */ - { .altcode = NULL }, /* 0x0670 */ - { .altcode = NULL }, /* 0x0671 */ - { .altcode = NULL }, /* 0x0672 */ - { .altcode = NULL }, /* 0x0673 */ - { .altcode = NULL }, /* 0x0674 */ - { .altcode = NULL }, /* 0x0675 */ - { .altcode = NULL }, /* 0x0676 */ - { .altcode = NULL }, /* 0x0677 */ - { .altcode = NULL }, /* 0x0678 */ - { .altcode = NULL }, /* 0x0679 */ - { .altcode = NULL }, /* 0x067a */ - { .altcode = NULL }, /* 0x067b */ - { .altcode = NULL }, /* 0x067c */ - { .altcode = NULL }, /* 0x067d */ - { .altcode = NULL }, /* 0x067e */ - { .altcode = NULL }, /* 0x067f */ - { .altcode = NULL }, /* 0x0680 */ - { .altcode = NULL }, /* 0x0681 */ - { .altcode = NULL }, /* 0x0682 */ - { .altcode = NULL }, /* 0x0683 */ - { .altcode = NULL }, /* 0x0684 */ - { .altcode = NULL }, /* 0x0685 */ - { .altcode = NULL }, /* 0x0686 */ - { .altcode = NULL }, /* 0x0687 */ - { .altcode = NULL }, /* 0x0688 */ - { .altcode = NULL }, /* 0x0689 */ - { .altcode = NULL }, /* 0x068a */ - { .altcode = NULL }, /* 0x068b */ - { .altcode = NULL }, /* 0x068c */ - { .altcode = NULL }, /* 0x068d */ - { .altcode = NULL }, /* 0x068e */ - { .altcode = NULL }, /* 0x068f */ - { .altcode = NULL }, /* 0x0690 */ - { .altcode = NULL }, /* 0x0691 */ - { .altcode = NULL }, /* 0x0692 */ - { .altcode = NULL }, /* 0x0693 */ - { .altcode = NULL }, /* 0x0694 */ - { .altcode = NULL }, /* 0x0695 */ - { .altcode = NULL }, /* 0x0696 */ - { .altcode = NULL }, /* 0x0697 */ - { .altcode = NULL }, /* 0x0698 */ - { .altcode = NULL }, /* 0x0699 */ - { .altcode = NULL }, /* 0x069a */ - { .altcode = NULL }, /* 0x069b */ - { .altcode = NULL }, /* 0x069c */ - { .altcode = NULL }, /* 0x069d */ - { .altcode = NULL }, /* 0x069e */ - { .altcode = NULL }, /* 0x069f */ - { .altcode = NULL }, /* 0x06a0 */ - { .altcode = NULL }, /* 0x06a1 (Serbian_dje) */ - { .altcode = NULL }, /* 0x06a2 (Macedonia_gje) */ - { .altcode = NULL }, /* 0x06a3 (Cyrillic_io) */ - { .altcode = NULL }, /* 0x06a4 (Ukranian_je) */ - { .altcode = NULL }, /* 0x06a5 (Macedonia_dse) */ - { .altcode = NULL }, /* 0x06a6 (Ukranian_i) */ - { .altcode = NULL }, /* 0x06a7 (Ukranian_yi) */ - { .altcode = NULL }, /* 0x06a8 (Serbian_je) */ - { .altcode = NULL }, /* 0x06a9 (Serbian_lje) */ - { .altcode = NULL }, /* 0x06aa (Serbian_nje) */ - { .altcode = NULL }, /* 0x06ab (Serbian_tshe) */ - { .altcode = NULL }, /* 0x06ac (Macedonia_kje) */ - { .altcode = NULL }, /* 0x06ad (Ukrainian_ghe_with_upturn) */ - { .altcode = NULL }, /* 0x06ae (Byelorussian_shortu) */ - { .altcode = NULL }, /* 0x06af (Serbian_dze) */ - { .altcode = NULL }, /* 0x06b0 (numerosign) */ - { .altcode = NULL }, /* 0x06b1 (Serbian_DJE) */ - { .altcode = NULL }, /* 0x06b2 (Macedonia_GJE) */ - { .altcode = NULL }, /* 0x06b3 (Cyrillic_IO) */ - { .altcode = NULL }, /* 0x06b4 (Ukranian_JE) */ - { .altcode = NULL }, /* 0x06b5 (Macedonia_DSE) */ - { .altcode = NULL }, /* 0x06b6 (Ukranian_I) */ - { .altcode = NULL }, /* 0x06b7 (Ukranian_YI) */ - { .altcode = NULL }, /* 0x06b8 (Serbian_JE) */ - { .altcode = NULL }, /* 0x06b9 (Serbian_LJE) */ - { .altcode = NULL }, /* 0x06ba (Serbian_NJE) */ - { .altcode = NULL }, /* 0x06bb (Serbian_TSHE) */ - { .altcode = NULL }, /* 0x06bc (Macedonia_KJE) */ - { .altcode = NULL }, /* 0x06bd (Ukrainian_GHE_WITH_UPTURN) */ - { .altcode = NULL }, /* 0x06be (Byelorussian_SHORTU) */ - { .altcode = NULL }, /* 0x06bf (Serbian_DZE) */ - { .altcode = NULL }, /* 0x06c0 (Cyrillic_yu) */ - { .altcode = NULL }, /* 0x06c1 (Cyrillic_a) */ - { .altcode = NULL }, /* 0x06c2 (Cyrillic_be) */ - { .altcode = NULL }, /* 0x06c3 (Cyrillic_tse) */ - { .altcode = NULL }, /* 0x06c4 (Cyrillic_de) */ - { .altcode = NULL }, /* 0x06c5 (Cyrillic_ie) */ - { .altcode = NULL }, /* 0x06c6 (Cyrillic_ef) */ - { .altcode = NULL }, /* 0x06c7 (Cyrillic_ghe) */ - { .altcode = NULL }, /* 0x06c8 (Cyrillic_ha) */ - { .altcode = NULL }, /* 0x06c9 (Cyrillic_i) */ - { .altcode = NULL }, /* 0x06ca (Cyrillic_shorti) */ - { .altcode = NULL }, /* 0x06cb (Cyrillic_ka) */ - { .altcode = NULL }, /* 0x06cc (Cyrillic_el) */ - { .altcode = NULL }, /* 0x06cd (Cyrillic_em) */ - { .altcode = NULL }, /* 0x06ce (Cyrillic_en) */ - { .altcode = NULL }, /* 0x06cf (Cyrillic_o) */ - { .altcode = NULL }, /* 0x06d0 (Cyrillic_pe) */ - { .altcode = NULL }, /* 0x06d1 (Cyrillic_ya) */ - { .altcode = NULL }, /* 0x06d2 (Cyrillic_er) */ - { .altcode = NULL }, /* 0x06d3 (Cyrillic_es) */ - { .altcode = NULL }, /* 0x06d4 (Cyrillic_te) */ - { .altcode = NULL }, /* 0x06d5 (Cyrillic_u) */ - { .altcode = NULL }, /* 0x06d6 (Cyrillic_zhe) */ - { .altcode = NULL }, /* 0x06d7 (Cyrillic_ve) */ - { .altcode = NULL }, /* 0x06d8 (Cyrillic_softsign) */ - { .altcode = NULL }, /* 0x06d9 (Cyrillic_yeru) */ - { .altcode = NULL }, /* 0x06da (Cyrillic_ze) */ - { .altcode = NULL }, /* 0x06db (Cyrillic_sha) */ - { .altcode = NULL }, /* 0x06dc (Cyrillic_e) */ - { .altcode = NULL }, /* 0x06dd (Cyrillic_shcha) */ - { .altcode = NULL }, /* 0x06de (Cyrillic_che) */ - { .altcode = NULL }, /* 0x06df (Cyrillic_hardsign) */ - { .altcode = NULL }, /* 0x06e0 (Cyrillic_YU) */ - { .altcode = NULL }, /* 0x06e1 (Cyrillic_A) */ - { .altcode = NULL }, /* 0x06e2 (Cyrillic_BE) */ - { .altcode = NULL }, /* 0x06e3 (Cyrillic_TSE) */ - { .altcode = NULL }, /* 0x06e4 (Cyrillic_DE) */ - { .altcode = NULL }, /* 0x06e5 (Cyrillic_IE) */ - { .altcode = NULL }, /* 0x06e6 (Cyrillic_EF) */ - { .altcode = NULL }, /* 0x06e7 (Cyrillic_GHE) */ - { .altcode = NULL }, /* 0x06e8 (Cyrillic_HA) */ - { .altcode = NULL }, /* 0x06e9 (Cyrillic_I) */ - { .altcode = NULL }, /* 0x06ea (Cyrillic_SHORTI) */ - { .altcode = NULL }, /* 0x06eb (Cyrillic_KA) */ - { .altcode = NULL }, /* 0x06ec (Cyrillic_EL) */ - { .altcode = NULL }, /* 0x06ed (Cyrillic_EM) */ - { .altcode = NULL }, /* 0x06ee (Cyrillic_EN) */ - { .altcode = NULL }, /* 0x06ef (Cyrillic_O) */ - { .altcode = NULL }, /* 0x06f0 (Cyrillic_PE) */ - { .altcode = NULL }, /* 0x06f1 (Cyrillic_YA) */ - { .altcode = NULL }, /* 0x06f2 (Cyrillic_ER) */ - { .altcode = NULL }, /* 0x06f3 (Cyrillic_ES) */ - { .altcode = NULL }, /* 0x06f4 (Cyrillic_TE) */ - { .altcode = NULL }, /* 0x06f5 (Cyrillic_U) */ - { .altcode = NULL }, /* 0x06f6 (Cyrillic_ZHE) */ - { .altcode = NULL }, /* 0x06f7 (Cyrillic_VE) */ - { .altcode = NULL }, /* 0x06f8 (Cyrillic_SOFTSIGN) */ - { .altcode = NULL }, /* 0x06f9 (Cyrillic_YERU) */ - { .altcode = NULL }, /* 0x06fa (Cyrillic_ZE) */ - { .altcode = NULL }, /* 0x06fb (Cyrillic_SHA) */ - { .altcode = NULL }, /* 0x06fc (Cyrillic_E) */ - { .altcode = NULL }, /* 0x06fd (Cyrillic_SHCHA) */ - { .altcode = NULL }, /* 0x06fe (Cyrillic_CHE) */ - { .altcode = NULL }, /* 0x06ff (Cyrillic_HARDSIGN) */ - }, - { /* 0x07?? */ - { .altcode = NULL }, /* 0x0700 */ - { .altcode = NULL }, /* 0x0701 */ - { .altcode = NULL }, /* 0x0702 */ - { .altcode = NULL }, /* 0x0703 */ - { .altcode = NULL }, /* 0x0704 */ - { .altcode = NULL }, /* 0x0705 */ - { .altcode = NULL }, /* 0x0706 */ - { .altcode = NULL }, /* 0x0707 */ - { .altcode = NULL }, /* 0x0708 */ - { .altcode = NULL }, /* 0x0709 */ - { .altcode = NULL }, /* 0x070a */ - { .altcode = NULL }, /* 0x070b */ - { .altcode = NULL }, /* 0x070c */ - { .altcode = NULL }, /* 0x070d */ - { .altcode = NULL }, /* 0x070e */ - { .altcode = NULL }, /* 0x070f */ - { .altcode = NULL }, /* 0x0710 */ - { .altcode = NULL }, /* 0x0711 */ - { .altcode = NULL }, /* 0x0712 */ - { .altcode = NULL }, /* 0x0713 */ - { .altcode = NULL }, /* 0x0714 */ - { .altcode = NULL }, /* 0x0715 */ - { .altcode = NULL }, /* 0x0716 */ - { .altcode = NULL }, /* 0x0717 */ - { .altcode = NULL }, /* 0x0718 */ - { .altcode = NULL }, /* 0x0719 */ - { .altcode = NULL }, /* 0x071a */ - { .altcode = NULL }, /* 0x071b */ - { .altcode = NULL }, /* 0x071c */ - { .altcode = NULL }, /* 0x071d */ - { .altcode = NULL }, /* 0x071e */ - { .altcode = NULL }, /* 0x071f */ - { .altcode = NULL }, /* 0x0720 */ - { .altcode = NULL }, /* 0x0721 */ - { .altcode = NULL }, /* 0x0722 */ - { .altcode = NULL }, /* 0x0723 */ - { .altcode = NULL }, /* 0x0724 */ - { .altcode = NULL }, /* 0x0725 */ - { .altcode = NULL }, /* 0x0726 */ - { .altcode = NULL }, /* 0x0727 */ - { .altcode = NULL }, /* 0x0728 */ - { .altcode = NULL }, /* 0x0729 */ - { .altcode = NULL }, /* 0x072a */ - { .altcode = NULL }, /* 0x072b */ - { .altcode = NULL }, /* 0x072c */ - { .altcode = NULL }, /* 0x072d */ - { .altcode = NULL }, /* 0x072e */ - { .altcode = NULL }, /* 0x072f */ - { .altcode = NULL }, /* 0x0730 */ - { .altcode = NULL }, /* 0x0731 */ - { .altcode = NULL }, /* 0x0732 */ - { .altcode = NULL }, /* 0x0733 */ - { .altcode = NULL }, /* 0x0734 */ - { .altcode = NULL }, /* 0x0735 */ - { .altcode = NULL }, /* 0x0736 */ - { .altcode = NULL }, /* 0x0737 */ - { .altcode = NULL }, /* 0x0738 */ - { .altcode = NULL }, /* 0x0739 */ - { .altcode = NULL }, /* 0x073a */ - { .altcode = NULL }, /* 0x073b */ - { .altcode = NULL }, /* 0x073c */ - { .altcode = NULL }, /* 0x073d */ - { .altcode = NULL }, /* 0x073e */ - { .altcode = NULL }, /* 0x073f */ - { .altcode = NULL }, /* 0x0740 */ - { .altcode = NULL }, /* 0x0741 */ - { .altcode = NULL }, /* 0x0742 */ - { .altcode = NULL }, /* 0x0743 */ - { .altcode = NULL }, /* 0x0744 */ - { .altcode = NULL }, /* 0x0745 */ - { .altcode = NULL }, /* 0x0746 */ - { .altcode = NULL }, /* 0x0747 */ - { .altcode = NULL }, /* 0x0748 */ - { .altcode = NULL }, /* 0x0749 */ - { .altcode = NULL }, /* 0x074a */ - { .altcode = NULL }, /* 0x074b */ - { .altcode = NULL }, /* 0x074c */ - { .altcode = NULL }, /* 0x074d */ - { .altcode = NULL }, /* 0x074e */ - { .altcode = NULL }, /* 0x074f */ - { .altcode = NULL }, /* 0x0750 */ - { .altcode = NULL }, /* 0x0751 */ - { .altcode = NULL }, /* 0x0752 */ - { .altcode = NULL }, /* 0x0753 */ - { .altcode = NULL }, /* 0x0754 */ - { .altcode = NULL }, /* 0x0755 */ - { .altcode = NULL }, /* 0x0756 */ - { .altcode = NULL }, /* 0x0757 */ - { .altcode = NULL }, /* 0x0758 */ - { .altcode = NULL }, /* 0x0759 */ - { .altcode = NULL }, /* 0x075a */ - { .altcode = NULL }, /* 0x075b */ - { .altcode = NULL }, /* 0x075c */ - { .altcode = NULL }, /* 0x075d */ - { .altcode = NULL }, /* 0x075e */ - { .altcode = NULL }, /* 0x075f */ - { .altcode = NULL }, /* 0x0760 */ - { .altcode = NULL }, /* 0x0761 */ - { .altcode = NULL }, /* 0x0762 */ - { .altcode = NULL }, /* 0x0763 */ - { .altcode = NULL }, /* 0x0764 */ - { .altcode = NULL }, /* 0x0765 */ - { .altcode = NULL }, /* 0x0766 */ - { .altcode = NULL }, /* 0x0767 */ - { .altcode = NULL }, /* 0x0768 */ - { .altcode = NULL }, /* 0x0769 */ - { .altcode = NULL }, /* 0x076a */ - { .altcode = NULL }, /* 0x076b */ - { .altcode = NULL }, /* 0x076c */ - { .altcode = NULL }, /* 0x076d */ - { .altcode = NULL }, /* 0x076e */ - { .altcode = NULL }, /* 0x076f */ - { .altcode = NULL }, /* 0x0770 */ - { .altcode = NULL }, /* 0x0771 */ - { .altcode = NULL }, /* 0x0772 */ - { .altcode = NULL }, /* 0x0773 */ - { .altcode = NULL }, /* 0x0774 */ - { .altcode = NULL }, /* 0x0775 */ - { .altcode = NULL }, /* 0x0776 */ - { .altcode = NULL }, /* 0x0777 */ - { .altcode = NULL }, /* 0x0778 */ - { .altcode = NULL }, /* 0x0779 */ - { .altcode = NULL }, /* 0x077a */ - { .altcode = NULL }, /* 0x077b */ - { .altcode = NULL }, /* 0x077c */ - { .altcode = NULL }, /* 0x077d */ - { .altcode = NULL }, /* 0x077e */ - { .altcode = NULL }, /* 0x077f */ - { .altcode = NULL }, /* 0x0780 */ - { .altcode = NULL }, /* 0x0781 */ - { .altcode = NULL }, /* 0x0782 */ - { .altcode = NULL }, /* 0x0783 */ - { .altcode = NULL }, /* 0x0784 */ - { .altcode = NULL }, /* 0x0785 */ - { .altcode = NULL }, /* 0x0786 */ - { .altcode = NULL }, /* 0x0787 */ - { .altcode = NULL }, /* 0x0788 */ - { .altcode = NULL }, /* 0x0789 */ - { .altcode = NULL }, /* 0x078a */ - { .altcode = NULL }, /* 0x078b */ - { .altcode = NULL }, /* 0x078c */ - { .altcode = NULL }, /* 0x078d */ - { .altcode = NULL }, /* 0x078e */ - { .altcode = NULL }, /* 0x078f */ - { .altcode = NULL }, /* 0x0790 */ - { .altcode = NULL }, /* 0x0791 */ - { .altcode = NULL }, /* 0x0792 */ - { .altcode = NULL }, /* 0x0793 */ - { .altcode = NULL }, /* 0x0794 */ - { .altcode = NULL }, /* 0x0795 */ - { .altcode = NULL }, /* 0x0796 */ - { .altcode = NULL }, /* 0x0797 */ - { .altcode = NULL }, /* 0x0798 */ - { .altcode = NULL }, /* 0x0799 */ - { .altcode = NULL }, /* 0x079a */ - { .altcode = NULL }, /* 0x079b */ - { .altcode = NULL }, /* 0x079c */ - { .altcode = NULL }, /* 0x079d */ - { .altcode = NULL }, /* 0x079e */ - { .altcode = NULL }, /* 0x079f */ - { .altcode = NULL }, /* 0x07a0 */ - { .altcode = NULL }, /* 0x07a1 (Greek_ALPHAaccent) */ - { .altcode = NULL }, /* 0x07a2 (Greek_EPSILONaccent) */ - { .altcode = NULL }, /* 0x07a3 (Greek_ETAaccent) */ - { .altcode = NULL }, /* 0x07a4 (Greek_IOTAaccent) */ - { .altcode = NULL }, /* 0x07a5 (Greek_IOTAdiaeresis) */ - { .altcode = NULL }, /* 0x07a6 */ - { .altcode = NULL }, /* 0x07a7 (Greek_OMICRONaccent) */ - { .altcode = NULL }, /* 0x07a8 (Greek_UPSILONaccent) */ - { .altcode = NULL }, /* 0x07a9 (Greek_UPSILONdieresis) */ - { .altcode = NULL }, /* 0x07aa */ - { .altcode = NULL }, /* 0x07ab (Greek_OMEGAaccent) */ - { .altcode = NULL }, /* 0x07ac */ - { .altcode = NULL }, /* 0x07ad */ - { .altcode = NULL }, /* 0x07ae (Greek_accentdieresis) */ - { .altcode = NULL }, /* 0x07af (Greek_horizbar) */ - { .altcode = NULL }, /* 0x07b0 */ - { .altcode = NULL }, /* 0x07b1 (Greek_alphaaccent) */ - { .altcode = NULL }, /* 0x07b2 (Greek_epsilonaccent) */ - { .altcode = NULL }, /* 0x07b3 (Greek_etaaccent) */ - { .altcode = NULL }, /* 0x07b4 (Greek_iotaaccent) */ - { .altcode = NULL }, /* 0x07b5 (Greek_iotadieresis) */ - { .altcode = NULL }, /* 0x07b6 (Greek_iotaaccentdieresis) */ - { .altcode = NULL }, /* 0x07b7 (Greek_omicronaccent) */ - { .altcode = NULL }, /* 0x07b8 (Greek_upsilonaccent) */ - { .altcode = NULL }, /* 0x07b9 (Greek_upsilondieresis) */ - { .altcode = NULL }, /* 0x07ba (Greek_upsilonaccentdieresis) */ - { .altcode = NULL }, /* 0x07bb (Greek_omegaaccent) */ - { .altcode = NULL }, /* 0x07bc */ - { .altcode = NULL }, /* 0x07bd */ - { .altcode = NULL }, /* 0x07be */ - { .altcode = NULL }, /* 0x07bf */ - { .altcode = NULL }, /* 0x07c0 */ - { .altcode = NULL }, /* 0x07c1 (Greek_ALPHA) */ - { .altcode = NULL }, /* 0x07c2 (Greek_BETA) */ - { .altcode = NULL }, /* 0x07c3 (Greek_GAMMA) */ - { .altcode = NULL }, /* 0x07c4 (Greek_DELTA) */ - { .altcode = NULL }, /* 0x07c5 (Greek_EPSILON) */ - { .altcode = NULL }, /* 0x07c6 (Greek_ZETA) */ - { .altcode = NULL }, /* 0x07c7 (Greek_ETA) */ - { .altcode = NULL }, /* 0x07c8 (Greek_THETA) */ - { .altcode = NULL }, /* 0x07c9 (Greek_IOTA) */ - { .altcode = NULL }, /* 0x07ca (Greek_KAPPA) */ - { .altcode = NULL }, /* 0x07cb (Greek_LAMBDA) */ - { .altcode = NULL }, /* 0x07cc (Greek_MU) */ - { .altcode = NULL }, /* 0x07cd (Greek_NU) */ - { .altcode = NULL }, /* 0x07ce (Greek_XI) */ - { .altcode = NULL }, /* 0x07cf (Greek_OMICRON) */ - { .altcode = NULL }, /* 0x07d0 (Greek_PI) */ - { .altcode = NULL }, /* 0x07d1 (Greek_RHO) */ - { .altcode = NULL }, /* 0x07d2 (Greek_SIGMA) */ - { .altcode = NULL }, /* 0x07d3 */ - { .altcode = NULL }, /* 0x07d4 (Greek_TAU) */ - { .altcode = NULL }, /* 0x07d5 (Greek_UPSILON) */ - { .altcode = NULL }, /* 0x07d6 (Greek_PHI) */ - { .altcode = NULL }, /* 0x07d7 (Greek_CHI) */ - { .altcode = NULL }, /* 0x07d8 (Greek_PSI) */ - { .altcode = NULL }, /* 0x07d9 (Greek_OMEGA) */ - { .altcode = NULL }, /* 0x07da */ - { .altcode = NULL }, /* 0x07db */ - { .altcode = NULL }, /* 0x07dc */ - { .altcode = NULL }, /* 0x07dd */ - { .altcode = NULL }, /* 0x07de */ - { .altcode = NULL }, /* 0x07df */ - { .altcode = NULL }, /* 0x07e0 */ - { .altcode = NULL }, /* 0x07e1 (Greek_alpha) */ - { .altcode = NULL }, /* 0x07e2 (Greek_beta) */ - { .altcode = NULL }, /* 0x07e3 (Greek_gamma) */ - { .altcode = NULL }, /* 0x07e4 (Greek_delta) */ - { .altcode = NULL }, /* 0x07e5 (Greek_epsilon) */ - { .altcode = NULL }, /* 0x07e6 (Greek_zeta) */ - { .altcode = NULL }, /* 0x07e7 (Greek_eta) */ - { .altcode = NULL }, /* 0x07e8 (Greek_theta) */ - { .altcode = NULL }, /* 0x07e9 (Greek_iota) */ - { .altcode = NULL }, /* 0x07ea (Greek_kappa) */ - { .altcode = NULL }, /* 0x07eb (Greek_lambda) */ - { .altcode = NULL }, /* 0x07ec (Greek_mu) */ - { .altcode = NULL }, /* 0x07ed (Greek_nu) */ - { .altcode = NULL }, /* 0x07ee (Greek_xi) */ - { .altcode = NULL }, /* 0x07ef (Greek_omicron) */ - { .altcode = NULL }, /* 0x07f0 (Greek_pi) */ - { .altcode = NULL }, /* 0x07f1 (Greek_rho) */ - { .altcode = NULL }, /* 0x07f2 (Greek_sigma) */ - { .altcode = NULL }, /* 0x07f3 (Greek_finalsmallsigma) */ - { .altcode = NULL }, /* 0x07f4 (Greek_tau) */ - { .altcode = NULL }, /* 0x07f5 (Greek_upsilon) */ - { .altcode = NULL }, /* 0x07f6 (Greek_phi) */ - { .altcode = NULL }, /* 0x07f7 (Greek_chi) */ - { .altcode = NULL }, /* 0x07f8 (Greek_psi) */ - { .altcode = NULL }, /* 0x07f9 (Greek_omega) */ - { .altcode = NULL }, /* 0x07fa */ - { .altcode = NULL }, /* 0x07fb */ - { .altcode = NULL }, /* 0x07fc */ - { .altcode = NULL }, /* 0x07fd */ - { .altcode = NULL }, /* 0x07fe */ - { .altcode = NULL }, /* 0x07ff */ - }, - { /* 0x08?? */ - { .altcode = NULL }, /* 0x0800 */ - { .altcode = NULL }, /* 0x0801 */ - { .altcode = NULL }, /* 0x0802 */ - { .altcode = NULL }, /* 0x0803 */ - { .altcode = NULL }, /* 0x0804 */ - { .altcode = NULL }, /* 0x0805 */ - { .altcode = NULL }, /* 0x0806 */ - { .altcode = NULL }, /* 0x0807 */ - { .altcode = NULL }, /* 0x0808 */ - { .altcode = NULL }, /* 0x0809 */ - { .altcode = NULL }, /* 0x080a */ - { .altcode = NULL }, /* 0x080b */ - { .altcode = NULL }, /* 0x080c */ - { .altcode = NULL }, /* 0x080d */ - { .altcode = NULL }, /* 0x080e */ - { .altcode = NULL }, /* 0x080f */ - { .altcode = NULL }, /* 0x0810 */ - { .altcode = NULL }, /* 0x0811 */ - { .altcode = NULL }, /* 0x0812 */ - { .altcode = NULL }, /* 0x0813 */ - { .altcode = NULL }, /* 0x0814 */ - { .altcode = NULL }, /* 0x0815 */ - { .altcode = NULL }, /* 0x0816 */ - { .altcode = NULL }, /* 0x0817 */ - { .altcode = NULL }, /* 0x0818 */ - { .altcode = NULL }, /* 0x0819 */ - { .altcode = NULL }, /* 0x081a */ - { .altcode = NULL }, /* 0x081b */ - { .altcode = NULL }, /* 0x081c */ - { .altcode = NULL }, /* 0x081d */ - { .altcode = NULL }, /* 0x081e */ - { .altcode = NULL }, /* 0x081f */ - { .altcode = NULL }, /* 0x0820 */ - { .altcode = NULL }, /* 0x0821 */ - { .altcode = NULL }, /* 0x0822 */ - { .altcode = NULL }, /* 0x0823 */ - { .altcode = NULL }, /* 0x0824 */ - { .altcode = NULL }, /* 0x0825 */ - { .altcode = NULL }, /* 0x0826 */ - { .altcode = NULL }, /* 0x0827 */ - { .altcode = NULL }, /* 0x0828 */ - { .altcode = NULL }, /* 0x0829 */ - { .altcode = NULL }, /* 0x082a */ - { .altcode = NULL }, /* 0x082b */ - { .altcode = NULL }, /* 0x082c */ - { .altcode = NULL }, /* 0x082d */ - { .altcode = NULL }, /* 0x082e */ - { .altcode = NULL }, /* 0x082f */ - { .altcode = NULL }, /* 0x0830 */ - { .altcode = NULL }, /* 0x0831 */ - { .altcode = NULL }, /* 0x0832 */ - { .altcode = NULL }, /* 0x0833 */ - { .altcode = NULL }, /* 0x0834 */ - { .altcode = NULL }, /* 0x0835 */ - { .altcode = NULL }, /* 0x0836 */ - { .altcode = NULL }, /* 0x0837 */ - { .altcode = NULL }, /* 0x0838 */ - { .altcode = NULL }, /* 0x0839 */ - { .altcode = NULL }, /* 0x083a */ - { .altcode = NULL }, /* 0x083b */ - { .altcode = NULL }, /* 0x083c */ - { .altcode = NULL }, /* 0x083d */ - { .altcode = NULL }, /* 0x083e */ - { .altcode = NULL }, /* 0x083f */ - { .altcode = NULL }, /* 0x0840 */ - { .altcode = NULL }, /* 0x0841 */ - { .altcode = NULL }, /* 0x0842 */ - { .altcode = NULL }, /* 0x0843 */ - { .altcode = NULL }, /* 0x0844 */ - { .altcode = NULL }, /* 0x0845 */ - { .altcode = NULL }, /* 0x0846 */ - { .altcode = NULL }, /* 0x0847 */ - { .altcode = NULL }, /* 0x0848 */ - { .altcode = NULL }, /* 0x0849 */ - { .altcode = NULL }, /* 0x084a */ - { .altcode = NULL }, /* 0x084b */ - { .altcode = NULL }, /* 0x084c */ - { .altcode = NULL }, /* 0x084d */ - { .altcode = NULL }, /* 0x084e */ - { .altcode = NULL }, /* 0x084f */ - { .altcode = NULL }, /* 0x0850 */ - { .altcode = NULL }, /* 0x0851 */ - { .altcode = NULL }, /* 0x0852 */ - { .altcode = NULL }, /* 0x0853 */ - { .altcode = NULL }, /* 0x0854 */ - { .altcode = NULL }, /* 0x0855 */ - { .altcode = NULL }, /* 0x0856 */ - { .altcode = NULL }, /* 0x0857 */ - { .altcode = NULL }, /* 0x0858 */ - { .altcode = NULL }, /* 0x0859 */ - { .altcode = NULL }, /* 0x085a */ - { .altcode = NULL }, /* 0x085b */ - { .altcode = NULL }, /* 0x085c */ - { .altcode = NULL }, /* 0x085d */ - { .altcode = NULL }, /* 0x085e */ - { .altcode = NULL }, /* 0x085f */ - { .altcode = NULL }, /* 0x0860 */ - { .altcode = NULL }, /* 0x0861 */ - { .altcode = NULL }, /* 0x0862 */ - { .altcode = NULL }, /* 0x0863 */ - { .altcode = NULL }, /* 0x0864 */ - { .altcode = NULL }, /* 0x0865 */ - { .altcode = NULL }, /* 0x0866 */ - { .altcode = NULL }, /* 0x0867 */ - { .altcode = NULL }, /* 0x0868 */ - { .altcode = NULL }, /* 0x0869 */ - { .altcode = NULL }, /* 0x086a */ - { .altcode = NULL }, /* 0x086b */ - { .altcode = NULL }, /* 0x086c */ - { .altcode = NULL }, /* 0x086d */ - { .altcode = NULL }, /* 0x086e */ - { .altcode = NULL }, /* 0x086f */ - { .altcode = NULL }, /* 0x0870 */ - { .altcode = NULL }, /* 0x0871 */ - { .altcode = NULL }, /* 0x0872 */ - { .altcode = NULL }, /* 0x0873 */ - { .altcode = NULL }, /* 0x0874 */ - { .altcode = NULL }, /* 0x0875 */ - { .altcode = NULL }, /* 0x0876 */ - { .altcode = NULL }, /* 0x0877 */ - { .altcode = NULL }, /* 0x0878 */ - { .altcode = NULL }, /* 0x0879 */ - { .altcode = NULL }, /* 0x087a */ - { .altcode = NULL }, /* 0x087b */ - { .altcode = NULL }, /* 0x087c */ - { .altcode = NULL }, /* 0x087d */ - { .altcode = NULL }, /* 0x087e */ - { .altcode = NULL }, /* 0x087f */ - { .altcode = NULL }, /* 0x0880 */ - { .altcode = NULL }, /* 0x0881 */ - { .altcode = NULL }, /* 0x0882 */ - { .altcode = NULL }, /* 0x0883 */ - { .altcode = NULL }, /* 0x0884 */ - { .altcode = NULL }, /* 0x0885 */ - { .altcode = NULL }, /* 0x0886 */ - { .altcode = NULL }, /* 0x0887 */ - { .altcode = NULL }, /* 0x0888 */ - { .altcode = NULL }, /* 0x0889 */ - { .altcode = NULL }, /* 0x088a */ - { .altcode = NULL }, /* 0x088b */ - { .altcode = NULL }, /* 0x088c */ - { .altcode = NULL }, /* 0x088d */ - { .altcode = NULL }, /* 0x088e */ - { .altcode = NULL }, /* 0x088f */ - { .altcode = NULL }, /* 0x0890 */ - { .altcode = NULL }, /* 0x0891 */ - { .altcode = NULL }, /* 0x0892 */ - { .altcode = NULL }, /* 0x0893 */ - { .altcode = NULL }, /* 0x0894 */ - { .altcode = NULL }, /* 0x0895 */ - { .altcode = NULL }, /* 0x0896 */ - { .altcode = NULL }, /* 0x0897 */ - { .altcode = NULL }, /* 0x0898 */ - { .altcode = NULL }, /* 0x0899 */ - { .altcode = NULL }, /* 0x089a */ - { .altcode = NULL }, /* 0x089b */ - { .altcode = NULL }, /* 0x089c */ - { .altcode = NULL }, /* 0x089d */ - { .altcode = NULL }, /* 0x089e */ - { .altcode = NULL }, /* 0x089f */ - { .altcode = NULL }, /* 0x08a0 */ - { .altcode = NULL }, /* 0x08a1 (leftradical) */ - { .altcode = NULL }, /* 0x08a2 (topleftradical) */ - { .altcode = NULL }, /* 0x08a3 (horizconnector) */ - { .altcode = NULL }, /* 0x08a4 (topintegral) */ - { .altcode = NULL }, /* 0x08a5 (botintegral) */ - { .altcode = NULL }, /* 0x08a6 (vertconnector) */ - { .altcode = NULL }, /* 0x08a7 (topleftsqbracket) */ - { .altcode = NULL }, /* 0x08a8 (botleftsqbracket) */ - { .altcode = NULL }, /* 0x08a9 (toprightsqbracket) */ - { .altcode = NULL }, /* 0x08aa (botrightsqbracket) */ - { .altcode = NULL }, /* 0x08ab (topleftparens) */ - { .altcode = NULL }, /* 0x08ac (botleftparens) */ - { .altcode = NULL }, /* 0x08ad (toprightparens) */ - { .altcode = NULL }, /* 0x08ae (botrightparens) */ - { .altcode = NULL }, /* 0x08af (leftmiddlecurlybrace) */ - { .altcode = NULL }, /* 0x08b0 (rightmiddlecurlybrace) */ - { .altcode = NULL }, /* 0x08b1 (topleftsummation) */ - { .altcode = NULL }, /* 0x08b2 (botleftsummation) */ - { .altcode = NULL }, /* 0x08b3 (topvertsummationconnector) */ - { .altcode = NULL }, /* 0x08b4 (botvertsummationconnector) */ - { .altcode = NULL }, /* 0x08b5 (toprightsummation) */ - { .altcode = NULL }, /* 0x08b6 (botrightsummation) */ - { .altcode = NULL }, /* 0x08b7 (rightmiddlesummation) */ - { .altcode = NULL }, /* 0x08b8 */ - { .altcode = NULL }, /* 0x08b9 */ - { .altcode = NULL }, /* 0x08ba */ - { .altcode = NULL }, /* 0x08bb */ - { .altcode = NULL }, /* 0x08bc (lessthanequal) */ - { .altcode = NULL }, /* 0x08bd (notequal) */ - { .altcode = NULL }, /* 0x08be (greaterthanequal) */ - { .altcode = NULL }, /* 0x08bf (integral) */ - { .altcode = NULL }, /* 0x08c0 (therefore) */ - { .altcode = NULL }, /* 0x08c1 (variation) */ - { .altcode = NULL }, /* 0x08c2 (infinity) */ - { .altcode = NULL }, /* 0x08c3 */ - { .altcode = NULL }, /* 0x08c4 */ - { .altcode = NULL }, /* 0x08c5 (nabla) */ - { .altcode = NULL }, /* 0x08c6 */ - { .altcode = NULL }, /* 0x08c7 */ - { .altcode = NULL }, /* 0x08c8 (approximate) */ - { .altcode = NULL }, /* 0x08c9 (similarequal) */ - { .altcode = NULL }, /* 0x08ca */ - { .altcode = NULL }, /* 0x08cb */ - { .altcode = NULL }, /* 0x08cc */ - { .altcode = NULL }, /* 0x08cd (ifonlyif) */ - { .altcode = NULL }, /* 0x08ce (implies) */ - { .altcode = NULL }, /* 0x08cf (identical) */ - { .altcode = NULL }, /* 0x08d0 */ - { .altcode = NULL }, /* 0x08d1 */ - { .altcode = NULL }, /* 0x08d2 */ - { .altcode = NULL }, /* 0x08d3 */ - { .altcode = NULL }, /* 0x08d4 */ - { .altcode = NULL }, /* 0x08d5 */ - { .altcode = NULL }, /* 0x08d6 (radical) */ - { .altcode = NULL }, /* 0x08d7 */ - { .altcode = NULL }, /* 0x08d8 */ - { .altcode = NULL }, /* 0x08d9 */ - { .altcode = NULL }, /* 0x08da (includedin) */ - { .altcode = NULL }, /* 0x08db (includes) */ - { .altcode = NULL }, /* 0x08dc (intersection) */ - { .altcode = NULL }, /* 0x08dd (union) */ - { .altcode = NULL }, /* 0x08de (logicaland) */ - { .altcode = NULL }, /* 0x08df (logicalor) */ - { .altcode = NULL }, /* 0x08e0 */ - { .altcode = NULL }, /* 0x08e1 */ - { .altcode = NULL }, /* 0x08e2 */ - { .altcode = NULL }, /* 0x08e3 */ - { .altcode = NULL }, /* 0x08e4 */ - { .altcode = NULL }, /* 0x08e5 */ - { .altcode = NULL }, /* 0x08e6 */ - { .altcode = NULL }, /* 0x08e7 */ - { .altcode = NULL }, /* 0x08e8 */ - { .altcode = NULL }, /* 0x08e9 */ - { .altcode = NULL }, /* 0x08ea */ - { .altcode = NULL }, /* 0x08eb */ - { .altcode = NULL }, /* 0x08ec */ - { .altcode = NULL }, /* 0x08ed */ - { .altcode = NULL }, /* 0x08ee */ - { .altcode = NULL }, /* 0x08ef (partialderivative) */ - { .altcode = NULL }, /* 0x08f0 */ - { .altcode = NULL }, /* 0x08f1 */ - { .altcode = NULL }, /* 0x08f2 */ - { .altcode = NULL }, /* 0x08f3 */ - { .altcode = NULL }, /* 0x08f4 */ - { .altcode = NULL }, /* 0x08f5 */ - { .altcode = NULL }, /* 0x08f6 (function) */ - { .altcode = NULL }, /* 0x08f7 */ - { .altcode = NULL }, /* 0x08f8 */ - { .altcode = NULL }, /* 0x08f9 */ - { .altcode = NULL }, /* 0x08fa */ - { .altcode = NULL }, /* 0x08fb (leftarrow) */ - { .altcode = NULL }, /* 0x08fc (uparrow) */ - { .altcode = NULL }, /* 0x08fd (rightarrow) */ - { .altcode = NULL }, /* 0x08fe (downarrow) */ - { .altcode = NULL }, /* 0x08ff */ - }, - { /* 0x09?? */ - { .altcode = NULL }, /* 0x0900 */ - { .altcode = NULL }, /* 0x0901 */ - { .altcode = NULL }, /* 0x0902 */ - { .altcode = NULL }, /* 0x0903 */ - { .altcode = NULL }, /* 0x0904 */ - { .altcode = NULL }, /* 0x0905 */ - { .altcode = NULL }, /* 0x0906 */ - { .altcode = NULL }, /* 0x0907 */ - { .altcode = NULL }, /* 0x0908 */ - { .altcode = NULL }, /* 0x0909 */ - { .altcode = NULL }, /* 0x090a */ - { .altcode = NULL }, /* 0x090b */ - { .altcode = NULL }, /* 0x090c */ - { .altcode = NULL }, /* 0x090d */ - { .altcode = NULL }, /* 0x090e */ - { .altcode = NULL }, /* 0x090f */ - { .altcode = NULL }, /* 0x0910 */ - { .altcode = NULL }, /* 0x0911 */ - { .altcode = NULL }, /* 0x0912 */ - { .altcode = NULL }, /* 0x0913 */ - { .altcode = NULL }, /* 0x0914 */ - { .altcode = NULL }, /* 0x0915 */ - { .altcode = NULL }, /* 0x0916 */ - { .altcode = NULL }, /* 0x0917 */ - { .altcode = NULL }, /* 0x0918 */ - { .altcode = NULL }, /* 0x0919 */ - { .altcode = NULL }, /* 0x091a */ - { .altcode = NULL }, /* 0x091b */ - { .altcode = NULL }, /* 0x091c */ - { .altcode = NULL }, /* 0x091d */ - { .altcode = NULL }, /* 0x091e */ - { .altcode = NULL }, /* 0x091f */ - { .altcode = NULL }, /* 0x0920 */ - { .altcode = NULL }, /* 0x0921 */ - { .altcode = NULL }, /* 0x0922 */ - { .altcode = NULL }, /* 0x0923 */ - { .altcode = NULL }, /* 0x0924 */ - { .altcode = NULL }, /* 0x0925 */ - { .altcode = NULL }, /* 0x0926 */ - { .altcode = NULL }, /* 0x0927 */ - { .altcode = NULL }, /* 0x0928 */ - { .altcode = NULL }, /* 0x0929 */ - { .altcode = NULL }, /* 0x092a */ - { .altcode = NULL }, /* 0x092b */ - { .altcode = NULL }, /* 0x092c */ - { .altcode = NULL }, /* 0x092d */ - { .altcode = NULL }, /* 0x092e */ - { .altcode = NULL }, /* 0x092f */ - { .altcode = NULL }, /* 0x0930 */ - { .altcode = NULL }, /* 0x0931 */ - { .altcode = NULL }, /* 0x0932 */ - { .altcode = NULL }, /* 0x0933 */ - { .altcode = NULL }, /* 0x0934 */ - { .altcode = NULL }, /* 0x0935 */ - { .altcode = NULL }, /* 0x0936 */ - { .altcode = NULL }, /* 0x0937 */ - { .altcode = NULL }, /* 0x0938 */ - { .altcode = NULL }, /* 0x0939 */ - { .altcode = NULL }, /* 0x093a */ - { .altcode = NULL }, /* 0x093b */ - { .altcode = NULL }, /* 0x093c */ - { .altcode = NULL }, /* 0x093d */ - { .altcode = NULL }, /* 0x093e */ - { .altcode = NULL }, /* 0x093f */ - { .altcode = NULL }, /* 0x0940 */ - { .altcode = NULL }, /* 0x0941 */ - { .altcode = NULL }, /* 0x0942 */ - { .altcode = NULL }, /* 0x0943 */ - { .altcode = NULL }, /* 0x0944 */ - { .altcode = NULL }, /* 0x0945 */ - { .altcode = NULL }, /* 0x0946 */ - { .altcode = NULL }, /* 0x0947 */ - { .altcode = NULL }, /* 0x0948 */ - { .altcode = NULL }, /* 0x0949 */ - { .altcode = NULL }, /* 0x094a */ - { .altcode = NULL }, /* 0x094b */ - { .altcode = NULL }, /* 0x094c */ - { .altcode = NULL }, /* 0x094d */ - { .altcode = NULL }, /* 0x094e */ - { .altcode = NULL }, /* 0x094f */ - { .altcode = NULL }, /* 0x0950 */ - { .altcode = NULL }, /* 0x0951 */ - { .altcode = NULL }, /* 0x0952 */ - { .altcode = NULL }, /* 0x0953 */ - { .altcode = NULL }, /* 0x0954 */ - { .altcode = NULL }, /* 0x0955 */ - { .altcode = NULL }, /* 0x0956 */ - { .altcode = NULL }, /* 0x0957 */ - { .altcode = NULL }, /* 0x0958 */ - { .altcode = NULL }, /* 0x0959 */ - { .altcode = NULL }, /* 0x095a */ - { .altcode = NULL }, /* 0x095b */ - { .altcode = NULL }, /* 0x095c */ - { .altcode = NULL }, /* 0x095d */ - { .altcode = NULL }, /* 0x095e */ - { .altcode = NULL }, /* 0x095f */ - { .altcode = NULL }, /* 0x0960 */ - { .altcode = NULL }, /* 0x0961 */ - { .altcode = NULL }, /* 0x0962 */ - { .altcode = NULL }, /* 0x0963 */ - { .altcode = NULL }, /* 0x0964 */ - { .altcode = NULL }, /* 0x0965 */ - { .altcode = NULL }, /* 0x0966 */ - { .altcode = NULL }, /* 0x0967 */ - { .altcode = NULL }, /* 0x0968 */ - { .altcode = NULL }, /* 0x0969 */ - { .altcode = NULL }, /* 0x096a */ - { .altcode = NULL }, /* 0x096b */ - { .altcode = NULL }, /* 0x096c */ - { .altcode = NULL }, /* 0x096d */ - { .altcode = NULL }, /* 0x096e */ - { .altcode = NULL }, /* 0x096f */ - { .altcode = NULL }, /* 0x0970 */ - { .altcode = NULL }, /* 0x0971 */ - { .altcode = NULL }, /* 0x0972 */ - { .altcode = NULL }, /* 0x0973 */ - { .altcode = NULL }, /* 0x0974 */ - { .altcode = NULL }, /* 0x0975 */ - { .altcode = NULL }, /* 0x0976 */ - { .altcode = NULL }, /* 0x0977 */ - { .altcode = NULL }, /* 0x0978 */ - { .altcode = NULL }, /* 0x0979 */ - { .altcode = NULL }, /* 0x097a */ - { .altcode = NULL }, /* 0x097b */ - { .altcode = NULL }, /* 0x097c */ - { .altcode = NULL }, /* 0x097d */ - { .altcode = NULL }, /* 0x097e */ - { .altcode = NULL }, /* 0x097f */ - { .altcode = NULL }, /* 0x0980 */ - { .altcode = NULL }, /* 0x0981 */ - { .altcode = NULL }, /* 0x0982 */ - { .altcode = NULL }, /* 0x0983 */ - { .altcode = NULL }, /* 0x0984 */ - { .altcode = NULL }, /* 0x0985 */ - { .altcode = NULL }, /* 0x0986 */ - { .altcode = NULL }, /* 0x0987 */ - { .altcode = NULL }, /* 0x0988 */ - { .altcode = NULL }, /* 0x0989 */ - { .altcode = NULL }, /* 0x098a */ - { .altcode = NULL }, /* 0x098b */ - { .altcode = NULL }, /* 0x098c */ - { .altcode = NULL }, /* 0x098d */ - { .altcode = NULL }, /* 0x098e */ - { .altcode = NULL }, /* 0x098f */ - { .altcode = NULL }, /* 0x0990 */ - { .altcode = NULL }, /* 0x0991 */ - { .altcode = NULL }, /* 0x0992 */ - { .altcode = NULL }, /* 0x0993 */ - { .altcode = NULL }, /* 0x0994 */ - { .altcode = NULL }, /* 0x0995 */ - { .altcode = NULL }, /* 0x0996 */ - { .altcode = NULL }, /* 0x0997 */ - { .altcode = NULL }, /* 0x0998 */ - { .altcode = NULL }, /* 0x0999 */ - { .altcode = NULL }, /* 0x099a */ - { .altcode = NULL }, /* 0x099b */ - { .altcode = NULL }, /* 0x099c */ - { .altcode = NULL }, /* 0x099d */ - { .altcode = NULL }, /* 0x099e */ - { .altcode = NULL }, /* 0x099f */ - { .altcode = NULL }, /* 0x09a0 */ - { .altcode = NULL }, /* 0x09a1 */ - { .altcode = NULL }, /* 0x09a2 */ - { .altcode = NULL }, /* 0x09a3 */ - { .altcode = NULL }, /* 0x09a4 */ - { .altcode = NULL }, /* 0x09a5 */ - { .altcode = NULL }, /* 0x09a6 */ - { .altcode = NULL }, /* 0x09a7 */ - { .altcode = NULL }, /* 0x09a8 */ - { .altcode = NULL }, /* 0x09a9 */ - { .altcode = NULL }, /* 0x09aa */ - { .altcode = NULL }, /* 0x09ab */ - { .altcode = NULL }, /* 0x09ac */ - { .altcode = NULL }, /* 0x09ad */ - { .altcode = NULL }, /* 0x09ae */ - { .altcode = NULL }, /* 0x09af */ - { .altcode = NULL }, /* 0x09b0 */ - { .altcode = NULL }, /* 0x09b1 */ - { .altcode = NULL }, /* 0x09b2 */ - { .altcode = NULL }, /* 0x09b3 */ - { .altcode = NULL }, /* 0x09b4 */ - { .altcode = NULL }, /* 0x09b5 */ - { .altcode = NULL }, /* 0x09b6 */ - { .altcode = NULL }, /* 0x09b7 */ - { .altcode = NULL }, /* 0x09b8 */ - { .altcode = NULL }, /* 0x09b9 */ - { .altcode = NULL }, /* 0x09ba */ - { .altcode = NULL }, /* 0x09bb */ - { .altcode = NULL }, /* 0x09bc */ - { .altcode = NULL }, /* 0x09bd */ - { .altcode = NULL }, /* 0x09be */ - { .altcode = NULL }, /* 0x09bf */ - { .altcode = NULL }, /* 0x09c0 */ - { .altcode = NULL }, /* 0x09c1 */ - { .altcode = NULL }, /* 0x09c2 */ - { .altcode = NULL }, /* 0x09c3 */ - { .altcode = NULL }, /* 0x09c4 */ - { .altcode = NULL }, /* 0x09c5 */ - { .altcode = NULL }, /* 0x09c6 */ - { .altcode = NULL }, /* 0x09c7 */ - { .altcode = NULL }, /* 0x09c8 */ - { .altcode = NULL }, /* 0x09c9 */ - { .altcode = NULL }, /* 0x09ca */ - { .altcode = NULL }, /* 0x09cb */ - { .altcode = NULL }, /* 0x09cc */ - { .altcode = NULL }, /* 0x09cd */ - { .altcode = NULL }, /* 0x09ce */ - { .altcode = NULL }, /* 0x09cf */ - { .altcode = NULL }, /* 0x09d0 */ - { .altcode = NULL }, /* 0x09d1 */ - { .altcode = NULL }, /* 0x09d2 */ - { .altcode = NULL }, /* 0x09d3 */ - { .altcode = NULL }, /* 0x09d4 */ - { .altcode = NULL }, /* 0x09d5 */ - { .altcode = NULL }, /* 0x09d6 */ - { .altcode = NULL }, /* 0x09d7 */ - { .altcode = NULL }, /* 0x09d8 */ - { .altcode = NULL }, /* 0x09d9 */ - { .altcode = NULL }, /* 0x09da */ - { .altcode = NULL }, /* 0x09db */ - { .altcode = NULL }, /* 0x09dc */ - { .altcode = NULL }, /* 0x09dd */ - { .altcode = NULL }, /* 0x09de */ - { .altcode = NULL }, /* 0x09df (blank) */ - { .altcode = NULL }, /* 0x09e0 (soliddiamond) */ - { .altcode = NULL }, /* 0x09e1 (checkerboard) */ - { .altcode = NULL }, /* 0x09e2 (ht) */ - { .altcode = NULL }, /* 0x09e3 (ff) */ - { .altcode = NULL }, /* 0x09e4 (cr) */ - { .altcode = NULL }, /* 0x09e5 (lf) */ - { .altcode = NULL }, /* 0x09e6 */ - { .altcode = NULL }, /* 0x09e7 */ - { .altcode = NULL }, /* 0x09e8 (nl) */ - { .altcode = NULL }, /* 0x09e9 (vt) */ - { .altcode = NULL }, /* 0x09ea (lowrightcorner) */ - { .altcode = NULL }, /* 0x09eb (uprightcorner) */ - { .altcode = NULL }, /* 0x09ec (upleftcorner) */ - { .altcode = NULL }, /* 0x09ed (lowleftcorner) */ - { .altcode = NULL }, /* 0x09ee (crossinglines) */ - { .altcode = NULL }, /* 0x09ef (horizlinescan1) */ - { .altcode = NULL }, /* 0x09f0 (horizlinescan3) */ - { .altcode = NULL }, /* 0x09f1 (horizlinescan5) */ - { .altcode = NULL }, /* 0x09f2 (horizlinescan7) */ - { .altcode = NULL }, /* 0x09f3 (horizlinescan9) */ - { .altcode = NULL }, /* 0x09f4 (leftt) */ - { .altcode = NULL }, /* 0x09f5 (rightt) */ - { .altcode = NULL }, /* 0x09f6 (bott) */ - { .altcode = NULL }, /* 0x09f7 (topt) */ - { .altcode = NULL }, /* 0x09f8 (vertbar) */ - { .altcode = NULL }, /* 0x09f9 */ - { .altcode = NULL }, /* 0x09fa */ - { .altcode = NULL }, /* 0x09fb */ - { .altcode = NULL }, /* 0x09fc */ - { .altcode = NULL }, /* 0x09fd */ - { .altcode = NULL }, /* 0x09fe */ - { .altcode = NULL }, /* 0x09ff */ - }, - { /* 0x0a?? */ - { .altcode = NULL }, /* 0x0a00 */ - { .altcode = NULL }, /* 0x0a01 */ - { .altcode = NULL }, /* 0x0a02 */ - { .altcode = NULL }, /* 0x0a03 */ - { .altcode = NULL }, /* 0x0a04 */ - { .altcode = NULL }, /* 0x0a05 */ - { .altcode = NULL }, /* 0x0a06 */ - { .altcode = NULL }, /* 0x0a07 */ - { .altcode = NULL }, /* 0x0a08 */ - { .altcode = NULL }, /* 0x0a09 */ - { .altcode = NULL }, /* 0x0a0a */ - { .altcode = NULL }, /* 0x0a0b */ - { .altcode = NULL }, /* 0x0a0c */ - { .altcode = NULL }, /* 0x0a0d */ - { .altcode = NULL }, /* 0x0a0e */ - { .altcode = NULL }, /* 0x0a0f */ - { .altcode = NULL }, /* 0x0a10 */ - { .altcode = NULL }, /* 0x0a11 */ - { .altcode = NULL }, /* 0x0a12 */ - { .altcode = NULL }, /* 0x0a13 */ - { .altcode = NULL }, /* 0x0a14 */ - { .altcode = NULL }, /* 0x0a15 */ - { .altcode = NULL }, /* 0x0a16 */ - { .altcode = NULL }, /* 0x0a17 */ - { .altcode = NULL }, /* 0x0a18 */ - { .altcode = NULL }, /* 0x0a19 */ - { .altcode = NULL }, /* 0x0a1a */ - { .altcode = NULL }, /* 0x0a1b */ - { .altcode = NULL }, /* 0x0a1c */ - { .altcode = NULL }, /* 0x0a1d */ - { .altcode = NULL }, /* 0x0a1e */ - { .altcode = NULL }, /* 0x0a1f */ - { .altcode = NULL }, /* 0x0a20 */ - { .altcode = NULL }, /* 0x0a21 */ - { .altcode = NULL }, /* 0x0a22 */ - { .altcode = NULL }, /* 0x0a23 */ - { .altcode = NULL }, /* 0x0a24 */ - { .altcode = NULL }, /* 0x0a25 */ - { .altcode = NULL }, /* 0x0a26 */ - { .altcode = NULL }, /* 0x0a27 */ - { .altcode = NULL }, /* 0x0a28 */ - { .altcode = NULL }, /* 0x0a29 */ - { .altcode = NULL }, /* 0x0a2a */ - { .altcode = NULL }, /* 0x0a2b */ - { .altcode = NULL }, /* 0x0a2c */ - { .altcode = NULL }, /* 0x0a2d */ - { .altcode = NULL }, /* 0x0a2e */ - { .altcode = NULL }, /* 0x0a2f */ - { .altcode = NULL }, /* 0x0a30 */ - { .altcode = NULL }, /* 0x0a31 */ - { .altcode = NULL }, /* 0x0a32 */ - { .altcode = NULL }, /* 0x0a33 */ - { .altcode = NULL }, /* 0x0a34 */ - { .altcode = NULL }, /* 0x0a35 */ - { .altcode = NULL }, /* 0x0a36 */ - { .altcode = NULL }, /* 0x0a37 */ - { .altcode = NULL }, /* 0x0a38 */ - { .altcode = NULL }, /* 0x0a39 */ - { .altcode = NULL }, /* 0x0a3a */ - { .altcode = NULL }, /* 0x0a3b */ - { .altcode = NULL }, /* 0x0a3c */ - { .altcode = NULL }, /* 0x0a3d */ - { .altcode = NULL }, /* 0x0a3e */ - { .altcode = NULL }, /* 0x0a3f */ - { .altcode = NULL }, /* 0x0a40 */ - { .altcode = NULL }, /* 0x0a41 */ - { .altcode = NULL }, /* 0x0a42 */ - { .altcode = NULL }, /* 0x0a43 */ - { .altcode = NULL }, /* 0x0a44 */ - { .altcode = NULL }, /* 0x0a45 */ - { .altcode = NULL }, /* 0x0a46 */ - { .altcode = NULL }, /* 0x0a47 */ - { .altcode = NULL }, /* 0x0a48 */ - { .altcode = NULL }, /* 0x0a49 */ - { .altcode = NULL }, /* 0x0a4a */ - { .altcode = NULL }, /* 0x0a4b */ - { .altcode = NULL }, /* 0x0a4c */ - { .altcode = NULL }, /* 0x0a4d */ - { .altcode = NULL }, /* 0x0a4e */ - { .altcode = NULL }, /* 0x0a4f */ - { .altcode = NULL }, /* 0x0a50 */ - { .altcode = NULL }, /* 0x0a51 */ - { .altcode = NULL }, /* 0x0a52 */ - { .altcode = NULL }, /* 0x0a53 */ - { .altcode = NULL }, /* 0x0a54 */ - { .altcode = NULL }, /* 0x0a55 */ - { .altcode = NULL }, /* 0x0a56 */ - { .altcode = NULL }, /* 0x0a57 */ - { .altcode = NULL }, /* 0x0a58 */ - { .altcode = NULL }, /* 0x0a59 */ - { .altcode = NULL }, /* 0x0a5a */ - { .altcode = NULL }, /* 0x0a5b */ - { .altcode = NULL }, /* 0x0a5c */ - { .altcode = NULL }, /* 0x0a5d */ - { .altcode = NULL }, /* 0x0a5e */ - { .altcode = NULL }, /* 0x0a5f */ - { .altcode = NULL }, /* 0x0a60 */ - { .altcode = NULL }, /* 0x0a61 */ - { .altcode = NULL }, /* 0x0a62 */ - { .altcode = NULL }, /* 0x0a63 */ - { .altcode = NULL }, /* 0x0a64 */ - { .altcode = NULL }, /* 0x0a65 */ - { .altcode = NULL }, /* 0x0a66 */ - { .altcode = NULL }, /* 0x0a67 */ - { .altcode = NULL }, /* 0x0a68 */ - { .altcode = NULL }, /* 0x0a69 */ - { .altcode = NULL }, /* 0x0a6a */ - { .altcode = NULL }, /* 0x0a6b */ - { .altcode = NULL }, /* 0x0a6c */ - { .altcode = NULL }, /* 0x0a6d */ - { .altcode = NULL }, /* 0x0a6e */ - { .altcode = NULL }, /* 0x0a6f */ - { .altcode = NULL }, /* 0x0a70 */ - { .altcode = NULL }, /* 0x0a71 */ - { .altcode = NULL }, /* 0x0a72 */ - { .altcode = NULL }, /* 0x0a73 */ - { .altcode = NULL }, /* 0x0a74 */ - { .altcode = NULL }, /* 0x0a75 */ - { .altcode = NULL }, /* 0x0a76 */ - { .altcode = NULL }, /* 0x0a77 */ - { .altcode = NULL }, /* 0x0a78 */ - { .altcode = NULL }, /* 0x0a79 */ - { .altcode = NULL }, /* 0x0a7a */ - { .altcode = NULL }, /* 0x0a7b */ - { .altcode = NULL }, /* 0x0a7c */ - { .altcode = NULL }, /* 0x0a7d */ - { .altcode = NULL }, /* 0x0a7e */ - { .altcode = NULL }, /* 0x0a7f */ - { .altcode = NULL }, /* 0x0a80 */ - { .altcode = NULL }, /* 0x0a81 */ - { .altcode = NULL }, /* 0x0a82 */ - { .altcode = NULL }, /* 0x0a83 */ - { .altcode = NULL }, /* 0x0a84 */ - { .altcode = NULL }, /* 0x0a85 */ - { .altcode = NULL }, /* 0x0a86 */ - { .altcode = NULL }, /* 0x0a87 */ - { .altcode = NULL }, /* 0x0a88 */ - { .altcode = NULL }, /* 0x0a89 */ - { .altcode = NULL }, /* 0x0a8a */ - { .altcode = NULL }, /* 0x0a8b */ - { .altcode = NULL }, /* 0x0a8c */ - { .altcode = NULL }, /* 0x0a8d */ - { .altcode = NULL }, /* 0x0a8e */ - { .altcode = NULL }, /* 0x0a8f */ - { .altcode = NULL }, /* 0x0a90 */ - { .altcode = NULL }, /* 0x0a91 */ - { .altcode = NULL }, /* 0x0a92 */ - { .altcode = NULL }, /* 0x0a93 */ - { .altcode = NULL }, /* 0x0a94 */ - { .altcode = NULL }, /* 0x0a95 */ - { .altcode = NULL }, /* 0x0a96 */ - { .altcode = NULL }, /* 0x0a97 */ - { .altcode = NULL }, /* 0x0a98 */ - { .altcode = NULL }, /* 0x0a99 */ - { .altcode = NULL }, /* 0x0a9a */ - { .altcode = NULL }, /* 0x0a9b */ - { .altcode = NULL }, /* 0x0a9c */ - { .altcode = NULL }, /* 0x0a9d */ - { .altcode = NULL }, /* 0x0a9e */ - { .altcode = NULL }, /* 0x0a9f */ - { .altcode = NULL }, /* 0x0aa0 */ - { .altcode = NULL }, /* 0x0aa1 (emspace) */ - { .altcode = NULL }, /* 0x0aa2 (enspace) */ - { .altcode = NULL }, /* 0x0aa3 (em3space) */ - { .altcode = NULL }, /* 0x0aa4 (em4space) */ - { .altcode = NULL }, /* 0x0aa5 (digitspace) */ - { .altcode = NULL }, /* 0x0aa6 (punctspace) */ - { .altcode = NULL }, /* 0x0aa7 (thinspace) */ - { .altcode = NULL }, /* 0x0aa8 (hairspace) */ - { .altcode = NULL }, /* 0x0aa9 (emdash) */ - { .altcode = NULL }, /* 0x0aaa (endash) */ - { .altcode = NULL }, /* 0x0aab */ - { .altcode = NULL }, /* 0x0aac (signifblank) */ - { .altcode = NULL }, /* 0x0aad */ - { .altcode = NULL }, /* 0x0aae (ellipsis) */ - { .altcode = NULL }, /* 0x0aaf (doubbaselinedot) */ - { .altcode = NULL }, /* 0x0ab0 (onethird) */ - { .altcode = NULL }, /* 0x0ab1 (twothirds) */ - { .altcode = NULL }, /* 0x0ab2 (onefifth) */ - { .altcode = NULL }, /* 0x0ab3 (twofifths) */ - { .altcode = NULL }, /* 0x0ab4 (threefifths) */ - { .altcode = NULL }, /* 0x0ab5 (fourfifths) */ - { .altcode = NULL }, /* 0x0ab6 (onesixth) */ - { .altcode = NULL }, /* 0x0ab7 (fivesixths) */ - { .altcode = NULL }, /* 0x0ab8 (careof) */ - { .altcode = NULL }, /* 0x0ab9 */ - { .altcode = NULL }, /* 0x0aba */ - { .altcode = NULL }, /* 0x0abb (figdash) */ - { .altcode = NULL }, /* 0x0abc (leftanglebracket) */ - { .altcode = NULL }, /* 0x0abd (decimalpoint) */ - { .altcode = NULL }, /* 0x0abe (rightanglebracket) */ - { .altcode = NULL }, /* 0x0abf (marker) */ - { .altcode = NULL }, /* 0x0ac0 */ - { .altcode = NULL }, /* 0x0ac1 */ - { .altcode = NULL }, /* 0x0ac2 */ - { .altcode = NULL }, /* 0x0ac3 (oneeighth) */ - { .altcode = NULL }, /* 0x0ac4 (threeeighths) */ - { .altcode = NULL }, /* 0x0ac5 (fiveeighths) */ - { .altcode = NULL }, /* 0x0ac6 (seveneighths) */ - { .altcode = NULL }, /* 0x0ac7 */ - { .altcode = NULL }, /* 0x0ac8 */ - { .altcode = NULL }, /* 0x0ac9 (trademark) */ - { .altcode = NULL }, /* 0x0aca (signaturemark) */ - { .altcode = NULL }, /* 0x0acb (trademarkincircle) */ - { .altcode = NULL }, /* 0x0acc (leftopentriangle) */ - { .altcode = NULL }, /* 0x0acd (rightopentriangle) */ - { .altcode = NULL }, /* 0x0ace (emopencircle) */ - { .altcode = NULL }, /* 0x0acf (emopenrectangle) */ - { .altcode = NULL }, /* 0x0ad0 (leftsinglequotemark) */ - { .altcode = NULL }, /* 0x0ad1 (rightsinglequotemark) */ - { .altcode = NULL }, /* 0x0ad2 (leftdoublequotemark) */ - { .altcode = NULL }, /* 0x0ad3 (rightdoublequotemark) */ - { .altcode = NULL }, /* 0x0ad4 (prescription) */ - { .altcode = NULL }, /* 0x0ad5 */ - { .altcode = NULL }, /* 0x0ad6 (minutes) */ - { .altcode = NULL }, /* 0x0ad7 (seconds) */ - { .altcode = NULL }, /* 0x0ad8 */ - { .altcode = NULL }, /* 0x0ad9 (latincross) */ - { .altcode = NULL }, /* 0x0ada (hexagram) */ - { .altcode = NULL }, /* 0x0adb (filledrectbullet) */ - { .altcode = NULL }, /* 0x0adc (filledlefttribullet) */ - { .altcode = NULL }, /* 0x0add (filledrighttribullet) */ - { .altcode = NULL }, /* 0x0ade (emfilledcircle) */ - { .altcode = NULL }, /* 0x0adf (emfilledrect) */ - { .altcode = NULL }, /* 0x0ae0 (enopencircbullet) */ - { .altcode = NULL }, /* 0x0ae1 (enopensquarebullet) */ - { .altcode = NULL }, /* 0x0ae2 (openrectbullet) */ - { .altcode = NULL }, /* 0x0ae3 (opentribulletup) */ - { .altcode = NULL }, /* 0x0ae4 (opentribulletdown) */ - { .altcode = NULL }, /* 0x0ae5 (openstar) */ - { .altcode = NULL }, /* 0x0ae6 (enfilledcircbullet) */ - { .altcode = NULL }, /* 0x0ae7 (enfilledsqbullet) */ - { .altcode = NULL }, /* 0x0ae8 (filledtribulletup) */ - { .altcode = NULL }, /* 0x0ae9 (filledtribulletdown) */ - { .altcode = NULL }, /* 0x0aea (leftpointer) */ - { .altcode = NULL }, /* 0x0aeb (rightpointer) */ - { .altcode = NULL }, /* 0x0aec (club) */ - { .altcode = NULL }, /* 0x0aed (diamond) */ - { .altcode = NULL }, /* 0x0aee (heart) */ - { .altcode = NULL }, /* 0x0aef */ - { .altcode = NULL }, /* 0x0af0 (maltesecross) */ - { .altcode = NULL }, /* 0x0af1 (dagger) */ - { .altcode = NULL }, /* 0x0af2 (doubledagger) */ - { .altcode = NULL }, /* 0x0af3 (checkmark) */ - { .altcode = NULL }, /* 0x0af4 (ballotcross) */ - { .altcode = NULL }, /* 0x0af5 (musicalsharp) */ - { .altcode = NULL }, /* 0x0af6 (musicalflat) */ - { .altcode = NULL }, /* 0x0af7 (malesymbol) */ - { .altcode = NULL }, /* 0x0af8 (femalesymbol) */ - { .altcode = NULL }, /* 0x0af9 (telephone) */ - { .altcode = NULL }, /* 0x0afa (telephonerecorder) */ - { .altcode = NULL }, /* 0x0afb (phonographcopyright) */ - { .altcode = NULL }, /* 0x0afc (caret) */ - { .altcode = NULL }, /* 0x0afd (singlelowquotemark) */ - { .altcode = NULL }, /* 0x0afe (doublelowquotemark) */ - { .altcode = NULL }, /* 0x0aff (cursor) */ - }, - { /* 0x0b?? */ - { .altcode = NULL }, /* 0x0b00 */ - { .altcode = NULL }, /* 0x0b01 */ - { .altcode = NULL }, /* 0x0b02 */ - { .altcode = NULL }, /* 0x0b03 */ - { .altcode = NULL }, /* 0x0b04 */ - { .altcode = NULL }, /* 0x0b05 */ - { .altcode = NULL }, /* 0x0b06 */ - { .altcode = NULL }, /* 0x0b07 */ - { .altcode = NULL }, /* 0x0b08 */ - { .altcode = NULL }, /* 0x0b09 */ - { .altcode = NULL }, /* 0x0b0a */ - { .altcode = NULL }, /* 0x0b0b */ - { .altcode = NULL }, /* 0x0b0c */ - { .altcode = NULL }, /* 0x0b0d */ - { .altcode = NULL }, /* 0x0b0e */ - { .altcode = NULL }, /* 0x0b0f */ - { .altcode = NULL }, /* 0x0b10 */ - { .altcode = NULL }, /* 0x0b11 */ - { .altcode = NULL }, /* 0x0b12 */ - { .altcode = NULL }, /* 0x0b13 */ - { .altcode = NULL }, /* 0x0b14 */ - { .altcode = NULL }, /* 0x0b15 */ - { .altcode = NULL }, /* 0x0b16 */ - { .altcode = NULL }, /* 0x0b17 */ - { .altcode = NULL }, /* 0x0b18 */ - { .altcode = NULL }, /* 0x0b19 */ - { .altcode = NULL }, /* 0x0b1a */ - { .altcode = NULL }, /* 0x0b1b */ - { .altcode = NULL }, /* 0x0b1c */ - { .altcode = NULL }, /* 0x0b1d */ - { .altcode = NULL }, /* 0x0b1e */ - { .altcode = NULL }, /* 0x0b1f */ - { .altcode = NULL }, /* 0x0b20 */ - { .altcode = NULL }, /* 0x0b21 */ - { .altcode = NULL }, /* 0x0b22 */ - { .altcode = NULL }, /* 0x0b23 */ - { .altcode = NULL }, /* 0x0b24 */ - { .altcode = NULL }, /* 0x0b25 */ - { .altcode = NULL }, /* 0x0b26 */ - { .altcode = NULL }, /* 0x0b27 */ - { .altcode = NULL }, /* 0x0b28 */ - { .altcode = NULL }, /* 0x0b29 */ - { .altcode = NULL }, /* 0x0b2a */ - { .altcode = NULL }, /* 0x0b2b */ - { .altcode = NULL }, /* 0x0b2c */ - { .altcode = NULL }, /* 0x0b2d */ - { .altcode = NULL }, /* 0x0b2e */ - { .altcode = NULL }, /* 0x0b2f */ - { .altcode = NULL }, /* 0x0b30 */ - { .altcode = NULL }, /* 0x0b31 */ - { .altcode = NULL }, /* 0x0b32 */ - { .altcode = NULL }, /* 0x0b33 */ - { .altcode = NULL }, /* 0x0b34 */ - { .altcode = NULL }, /* 0x0b35 */ - { .altcode = NULL }, /* 0x0b36 */ - { .altcode = NULL }, /* 0x0b37 */ - { .altcode = NULL }, /* 0x0b38 */ - { .altcode = NULL }, /* 0x0b39 */ - { .altcode = NULL }, /* 0x0b3a */ - { .altcode = NULL }, /* 0x0b3b */ - { .altcode = NULL }, /* 0x0b3c */ - { .altcode = NULL }, /* 0x0b3d */ - { .altcode = NULL }, /* 0x0b3e */ - { .altcode = NULL }, /* 0x0b3f */ - { .altcode = NULL }, /* 0x0b40 */ - { .altcode = NULL }, /* 0x0b41 */ - { .altcode = NULL }, /* 0x0b42 */ - { .altcode = NULL }, /* 0x0b43 */ - { .altcode = NULL }, /* 0x0b44 */ - { .altcode = NULL }, /* 0x0b45 */ - { .altcode = NULL }, /* 0x0b46 */ - { .altcode = NULL }, /* 0x0b47 */ - { .altcode = NULL }, /* 0x0b48 */ - { .altcode = NULL }, /* 0x0b49 */ - { .altcode = NULL }, /* 0x0b4a */ - { .altcode = NULL }, /* 0x0b4b */ - { .altcode = NULL }, /* 0x0b4c */ - { .altcode = NULL }, /* 0x0b4d */ - { .altcode = NULL }, /* 0x0b4e */ - { .altcode = NULL }, /* 0x0b4f */ - { .altcode = NULL }, /* 0x0b50 */ - { .altcode = NULL }, /* 0x0b51 */ - { .altcode = NULL }, /* 0x0b52 */ - { .altcode = NULL }, /* 0x0b53 */ - { .altcode = NULL }, /* 0x0b54 */ - { .altcode = NULL }, /* 0x0b55 */ - { .altcode = NULL }, /* 0x0b56 */ - { .altcode = NULL }, /* 0x0b57 */ - { .altcode = NULL }, /* 0x0b58 */ - { .altcode = NULL }, /* 0x0b59 */ - { .altcode = NULL }, /* 0x0b5a */ - { .altcode = NULL }, /* 0x0b5b */ - { .altcode = NULL }, /* 0x0b5c */ - { .altcode = NULL }, /* 0x0b5d */ - { .altcode = NULL }, /* 0x0b5e */ - { .altcode = NULL }, /* 0x0b5f */ - { .altcode = NULL }, /* 0x0b60 */ - { .altcode = NULL }, /* 0x0b61 */ - { .altcode = NULL }, /* 0x0b62 */ - { .altcode = NULL }, /* 0x0b63 */ - { .altcode = NULL }, /* 0x0b64 */ - { .altcode = NULL }, /* 0x0b65 */ - { .altcode = NULL }, /* 0x0b66 */ - { .altcode = NULL }, /* 0x0b67 */ - { .altcode = NULL }, /* 0x0b68 */ - { .altcode = NULL }, /* 0x0b69 */ - { .altcode = NULL }, /* 0x0b6a */ - { .altcode = NULL }, /* 0x0b6b */ - { .altcode = NULL }, /* 0x0b6c */ - { .altcode = NULL }, /* 0x0b6d */ - { .altcode = NULL }, /* 0x0b6e */ - { .altcode = NULL }, /* 0x0b6f */ - { .altcode = NULL }, /* 0x0b70 */ - { .altcode = NULL }, /* 0x0b71 */ - { .altcode = NULL }, /* 0x0b72 */ - { .altcode = NULL }, /* 0x0b73 */ - { .altcode = NULL }, /* 0x0b74 */ - { .altcode = NULL }, /* 0x0b75 */ - { .altcode = NULL }, /* 0x0b76 */ - { .altcode = NULL }, /* 0x0b77 */ - { .altcode = NULL }, /* 0x0b78 */ - { .altcode = NULL }, /* 0x0b79 */ - { .altcode = NULL }, /* 0x0b7a */ - { .altcode = NULL }, /* 0x0b7b */ - { .altcode = NULL }, /* 0x0b7c */ - { .altcode = NULL }, /* 0x0b7d */ - { .altcode = NULL }, /* 0x0b7e */ - { .altcode = NULL }, /* 0x0b7f */ - { .altcode = NULL }, /* 0x0b80 */ - { .altcode = NULL }, /* 0x0b81 */ - { .altcode = NULL }, /* 0x0b82 */ - { .altcode = NULL }, /* 0x0b83 */ - { .altcode = NULL }, /* 0x0b84 */ - { .altcode = NULL }, /* 0x0b85 */ - { .altcode = NULL }, /* 0x0b86 */ - { .altcode = NULL }, /* 0x0b87 */ - { .altcode = NULL }, /* 0x0b88 */ - { .altcode = NULL }, /* 0x0b89 */ - { .altcode = NULL }, /* 0x0b8a */ - { .altcode = NULL }, /* 0x0b8b */ - { .altcode = NULL }, /* 0x0b8c */ - { .altcode = NULL }, /* 0x0b8d */ - { .altcode = NULL }, /* 0x0b8e */ - { .altcode = NULL }, /* 0x0b8f */ - { .altcode = NULL }, /* 0x0b90 */ - { .altcode = NULL }, /* 0x0b91 */ - { .altcode = NULL }, /* 0x0b92 */ - { .altcode = NULL }, /* 0x0b93 */ - { .altcode = NULL }, /* 0x0b94 */ - { .altcode = NULL }, /* 0x0b95 */ - { .altcode = NULL }, /* 0x0b96 */ - { .altcode = NULL }, /* 0x0b97 */ - { .altcode = NULL }, /* 0x0b98 */ - { .altcode = NULL }, /* 0x0b99 */ - { .altcode = NULL }, /* 0x0b9a */ - { .altcode = NULL }, /* 0x0b9b */ - { .altcode = NULL }, /* 0x0b9c */ - { .altcode = NULL }, /* 0x0b9d */ - { .altcode = NULL }, /* 0x0b9e */ - { .altcode = NULL }, /* 0x0b9f */ - { .altcode = NULL }, /* 0x0ba0 */ - { .altcode = NULL }, /* 0x0ba1 */ - { .altcode = NULL }, /* 0x0ba2 */ - { .altcode = NULL }, /* 0x0ba3 (leftcaret) */ - { .altcode = NULL }, /* 0x0ba4 */ - { .altcode = NULL }, /* 0x0ba5 */ - { .altcode = NULL }, /* 0x0ba6 (rightcaret) */ - { .altcode = NULL }, /* 0x0ba7 */ - { .altcode = NULL }, /* 0x0ba8 (downcaret) */ - { .altcode = NULL }, /* 0x0ba9 (upcaret) */ - { .altcode = NULL }, /* 0x0baa */ - { .altcode = NULL }, /* 0x0bab */ - { .altcode = NULL }, /* 0x0bac */ - { .altcode = NULL }, /* 0x0bad */ - { .altcode = NULL }, /* 0x0bae */ - { .altcode = NULL }, /* 0x0baf */ - { .altcode = NULL }, /* 0x0bb0 */ - { .altcode = NULL }, /* 0x0bb1 */ - { .altcode = NULL }, /* 0x0bb2 */ - { .altcode = NULL }, /* 0x0bb3 */ - { .altcode = NULL }, /* 0x0bb4 */ - { .altcode = NULL }, /* 0x0bb5 */ - { .altcode = NULL }, /* 0x0bb6 */ - { .altcode = NULL }, /* 0x0bb7 */ - { .altcode = NULL }, /* 0x0bb8 */ - { .altcode = NULL }, /* 0x0bb9 */ - { .altcode = NULL }, /* 0x0bba */ - { .altcode = NULL }, /* 0x0bbb */ - { .altcode = NULL }, /* 0x0bbc */ - { .altcode = NULL }, /* 0x0bbd */ - { .altcode = NULL }, /* 0x0bbe */ - { .altcode = NULL }, /* 0x0bbf */ - { .altcode = NULL }, /* 0x0bc0 (overbar) */ - { .altcode = NULL }, /* 0x0bc1 */ - { .altcode = NULL }, /* 0x0bc2 (downtack) */ - { .altcode = NULL }, /* 0x0bc3 (upshoe) */ - { .altcode = NULL }, /* 0x0bc4 (downstile) */ - { .altcode = NULL }, /* 0x0bc5 */ - { .altcode = NULL }, /* 0x0bc6 (underbar) */ - { .altcode = NULL }, /* 0x0bc7 */ - { .altcode = NULL }, /* 0x0bc8 */ - { .altcode = NULL }, /* 0x0bc9 */ - { .altcode = NULL }, /* 0x0bca (jot) */ - { .altcode = NULL }, /* 0x0bcb */ - { .altcode = NULL }, /* 0x0bcc (quad) */ - { .altcode = NULL }, /* 0x0bcd */ - { .altcode = NULL }, /* 0x0bce (uptack) */ - { .altcode = NULL }, /* 0x0bcf (circle) */ - { .altcode = NULL }, /* 0x0bd0 */ - { .altcode = NULL }, /* 0x0bd1 */ - { .altcode = NULL }, /* 0x0bd2 */ - { .altcode = NULL }, /* 0x0bd3 (upstile) */ - { .altcode = NULL }, /* 0x0bd4 */ - { .altcode = NULL }, /* 0x0bd5 */ - { .altcode = NULL }, /* 0x0bd6 (downshoe) */ - { .altcode = NULL }, /* 0x0bd7 */ - { .altcode = NULL }, /* 0x0bd8 (rightshoe) */ - { .altcode = NULL }, /* 0x0bd9 */ - { .altcode = NULL }, /* 0x0bda (leftshoe) */ - { .altcode = NULL }, /* 0x0bdb */ - { .altcode = NULL }, /* 0x0bdc (lefttack) */ - { .altcode = NULL }, /* 0x0bdd */ - { .altcode = NULL }, /* 0x0bde */ - { .altcode = NULL }, /* 0x0bdf */ - { .altcode = NULL }, /* 0x0be0 */ - { .altcode = NULL }, /* 0x0be1 */ - { .altcode = NULL }, /* 0x0be2 */ - { .altcode = NULL }, /* 0x0be3 */ - { .altcode = NULL }, /* 0x0be4 */ - { .altcode = NULL }, /* 0x0be5 */ - { .altcode = NULL }, /* 0x0be6 */ - { .altcode = NULL }, /* 0x0be7 */ - { .altcode = NULL }, /* 0x0be8 */ - { .altcode = NULL }, /* 0x0be9 */ - { .altcode = NULL }, /* 0x0bea */ - { .altcode = NULL }, /* 0x0beb */ - { .altcode = NULL }, /* 0x0bec */ - { .altcode = NULL }, /* 0x0bed */ - { .altcode = NULL }, /* 0x0bee */ - { .altcode = NULL }, /* 0x0bef */ - { .altcode = NULL }, /* 0x0bf0 */ - { .altcode = NULL }, /* 0x0bf1 */ - { .altcode = NULL }, /* 0x0bf2 */ - { .altcode = NULL }, /* 0x0bf3 */ - { .altcode = NULL }, /* 0x0bf4 */ - { .altcode = NULL }, /* 0x0bf5 */ - { .altcode = NULL }, /* 0x0bf6 */ - { .altcode = NULL }, /* 0x0bf7 */ - { .altcode = NULL }, /* 0x0bf8 */ - { .altcode = NULL }, /* 0x0bf9 */ - { .altcode = NULL }, /* 0x0bfa */ - { .altcode = NULL }, /* 0x0bfb */ - { .altcode = NULL }, /* 0x0bfc (righttack) */ - { .altcode = NULL }, /* 0x0bfd */ - { .altcode = NULL }, /* 0x0bfe */ - { .altcode = NULL }, /* 0x0bff */ - }, - { /* 0x0c?? */ - { .altcode = NULL }, /* 0x0c00 */ - { .altcode = NULL }, /* 0x0c01 */ - { .altcode = NULL }, /* 0x0c02 */ - { .altcode = NULL }, /* 0x0c03 */ - { .altcode = NULL }, /* 0x0c04 */ - { .altcode = NULL }, /* 0x0c05 */ - { .altcode = NULL }, /* 0x0c06 */ - { .altcode = NULL }, /* 0x0c07 */ - { .altcode = NULL }, /* 0x0c08 */ - { .altcode = NULL }, /* 0x0c09 */ - { .altcode = NULL }, /* 0x0c0a */ - { .altcode = NULL }, /* 0x0c0b */ - { .altcode = NULL }, /* 0x0c0c */ - { .altcode = NULL }, /* 0x0c0d */ - { .altcode = NULL }, /* 0x0c0e */ - { .altcode = NULL }, /* 0x0c0f */ - { .altcode = NULL }, /* 0x0c10 */ - { .altcode = NULL }, /* 0x0c11 */ - { .altcode = NULL }, /* 0x0c12 */ - { .altcode = NULL }, /* 0x0c13 */ - { .altcode = NULL }, /* 0x0c14 */ - { .altcode = NULL }, /* 0x0c15 */ - { .altcode = NULL }, /* 0x0c16 */ - { .altcode = NULL }, /* 0x0c17 */ - { .altcode = NULL }, /* 0x0c18 */ - { .altcode = NULL }, /* 0x0c19 */ - { .altcode = NULL }, /* 0x0c1a */ - { .altcode = NULL }, /* 0x0c1b */ - { .altcode = NULL }, /* 0x0c1c */ - { .altcode = NULL }, /* 0x0c1d */ - { .altcode = NULL }, /* 0x0c1e */ - { .altcode = NULL }, /* 0x0c1f */ - { .altcode = NULL }, /* 0x0c20 */ - { .altcode = NULL }, /* 0x0c21 */ - { .altcode = NULL }, /* 0x0c22 */ - { .altcode = NULL }, /* 0x0c23 */ - { .altcode = NULL }, /* 0x0c24 */ - { .altcode = NULL }, /* 0x0c25 */ - { .altcode = NULL }, /* 0x0c26 */ - { .altcode = NULL }, /* 0x0c27 */ - { .altcode = NULL }, /* 0x0c28 */ - { .altcode = NULL }, /* 0x0c29 */ - { .altcode = NULL }, /* 0x0c2a */ - { .altcode = NULL }, /* 0x0c2b */ - { .altcode = NULL }, /* 0x0c2c */ - { .altcode = NULL }, /* 0x0c2d */ - { .altcode = NULL }, /* 0x0c2e */ - { .altcode = NULL }, /* 0x0c2f */ - { .altcode = NULL }, /* 0x0c30 */ - { .altcode = NULL }, /* 0x0c31 */ - { .altcode = NULL }, /* 0x0c32 */ - { .altcode = NULL }, /* 0x0c33 */ - { .altcode = NULL }, /* 0x0c34 */ - { .altcode = NULL }, /* 0x0c35 */ - { .altcode = NULL }, /* 0x0c36 */ - { .altcode = NULL }, /* 0x0c37 */ - { .altcode = NULL }, /* 0x0c38 */ - { .altcode = NULL }, /* 0x0c39 */ - { .altcode = NULL }, /* 0x0c3a */ - { .altcode = NULL }, /* 0x0c3b */ - { .altcode = NULL }, /* 0x0c3c */ - { .altcode = NULL }, /* 0x0c3d */ - { .altcode = NULL }, /* 0x0c3e */ - { .altcode = NULL }, /* 0x0c3f */ - { .altcode = NULL }, /* 0x0c40 */ - { .altcode = NULL }, /* 0x0c41 */ - { .altcode = NULL }, /* 0x0c42 */ - { .altcode = NULL }, /* 0x0c43 */ - { .altcode = NULL }, /* 0x0c44 */ - { .altcode = NULL }, /* 0x0c45 */ - { .altcode = NULL }, /* 0x0c46 */ - { .altcode = NULL }, /* 0x0c47 */ - { .altcode = NULL }, /* 0x0c48 */ - { .altcode = NULL }, /* 0x0c49 */ - { .altcode = NULL }, /* 0x0c4a */ - { .altcode = NULL }, /* 0x0c4b */ - { .altcode = NULL }, /* 0x0c4c */ - { .altcode = NULL }, /* 0x0c4d */ - { .altcode = NULL }, /* 0x0c4e */ - { .altcode = NULL }, /* 0x0c4f */ - { .altcode = NULL }, /* 0x0c50 */ - { .altcode = NULL }, /* 0x0c51 */ - { .altcode = NULL }, /* 0x0c52 */ - { .altcode = NULL }, /* 0x0c53 */ - { .altcode = NULL }, /* 0x0c54 */ - { .altcode = NULL }, /* 0x0c55 */ - { .altcode = NULL }, /* 0x0c56 */ - { .altcode = NULL }, /* 0x0c57 */ - { .altcode = NULL }, /* 0x0c58 */ - { .altcode = NULL }, /* 0x0c59 */ - { .altcode = NULL }, /* 0x0c5a */ - { .altcode = NULL }, /* 0x0c5b */ - { .altcode = NULL }, /* 0x0c5c */ - { .altcode = NULL }, /* 0x0c5d */ - { .altcode = NULL }, /* 0x0c5e */ - { .altcode = NULL }, /* 0x0c5f */ - { .altcode = NULL }, /* 0x0c60 */ - { .altcode = NULL }, /* 0x0c61 */ - { .altcode = NULL }, /* 0x0c62 */ - { .altcode = NULL }, /* 0x0c63 */ - { .altcode = NULL }, /* 0x0c64 */ - { .altcode = NULL }, /* 0x0c65 */ - { .altcode = NULL }, /* 0x0c66 */ - { .altcode = NULL }, /* 0x0c67 */ - { .altcode = NULL }, /* 0x0c68 */ - { .altcode = NULL }, /* 0x0c69 */ - { .altcode = NULL }, /* 0x0c6a */ - { .altcode = NULL }, /* 0x0c6b */ - { .altcode = NULL }, /* 0x0c6c */ - { .altcode = NULL }, /* 0x0c6d */ - { .altcode = NULL }, /* 0x0c6e */ - { .altcode = NULL }, /* 0x0c6f */ - { .altcode = NULL }, /* 0x0c70 */ - { .altcode = NULL }, /* 0x0c71 */ - { .altcode = NULL }, /* 0x0c72 */ - { .altcode = NULL }, /* 0x0c73 */ - { .altcode = NULL }, /* 0x0c74 */ - { .altcode = NULL }, /* 0x0c75 */ - { .altcode = NULL }, /* 0x0c76 */ - { .altcode = NULL }, /* 0x0c77 */ - { .altcode = NULL }, /* 0x0c78 */ - { .altcode = NULL }, /* 0x0c79 */ - { .altcode = NULL }, /* 0x0c7a */ - { .altcode = NULL }, /* 0x0c7b */ - { .altcode = NULL }, /* 0x0c7c */ - { .altcode = NULL }, /* 0x0c7d */ - { .altcode = NULL }, /* 0x0c7e */ - { .altcode = NULL }, /* 0x0c7f */ - { .altcode = NULL }, /* 0x0c80 */ - { .altcode = NULL }, /* 0x0c81 */ - { .altcode = NULL }, /* 0x0c82 */ - { .altcode = NULL }, /* 0x0c83 */ - { .altcode = NULL }, /* 0x0c84 */ - { .altcode = NULL }, /* 0x0c85 */ - { .altcode = NULL }, /* 0x0c86 */ - { .altcode = NULL }, /* 0x0c87 */ - { .altcode = NULL }, /* 0x0c88 */ - { .altcode = NULL }, /* 0x0c89 */ - { .altcode = NULL }, /* 0x0c8a */ - { .altcode = NULL }, /* 0x0c8b */ - { .altcode = NULL }, /* 0x0c8c */ - { .altcode = NULL }, /* 0x0c8d */ - { .altcode = NULL }, /* 0x0c8e */ - { .altcode = NULL }, /* 0x0c8f */ - { .altcode = NULL }, /* 0x0c90 */ - { .altcode = NULL }, /* 0x0c91 */ - { .altcode = NULL }, /* 0x0c92 */ - { .altcode = NULL }, /* 0x0c93 */ - { .altcode = NULL }, /* 0x0c94 */ - { .altcode = NULL }, /* 0x0c95 */ - { .altcode = NULL }, /* 0x0c96 */ - { .altcode = NULL }, /* 0x0c97 */ - { .altcode = NULL }, /* 0x0c98 */ - { .altcode = NULL }, /* 0x0c99 */ - { .altcode = NULL }, /* 0x0c9a */ - { .altcode = NULL }, /* 0x0c9b */ - { .altcode = NULL }, /* 0x0c9c */ - { .altcode = NULL }, /* 0x0c9d */ - { .altcode = NULL }, /* 0x0c9e */ - { .altcode = NULL }, /* 0x0c9f */ - { .altcode = NULL }, /* 0x0ca0 */ - { .altcode = NULL }, /* 0x0ca1 */ - { .altcode = NULL }, /* 0x0ca2 */ - { .altcode = NULL }, /* 0x0ca3 */ - { .altcode = NULL }, /* 0x0ca4 */ - { .altcode = NULL }, /* 0x0ca5 */ - { .altcode = NULL }, /* 0x0ca6 */ - { .altcode = NULL }, /* 0x0ca7 */ - { .altcode = NULL }, /* 0x0ca8 */ - { .altcode = NULL }, /* 0x0ca9 */ - { .altcode = NULL }, /* 0x0caa */ - { .altcode = NULL }, /* 0x0cab */ - { .altcode = NULL }, /* 0x0cac */ - { .altcode = NULL }, /* 0x0cad */ - { .altcode = NULL }, /* 0x0cae */ - { .altcode = NULL }, /* 0x0caf */ - { .altcode = NULL }, /* 0x0cb0 */ - { .altcode = NULL }, /* 0x0cb1 */ - { .altcode = NULL }, /* 0x0cb2 */ - { .altcode = NULL }, /* 0x0cb3 */ - { .altcode = NULL }, /* 0x0cb4 */ - { .altcode = NULL }, /* 0x0cb5 */ - { .altcode = NULL }, /* 0x0cb6 */ - { .altcode = NULL }, /* 0x0cb7 */ - { .altcode = NULL }, /* 0x0cb8 */ - { .altcode = NULL }, /* 0x0cb9 */ - { .altcode = NULL }, /* 0x0cba */ - { .altcode = NULL }, /* 0x0cbb */ - { .altcode = NULL }, /* 0x0cbc */ - { .altcode = NULL }, /* 0x0cbd */ - { .altcode = NULL }, /* 0x0cbe */ - { .altcode = NULL }, /* 0x0cbf */ - { .altcode = NULL }, /* 0x0cc0 */ - { .altcode = NULL }, /* 0x0cc1 */ - { .altcode = NULL }, /* 0x0cc2 */ - { .altcode = NULL }, /* 0x0cc3 */ - { .altcode = NULL }, /* 0x0cc4 */ - { .altcode = NULL }, /* 0x0cc5 */ - { .altcode = NULL }, /* 0x0cc6 */ - { .altcode = NULL }, /* 0x0cc7 */ - { .altcode = NULL }, /* 0x0cc8 */ - { .altcode = NULL }, /* 0x0cc9 */ - { .altcode = NULL }, /* 0x0cca */ - { .altcode = NULL }, /* 0x0ccb */ - { .altcode = NULL }, /* 0x0ccc */ - { .altcode = NULL }, /* 0x0ccd */ - { .altcode = NULL }, /* 0x0cce */ - { .altcode = NULL }, /* 0x0ccf */ - { .altcode = NULL }, /* 0x0cd0 */ - { .altcode = NULL }, /* 0x0cd1 */ - { .altcode = NULL }, /* 0x0cd2 */ - { .altcode = NULL }, /* 0x0cd3 */ - { .altcode = NULL }, /* 0x0cd4 */ - { .altcode = NULL }, /* 0x0cd5 */ - { .altcode = NULL }, /* 0x0cd6 */ - { .altcode = NULL }, /* 0x0cd7 */ - { .altcode = NULL }, /* 0x0cd8 */ - { .altcode = NULL }, /* 0x0cd9 */ - { .altcode = NULL }, /* 0x0cda */ - { .altcode = NULL }, /* 0x0cdb */ - { .altcode = NULL }, /* 0x0cdc */ - { .altcode = NULL }, /* 0x0cdd */ - { .altcode = NULL }, /* 0x0cde */ - { .altcode = NULL }, /* 0x0cdf (hebrew_doublelowline) */ - { .altcode = NULL }, /* 0x0ce0 (hebrew_aleph) */ - { .altcode = NULL }, /* 0x0ce1 (hebrew_beth) */ - { .altcode = NULL }, /* 0x0ce2 (hebrew_gimmel) */ - { .altcode = NULL }, /* 0x0ce3 (hebrew_daleth) */ - { .altcode = NULL }, /* 0x0ce4 (hebrew_he) */ - { .altcode = NULL }, /* 0x0ce5 (hebrew_waw) */ - { .altcode = NULL }, /* 0x0ce6 (hebrew_zayin) */ - { .altcode = NULL }, /* 0x0ce7 (hebrew_het) */ - { .altcode = NULL }, /* 0x0ce8 (hebrew_teth) */ - { .altcode = NULL }, /* 0x0ce9 (hebrew_yod) */ - { .altcode = NULL }, /* 0x0cea (hebrew_finalkaph) */ - { .altcode = NULL }, /* 0x0ceb (hebrew_kaph) */ - { .altcode = NULL }, /* 0x0cec (hebrew_lamed) */ - { .altcode = NULL }, /* 0x0ced (hebrew_finalmem) */ - { .altcode = NULL }, /* 0x0cee (hebrew_mem) */ - { .altcode = NULL }, /* 0x0cef (hebrew_finalnun) */ - { .altcode = NULL }, /* 0x0cf0 (hebrew_nun) */ - { .altcode = NULL }, /* 0x0cf1 (hebrew_samekh) */ - { .altcode = NULL }, /* 0x0cf2 (hebrew_ayin) */ - { .altcode = NULL }, /* 0x0cf3 (hebrew_finalpe) */ - { .altcode = NULL }, /* 0x0cf4 (hebrew_pe) */ - { .altcode = NULL }, /* 0x0cf5 (hebrew_finalzadi) */ - { .altcode = NULL }, /* 0x0cf6 (hebrew_zadi) */ - { .altcode = NULL }, /* 0x0cf7 (hebrew_kuf) */ - { .altcode = NULL }, /* 0x0cf8 (hebrew_resh) */ - { .altcode = NULL }, /* 0x0cf9 (hebrew_shin) */ - { .altcode = NULL }, /* 0x0cfa (hebrew_taf) */ - { .altcode = NULL }, /* 0x0cfb */ - { .altcode = NULL }, /* 0x0cfc */ - { .altcode = NULL }, /* 0x0cfd */ - { .altcode = NULL }, /* 0x0cfe */ - { .altcode = NULL }, /* 0x0cff */ - }, - { /* 0x0d?? */ - { .altcode = NULL }, /* 0x0d00 */ - { .altcode = NULL }, /* 0x0d01 */ - { .altcode = NULL }, /* 0x0d02 */ - { .altcode = NULL }, /* 0x0d03 */ - { .altcode = NULL }, /* 0x0d04 */ - { .altcode = NULL }, /* 0x0d05 */ - { .altcode = NULL }, /* 0x0d06 */ - { .altcode = NULL }, /* 0x0d07 */ - { .altcode = NULL }, /* 0x0d08 */ - { .altcode = NULL }, /* 0x0d09 */ - { .altcode = NULL }, /* 0x0d0a */ - { .altcode = NULL }, /* 0x0d0b */ - { .altcode = NULL }, /* 0x0d0c */ - { .altcode = NULL }, /* 0x0d0d */ - { .altcode = NULL }, /* 0x0d0e */ - { .altcode = NULL }, /* 0x0d0f */ - { .altcode = NULL }, /* 0x0d10 */ - { .altcode = NULL }, /* 0x0d11 */ - { .altcode = NULL }, /* 0x0d12 */ - { .altcode = NULL }, /* 0x0d13 */ - { .altcode = NULL }, /* 0x0d14 */ - { .altcode = NULL }, /* 0x0d15 */ - { .altcode = NULL }, /* 0x0d16 */ - { .altcode = NULL }, /* 0x0d17 */ - { .altcode = NULL }, /* 0x0d18 */ - { .altcode = NULL }, /* 0x0d19 */ - { .altcode = NULL }, /* 0x0d1a */ - { .altcode = NULL }, /* 0x0d1b */ - { .altcode = NULL }, /* 0x0d1c */ - { .altcode = NULL }, /* 0x0d1d */ - { .altcode = NULL }, /* 0x0d1e */ - { .altcode = NULL }, /* 0x0d1f */ - { .altcode = NULL }, /* 0x0d20 */ - { .altcode = NULL }, /* 0x0d21 */ - { .altcode = NULL }, /* 0x0d22 */ - { .altcode = NULL }, /* 0x0d23 */ - { .altcode = NULL }, /* 0x0d24 */ - { .altcode = NULL }, /* 0x0d25 */ - { .altcode = NULL }, /* 0x0d26 */ - { .altcode = NULL }, /* 0x0d27 */ - { .altcode = NULL }, /* 0x0d28 */ - { .altcode = NULL }, /* 0x0d29 */ - { .altcode = NULL }, /* 0x0d2a */ - { .altcode = NULL }, /* 0x0d2b */ - { .altcode = NULL }, /* 0x0d2c */ - { .altcode = NULL }, /* 0x0d2d */ - { .altcode = NULL }, /* 0x0d2e */ - { .altcode = NULL }, /* 0x0d2f */ - { .altcode = NULL }, /* 0x0d30 */ - { .altcode = NULL }, /* 0x0d31 */ - { .altcode = NULL }, /* 0x0d32 */ - { .altcode = NULL }, /* 0x0d33 */ - { .altcode = NULL }, /* 0x0d34 */ - { .altcode = NULL }, /* 0x0d35 */ - { .altcode = NULL }, /* 0x0d36 */ - { .altcode = NULL }, /* 0x0d37 */ - { .altcode = NULL }, /* 0x0d38 */ - { .altcode = NULL }, /* 0x0d39 */ - { .altcode = NULL }, /* 0x0d3a */ - { .altcode = NULL }, /* 0x0d3b */ - { .altcode = NULL }, /* 0x0d3c */ - { .altcode = NULL }, /* 0x0d3d */ - { .altcode = NULL }, /* 0x0d3e */ - { .altcode = NULL }, /* 0x0d3f */ - { .altcode = NULL }, /* 0x0d40 */ - { .altcode = NULL }, /* 0x0d41 */ - { .altcode = NULL }, /* 0x0d42 */ - { .altcode = NULL }, /* 0x0d43 */ - { .altcode = NULL }, /* 0x0d44 */ - { .altcode = NULL }, /* 0x0d45 */ - { .altcode = NULL }, /* 0x0d46 */ - { .altcode = NULL }, /* 0x0d47 */ - { .altcode = NULL }, /* 0x0d48 */ - { .altcode = NULL }, /* 0x0d49 */ - { .altcode = NULL }, /* 0x0d4a */ - { .altcode = NULL }, /* 0x0d4b */ - { .altcode = NULL }, /* 0x0d4c */ - { .altcode = NULL }, /* 0x0d4d */ - { .altcode = NULL }, /* 0x0d4e */ - { .altcode = NULL }, /* 0x0d4f */ - { .altcode = NULL }, /* 0x0d50 */ - { .altcode = NULL }, /* 0x0d51 */ - { .altcode = NULL }, /* 0x0d52 */ - { .altcode = NULL }, /* 0x0d53 */ - { .altcode = NULL }, /* 0x0d54 */ - { .altcode = NULL }, /* 0x0d55 */ - { .altcode = NULL }, /* 0x0d56 */ - { .altcode = NULL }, /* 0x0d57 */ - { .altcode = NULL }, /* 0x0d58 */ - { .altcode = NULL }, /* 0x0d59 */ - { .altcode = NULL }, /* 0x0d5a */ - { .altcode = NULL }, /* 0x0d5b */ - { .altcode = NULL }, /* 0x0d5c */ - { .altcode = NULL }, /* 0x0d5d */ - { .altcode = NULL }, /* 0x0d5e */ - { .altcode = NULL }, /* 0x0d5f */ - { .altcode = NULL }, /* 0x0d60 */ - { .altcode = NULL }, /* 0x0d61 */ - { .altcode = NULL }, /* 0x0d62 */ - { .altcode = NULL }, /* 0x0d63 */ - { .altcode = NULL }, /* 0x0d64 */ - { .altcode = NULL }, /* 0x0d65 */ - { .altcode = NULL }, /* 0x0d66 */ - { .altcode = NULL }, /* 0x0d67 */ - { .altcode = NULL }, /* 0x0d68 */ - { .altcode = NULL }, /* 0x0d69 */ - { .altcode = NULL }, /* 0x0d6a */ - { .altcode = NULL }, /* 0x0d6b */ - { .altcode = NULL }, /* 0x0d6c */ - { .altcode = NULL }, /* 0x0d6d */ - { .altcode = NULL }, /* 0x0d6e */ - { .altcode = NULL }, /* 0x0d6f */ - { .altcode = NULL }, /* 0x0d70 */ - { .altcode = NULL }, /* 0x0d71 */ - { .altcode = NULL }, /* 0x0d72 */ - { .altcode = NULL }, /* 0x0d73 */ - { .altcode = NULL }, /* 0x0d74 */ - { .altcode = NULL }, /* 0x0d75 */ - { .altcode = NULL }, /* 0x0d76 */ - { .altcode = NULL }, /* 0x0d77 */ - { .altcode = NULL }, /* 0x0d78 */ - { .altcode = NULL }, /* 0x0d79 */ - { .altcode = NULL }, /* 0x0d7a */ - { .altcode = NULL }, /* 0x0d7b */ - { .altcode = NULL }, /* 0x0d7c */ - { .altcode = NULL }, /* 0x0d7d */ - { .altcode = NULL }, /* 0x0d7e */ - { .altcode = NULL }, /* 0x0d7f */ - { .altcode = NULL }, /* 0x0d80 */ - { .altcode = NULL }, /* 0x0d81 */ - { .altcode = NULL }, /* 0x0d82 */ - { .altcode = NULL }, /* 0x0d83 */ - { .altcode = NULL }, /* 0x0d84 */ - { .altcode = NULL }, /* 0x0d85 */ - { .altcode = NULL }, /* 0x0d86 */ - { .altcode = NULL }, /* 0x0d87 */ - { .altcode = NULL }, /* 0x0d88 */ - { .altcode = NULL }, /* 0x0d89 */ - { .altcode = NULL }, /* 0x0d8a */ - { .altcode = NULL }, /* 0x0d8b */ - { .altcode = NULL }, /* 0x0d8c */ - { .altcode = NULL }, /* 0x0d8d */ - { .altcode = NULL }, /* 0x0d8e */ - { .altcode = NULL }, /* 0x0d8f */ - { .altcode = NULL }, /* 0x0d90 */ - { .altcode = NULL }, /* 0x0d91 */ - { .altcode = NULL }, /* 0x0d92 */ - { .altcode = NULL }, /* 0x0d93 */ - { .altcode = NULL }, /* 0x0d94 */ - { .altcode = NULL }, /* 0x0d95 */ - { .altcode = NULL }, /* 0x0d96 */ - { .altcode = NULL }, /* 0x0d97 */ - { .altcode = NULL }, /* 0x0d98 */ - { .altcode = NULL }, /* 0x0d99 */ - { .altcode = NULL }, /* 0x0d9a */ - { .altcode = NULL }, /* 0x0d9b */ - { .altcode = NULL }, /* 0x0d9c */ - { .altcode = NULL }, /* 0x0d9d */ - { .altcode = NULL }, /* 0x0d9e */ - { .altcode = NULL }, /* 0x0d9f */ - { .altcode = NULL }, /* 0x0da0 */ - { .altcode = NULL }, /* 0x0da1 (Thai_kokai) */ - { .altcode = NULL }, /* 0x0da2 (Thai_khokhai) */ - { .altcode = NULL }, /* 0x0da3 (Thai_khokhuat) */ - { .altcode = NULL }, /* 0x0da4 (Thai_khokhwai) */ - { .altcode = NULL }, /* 0x0da5 (Thai_khokhon) */ - { .altcode = NULL }, /* 0x0da6 (Thai_khorakhang) */ - { .altcode = NULL }, /* 0x0da7 (Thai_ngongu) */ - { .altcode = NULL }, /* 0x0da8 (Thai_chochan) */ - { .altcode = NULL }, /* 0x0da9 (Thai_choching) */ - { .altcode = NULL }, /* 0x0daa (Thai_chochang) */ - { .altcode = NULL }, /* 0x0dab (Thai_soso) */ - { .altcode = NULL }, /* 0x0dac (Thai_chochoe) */ - { .altcode = NULL }, /* 0x0dad (Thai_yoying) */ - { .altcode = NULL }, /* 0x0dae (Thai_dochada) */ - { .altcode = NULL }, /* 0x0daf (Thai_topatak) */ - { .altcode = NULL }, /* 0x0db0 (Thai_thothan) */ - { .altcode = NULL }, /* 0x0db1 (Thai_thonangmontho) */ - { .altcode = NULL }, /* 0x0db2 (Thai_thophuthao) */ - { .altcode = NULL }, /* 0x0db3 (Thai_nonen) */ - { .altcode = NULL }, /* 0x0db4 (Thai_dodek) */ - { .altcode = NULL }, /* 0x0db5 (Thai_totao) */ - { .altcode = NULL }, /* 0x0db6 (Thai_thothung) */ - { .altcode = NULL }, /* 0x0db7 (Thai_thothahan) */ - { .altcode = NULL }, /* 0x0db8 (Thai_thothong) */ - { .altcode = NULL }, /* 0x0db9 (Thai_nonu) */ - { .altcode = NULL }, /* 0x0dba (Thai_bobaimai) */ - { .altcode = NULL }, /* 0x0dbb (Thai_popla) */ - { .altcode = NULL }, /* 0x0dbc (Thai_phophung) */ - { .altcode = NULL }, /* 0x0dbd (Thai_fofa) */ - { .altcode = NULL }, /* 0x0dbe (Thai_phophan) */ - { .altcode = NULL }, /* 0x0dbf (Thai_fofan) */ - { .altcode = NULL }, /* 0x0dc0 (Thai_phosamphao) */ - { .altcode = NULL }, /* 0x0dc1 (Thai_moma) */ - { .altcode = NULL }, /* 0x0dc2 (Thai_yoyak) */ - { .altcode = NULL }, /* 0x0dc3 (Thai_rorua) */ - { .altcode = NULL }, /* 0x0dc4 (Thai_ru) */ - { .altcode = NULL }, /* 0x0dc5 (Thai_loling) */ - { .altcode = NULL }, /* 0x0dc6 (Thai_lu) */ - { .altcode = NULL }, /* 0x0dc7 (Thai_wowaen) */ - { .altcode = NULL }, /* 0x0dc8 (Thai_sosala) */ - { .altcode = NULL }, /* 0x0dc9 (Thai_sorusi) */ - { .altcode = NULL }, /* 0x0dca (Thai_sosua) */ - { .altcode = NULL }, /* 0x0dcb (Thai_hohip) */ - { .altcode = NULL }, /* 0x0dcc (Thai_lochula) */ - { .altcode = NULL }, /* 0x0dcd (Thai_oang) */ - { .altcode = NULL }, /* 0x0dce (Thai_honokhuk) */ - { .altcode = NULL }, /* 0x0dcf (Thai_paiyannoi) */ - { .altcode = NULL }, /* 0x0dd0 (Thai_saraa) */ - { .altcode = NULL }, /* 0x0dd1 (Thai_maihanakat) */ - { .altcode = NULL }, /* 0x0dd2 (Thai_saraaa) */ - { .altcode = NULL }, /* 0x0dd3 (Thai_saraam) */ - { .altcode = NULL }, /* 0x0dd4 (Thai_sarai) */ - { .altcode = NULL }, /* 0x0dd5 (Thai_saraii) */ - { .altcode = NULL }, /* 0x0dd6 (Thai_saraue) */ - { .altcode = NULL }, /* 0x0dd7 (Thai_sarauee) */ - { .altcode = NULL }, /* 0x0dd8 (Thai_sarau) */ - { .altcode = NULL }, /* 0x0dd9 (Thai_sarauu) */ - { .altcode = NULL }, /* 0x0dda (Thai_phinthu) */ - { .altcode = NULL }, /* 0x0ddb */ - { .altcode = NULL }, /* 0x0ddc */ - { .altcode = NULL }, /* 0x0ddd */ - { .altcode = NULL }, /* 0x0dde (Thai_maihanakat_maitho) */ - { .altcode = NULL }, /* 0x0ddf (Thai_baht) */ - { .altcode = NULL }, /* 0x0de0 (Thai_sarae) */ - { .altcode = NULL }, /* 0x0de1 (Thai_saraae) */ - { .altcode = NULL }, /* 0x0de2 (Thai_sarao) */ - { .altcode = NULL }, /* 0x0de3 (Thai_saraaimaimuan) */ - { .altcode = NULL }, /* 0x0de4 (Thai_saraaimaimalai) */ - { .altcode = NULL }, /* 0x0de5 (Thai_lakkhangyao) */ - { .altcode = NULL }, /* 0x0de6 (Thai_maiyamok) */ - { .altcode = NULL }, /* 0x0de7 (Thai_maitaikhu) */ - { .altcode = NULL }, /* 0x0de8 (Thai_maiek) */ - { .altcode = NULL }, /* 0x0de9 (Thai_maitho) */ - { .altcode = NULL }, /* 0x0dea (Thai_maitri) */ - { .altcode = NULL }, /* 0x0deb (Thai_maichattawa) */ - { .altcode = NULL }, /* 0x0dec (Thai_thanthakhat) */ - { .altcode = NULL }, /* 0x0ded (Thai_nikhahit) */ - { .altcode = NULL }, /* 0x0dee */ - { .altcode = NULL }, /* 0x0def */ - { .altcode = NULL }, /* 0x0df0 (Thai_leksun) */ - { .altcode = NULL }, /* 0x0df1 (Thai_leknung) */ - { .altcode = NULL }, /* 0x0df2 (Thai_leksong) */ - { .altcode = NULL }, /* 0x0df3 (Thai_leksam) */ - { .altcode = NULL }, /* 0x0df4 (Thai_leksi) */ - { .altcode = NULL }, /* 0x0df5 (Thai_lekha) */ - { .altcode = NULL }, /* 0x0df6 (Thai_lekhok) */ - { .altcode = NULL }, /* 0x0df7 (Thai_lekchet) */ - { .altcode = NULL }, /* 0x0df8 (Thai_lekpaet) */ - { .altcode = NULL }, /* 0x0df9 (Thai_lekkao) */ - { .altcode = NULL }, /* 0x0dfa */ - { .altcode = NULL }, /* 0x0dfb */ - { .altcode = NULL }, /* 0x0dfc */ - { .altcode = NULL }, /* 0x0dfd */ - { .altcode = NULL }, /* 0x0dfe */ - { .altcode = NULL }, /* 0x0dff */ - }, - { /* 0x0e?? */ - { .altcode = NULL }, /* 0x0e00 */ - { .altcode = NULL }, /* 0x0e01 */ - { .altcode = NULL }, /* 0x0e02 */ - { .altcode = NULL }, /* 0x0e03 */ - { .altcode = NULL }, /* 0x0e04 */ - { .altcode = NULL }, /* 0x0e05 */ - { .altcode = NULL }, /* 0x0e06 */ - { .altcode = NULL }, /* 0x0e07 */ - { .altcode = NULL }, /* 0x0e08 */ - { .altcode = NULL }, /* 0x0e09 */ - { .altcode = NULL }, /* 0x0e0a */ - { .altcode = NULL }, /* 0x0e0b */ - { .altcode = NULL }, /* 0x0e0c */ - { .altcode = NULL }, /* 0x0e0d */ - { .altcode = NULL }, /* 0x0e0e */ - { .altcode = NULL }, /* 0x0e0f */ - { .altcode = NULL }, /* 0x0e10 */ - { .altcode = NULL }, /* 0x0e11 */ - { .altcode = NULL }, /* 0x0e12 */ - { .altcode = NULL }, /* 0x0e13 */ - { .altcode = NULL }, /* 0x0e14 */ - { .altcode = NULL }, /* 0x0e15 */ - { .altcode = NULL }, /* 0x0e16 */ - { .altcode = NULL }, /* 0x0e17 */ - { .altcode = NULL }, /* 0x0e18 */ - { .altcode = NULL }, /* 0x0e19 */ - { .altcode = NULL }, /* 0x0e1a */ - { .altcode = NULL }, /* 0x0e1b */ - { .altcode = NULL }, /* 0x0e1c */ - { .altcode = NULL }, /* 0x0e1d */ - { .altcode = NULL }, /* 0x0e1e */ - { .altcode = NULL }, /* 0x0e1f */ - { .altcode = NULL }, /* 0x0e20 */ - { .altcode = NULL }, /* 0x0e21 */ - { .altcode = NULL }, /* 0x0e22 */ - { .altcode = NULL }, /* 0x0e23 */ - { .altcode = NULL }, /* 0x0e24 */ - { .altcode = NULL }, /* 0x0e25 */ - { .altcode = NULL }, /* 0x0e26 */ - { .altcode = NULL }, /* 0x0e27 */ - { .altcode = NULL }, /* 0x0e28 */ - { .altcode = NULL }, /* 0x0e29 */ - { .altcode = NULL }, /* 0x0e2a */ - { .altcode = NULL }, /* 0x0e2b */ - { .altcode = NULL }, /* 0x0e2c */ - { .altcode = NULL }, /* 0x0e2d */ - { .altcode = NULL }, /* 0x0e2e */ - { .altcode = NULL }, /* 0x0e2f */ - { .altcode = NULL }, /* 0x0e30 */ - { .altcode = NULL }, /* 0x0e31 */ - { .altcode = NULL }, /* 0x0e32 */ - { .altcode = NULL }, /* 0x0e33 */ - { .altcode = NULL }, /* 0x0e34 */ - { .altcode = NULL }, /* 0x0e35 */ - { .altcode = NULL }, /* 0x0e36 */ - { .altcode = NULL }, /* 0x0e37 */ - { .altcode = NULL }, /* 0x0e38 */ - { .altcode = NULL }, /* 0x0e39 */ - { .altcode = NULL }, /* 0x0e3a */ - { .altcode = NULL }, /* 0x0e3b */ - { .altcode = NULL }, /* 0x0e3c */ - { .altcode = NULL }, /* 0x0e3d */ - { .altcode = NULL }, /* 0x0e3e */ - { .altcode = NULL }, /* 0x0e3f */ - { .altcode = NULL }, /* 0x0e40 */ - { .altcode = NULL }, /* 0x0e41 */ - { .altcode = NULL }, /* 0x0e42 */ - { .altcode = NULL }, /* 0x0e43 */ - { .altcode = NULL }, /* 0x0e44 */ - { .altcode = NULL }, /* 0x0e45 */ - { .altcode = NULL }, /* 0x0e46 */ - { .altcode = NULL }, /* 0x0e47 */ - { .altcode = NULL }, /* 0x0e48 */ - { .altcode = NULL }, /* 0x0e49 */ - { .altcode = NULL }, /* 0x0e4a */ - { .altcode = NULL }, /* 0x0e4b */ - { .altcode = NULL }, /* 0x0e4c */ - { .altcode = NULL }, /* 0x0e4d */ - { .altcode = NULL }, /* 0x0e4e */ - { .altcode = NULL }, /* 0x0e4f */ - { .altcode = NULL }, /* 0x0e50 */ - { .altcode = NULL }, /* 0x0e51 */ - { .altcode = NULL }, /* 0x0e52 */ - { .altcode = NULL }, /* 0x0e53 */ - { .altcode = NULL }, /* 0x0e54 */ - { .altcode = NULL }, /* 0x0e55 */ - { .altcode = NULL }, /* 0x0e56 */ - { .altcode = NULL }, /* 0x0e57 */ - { .altcode = NULL }, /* 0x0e58 */ - { .altcode = NULL }, /* 0x0e59 */ - { .altcode = NULL }, /* 0x0e5a */ - { .altcode = NULL }, /* 0x0e5b */ - { .altcode = NULL }, /* 0x0e5c */ - { .altcode = NULL }, /* 0x0e5d */ - { .altcode = NULL }, /* 0x0e5e */ - { .altcode = NULL }, /* 0x0e5f */ - { .altcode = NULL }, /* 0x0e60 */ - { .altcode = NULL }, /* 0x0e61 */ - { .altcode = NULL }, /* 0x0e62 */ - { .altcode = NULL }, /* 0x0e63 */ - { .altcode = NULL }, /* 0x0e64 */ - { .altcode = NULL }, /* 0x0e65 */ - { .altcode = NULL }, /* 0x0e66 */ - { .altcode = NULL }, /* 0x0e67 */ - { .altcode = NULL }, /* 0x0e68 */ - { .altcode = NULL }, /* 0x0e69 */ - { .altcode = NULL }, /* 0x0e6a */ - { .altcode = NULL }, /* 0x0e6b */ - { .altcode = NULL }, /* 0x0e6c */ - { .altcode = NULL }, /* 0x0e6d */ - { .altcode = NULL }, /* 0x0e6e */ - { .altcode = NULL }, /* 0x0e6f */ - { .altcode = NULL }, /* 0x0e70 */ - { .altcode = NULL }, /* 0x0e71 */ - { .altcode = NULL }, /* 0x0e72 */ - { .altcode = NULL }, /* 0x0e73 */ - { .altcode = NULL }, /* 0x0e74 */ - { .altcode = NULL }, /* 0x0e75 */ - { .altcode = NULL }, /* 0x0e76 */ - { .altcode = NULL }, /* 0x0e77 */ - { .altcode = NULL }, /* 0x0e78 */ - { .altcode = NULL }, /* 0x0e79 */ - { .altcode = NULL }, /* 0x0e7a */ - { .altcode = NULL }, /* 0x0e7b */ - { .altcode = NULL }, /* 0x0e7c */ - { .altcode = NULL }, /* 0x0e7d */ - { .altcode = NULL }, /* 0x0e7e */ - { .altcode = NULL }, /* 0x0e7f */ - { .altcode = NULL }, /* 0x0e80 */ - { .altcode = NULL }, /* 0x0e81 */ - { .altcode = NULL }, /* 0x0e82 */ - { .altcode = NULL }, /* 0x0e83 */ - { .altcode = NULL }, /* 0x0e84 */ - { .altcode = NULL }, /* 0x0e85 */ - { .altcode = NULL }, /* 0x0e86 */ - { .altcode = NULL }, /* 0x0e87 */ - { .altcode = NULL }, /* 0x0e88 */ - { .altcode = NULL }, /* 0x0e89 */ - { .altcode = NULL }, /* 0x0e8a */ - { .altcode = NULL }, /* 0x0e8b */ - { .altcode = NULL }, /* 0x0e8c */ - { .altcode = NULL }, /* 0x0e8d */ - { .altcode = NULL }, /* 0x0e8e */ - { .altcode = NULL }, /* 0x0e8f */ - { .altcode = NULL }, /* 0x0e90 */ - { .altcode = NULL }, /* 0x0e91 */ - { .altcode = NULL }, /* 0x0e92 */ - { .altcode = NULL }, /* 0x0e93 */ - { .altcode = NULL }, /* 0x0e94 */ - { .altcode = NULL }, /* 0x0e95 */ - { .altcode = NULL }, /* 0x0e96 */ - { .altcode = NULL }, /* 0x0e97 */ - { .altcode = NULL }, /* 0x0e98 */ - { .altcode = NULL }, /* 0x0e99 */ - { .altcode = NULL }, /* 0x0e9a */ - { .altcode = NULL }, /* 0x0e9b */ - { .altcode = NULL }, /* 0x0e9c */ - { .altcode = NULL }, /* 0x0e9d */ - { .altcode = NULL }, /* 0x0e9e */ - { .altcode = NULL }, /* 0x0e9f */ - { .altcode = NULL }, /* 0x0ea0 */ - { .altcode = NULL }, /* 0x0ea1 (Hangul_Kiyeog) */ - { .altcode = NULL }, /* 0x0ea2 (Hangul_SsangKiyeog) */ - { .altcode = NULL }, /* 0x0ea3 (Hangul_KiyeogSios) */ - { .altcode = NULL }, /* 0x0ea4 (Hangul_Nieun) */ - { .altcode = NULL }, /* 0x0ea5 (Hangul_NieunJieuj) */ - { .altcode = NULL }, /* 0x0ea6 (Hangul_NieunHieuh) */ - { .altcode = NULL }, /* 0x0ea7 (Hangul_Dikeud) */ - { .altcode = NULL }, /* 0x0ea8 (Hangul_SsangDikeud) */ - { .altcode = NULL }, /* 0x0ea9 (Hangul_Rieul) */ - { .altcode = NULL }, /* 0x0eaa (Hangul_RieulKiyeog) */ - { .altcode = NULL }, /* 0x0eab (Hangul_RieulMieum) */ - { .altcode = NULL }, /* 0x0eac (Hangul_RieulPieub) */ - { .altcode = NULL }, /* 0x0ead (Hangul_RieulSios) */ - { .altcode = NULL }, /* 0x0eae (Hangul_RieulTieut) */ - { .altcode = NULL }, /* 0x0eaf (Hangul_RieulPhieuf) */ - { .altcode = NULL }, /* 0x0eb0 (Hangul_RieulHieuh) */ - { .altcode = NULL }, /* 0x0eb1 (Hangul_Mieum) */ - { .altcode = NULL }, /* 0x0eb2 (Hangul_Pieub) */ - { .altcode = NULL }, /* 0x0eb3 (Hangul_SsangPieub) */ - { .altcode = NULL }, /* 0x0eb4 (Hangul_PieubSios) */ - { .altcode = NULL }, /* 0x0eb5 (Hangul_Sios) */ - { .altcode = NULL }, /* 0x0eb6 (Hangul_SsangSios) */ - { .altcode = NULL }, /* 0x0eb7 (Hangul_Ieung) */ - { .altcode = NULL }, /* 0x0eb8 (Hangul_Jieuj) */ - { .altcode = NULL }, /* 0x0eb9 (Hangul_SsangJieuj) */ - { .altcode = NULL }, /* 0x0eba (Hangul_Cieuc) */ - { .altcode = NULL }, /* 0x0ebb (Hangul_Khieuq) */ - { .altcode = NULL }, /* 0x0ebc (Hangul_Tieut) */ - { .altcode = NULL }, /* 0x0ebd (Hangul_Phieuf) */ - { .altcode = NULL }, /* 0x0ebe (Hangul_Hieuh) */ - { .altcode = NULL }, /* 0x0ebf (Hangul_A) */ - { .altcode = NULL }, /* 0x0ec0 (Hangul_AE) */ - { .altcode = NULL }, /* 0x0ec1 (Hangul_YA) */ - { .altcode = NULL }, /* 0x0ec2 (Hangul_YAE) */ - { .altcode = NULL }, /* 0x0ec3 (Hangul_EO) */ - { .altcode = NULL }, /* 0x0ec4 (Hangul_E) */ - { .altcode = NULL }, /* 0x0ec5 (Hangul_YEO) */ - { .altcode = NULL }, /* 0x0ec6 (Hangul_YE) */ - { .altcode = NULL }, /* 0x0ec7 (Hangul_O) */ - { .altcode = NULL }, /* 0x0ec8 (Hangul_WA) */ - { .altcode = NULL }, /* 0x0ec9 (Hangul_WAE) */ - { .altcode = NULL }, /* 0x0eca (Hangul_OE) */ - { .altcode = NULL }, /* 0x0ecb (Hangul_YO) */ - { .altcode = NULL }, /* 0x0ecc (Hangul_U) */ - { .altcode = NULL }, /* 0x0ecd (Hangul_WEO) */ - { .altcode = NULL }, /* 0x0ece (Hangul_WE) */ - { .altcode = NULL }, /* 0x0ecf (Hangul_WI) */ - { .altcode = NULL }, /* 0x0ed0 (Hangul_YU) */ - { .altcode = NULL }, /* 0x0ed1 (Hangul_EU) */ - { .altcode = NULL }, /* 0x0ed2 (Hangul_YI) */ - { .altcode = NULL }, /* 0x0ed3 (Hangul_I) */ - { .altcode = NULL }, /* 0x0ed4 (Hangul_J_Kiyeog) */ - { .altcode = NULL }, /* 0x0ed5 (Hangul_J_SsangKiyeog) */ - { .altcode = NULL }, /* 0x0ed6 (Hangul_J_KiyeogSios) */ - { .altcode = NULL }, /* 0x0ed7 (Hangul_J_Nieun) */ - { .altcode = NULL }, /* 0x0ed8 (Hangul_J_NieunJieuj) */ - { .altcode = NULL }, /* 0x0ed9 (Hangul_J_NieunHieuh) */ - { .altcode = NULL }, /* 0x0eda (Hangul_J_Dikeud) */ - { .altcode = NULL }, /* 0x0edb (Hangul_J_Rieul) */ - { .altcode = NULL }, /* 0x0edc (Hangul_J_RieulKiyeog) */ - { .altcode = NULL }, /* 0x0edd (Hangul_J_RieulMieum) */ - { .altcode = NULL }, /* 0x0ede (Hangul_J_RieulPieub) */ - { .altcode = NULL }, /* 0x0edf (Hangul_J_RieulSios) */ - { .altcode = NULL }, /* 0x0ee0 (Hangul_J_RieulTieut) */ - { .altcode = NULL }, /* 0x0ee1 (Hangul_J_RieulPhieuf) */ - { .altcode = NULL }, /* 0x0ee2 (Hangul_J_RieulHieuh) */ - { .altcode = NULL }, /* 0x0ee3 (Hangul_J_Mieum) */ - { .altcode = NULL }, /* 0x0ee4 (Hangul_J_Pieub) */ - { .altcode = NULL }, /* 0x0ee5 (Hangul_J_PieubSios) */ - { .altcode = NULL }, /* 0x0ee6 (Hangul_J_Sios) */ - { .altcode = NULL }, /* 0x0ee7 (Hangul_J_SsangSios) */ - { .altcode = NULL }, /* 0x0ee8 (Hangul_J_Ieung) */ - { .altcode = NULL }, /* 0x0ee9 (Hangul_J_Jieuj) */ - { .altcode = NULL }, /* 0x0eea (Hangul_J_Cieuc) */ - { .altcode = NULL }, /* 0x0eeb (Hangul_J_Khieuq) */ - { .altcode = NULL }, /* 0x0eec (Hangul_J_Tieut) */ - { .altcode = NULL }, /* 0x0eed (Hangul_J_Phieuf) */ - { .altcode = NULL }, /* 0x0eee (Hangul_J_Hieuh) */ - { .altcode = NULL }, /* 0x0eef (Hangul_RieulYeorinHieuh) */ - { .altcode = NULL }, /* 0x0ef0 (Hangul_SunkyeongeumMieum) */ - { .altcode = NULL }, /* 0x0ef1 (Hangul_SunkyeongeumPieub) */ - { .altcode = NULL }, /* 0x0ef2 (Hangul_PanSios) */ - { .altcode = NULL }, /* 0x0ef3 (Hangul_KkogjiDalrinIeung) */ - { .altcode = NULL }, /* 0x0ef4 (Hangul_SunkyeongeumPhieuf) */ - { .altcode = NULL }, /* 0x0ef5 (Hangul_YeorinHieuh) */ - { .altcode = NULL }, /* 0x0ef6 (Hangul_AraeA) */ - { .altcode = NULL }, /* 0x0ef7 (Hangul_AraeAE) */ - { .altcode = NULL }, /* 0x0ef8 (Hangul_J_PanSios) */ - { .altcode = NULL }, /* 0x0ef9 (Hangul_J_KkogjiDalrinIeung) */ - { .altcode = NULL }, /* 0x0efa (Hangul_J_YeorinHieuh) */ - { .altcode = NULL }, /* 0x0efb */ - { .altcode = NULL }, /* 0x0efc */ - { .altcode = NULL }, /* 0x0efd */ - { .altcode = NULL }, /* 0x0efe */ - { .altcode = NULL }, /* 0x0eff (Korean_Won) */ - }, - {{NULL}}, /* 0x0f?? */ - {{NULL}}, /* 0x10?? */ - {{NULL}}, /* 0x11?? */ - {{NULL}}, /* 0x12?? */ - { /* 0x13?? */ - { .altcode = NULL }, /* 0x1300 */ - { .altcode = NULL }, /* 0x1301 */ - { .altcode = NULL }, /* 0x1302 */ - { .altcode = NULL }, /* 0x1303 */ - { .altcode = NULL }, /* 0x1304 */ - { .altcode = NULL }, /* 0x1305 */ - { .altcode = NULL }, /* 0x1306 */ - { .altcode = NULL }, /* 0x1307 */ - { .altcode = NULL }, /* 0x1308 */ - { .altcode = NULL }, /* 0x1309 */ - { .altcode = NULL }, /* 0x130a */ - { .altcode = NULL }, /* 0x130b */ - { .altcode = NULL }, /* 0x130c */ - { .altcode = NULL }, /* 0x130d */ - { .altcode = NULL }, /* 0x130e */ - { .altcode = NULL }, /* 0x130f */ - { .altcode = NULL }, /* 0x1310 */ - { .altcode = NULL }, /* 0x1311 */ - { .altcode = NULL }, /* 0x1312 */ - { .altcode = NULL }, /* 0x1313 */ - { .altcode = NULL }, /* 0x1314 */ - { .altcode = NULL }, /* 0x1315 */ - { .altcode = NULL }, /* 0x1316 */ - { .altcode = NULL }, /* 0x1317 */ - { .altcode = NULL }, /* 0x1318 */ - { .altcode = NULL }, /* 0x1319 */ - { .altcode = NULL }, /* 0x131a */ - { .altcode = NULL }, /* 0x131b */ - { .altcode = NULL }, /* 0x131c */ - { .altcode = NULL }, /* 0x131d */ - { .altcode = NULL }, /* 0x131e */ - { .altcode = NULL }, /* 0x131f */ - { .altcode = NULL }, /* 0x1320 */ - { .altcode = NULL }, /* 0x1321 */ - { .altcode = NULL }, /* 0x1322 */ - { .altcode = NULL }, /* 0x1323 */ - { .altcode = NULL }, /* 0x1324 */ - { .altcode = NULL }, /* 0x1325 */ - { .altcode = NULL }, /* 0x1326 */ - { .altcode = NULL }, /* 0x1327 */ - { .altcode = NULL }, /* 0x1328 */ - { .altcode = NULL }, /* 0x1329 */ - { .altcode = NULL }, /* 0x132a */ - { .altcode = NULL }, /* 0x132b */ - { .altcode = NULL }, /* 0x132c */ - { .altcode = NULL }, /* 0x132d */ - { .altcode = NULL }, /* 0x132e */ - { .altcode = NULL }, /* 0x132f */ - { .altcode = NULL }, /* 0x1330 */ - { .altcode = NULL }, /* 0x1331 */ - { .altcode = NULL }, /* 0x1332 */ - { .altcode = NULL }, /* 0x1333 */ - { .altcode = NULL }, /* 0x1334 */ - { .altcode = NULL }, /* 0x1335 */ - { .altcode = NULL }, /* 0x1336 */ - { .altcode = NULL }, /* 0x1337 */ - { .altcode = NULL }, /* 0x1338 */ - { .altcode = NULL }, /* 0x1339 */ - { .altcode = NULL }, /* 0x133a */ - { .altcode = NULL }, /* 0x133b */ - { .altcode = NULL }, /* 0x133c */ - { .altcode = NULL }, /* 0x133d */ - { .altcode = NULL }, /* 0x133e */ - { .altcode = NULL }, /* 0x133f */ - { .altcode = NULL }, /* 0x1340 */ - { .altcode = NULL }, /* 0x1341 */ - { .altcode = NULL }, /* 0x1342 */ - { .altcode = NULL }, /* 0x1343 */ - { .altcode = NULL }, /* 0x1344 */ - { .altcode = NULL }, /* 0x1345 */ - { .altcode = NULL }, /* 0x1346 */ - { .altcode = NULL }, /* 0x1347 */ - { .altcode = NULL }, /* 0x1348 */ - { .altcode = NULL }, /* 0x1349 */ - { .altcode = NULL }, /* 0x134a */ - { .altcode = NULL }, /* 0x134b */ - { .altcode = NULL }, /* 0x134c */ - { .altcode = NULL }, /* 0x134d */ - { .altcode = NULL }, /* 0x134e */ - { .altcode = NULL }, /* 0x134f */ - { .altcode = NULL }, /* 0x1350 */ - { .altcode = NULL }, /* 0x1351 */ - { .altcode = NULL }, /* 0x1352 */ - { .altcode = NULL }, /* 0x1353 */ - { .altcode = NULL }, /* 0x1354 */ - { .altcode = NULL }, /* 0x1355 */ - { .altcode = NULL }, /* 0x1356 */ - { .altcode = NULL }, /* 0x1357 */ - { .altcode = NULL }, /* 0x1358 */ - { .altcode = NULL }, /* 0x1359 */ - { .altcode = NULL }, /* 0x135a */ - { .altcode = NULL }, /* 0x135b */ - { .altcode = NULL }, /* 0x135c */ - { .altcode = NULL }, /* 0x135d */ - { .altcode = NULL }, /* 0x135e */ - { .altcode = NULL }, /* 0x135f */ - { .altcode = NULL }, /* 0x1360 */ - { .altcode = NULL }, /* 0x1361 */ - { .altcode = NULL }, /* 0x1362 */ - { .altcode = NULL }, /* 0x1363 */ - { .altcode = NULL }, /* 0x1364 */ - { .altcode = NULL }, /* 0x1365 */ - { .altcode = NULL }, /* 0x1366 */ - { .altcode = NULL }, /* 0x1367 */ - { .altcode = NULL }, /* 0x1368 */ - { .altcode = NULL }, /* 0x1369 */ - { .altcode = NULL }, /* 0x136a */ - { .altcode = NULL }, /* 0x136b */ - { .altcode = NULL }, /* 0x136c */ - { .altcode = NULL }, /* 0x136d */ - { .altcode = NULL }, /* 0x136e */ - { .altcode = NULL }, /* 0x136f */ - { .altcode = NULL }, /* 0x1370 */ - { .altcode = NULL }, /* 0x1371 */ - { .altcode = NULL }, /* 0x1372 */ - { .altcode = NULL }, /* 0x1373 */ - { .altcode = NULL }, /* 0x1374 */ - { .altcode = NULL }, /* 0x1375 */ - { .altcode = NULL }, /* 0x1376 */ - { .altcode = NULL }, /* 0x1377 */ - { .altcode = NULL }, /* 0x1378 */ - { .altcode = NULL }, /* 0x1379 */ - { .altcode = NULL }, /* 0x137a */ - { .altcode = NULL }, /* 0x137b */ - { .altcode = NULL }, /* 0x137c */ - { .altcode = NULL }, /* 0x137d */ - { .altcode = NULL }, /* 0x137e */ - { .altcode = NULL }, /* 0x137f */ - { .altcode = NULL }, /* 0x1380 */ - { .altcode = NULL }, /* 0x1381 */ - { .altcode = NULL }, /* 0x1382 */ - { .altcode = NULL }, /* 0x1383 */ - { .altcode = NULL }, /* 0x1384 */ - { .altcode = NULL }, /* 0x1385 */ - { .altcode = NULL }, /* 0x1386 */ - { .altcode = NULL }, /* 0x1387 */ - { .altcode = NULL }, /* 0x1388 */ - { .altcode = NULL }, /* 0x1389 */ - { .altcode = NULL }, /* 0x138a */ - { .altcode = NULL }, /* 0x138b */ - { .altcode = NULL }, /* 0x138c */ - { .altcode = NULL }, /* 0x138d */ - { .altcode = NULL }, /* 0x138e */ - { .altcode = NULL }, /* 0x138f */ - { .altcode = NULL }, /* 0x1390 */ - { .altcode = NULL }, /* 0x1391 */ - { .altcode = NULL }, /* 0x1392 */ - { .altcode = NULL }, /* 0x1393 */ - { .altcode = NULL }, /* 0x1394 */ - { .altcode = NULL }, /* 0x1395 */ - { .altcode = NULL }, /* 0x1396 */ - { .altcode = NULL }, /* 0x1397 */ - { .altcode = NULL }, /* 0x1398 */ - { .altcode = NULL }, /* 0x1399 */ - { .altcode = NULL }, /* 0x139a */ - { .altcode = NULL }, /* 0x139b */ - { .altcode = NULL }, /* 0x139c */ - { .altcode = NULL }, /* 0x139d */ - { .altcode = NULL }, /* 0x139e */ - { .altcode = NULL }, /* 0x139f */ - { .altcode = NULL }, /* 0x13a0 */ - { .altcode = NULL }, /* 0x13a1 */ - { .altcode = NULL }, /* 0x13a2 */ - { .altcode = NULL }, /* 0x13a3 */ - { .altcode = NULL }, /* 0x13a4 */ - { .altcode = NULL }, /* 0x13a5 */ - { .altcode = NULL }, /* 0x13a6 */ - { .altcode = NULL }, /* 0x13a7 */ - { .altcode = NULL }, /* 0x13a8 */ - { .altcode = NULL }, /* 0x13a9 */ - { .altcode = NULL }, /* 0x13aa */ - { .altcode = NULL }, /* 0x13ab */ - { .altcode = NULL }, /* 0x13ac */ - { .altcode = NULL }, /* 0x13ad */ - { .altcode = NULL }, /* 0x13ae */ - { .altcode = NULL }, /* 0x13af */ - { .altcode = NULL }, /* 0x13b0 */ - { .altcode = NULL }, /* 0x13b1 */ - { .altcode = NULL }, /* 0x13b2 */ - { .altcode = NULL }, /* 0x13b3 */ - { .altcode = NULL }, /* 0x13b4 */ - { .altcode = NULL }, /* 0x13b5 */ - { .altcode = NULL }, /* 0x13b6 */ - { .altcode = NULL }, /* 0x13b7 */ - { .altcode = NULL }, /* 0x13b8 */ - { .altcode = NULL }, /* 0x13b9 */ - { .altcode = NULL }, /* 0x13ba */ - { .altcode = NULL }, /* 0x13bb */ - { .altcode = NULL }, /* 0x13bc (OE) */ - { .altcode = NULL }, /* 0x13bd (oe) */ - { .altcode = NULL }, /* 0x13be (Ydiaeresis) */ - { .altcode = NULL }, /* 0x13bf */ - { .altcode = NULL }, /* 0x13c0 */ - { .altcode = NULL }, /* 0x13c1 */ - { .altcode = NULL }, /* 0x13c2 */ - { .altcode = NULL }, /* 0x13c3 */ - { .altcode = NULL }, /* 0x13c4 */ - { .altcode = NULL }, /* 0x13c5 */ - { .altcode = NULL }, /* 0x13c6 */ - { .altcode = NULL }, /* 0x13c7 */ - { .altcode = NULL }, /* 0x13c8 */ - { .altcode = NULL }, /* 0x13c9 */ - { .altcode = NULL }, /* 0x13ca */ - { .altcode = NULL }, /* 0x13cb */ - { .altcode = NULL }, /* 0x13cc */ - { .altcode = NULL }, /* 0x13cd */ - { .altcode = NULL }, /* 0x13ce */ - { .altcode = NULL }, /* 0x13cf */ - { .altcode = NULL }, /* 0x13d0 */ - { .altcode = NULL }, /* 0x13d1 */ - { .altcode = NULL }, /* 0x13d2 */ - { .altcode = NULL }, /* 0x13d3 */ - { .altcode = NULL }, /* 0x13d4 */ - { .altcode = NULL }, /* 0x13d5 */ - { .altcode = NULL }, /* 0x13d6 */ - { .altcode = NULL }, /* 0x13d7 */ - { .altcode = NULL }, /* 0x13d8 */ - { .altcode = NULL }, /* 0x13d9 */ - { .altcode = NULL }, /* 0x13da */ - { .altcode = NULL }, /* 0x13db */ - { .altcode = NULL }, /* 0x13dc */ - { .altcode = NULL }, /* 0x13dd */ - { .altcode = NULL }, /* 0x13de */ - { .altcode = NULL }, /* 0x13df */ - { .altcode = NULL }, /* 0x13e0 */ - { .altcode = NULL }, /* 0x13e1 */ - { .altcode = NULL }, /* 0x13e2 */ - { .altcode = NULL }, /* 0x13e3 */ - { .altcode = NULL }, /* 0x13e4 */ - { .altcode = NULL }, /* 0x13e5 */ - { .altcode = NULL }, /* 0x13e6 */ - { .altcode = NULL }, /* 0x13e7 */ - { .altcode = NULL }, /* 0x13e8 */ - { .altcode = NULL }, /* 0x13e9 */ - { .altcode = NULL }, /* 0x13ea */ - { .altcode = NULL }, /* 0x13eb */ - { .altcode = NULL }, /* 0x13ec */ - { .altcode = NULL }, /* 0x13ed */ - { .altcode = NULL }, /* 0x13ee */ - { .altcode = NULL }, /* 0x13ef */ - { .altcode = NULL }, /* 0x13f0 */ - { .altcode = NULL }, /* 0x13f1 */ - { .altcode = NULL }, /* 0x13f2 */ - { .altcode = NULL }, /* 0x13f3 */ - { .altcode = NULL }, /* 0x13f4 */ - { .altcode = NULL }, /* 0x13f5 */ - { .altcode = NULL }, /* 0x13f6 */ - { .altcode = NULL }, /* 0x13f7 */ - { .altcode = NULL }, /* 0x13f8 */ - { .altcode = NULL }, /* 0x13f9 */ - { .altcode = NULL }, /* 0x13fa */ - { .altcode = NULL }, /* 0x13fb */ - { .altcode = NULL }, /* 0x13fc */ - { .altcode = NULL }, /* 0x13fd */ - { .altcode = NULL }, /* 0x13fe */ - { .altcode = NULL }, /* 0x13ff */ - }, - {{NULL}}, /* 0x14?? */ - {{NULL}}, /* 0x15?? */ - {{NULL}}, /* 0x16?? */ - {{NULL}}, /* 0x17?? */ - {{NULL}}, /* 0x18?? */ - {{NULL}}, /* 0x19?? */ - {{NULL}}, /* 0x1a?? */ - {{NULL}}, /* 0x1b?? */ - {{NULL}}, /* 0x1c?? */ - {{NULL}}, /* 0x1d?? */ - {{NULL}}, /* 0x1e?? */ - {{NULL}}, /* 0x1f?? */ - { /* 0x20?? */ - { .altcode = NULL }, /* 0x2000 */ - { .altcode = NULL }, /* 0x2001 */ - { .altcode = NULL }, /* 0x2002 */ - { .altcode = NULL }, /* 0x2003 */ - { .altcode = NULL }, /* 0x2004 */ - { .altcode = NULL }, /* 0x2005 */ - { .altcode = NULL }, /* 0x2006 */ - { .altcode = NULL }, /* 0x2007 */ - { .altcode = NULL }, /* 0x2008 */ - { .altcode = NULL }, /* 0x2009 */ - { .altcode = NULL }, /* 0x200a */ - { .altcode = NULL }, /* 0x200b */ - { .altcode = NULL }, /* 0x200c */ - { .altcode = NULL }, /* 0x200d */ - { .altcode = NULL }, /* 0x200e */ - { .altcode = NULL }, /* 0x200f */ - { .altcode = NULL }, /* 0x2010 */ - { .altcode = NULL }, /* 0x2011 */ - { .altcode = NULL }, /* 0x2012 */ - { .altcode = NULL }, /* 0x2013 */ - { .altcode = NULL }, /* 0x2014 */ - { .altcode = NULL }, /* 0x2015 */ - { .altcode = NULL }, /* 0x2016 */ - { .altcode = NULL }, /* 0x2017 */ - { .altcode = NULL }, /* 0x2018 */ - { .altcode = NULL }, /* 0x2019 */ - { .altcode = NULL }, /* 0x201a */ - { .altcode = NULL }, /* 0x201b */ - { .altcode = NULL }, /* 0x201c */ - { .altcode = NULL }, /* 0x201d */ - { .altcode = NULL }, /* 0x201e */ - { .altcode = NULL }, /* 0x201f */ - { .altcode = NULL }, /* 0x2020 */ - { .altcode = NULL }, /* 0x2021 */ - { .altcode = NULL }, /* 0x2022 */ - { .altcode = NULL }, /* 0x2023 */ - { .altcode = NULL }, /* 0x2024 */ - { .altcode = NULL }, /* 0x2025 */ - { .altcode = NULL }, /* 0x2026 */ - { .altcode = NULL }, /* 0x2027 */ - { .altcode = NULL }, /* 0x2028 */ - { .altcode = NULL }, /* 0x2029 */ - { .altcode = NULL }, /* 0x202a */ - { .altcode = NULL }, /* 0x202b */ - { .altcode = NULL }, /* 0x202c */ - { .altcode = NULL }, /* 0x202d */ - { .altcode = NULL }, /* 0x202e */ - { .altcode = NULL }, /* 0x202f */ - { .altcode = NULL }, /* 0x2030 */ - { .altcode = NULL }, /* 0x2031 */ - { .altcode = NULL }, /* 0x2032 */ - { .altcode = NULL }, /* 0x2033 */ - { .altcode = NULL }, /* 0x2034 */ - { .altcode = NULL }, /* 0x2035 */ - { .altcode = NULL }, /* 0x2036 */ - { .altcode = NULL }, /* 0x2037 */ - { .altcode = NULL }, /* 0x2038 */ - { .altcode = NULL }, /* 0x2039 */ - { .altcode = NULL }, /* 0x203a */ - { .altcode = NULL }, /* 0x203b */ - { .altcode = NULL }, /* 0x203c */ - { .altcode = NULL }, /* 0x203d */ - { .altcode = NULL }, /* 0x203e */ - { .altcode = NULL }, /* 0x203f */ - { .altcode = NULL }, /* 0x2040 */ - { .altcode = NULL }, /* 0x2041 */ - { .altcode = NULL }, /* 0x2042 */ - { .altcode = NULL }, /* 0x2043 */ - { .altcode = NULL }, /* 0x2044 */ - { .altcode = NULL }, /* 0x2045 */ - { .altcode = NULL }, /* 0x2046 */ - { .altcode = NULL }, /* 0x2047 */ - { .altcode = NULL }, /* 0x2048 */ - { .altcode = NULL }, /* 0x2049 */ - { .altcode = NULL }, /* 0x204a */ - { .altcode = NULL }, /* 0x204b */ - { .altcode = NULL }, /* 0x204c */ - { .altcode = NULL }, /* 0x204d */ - { .altcode = NULL }, /* 0x204e */ - { .altcode = NULL }, /* 0x204f */ - { .altcode = NULL }, /* 0x2050 */ - { .altcode = NULL }, /* 0x2051 */ - { .altcode = NULL }, /* 0x2052 */ - { .altcode = NULL }, /* 0x2053 */ - { .altcode = NULL }, /* 0x2054 */ - { .altcode = NULL }, /* 0x2055 */ - { .altcode = NULL }, /* 0x2056 */ - { .altcode = NULL }, /* 0x2057 */ - { .altcode = NULL }, /* 0x2058 */ - { .altcode = NULL }, /* 0x2059 */ - { .altcode = NULL }, /* 0x205a */ - { .altcode = NULL }, /* 0x205b */ - { .altcode = NULL }, /* 0x205c */ - { .altcode = NULL }, /* 0x205d */ - { .altcode = NULL }, /* 0x205e */ - { .altcode = NULL }, /* 0x205f */ - { .altcode = NULL }, /* 0x2060 */ - { .altcode = NULL }, /* 0x2061 */ - { .altcode = NULL }, /* 0x2062 */ - { .altcode = NULL }, /* 0x2063 */ - { .altcode = NULL }, /* 0x2064 */ - { .altcode = NULL }, /* 0x2065 */ - { .altcode = NULL }, /* 0x2066 */ - { .altcode = NULL }, /* 0x2067 */ - { .altcode = NULL }, /* 0x2068 */ - { .altcode = NULL }, /* 0x2069 */ - { .altcode = NULL }, /* 0x206a */ - { .altcode = NULL }, /* 0x206b */ - { .altcode = NULL }, /* 0x206c */ - { .altcode = NULL }, /* 0x206d */ - { .altcode = NULL }, /* 0x206e */ - { .altcode = NULL }, /* 0x206f */ - { .altcode = NULL }, /* 0x2070 */ - { .altcode = NULL }, /* 0x2071 */ - { .altcode = NULL }, /* 0x2072 */ - { .altcode = NULL }, /* 0x2073 */ - { .altcode = NULL }, /* 0x2074 */ - { .altcode = NULL }, /* 0x2075 */ - { .altcode = NULL }, /* 0x2076 */ - { .altcode = NULL }, /* 0x2077 */ - { .altcode = NULL }, /* 0x2078 */ - { .altcode = NULL }, /* 0x2079 */ - { .altcode = NULL }, /* 0x207a */ - { .altcode = NULL }, /* 0x207b */ - { .altcode = NULL }, /* 0x207c */ - { .altcode = NULL }, /* 0x207d */ - { .altcode = NULL }, /* 0x207e */ - { .altcode = NULL }, /* 0x207f */ - { .altcode = NULL }, /* 0x2080 */ - { .altcode = NULL }, /* 0x2081 */ - { .altcode = NULL }, /* 0x2082 */ - { .altcode = NULL }, /* 0x2083 */ - { .altcode = NULL }, /* 0x2084 */ - { .altcode = NULL }, /* 0x2085 */ - { .altcode = NULL }, /* 0x2086 */ - { .altcode = NULL }, /* 0x2087 */ - { .altcode = NULL }, /* 0x2088 */ - { .altcode = NULL }, /* 0x2089 */ - { .altcode = NULL }, /* 0x208a */ - { .altcode = NULL }, /* 0x208b */ - { .altcode = NULL }, /* 0x208c */ - { .altcode = NULL }, /* 0x208d */ - { .altcode = NULL }, /* 0x208e */ - { .altcode = NULL }, /* 0x208f */ - { .altcode = NULL }, /* 0x2090 */ - { .altcode = NULL }, /* 0x2091 */ - { .altcode = NULL }, /* 0x2092 */ - { .altcode = NULL }, /* 0x2093 */ - { .altcode = NULL }, /* 0x2094 */ - { .altcode = NULL }, /* 0x2095 */ - { .altcode = NULL }, /* 0x2096 */ - { .altcode = NULL }, /* 0x2097 */ - { .altcode = NULL }, /* 0x2098 */ - { .altcode = NULL }, /* 0x2099 */ - { .altcode = NULL }, /* 0x209a */ - { .altcode = NULL }, /* 0x209b */ - { .altcode = NULL }, /* 0x209c */ - { .altcode = NULL }, /* 0x209d */ - { .altcode = NULL }, /* 0x209e */ - { .altcode = NULL }, /* 0x209f */ - { .altcode = NULL }, /* 0x20a0 */ - { .altcode = NULL }, /* 0x20a1 */ - { .altcode = NULL }, /* 0x20a2 */ - { .altcode = NULL }, /* 0x20a3 */ - { .altcode = NULL }, /* 0x20a4 */ - { .altcode = NULL }, /* 0x20a5 */ - { .altcode = NULL }, /* 0x20a6 */ - { .altcode = NULL }, /* 0x20a7 */ - { .altcode = NULL }, /* 0x20a8 */ - { .altcode = NULL }, /* 0x20a9 */ - { .altcode = NULL }, /* 0x20aa */ - { .altcode = NULL }, /* 0x20ab */ - { .altcode = NULL }, /* 0x20ac (EuroSign) */ - { .altcode = NULL }, /* 0x20ad */ - { .altcode = NULL }, /* 0x20ae */ - { .altcode = NULL }, /* 0x20af */ - { .altcode = NULL }, /* 0x20b0 */ - { .altcode = NULL }, /* 0x20b1 */ - { .altcode = NULL }, /* 0x20b2 */ - { .altcode = NULL }, /* 0x20b3 */ - { .altcode = NULL }, /* 0x20b4 */ - { .altcode = NULL }, /* 0x20b5 */ - { .altcode = NULL }, /* 0x20b6 */ - { .altcode = NULL }, /* 0x20b7 */ - { .altcode = NULL }, /* 0x20b8 */ - { .altcode = NULL }, /* 0x20b9 */ - { .altcode = NULL }, /* 0x20ba */ - { .altcode = NULL }, /* 0x20bb */ - { .altcode = NULL }, /* 0x20bc */ - { .altcode = NULL }, /* 0x20bd */ - { .altcode = NULL }, /* 0x20be */ - { .altcode = NULL }, /* 0x20bf */ - { .altcode = NULL }, /* 0x20c0 */ - { .altcode = NULL }, /* 0x20c1 */ - { .altcode = NULL }, /* 0x20c2 */ - { .altcode = NULL }, /* 0x20c3 */ - { .altcode = NULL }, /* 0x20c4 */ - { .altcode = NULL }, /* 0x20c5 */ - { .altcode = NULL }, /* 0x20c6 */ - { .altcode = NULL }, /* 0x20c7 */ - { .altcode = NULL }, /* 0x20c8 */ - { .altcode = NULL }, /* 0x20c9 */ - { .altcode = NULL }, /* 0x20ca */ - { .altcode = NULL }, /* 0x20cb */ - { .altcode = NULL }, /* 0x20cc */ - { .altcode = NULL }, /* 0x20cd */ - { .altcode = NULL }, /* 0x20ce */ - { .altcode = NULL }, /* 0x20cf */ - { .altcode = NULL }, /* 0x20d0 */ - { .altcode = NULL }, /* 0x20d1 */ - { .altcode = NULL }, /* 0x20d2 */ - { .altcode = NULL }, /* 0x20d3 */ - { .altcode = NULL }, /* 0x20d4 */ - { .altcode = NULL }, /* 0x20d5 */ - { .altcode = NULL }, /* 0x20d6 */ - { .altcode = NULL }, /* 0x20d7 */ - { .altcode = NULL }, /* 0x20d8 */ - { .altcode = NULL }, /* 0x20d9 */ - { .altcode = NULL }, /* 0x20da */ - { .altcode = NULL }, /* 0x20db */ - { .altcode = NULL }, /* 0x20dc */ - { .altcode = NULL }, /* 0x20dd */ - { .altcode = NULL }, /* 0x20de */ - { .altcode = NULL }, /* 0x20df */ - { .altcode = NULL }, /* 0x20e0 */ - { .altcode = NULL }, /* 0x20e1 */ - { .altcode = NULL }, /* 0x20e2 */ - { .altcode = NULL }, /* 0x20e3 */ - { .altcode = NULL }, /* 0x20e4 */ - { .altcode = NULL }, /* 0x20e5 */ - { .altcode = NULL }, /* 0x20e6 */ - { .altcode = NULL }, /* 0x20e7 */ - { .altcode = NULL }, /* 0x20e8 */ - { .altcode = NULL }, /* 0x20e9 */ - { .altcode = NULL }, /* 0x20ea */ - { .altcode = NULL }, /* 0x20eb */ - { .altcode = NULL }, /* 0x20ec */ - { .altcode = NULL }, /* 0x20ed */ - { .altcode = NULL }, /* 0x20ee */ - { .altcode = NULL }, /* 0x20ef */ - { .altcode = NULL }, /* 0x20f0 */ - { .altcode = NULL }, /* 0x20f1 */ - { .altcode = NULL }, /* 0x20f2 */ - { .altcode = NULL }, /* 0x20f3 */ - { .altcode = NULL }, /* 0x20f4 */ - { .altcode = NULL }, /* 0x20f5 */ - { .altcode = NULL }, /* 0x20f6 */ - { .altcode = NULL }, /* 0x20f7 */ - { .altcode = NULL }, /* 0x20f8 */ - { .altcode = NULL }, /* 0x20f9 */ - { .altcode = NULL }, /* 0x20fa */ - { .altcode = NULL }, /* 0x20fb */ - { .altcode = NULL }, /* 0x20fc */ - { .altcode = NULL }, /* 0x20fd */ - { .altcode = NULL }, /* 0x20fe */ - { .altcode = NULL }, /* 0x20ff */ - }, - {{NULL}}, /* 0x21?? */ - {{NULL}}, /* 0x22?? */ - {{NULL}}, /* 0x23?? */ - {{NULL}}, /* 0x24?? */ - {{NULL}}, /* 0x25?? */ - {{NULL}}, /* 0x26?? */ - {{NULL}}, /* 0x27?? */ - {{NULL}}, /* 0x28?? */ - {{NULL}}, /* 0x29?? */ - {{NULL}}, /* 0x2a?? */ - {{NULL}}, /* 0x2b?? */ - {{NULL}}, /* 0x2c?? */ - {{NULL}}, /* 0x2d?? */ - {{NULL}}, /* 0x2e?? */ - {{NULL}}, /* 0x2f?? */ - {{NULL}}, /* 0x30?? */ - {{NULL}}, /* 0x31?? */ - {{NULL}}, /* 0x32?? */ - {{NULL}}, /* 0x33?? */ - {{NULL}}, /* 0x34?? */ - {{NULL}}, /* 0x35?? */ - {{NULL}}, /* 0x36?? */ - {{NULL}}, /* 0x37?? */ - {{NULL}}, /* 0x38?? */ - {{NULL}}, /* 0x39?? */ - {{NULL}}, /* 0x3a?? */ - {{NULL}}, /* 0x3b?? */ - {{NULL}}, /* 0x3c?? */ - {{NULL}}, /* 0x3d?? */ - {{NULL}}, /* 0x3e?? */ - {{NULL}}, /* 0x3f?? */ - {{NULL}}, /* 0x40?? */ - {{NULL}}, /* 0x41?? */ - {{NULL}}, /* 0x42?? */ - {{NULL}}, /* 0x43?? */ - {{NULL}}, /* 0x44?? */ - {{NULL}}, /* 0x45?? */ - {{NULL}}, /* 0x46?? */ - {{NULL}}, /* 0x47?? */ - {{NULL}}, /* 0x48?? */ - {{NULL}}, /* 0x49?? */ - {{NULL}}, /* 0x4a?? */ - {{NULL}}, /* 0x4b?? */ - {{NULL}}, /* 0x4c?? */ - {{NULL}}, /* 0x4d?? */ - {{NULL}}, /* 0x4e?? */ - {{NULL}}, /* 0x4f?? */ - {{NULL}}, /* 0x50?? */ - {{NULL}}, /* 0x51?? */ - {{NULL}}, /* 0x52?? */ - {{NULL}}, /* 0x53?? */ - {{NULL}}, /* 0x54?? */ - {{NULL}}, /* 0x55?? */ - {{NULL}}, /* 0x56?? */ - {{NULL}}, /* 0x57?? */ - {{NULL}}, /* 0x58?? */ - {{NULL}}, /* 0x59?? */ - {{NULL}}, /* 0x5a?? */ - {{NULL}}, /* 0x5b?? */ - {{NULL}}, /* 0x5c?? */ - {{NULL}}, /* 0x5d?? */ - {{NULL}}, /* 0x5e?? */ - {{NULL}}, /* 0x5f?? */ - {{NULL}}, /* 0x60?? */ - {{NULL}}, /* 0x61?? */ - {{NULL}}, /* 0x62?? */ - {{NULL}}, /* 0x63?? */ - {{NULL}}, /* 0x64?? */ - {{NULL}}, /* 0x65?? */ - {{NULL}}, /* 0x66?? */ - {{NULL}}, /* 0x67?? */ - {{NULL}}, /* 0x68?? */ - {{NULL}}, /* 0x69?? */ - {{NULL}}, /* 0x6a?? */ - {{NULL}}, /* 0x6b?? */ - {{NULL}}, /* 0x6c?? */ - {{NULL}}, /* 0x6d?? */ - {{NULL}}, /* 0x6e?? */ - {{NULL}}, /* 0x6f?? */ - {{NULL}}, /* 0x70?? */ - {{NULL}}, /* 0x71?? */ - {{NULL}}, /* 0x72?? */ - {{NULL}}, /* 0x73?? */ - {{NULL}}, /* 0x74?? */ - {{NULL}}, /* 0x75?? */ - {{NULL}}, /* 0x76?? */ - {{NULL}}, /* 0x77?? */ - {{NULL}}, /* 0x78?? */ - {{NULL}}, /* 0x79?? */ - {{NULL}}, /* 0x7a?? */ - {{NULL}}, /* 0x7b?? */ - {{NULL}}, /* 0x7c?? */ - {{NULL}}, /* 0x7d?? */ - {{NULL}}, /* 0x7e?? */ - {{NULL}}, /* 0x7f?? */ - {{NULL}}, /* 0x80?? */ - {{NULL}}, /* 0x81?? */ - {{NULL}}, /* 0x82?? */ - {{NULL}}, /* 0x83?? */ - {{NULL}}, /* 0x84?? */ - {{NULL}}, /* 0x85?? */ - {{NULL}}, /* 0x86?? */ - {{NULL}}, /* 0x87?? */ - {{NULL}}, /* 0x88?? */ - {{NULL}}, /* 0x89?? */ - {{NULL}}, /* 0x8a?? */ - {{NULL}}, /* 0x8b?? */ - {{NULL}}, /* 0x8c?? */ - {{NULL}}, /* 0x8d?? */ - {{NULL}}, /* 0x8e?? */ - {{NULL}}, /* 0x8f?? */ - {{NULL}}, /* 0x90?? */ - {{NULL}}, /* 0x91?? */ - {{NULL}}, /* 0x92?? */ - {{NULL}}, /* 0x93?? */ - {{NULL}}, /* 0x94?? */ - {{NULL}}, /* 0x95?? */ - {{NULL}}, /* 0x96?? */ - {{NULL}}, /* 0x97?? */ - {{NULL}}, /* 0x98?? */ - {{NULL}}, /* 0x99?? */ - {{NULL}}, /* 0x9a?? */ - {{NULL}}, /* 0x9b?? */ - {{NULL}}, /* 0x9c?? */ - {{NULL}}, /* 0x9d?? */ - {{NULL}}, /* 0x9e?? */ - {{NULL}}, /* 0x9f?? */ - {{NULL}}, /* 0xa0?? */ - {{NULL}}, /* 0xa1?? */ - {{NULL}}, /* 0xa2?? */ - {{NULL}}, /* 0xa3?? */ - {{NULL}}, /* 0xa4?? */ - {{NULL}}, /* 0xa5?? */ - {{NULL}}, /* 0xa6?? */ - {{NULL}}, /* 0xa7?? */ - {{NULL}}, /* 0xa8?? */ - {{NULL}}, /* 0xa9?? */ - {{NULL}}, /* 0xaa?? */ - {{NULL}}, /* 0xab?? */ - {{NULL}}, /* 0xac?? */ - {{NULL}}, /* 0xad?? */ - {{NULL}}, /* 0xae?? */ - {{NULL}}, /* 0xaf?? */ - {{NULL}}, /* 0xb0?? */ - {{NULL}}, /* 0xb1?? */ - {{NULL}}, /* 0xb2?? */ - {{NULL}}, /* 0xb3?? */ - {{NULL}}, /* 0xb4?? */ - {{NULL}}, /* 0xb5?? */ - {{NULL}}, /* 0xb6?? */ - {{NULL}}, /* 0xb7?? */ - {{NULL}}, /* 0xb8?? */ - {{NULL}}, /* 0xb9?? */ - {{NULL}}, /* 0xba?? */ - {{NULL}}, /* 0xbb?? */ - {{NULL}}, /* 0xbc?? */ - {{NULL}}, /* 0xbd?? */ - {{NULL}}, /* 0xbe?? */ - {{NULL}}, /* 0xbf?? */ - {{NULL}}, /* 0xc0?? */ - {{NULL}}, /* 0xc1?? */ - {{NULL}}, /* 0xc2?? */ - {{NULL}}, /* 0xc3?? */ - {{NULL}}, /* 0xc4?? */ - {{NULL}}, /* 0xc5?? */ - {{NULL}}, /* 0xc6?? */ - {{NULL}}, /* 0xc7?? */ - {{NULL}}, /* 0xc8?? */ - {{NULL}}, /* 0xc9?? */ - {{NULL}}, /* 0xca?? */ - {{NULL}}, /* 0xcb?? */ - {{NULL}}, /* 0xcc?? */ - {{NULL}}, /* 0xcd?? */ - {{NULL}}, /* 0xce?? */ - {{NULL}}, /* 0xcf?? */ - {{NULL}}, /* 0xd0?? */ - {{NULL}}, /* 0xd1?? */ - {{NULL}}, /* 0xd2?? */ - {{NULL}}, /* 0xd3?? */ - {{NULL}}, /* 0xd4?? */ - {{NULL}}, /* 0xd5?? */ - {{NULL}}, /* 0xd6?? */ - {{NULL}}, /* 0xd7?? */ - {{NULL}}, /* 0xd8?? */ - {{NULL}}, /* 0xd9?? */ - {{NULL}}, /* 0xda?? */ - {{NULL}}, /* 0xdb?? */ - {{NULL}}, /* 0xdc?? */ - {{NULL}}, /* 0xdd?? */ - {{NULL}}, /* 0xde?? */ - {{NULL}}, /* 0xdf?? */ - {{NULL}}, /* 0xe0?? */ - {{NULL}}, /* 0xe1?? */ - {{NULL}}, /* 0xe2?? */ - {{NULL}}, /* 0xe3?? */ - {{NULL}}, /* 0xe4?? */ - {{NULL}}, /* 0xe5?? */ - {{NULL}}, /* 0xe6?? */ - {{NULL}}, /* 0xe7?? */ - {{NULL}}, /* 0xe8?? */ - {{NULL}}, /* 0xe9?? */ - {{NULL}}, /* 0xea?? */ - {{NULL}}, /* 0xeb?? */ - {{NULL}}, /* 0xec?? */ - {{NULL}}, /* 0xed?? */ - {{NULL}}, /* 0xee?? */ - {{NULL}}, /* 0xef?? */ - {{NULL}}, /* 0xf0?? */ - {{NULL}}, /* 0xf1?? */ - {{NULL}}, /* 0xf2?? */ - {{NULL}}, /* 0xf3?? */ - {{NULL}}, /* 0xf4?? */ - {{NULL}}, /* 0xf5?? */ - {{NULL}}, /* 0xf6?? */ - {{NULL}}, /* 0xf7?? */ - {{NULL}}, /* 0xf8?? */ - {{NULL}}, /* 0xf9?? */ - {{NULL}}, /* 0xfa?? */ - {{NULL}}, /* 0xfb?? */ - {{NULL}}, /* 0xfc?? */ - { /* 0xfd?? */ - { .altcode = NULL }, /* 0xfd00 */ - { .altcode = NULL }, /* 0xfd01 (3270_Duplicate) */ - { .altcode = NULL }, /* 0xfd02 (3270_FieldMark) */ - { .altcode = NULL }, /* 0xfd03 (3270_Right2) */ - { .altcode = NULL }, /* 0xfd04 (3270_Left2) */ - { .altcode = NULL }, /* 0xfd05 (3270_BackTab) */ - { .altcode = NULL }, /* 0xfd06 (3270_EraseEOF) */ - { .altcode = NULL }, /* 0xfd07 (3270_EraseInput) */ - { .altcode = NULL }, /* 0xfd08 (3270_Reset) */ - { .altcode = NULL }, /* 0xfd09 (3270_Quit) */ - { .altcode = NULL }, /* 0xfd0a (3270_PA1) */ - { .altcode = NULL }, /* 0xfd0b (3270_PA2) */ - { .altcode = NULL }, /* 0xfd0c (3270_PA3) */ - { .altcode = NULL }, /* 0xfd0d (3270_Test) */ - { .altcode = NULL }, /* 0xfd0e (3270_Attn) */ - { .altcode = NULL }, /* 0xfd0f (3270_CursorBlink) */ - { .altcode = NULL }, /* 0xfd10 (3270_AltCursor) */ - { .altcode = NULL }, /* 0xfd11 (3270_KeyClick) */ - { .altcode = NULL }, /* 0xfd12 (3270_Jump) */ - { .altcode = NULL }, /* 0xfd13 (3270_Ident) */ - { .altcode = NULL }, /* 0xfd14 (3270_Rule) */ - { .altcode = NULL }, /* 0xfd15 (3270_Copy) */ - { .altcode = NULL }, /* 0xfd16 (3270_Play) */ - { .altcode = NULL }, /* 0xfd17 (3270_Setup) */ - { .altcode = NULL }, /* 0xfd18 (3270_Record) */ - { .altcode = NULL }, /* 0xfd19 (3270_ChangeScreen) */ - { .altcode = NULL }, /* 0xfd1a (3270_DeleteWord) */ - { .altcode = NULL }, /* 0xfd1b (3270_ExSelect) */ - { .altcode = NULL }, /* 0xfd1c (3270_CursorSelect) */ - { .altcode = NULL }, /* 0xfd1d (3270_PrintScreen) */ - { .altcode = NULL }, /* 0xfd1e (3270_Enter) */ - { .altcode = NULL }, /* 0xfd1f */ - { .altcode = NULL }, /* 0xfd20 */ - { .altcode = NULL }, /* 0xfd21 */ - { .altcode = NULL }, /* 0xfd22 */ - { .altcode = NULL }, /* 0xfd23 */ - { .altcode = NULL }, /* 0xfd24 */ - { .altcode = NULL }, /* 0xfd25 */ - { .altcode = NULL }, /* 0xfd26 */ - { .altcode = NULL }, /* 0xfd27 */ - { .altcode = NULL }, /* 0xfd28 */ - { .altcode = NULL }, /* 0xfd29 */ - { .altcode = NULL }, /* 0xfd2a */ - { .altcode = NULL }, /* 0xfd2b */ - { .altcode = NULL }, /* 0xfd2c */ - { .altcode = NULL }, /* 0xfd2d */ - { .altcode = NULL }, /* 0xfd2e */ - { .altcode = NULL }, /* 0xfd2f */ - { .altcode = NULL }, /* 0xfd30 */ - { .altcode = NULL }, /* 0xfd31 */ - { .altcode = NULL }, /* 0xfd32 */ - { .altcode = NULL }, /* 0xfd33 */ - { .altcode = NULL }, /* 0xfd34 */ - { .altcode = NULL }, /* 0xfd35 */ - { .altcode = NULL }, /* 0xfd36 */ - { .altcode = NULL }, /* 0xfd37 */ - { .altcode = NULL }, /* 0xfd38 */ - { .altcode = NULL }, /* 0xfd39 */ - { .altcode = NULL }, /* 0xfd3a */ - { .altcode = NULL }, /* 0xfd3b */ - { .altcode = NULL }, /* 0xfd3c */ - { .altcode = NULL }, /* 0xfd3d */ - { .altcode = NULL }, /* 0xfd3e */ - { .altcode = NULL }, /* 0xfd3f */ - { .altcode = NULL }, /* 0xfd40 */ - { .altcode = NULL }, /* 0xfd41 */ - { .altcode = NULL }, /* 0xfd42 */ - { .altcode = NULL }, /* 0xfd43 */ - { .altcode = NULL }, /* 0xfd44 */ - { .altcode = NULL }, /* 0xfd45 */ - { .altcode = NULL }, /* 0xfd46 */ - { .altcode = NULL }, /* 0xfd47 */ - { .altcode = NULL }, /* 0xfd48 */ - { .altcode = NULL }, /* 0xfd49 */ - { .altcode = NULL }, /* 0xfd4a */ - { .altcode = NULL }, /* 0xfd4b */ - { .altcode = NULL }, /* 0xfd4c */ - { .altcode = NULL }, /* 0xfd4d */ - { .altcode = NULL }, /* 0xfd4e */ - { .altcode = NULL }, /* 0xfd4f */ - { .altcode = NULL }, /* 0xfd50 */ - { .altcode = NULL }, /* 0xfd51 */ - { .altcode = NULL }, /* 0xfd52 */ - { .altcode = NULL }, /* 0xfd53 */ - { .altcode = NULL }, /* 0xfd54 */ - { .altcode = NULL }, /* 0xfd55 */ - { .altcode = NULL }, /* 0xfd56 */ - { .altcode = NULL }, /* 0xfd57 */ - { .altcode = NULL }, /* 0xfd58 */ - { .altcode = NULL }, /* 0xfd59 */ - { .altcode = NULL }, /* 0xfd5a */ - { .altcode = NULL }, /* 0xfd5b */ - { .altcode = NULL }, /* 0xfd5c */ - { .altcode = NULL }, /* 0xfd5d */ - { .altcode = NULL }, /* 0xfd5e */ - { .altcode = NULL }, /* 0xfd5f */ - { .altcode = NULL }, /* 0xfd60 */ - { .altcode = NULL }, /* 0xfd61 */ - { .altcode = NULL }, /* 0xfd62 */ - { .altcode = NULL }, /* 0xfd63 */ - { .altcode = NULL }, /* 0xfd64 */ - { .altcode = NULL }, /* 0xfd65 */ - { .altcode = NULL }, /* 0xfd66 */ - { .altcode = NULL }, /* 0xfd67 */ - { .altcode = NULL }, /* 0xfd68 */ - { .altcode = NULL }, /* 0xfd69 */ - { .altcode = NULL }, /* 0xfd6a */ - { .altcode = NULL }, /* 0xfd6b */ - { .altcode = NULL }, /* 0xfd6c */ - { .altcode = NULL }, /* 0xfd6d */ - { .altcode = NULL }, /* 0xfd6e */ - { .altcode = NULL }, /* 0xfd6f */ - { .altcode = NULL }, /* 0xfd70 */ - { .altcode = NULL }, /* 0xfd71 */ - { .altcode = NULL }, /* 0xfd72 */ - { .altcode = NULL }, /* 0xfd73 */ - { .altcode = NULL }, /* 0xfd74 */ - { .altcode = NULL }, /* 0xfd75 */ - { .altcode = NULL }, /* 0xfd76 */ - { .altcode = NULL }, /* 0xfd77 */ - { .altcode = NULL }, /* 0xfd78 */ - { .altcode = NULL }, /* 0xfd79 */ - { .altcode = NULL }, /* 0xfd7a */ - { .altcode = NULL }, /* 0xfd7b */ - { .altcode = NULL }, /* 0xfd7c */ - { .altcode = NULL }, /* 0xfd7d */ - { .altcode = NULL }, /* 0xfd7e */ - { .altcode = NULL }, /* 0xfd7f */ - { .altcode = NULL }, /* 0xfd80 */ - { .altcode = NULL }, /* 0xfd81 */ - { .altcode = NULL }, /* 0xfd82 */ - { .altcode = NULL }, /* 0xfd83 */ - { .altcode = NULL }, /* 0xfd84 */ - { .altcode = NULL }, /* 0xfd85 */ - { .altcode = NULL }, /* 0xfd86 */ - { .altcode = NULL }, /* 0xfd87 */ - { .altcode = NULL }, /* 0xfd88 */ - { .altcode = NULL }, /* 0xfd89 */ - { .altcode = NULL }, /* 0xfd8a */ - { .altcode = NULL }, /* 0xfd8b */ - { .altcode = NULL }, /* 0xfd8c */ - { .altcode = NULL }, /* 0xfd8d */ - { .altcode = NULL }, /* 0xfd8e */ - { .altcode = NULL }, /* 0xfd8f */ - { .altcode = NULL }, /* 0xfd90 */ - { .altcode = NULL }, /* 0xfd91 */ - { .altcode = NULL }, /* 0xfd92 */ - { .altcode = NULL }, /* 0xfd93 */ - { .altcode = NULL }, /* 0xfd94 */ - { .altcode = NULL }, /* 0xfd95 */ - { .altcode = NULL }, /* 0xfd96 */ - { .altcode = NULL }, /* 0xfd97 */ - { .altcode = NULL }, /* 0xfd98 */ - { .altcode = NULL }, /* 0xfd99 */ - { .altcode = NULL }, /* 0xfd9a */ - { .altcode = NULL }, /* 0xfd9b */ - { .altcode = NULL }, /* 0xfd9c */ - { .altcode = NULL }, /* 0xfd9d */ - { .altcode = NULL }, /* 0xfd9e */ - { .altcode = NULL }, /* 0xfd9f */ - { .altcode = NULL }, /* 0xfda0 */ - { .altcode = NULL }, /* 0xfda1 */ - { .altcode = NULL }, /* 0xfda2 */ - { .altcode = NULL }, /* 0xfda3 */ - { .altcode = NULL }, /* 0xfda4 */ - { .altcode = NULL }, /* 0xfda5 */ - { .altcode = NULL }, /* 0xfda6 */ - { .altcode = NULL }, /* 0xfda7 */ - { .altcode = NULL }, /* 0xfda8 */ - { .altcode = NULL }, /* 0xfda9 */ - { .altcode = NULL }, /* 0xfdaa */ - { .altcode = NULL }, /* 0xfdab */ - { .altcode = NULL }, /* 0xfdac */ - { .altcode = NULL }, /* 0xfdad */ - { .altcode = NULL }, /* 0xfdae */ - { .altcode = NULL }, /* 0xfdaf */ - { .altcode = NULL }, /* 0xfdb0 */ - { .altcode = NULL }, /* 0xfdb1 */ - { .altcode = NULL }, /* 0xfdb2 */ - { .altcode = NULL }, /* 0xfdb3 */ - { .altcode = NULL }, /* 0xfdb4 */ - { .altcode = NULL }, /* 0xfdb5 */ - { .altcode = NULL }, /* 0xfdb6 */ - { .altcode = NULL }, /* 0xfdb7 */ - { .altcode = NULL }, /* 0xfdb8 */ - { .altcode = NULL }, /* 0xfdb9 */ - { .altcode = NULL }, /* 0xfdba */ - { .altcode = NULL }, /* 0xfdbb */ - { .altcode = NULL }, /* 0xfdbc */ - { .altcode = NULL }, /* 0xfdbd */ - { .altcode = NULL }, /* 0xfdbe */ - { .altcode = NULL }, /* 0xfdbf */ - { .altcode = NULL }, /* 0xfdc0 */ - { .altcode = NULL }, /* 0xfdc1 */ - { .altcode = NULL }, /* 0xfdc2 */ - { .altcode = NULL }, /* 0xfdc3 */ - { .altcode = NULL }, /* 0xfdc4 */ - { .altcode = NULL }, /* 0xfdc5 */ - { .altcode = NULL }, /* 0xfdc6 */ - { .altcode = NULL }, /* 0xfdc7 */ - { .altcode = NULL }, /* 0xfdc8 */ - { .altcode = NULL }, /* 0xfdc9 */ - { .altcode = NULL }, /* 0xfdca */ - { .altcode = NULL }, /* 0xfdcb */ - { .altcode = NULL }, /* 0xfdcc */ - { .altcode = NULL }, /* 0xfdcd */ - { .altcode = NULL }, /* 0xfdce */ - { .altcode = NULL }, /* 0xfdcf */ - { .altcode = NULL }, /* 0xfdd0 */ - { .altcode = NULL }, /* 0xfdd1 */ - { .altcode = NULL }, /* 0xfdd2 */ - { .altcode = NULL }, /* 0xfdd3 */ - { .altcode = NULL }, /* 0xfdd4 */ - { .altcode = NULL }, /* 0xfdd5 */ - { .altcode = NULL }, /* 0xfdd6 */ - { .altcode = NULL }, /* 0xfdd7 */ - { .altcode = NULL }, /* 0xfdd8 */ - { .altcode = NULL }, /* 0xfdd9 */ - { .altcode = NULL }, /* 0xfdda */ - { .altcode = NULL }, /* 0xfddb */ - { .altcode = NULL }, /* 0xfddc */ - { .altcode = NULL }, /* 0xfddd */ - { .altcode = NULL }, /* 0xfdde */ - { .altcode = NULL }, /* 0xfddf */ - { .altcode = NULL }, /* 0xfde0 */ - { .altcode = NULL }, /* 0xfde1 */ - { .altcode = NULL }, /* 0xfde2 */ - { .altcode = NULL }, /* 0xfde3 */ - { .altcode = NULL }, /* 0xfde4 */ - { .altcode = NULL }, /* 0xfde5 */ - { .altcode = NULL }, /* 0xfde6 */ - { .altcode = NULL }, /* 0xfde7 */ - { .altcode = NULL }, /* 0xfde8 */ - { .altcode = NULL }, /* 0xfde9 */ - { .altcode = NULL }, /* 0xfdea */ - { .altcode = NULL }, /* 0xfdeb */ - { .altcode = NULL }, /* 0xfdec */ - { .altcode = NULL }, /* 0xfded */ - { .altcode = NULL }, /* 0xfdee */ - { .altcode = NULL }, /* 0xfdef */ - { .altcode = NULL }, /* 0xfdf0 */ - { .altcode = NULL }, /* 0xfdf1 */ - { .altcode = NULL }, /* 0xfdf2 */ - { .altcode = NULL }, /* 0xfdf3 */ - { .altcode = NULL }, /* 0xfdf4 */ - { .altcode = NULL }, /* 0xfdf5 */ - { .altcode = NULL }, /* 0xfdf6 */ - { .altcode = NULL }, /* 0xfdf7 */ - { .altcode = NULL }, /* 0xfdf8 */ - { .altcode = NULL }, /* 0xfdf9 */ - { .altcode = NULL }, /* 0xfdfa */ - { .altcode = NULL }, /* 0xfdfb */ - { .altcode = NULL }, /* 0xfdfc */ - { .altcode = NULL }, /* 0xfdfd */ - { .altcode = NULL }, /* 0xfdfe */ - { .altcode = NULL }, /* 0xfdff */ - }, - { /* 0xfe?? */ - { .altcode = NULL }, /* 0xfe00 */ - { .altcode = NULL }, /* 0xfe01 (ISO_Lock) */ - { .altcode = NULL }, /* 0xfe02 (ISO_Level2_Latch) */ - { .altcode = NULL }, /* 0xfe03 (ISO_Level3_Shift) */ - { .altcode = NULL }, /* 0xfe04 (ISO_Level3_Latch) */ - { .altcode = NULL }, /* 0xfe05 (ISO_Level3_Lock) */ - { .altcode = NULL }, /* 0xfe06 (ISO_Group_Latch) */ - { .altcode = NULL }, /* 0xfe07 (ISO_Group_Lock) */ - { .altcode = NULL }, /* 0xfe08 (ISO_Next_Group) */ - { .altcode = NULL }, /* 0xfe09 (ISO_Next_Group_Lock) */ - { .altcode = NULL }, /* 0xfe0a (ISO_Prev_Group) */ - { .altcode = NULL }, /* 0xfe0b (ISO_Prev_Group_Lock) */ - { .altcode = NULL }, /* 0xfe0c (ISO_First_Group) */ - { .altcode = NULL }, /* 0xfe0d (ISO_First_Group_Lock) */ - { .altcode = NULL }, /* 0xfe0e (ISO_Last_Group) */ - { .altcode = NULL }, /* 0xfe0f (ISO_Last_Group_Lock) */ - { .altcode = NULL }, /* 0xfe10 */ - { .altcode = NULL }, /* 0xfe11 (ISO_Level5_Shift) */ - { .altcode = NULL }, /* 0xfe12 (ISO_Level5_Latch) */ - { .altcode = NULL }, /* 0xfe13 (ISO_Level5_Lock) */ - { .altcode = NULL }, /* 0xfe14 */ - { .altcode = NULL }, /* 0xfe15 */ - { .altcode = NULL }, /* 0xfe16 */ - { .altcode = NULL }, /* 0xfe17 */ - { .altcode = NULL }, /* 0xfe18 */ - { .altcode = NULL }, /* 0xfe19 */ - { .altcode = NULL }, /* 0xfe1a */ - { .altcode = NULL }, /* 0xfe1b */ - { .altcode = NULL }, /* 0xfe1c */ - { .altcode = NULL }, /* 0xfe1d */ - { .altcode = NULL }, /* 0xfe1e */ - { .altcode = NULL }, /* 0xfe1f */ - { .altcode = NULL }, /* 0xfe20 (ISO_Left_Tab) */ - { .altcode = NULL }, /* 0xfe21 (ISO_Move_Line_Up) */ - { .altcode = NULL }, /* 0xfe22 (ISO_Move_Line_Down) */ - { .altcode = NULL }, /* 0xfe23 (ISO_Partial_Line_Up) */ - { .altcode = NULL }, /* 0xfe24 (ISO_Partial_Line_Down) */ - { .altcode = NULL }, /* 0xfe25 (ISO_Partial_Space_Left) */ - { .altcode = NULL }, /* 0xfe26 (ISO_Partial_Space_Right) */ - { .altcode = NULL }, /* 0xfe27 (ISO_Set_Margin_Left) */ - { .altcode = NULL }, /* 0xfe28 (ISO_Set_Margin_Right) */ - { .altcode = NULL }, /* 0xfe29 (ISO_Release_Margin_Left) */ - { .altcode = NULL }, /* 0xfe2a (ISO_Release_Margin_Right) */ - { .altcode = NULL }, /* 0xfe2b (ISO_Release_Both_Margins) */ - { .altcode = NULL }, /* 0xfe2c (ISO_Fast_Cursor_Left) */ - { .altcode = NULL }, /* 0xfe2d (ISO_Fast_Cursor_Right) */ - { .altcode = NULL }, /* 0xfe2e (ISO_Fast_Cursor_Up) */ - { .altcode = NULL }, /* 0xfe2f (ISO_Fast_Cursor_Down) */ - { .altcode = NULL }, /* 0xfe30 (ISO_Continuous_Underline) */ - { .altcode = NULL }, /* 0xfe31 (ISO_Discontinuous_Underline) */ - { .altcode = NULL }, /* 0xfe32 (ISO_Emphasize) */ - { .altcode = NULL }, /* 0xfe33 (ISO_Center_Object) */ - { .altcode = NULL }, /* 0xfe34 (ISO_Enter) */ - { .altcode = NULL }, /* 0xfe35 */ - { .altcode = NULL }, /* 0xfe36 */ - { .altcode = NULL }, /* 0xfe37 */ - { .altcode = NULL }, /* 0xfe38 */ - { .altcode = NULL }, /* 0xfe39 */ - { .altcode = NULL }, /* 0xfe3a */ - { .altcode = NULL }, /* 0xfe3b */ - { .altcode = NULL }, /* 0xfe3c */ - { .altcode = NULL }, /* 0xfe3d */ - { .altcode = NULL }, /* 0xfe3e */ - { .altcode = NULL }, /* 0xfe3f */ - { .altcode = NULL }, /* 0xfe40 */ - { .altcode = NULL }, /* 0xfe41 */ - { .altcode = NULL }, /* 0xfe42 */ - { .altcode = NULL }, /* 0xfe43 */ - { .altcode = NULL }, /* 0xfe44 */ - { .altcode = NULL }, /* 0xfe45 */ - { .altcode = NULL }, /* 0xfe46 */ - { .altcode = NULL }, /* 0xfe47 */ - { .altcode = NULL }, /* 0xfe48 */ - { .altcode = NULL }, /* 0xfe49 */ - { .altcode = NULL }, /* 0xfe4a */ - { .altcode = NULL }, /* 0xfe4b */ - { .altcode = NULL }, /* 0xfe4c */ - { .altcode = NULL }, /* 0xfe4d */ - { .altcode = NULL }, /* 0xfe4e */ - { .altcode = NULL }, /* 0xfe4f */ - { .altcode = NULL }, /* 0xfe50 (dead_grave) */ - { .altcode = NULL }, /* 0xfe51 (dead_acute) */ - { .altcode = NULL }, /* 0xfe52 (dead_circumflex) */ - { .altcode = NULL }, /* 0xfe53 (dead_perispomeni) */ - { .altcode = NULL }, /* 0xfe54 (dead_macron) */ - { .altcode = NULL }, /* 0xfe55 (dead_breve) */ - { .altcode = NULL }, /* 0xfe56 (dead_abovedot) */ - { .altcode = NULL }, /* 0xfe57 (dead_diaeresis) */ - { .altcode = NULL }, /* 0xfe58 (dead_abovering) */ - { .altcode = NULL }, /* 0xfe59 (dead_doubleacute) */ - { .altcode = NULL }, /* 0xfe5a (dead_caron) */ - { .altcode = NULL }, /* 0xfe5b (dead_cedilla) */ - { .altcode = NULL }, /* 0xfe5c (dead_ogonek) */ - { .altcode = NULL }, /* 0xfe5d (dead_iota) */ - { .altcode = NULL }, /* 0xfe5e (dead_voiced_sound) */ - { .altcode = NULL }, /* 0xfe5f (dead_semivoiced_sound) */ - { .altcode = NULL }, /* 0xfe60 (dead_belowdot) */ - { .altcode = NULL }, /* 0xfe61 (dead_hook) */ - { .altcode = NULL }, /* 0xfe62 (dead_horn) */ - { .altcode = NULL }, /* 0xfe63 (dead_stroke) */ - { .altcode = NULL }, /* 0xfe64 (dead_psili) */ - { .altcode = NULL }, /* 0xfe65 (dead_dasia) */ - { .altcode = NULL }, /* 0xfe66 (dead_doublegrave) */ - { .altcode = NULL }, /* 0xfe67 (dead_belowring) */ - { .altcode = NULL }, /* 0xfe68 (dead_belowmacron) */ - { .altcode = NULL }, /* 0xfe69 (dead_belowcircumflex) */ - { .altcode = NULL }, /* 0xfe6a (dead_belowtilde) */ - { .altcode = NULL }, /* 0xfe6b (dead_belowbreve) */ - { .altcode = NULL }, /* 0xfe6c (dead_belowdiaeresis) */ - { .altcode = NULL }, /* 0xfe6d (dead_invertedbreve) */ - { .altcode = NULL }, /* 0xfe6e (dead_belowcomma) */ - { .altcode = NULL }, /* 0xfe6f (dead_currency) */ - { .altcode = NULL }, /* 0xfe70 (AccessX_Enable) */ - { .altcode = NULL }, /* 0xfe71 (AccessX_Feedback_Enable) */ - { .altcode = NULL }, /* 0xfe72 (RepeatKeys_Enable) */ - { .altcode = NULL }, /* 0xfe73 (SlowKeys_Enable) */ - { .altcode = NULL }, /* 0xfe74 (BounceKeys_Enable) */ - { .altcode = NULL }, /* 0xfe75 (StickyKeys_Enable) */ - { .altcode = NULL }, /* 0xfe76 (MouseKeys_Enable) */ - { .altcode = NULL }, /* 0xfe77 (MouseKeys_Accel_Enable) */ - { .altcode = NULL }, /* 0xfe78 (Overlay1_Enable) */ - { .altcode = NULL }, /* 0xfe79 (Overlay2_Enable) */ - { .altcode = NULL }, /* 0xfe7a (AudibleBell_Enable) */ - { .altcode = NULL }, /* 0xfe7b */ - { .altcode = NULL }, /* 0xfe7c */ - { .altcode = NULL }, /* 0xfe7d */ - { .altcode = NULL }, /* 0xfe7e */ - { .altcode = NULL }, /* 0xfe7f */ - { .altcode = NULL }, /* 0xfe80 (dead_a) */ - { .altcode = NULL }, /* 0xfe81 (dead_A) */ - { .altcode = NULL }, /* 0xfe82 (dead_e) */ - { .altcode = NULL }, /* 0xfe83 (dead_E) */ - { .altcode = NULL }, /* 0xfe84 (dead_i) */ - { .altcode = NULL }, /* 0xfe85 (dead_I) */ - { .altcode = NULL }, /* 0xfe86 (dead_o) */ - { .altcode = NULL }, /* 0xfe87 (dead_O) */ - { .altcode = NULL }, /* 0xfe88 (dead_u) */ - { .altcode = NULL }, /* 0xfe89 (dead_U) */ - { .altcode = NULL }, /* 0xfe8a (dead_small_schwa) */ - { .altcode = NULL }, /* 0xfe8b (dead_capital_schwa) */ - { .altcode = NULL }, /* 0xfe8c */ - { .altcode = NULL }, /* 0xfe8d */ - { .altcode = NULL }, /* 0xfe8e */ - { .altcode = NULL }, /* 0xfe8f */ - { .altcode = NULL }, /* 0xfe90 */ - { .altcode = NULL }, /* 0xfe91 */ - { .altcode = NULL }, /* 0xfe92 */ - { .altcode = NULL }, /* 0xfe93 */ - { .altcode = NULL }, /* 0xfe94 */ - { .altcode = NULL }, /* 0xfe95 */ - { .altcode = NULL }, /* 0xfe96 */ - { .altcode = NULL }, /* 0xfe97 */ - { .altcode = NULL }, /* 0xfe98 */ - { .altcode = NULL }, /* 0xfe99 */ - { .altcode = NULL }, /* 0xfe9a */ - { .altcode = NULL }, /* 0xfe9b */ - { .altcode = NULL }, /* 0xfe9c */ - { .altcode = NULL }, /* 0xfe9d */ - { .altcode = NULL }, /* 0xfe9e */ - { .altcode = NULL }, /* 0xfe9f */ - { .altcode = NULL }, /* 0xfea0 */ - { .altcode = NULL }, /* 0xfea1 */ - { .altcode = NULL }, /* 0xfea2 */ - { .altcode = NULL }, /* 0xfea3 */ - { .altcode = NULL }, /* 0xfea4 */ - { .altcode = NULL }, /* 0xfea5 */ - { .altcode = NULL }, /* 0xfea6 */ - { .altcode = NULL }, /* 0xfea7 */ - { .altcode = NULL }, /* 0xfea8 */ - { .altcode = NULL }, /* 0xfea9 */ - { .altcode = NULL }, /* 0xfeaa */ - { .altcode = NULL }, /* 0xfeab */ - { .altcode = NULL }, /* 0xfeac */ - { .altcode = NULL }, /* 0xfead */ - { .altcode = NULL }, /* 0xfeae */ - { .altcode = NULL }, /* 0xfeaf */ - { .altcode = NULL }, /* 0xfeb0 */ - { .altcode = NULL }, /* 0xfeb1 */ - { .altcode = NULL }, /* 0xfeb2 */ - { .altcode = NULL }, /* 0xfeb3 */ - { .altcode = NULL }, /* 0xfeb4 */ - { .altcode = NULL }, /* 0xfeb5 */ - { .altcode = NULL }, /* 0xfeb6 */ - { .altcode = NULL }, /* 0xfeb7 */ - { .altcode = NULL }, /* 0xfeb8 */ - { .altcode = NULL }, /* 0xfeb9 */ - { .altcode = NULL }, /* 0xfeba */ - { .altcode = NULL }, /* 0xfebb */ - { .altcode = NULL }, /* 0xfebc */ - { .altcode = NULL }, /* 0xfebd */ - { .altcode = NULL }, /* 0xfebe */ - { .altcode = NULL }, /* 0xfebf */ - { .altcode = NULL }, /* 0xfec0 */ - { .altcode = NULL }, /* 0xfec1 */ - { .altcode = NULL }, /* 0xfec2 */ - { .altcode = NULL }, /* 0xfec3 */ - { .altcode = NULL }, /* 0xfec4 */ - { .altcode = NULL }, /* 0xfec5 */ - { .altcode = NULL }, /* 0xfec6 */ - { .altcode = NULL }, /* 0xfec7 */ - { .altcode = NULL }, /* 0xfec8 */ - { .altcode = NULL }, /* 0xfec9 */ - { .altcode = NULL }, /* 0xfeca */ - { .altcode = NULL }, /* 0xfecb */ - { .altcode = NULL }, /* 0xfecc */ - { .altcode = NULL }, /* 0xfecd */ - { .altcode = NULL }, /* 0xfece */ - { .altcode = NULL }, /* 0xfecf */ - { .altcode = NULL }, /* 0xfed0 (First_Virtual_Screen) */ - { .altcode = NULL }, /* 0xfed1 (Prev_Virtual_Screen) */ - { .altcode = NULL }, /* 0xfed2 (Next_Virtual_Screen) */ - { .altcode = NULL }, /* 0xfed3 */ - { .altcode = NULL }, /* 0xfed4 (Last_Virtual_Screen) */ - { .altcode = NULL }, /* 0xfed5 (Terminate_Server) */ - { .altcode = NULL }, /* 0xfed6 */ - { .altcode = NULL }, /* 0xfed7 */ - { .altcode = NULL }, /* 0xfed8 */ - { .altcode = NULL }, /* 0xfed9 */ - { .altcode = NULL }, /* 0xfeda */ - { .altcode = NULL }, /* 0xfedb */ - { .altcode = NULL }, /* 0xfedc */ - { .altcode = NULL }, /* 0xfedd */ - { .altcode = NULL }, /* 0xfede */ - { .altcode = NULL }, /* 0xfedf */ - { .altcode = NULL }, /* 0xfee0 (Pointer_Left) */ - { .altcode = NULL }, /* 0xfee1 (Pointer_Right) */ - { .altcode = NULL }, /* 0xfee2 (Pointer_Up) */ - { .altcode = NULL }, /* 0xfee3 (Pointer_Down) */ - { .altcode = NULL }, /* 0xfee4 (Pointer_UpLeft) */ - { .altcode = NULL }, /* 0xfee5 (Pointer_UpRight) */ - { .altcode = NULL }, /* 0xfee6 (Pointer_DownLeft) */ - { .altcode = NULL }, /* 0xfee7 (Pointer_DownRight) */ - { .altcode = NULL }, /* 0xfee8 (Pointer_Button_Dflt) */ - { .altcode = NULL }, /* 0xfee9 (Pointer_Button1) */ - { .altcode = NULL }, /* 0xfeea (Pointer_Button2) */ - { .altcode = NULL }, /* 0xfeeb (Pointer_Button3) */ - { .altcode = NULL }, /* 0xfeec (Pointer_Button4) */ - { .altcode = NULL }, /* 0xfeed (Pointer_Button5) */ - { .altcode = NULL }, /* 0xfeee (Pointer_DblClick_Dflt) */ - { .altcode = NULL }, /* 0xfeef (Pointer_DblClick1) */ - { .altcode = NULL }, /* 0xfef0 (Pointer_DblClick2) */ - { .altcode = NULL }, /* 0xfef1 (Pointer_DblClick3) */ - { .altcode = NULL }, /* 0xfef2 (Pointer_DblClick4) */ - { .altcode = NULL }, /* 0xfef3 (Pointer_DblClick5) */ - { .altcode = NULL }, /* 0xfef4 (Pointer_Drag_Dflt) */ - { .altcode = NULL }, /* 0xfef5 (Pointer_Drag1) */ - { .altcode = NULL }, /* 0xfef6 (Pointer_Drag2) */ - { .altcode = NULL }, /* 0xfef7 (Pointer_Drag3) */ - { .altcode = NULL }, /* 0xfef8 (Pointer_Drag4) */ - { .altcode = NULL }, /* 0xfef9 (Pointer_EnableKeys) */ - { .altcode = NULL }, /* 0xfefa (Pointer_Accelerate) */ - { .altcode = NULL }, /* 0xfefb (Pointer_DfltBtnNext) */ - { .altcode = NULL }, /* 0xfefc (Pointer_DfltBtnPrev) */ - { .altcode = NULL }, /* 0xfefd (Pointer_Drag5) */ - { .altcode = NULL }, /* 0xfefe */ - { .altcode = NULL }, /* 0xfeff */ - }, - { /* 0xff?? */ - { .altcode = NULL }, /* 0xff00 */ - { .altcode = NULL }, /* 0xff01 */ - { .altcode = NULL }, /* 0xff02 */ - { .altcode = NULL }, /* 0xff03 */ - { .altcode = NULL }, /* 0xff04 */ - { .altcode = NULL }, /* 0xff05 */ - { .altcode = NULL }, /* 0xff06 */ - { .altcode = NULL }, /* 0xff07 */ - { .altcode = NULL }, /* 0xff08 (BackSpace) */ - { .altcode = NULL }, /* 0xff09 (Tab) */ - { .altcode = NULL }, /* 0xff0a (Linefeed) */ - { .altcode = NULL }, /* 0xff0b (Clear) */ - { .altcode = NULL }, /* 0xff0c */ - { .altcode = NULL }, /* 0xff0d (Return) */ - { .altcode = NULL }, /* 0xff0e */ - { .altcode = NULL }, /* 0xff0f */ - { .altcode = NULL }, /* 0xff10 */ - { .altcode = NULL }, /* 0xff11 */ - { .altcode = NULL }, /* 0xff12 */ - { .altcode = NULL }, /* 0xff13 (Pause) */ - { .altcode = NULL }, /* 0xff14 (Scroll_Lock) */ - { .altcode = NULL }, /* 0xff15 (Sys_Req) */ - { .altcode = NULL }, /* 0xff16 */ - { .altcode = NULL }, /* 0xff17 */ - { .altcode = NULL }, /* 0xff18 */ - { .altcode = NULL }, /* 0xff19 */ - { .altcode = NULL }, /* 0xff1a */ - { .altcode = NULL }, /* 0xff1b (Escape) */ - { .altcode = NULL }, /* 0xff1c */ - { .altcode = NULL }, /* 0xff1d */ - { .altcode = NULL }, /* 0xff1e */ - { .altcode = NULL }, /* 0xff1f */ - { .altcode = NULL }, /* 0xff20 (Multi_key) */ - { .altcode = NULL }, /* 0xff21 (Kanji) */ - { .altcode = NULL }, /* 0xff22 (Muhenkan) */ - { .altcode = NULL }, /* 0xff23 (Henkan) */ - { .altcode = NULL }, /* 0xff24 (Romaji) */ - { .altcode = NULL }, /* 0xff25 (Hiragana) */ - { .altcode = NULL }, /* 0xff26 (Katakana) */ - { .altcode = NULL }, /* 0xff27 (Hiragana_Katakana) */ - { .altcode = NULL }, /* 0xff28 (Zenkaku) */ - { .altcode = NULL }, /* 0xff29 (Hankaku) */ - { .altcode = NULL }, /* 0xff2a (Zenkaku_Hankaku) */ - { .altcode = NULL }, /* 0xff2b (Touroku) */ - { .altcode = NULL }, /* 0xff2c (Massyo) */ - { .altcode = NULL }, /* 0xff2d (Kana_Lock) */ - { .altcode = NULL }, /* 0xff2e (Kana_Shift) */ - { .altcode = NULL }, /* 0xff2f (Eisu_Shift) */ - { .altcode = NULL }, /* 0xff30 (Eisu_toggle) */ - { .altcode = NULL }, /* 0xff31 (Hangul) */ - { .altcode = NULL }, /* 0xff32 (Hangul_Start) */ - { .altcode = NULL }, /* 0xff33 (Hangul_End) */ - { .altcode = NULL }, /* 0xff34 (Hangul_Hanja) */ - { .altcode = NULL }, /* 0xff35 (Hangul_Jamo) */ - { .altcode = NULL }, /* 0xff36 (Hangul_Romaja) */ - { .altcode = NULL }, /* 0xff37 (Hangul_Codeinput) */ - { .altcode = NULL }, /* 0xff38 (Hangul_Jeonja) */ - { .altcode = NULL }, /* 0xff39 (Hangul_Banja) */ - { .altcode = NULL }, /* 0xff3a (Hangul_PreHanja) */ - { .altcode = NULL }, /* 0xff3b (Hangul_PostHanja) */ - { .altcode = NULL }, /* 0xff3c (Hangul_SingleCandidate) */ - { .altcode = NULL }, /* 0xff3d (Hangul_MultipleCandidate) */ - { .altcode = NULL }, /* 0xff3e (Hangul_PreviousCandidate) */ - { .altcode = NULL }, /* 0xff3f (Hangul_Special) */ - { .altcode = NULL }, /* 0xff40 */ - { .altcode = NULL }, /* 0xff41 */ - { .altcode = NULL }, /* 0xff42 */ - { .altcode = NULL }, /* 0xff43 */ - { .altcode = NULL }, /* 0xff44 */ - { .altcode = NULL }, /* 0xff45 */ - { .altcode = NULL }, /* 0xff46 */ - { .altcode = NULL }, /* 0xff47 */ - { .altcode = NULL }, /* 0xff48 */ - { .altcode = NULL }, /* 0xff49 */ - { .altcode = NULL }, /* 0xff4a */ - { .altcode = NULL }, /* 0xff4b */ - { .altcode = NULL }, /* 0xff4c */ - { .altcode = NULL }, /* 0xff4d */ - { .altcode = NULL }, /* 0xff4e */ - { .altcode = NULL }, /* 0xff4f */ - { .altcode = NULL }, /* 0xff50 (Home) */ - { .altcode = NULL }, /* 0xff51 (Left) */ - { .altcode = NULL }, /* 0xff52 (Up) */ - { .altcode = NULL }, /* 0xff53 (Right) */ - { .altcode = NULL }, /* 0xff54 (Down) */ - { .altcode = NULL }, /* 0xff55 (Page_Up) */ - { .altcode = NULL }, /* 0xff56 (Page_Down) */ - { .altcode = NULL }, /* 0xff57 (End) */ - { .altcode = NULL }, /* 0xff58 (Begin) */ - { .altcode = NULL }, /* 0xff59 */ - { .altcode = NULL }, /* 0xff5a */ - { .altcode = NULL }, /* 0xff5b */ - { .altcode = NULL }, /* 0xff5c */ - { .altcode = NULL }, /* 0xff5d */ - { .altcode = NULL }, /* 0xff5e */ - { .altcode = NULL }, /* 0xff5f */ - { .altcode = NULL }, /* 0xff60 (Select) */ - { .altcode = NULL }, /* 0xff61 (Print) */ - { .altcode = NULL }, /* 0xff62 (Execute) */ - { .altcode = NULL }, /* 0xff63 (Insert) */ - { .altcode = NULL }, /* 0xff64 */ - { .altcode = NULL }, /* 0xff65 (Undo) */ - { .altcode = NULL }, /* 0xff66 (Redo) */ - { .altcode = NULL }, /* 0xff67 (Menu) */ - { .altcode = NULL }, /* 0xff68 (Find) */ - { .altcode = NULL }, /* 0xff69 (Cancel) */ - { .altcode = NULL }, /* 0xff6a (Help) */ - { .altcode = NULL }, /* 0xff6b (Break) */ - { .altcode = NULL }, /* 0xff6c */ - { .altcode = NULL }, /* 0xff6d */ - { .altcode = NULL }, /* 0xff6e */ - { .altcode = NULL }, /* 0xff6f */ - { .altcode = NULL }, /* 0xff70 */ - { .altcode = NULL }, /* 0xff71 */ - { .altcode = NULL }, /* 0xff72 */ - { .altcode = NULL }, /* 0xff73 */ - { .altcode = NULL }, /* 0xff74 */ - { .altcode = NULL }, /* 0xff75 */ - { .altcode = NULL }, /* 0xff76 */ - { .altcode = NULL }, /* 0xff77 */ - { .altcode = NULL }, /* 0xff78 */ - { .altcode = NULL }, /* 0xff79 */ - { .altcode = NULL }, /* 0xff7a */ - { .altcode = NULL }, /* 0xff7b */ - { .altcode = NULL }, /* 0xff7c */ - { .altcode = NULL }, /* 0xff7d */ - { .altcode = NULL }, /* 0xff7e (Hangul_switch) */ - { .altcode = NULL }, /* 0xff7f (Num_Lock) */ - { .altcode = NULL }, /* 0xff80 (KP_Space) */ - { .altcode = NULL }, /* 0xff81 */ - { .altcode = NULL }, /* 0xff82 */ - { .altcode = NULL }, /* 0xff83 */ - { .altcode = NULL }, /* 0xff84 */ - { .altcode = NULL }, /* 0xff85 */ - { .altcode = NULL }, /* 0xff86 */ - { .altcode = NULL }, /* 0xff87 */ - { .altcode = NULL }, /* 0xff88 */ - { .altcode = NULL }, /* 0xff89 (KP_Tab) */ - { .altcode = NULL }, /* 0xff8a */ - { .altcode = NULL }, /* 0xff8b */ - { .altcode = NULL }, /* 0xff8c */ - { .altcode = NULL }, /* 0xff8d (KP_Enter) */ - { .altcode = NULL }, /* 0xff8e */ - { .altcode = NULL }, /* 0xff8f */ - { .altcode = NULL }, /* 0xff90 */ - { .altcode = NULL }, /* 0xff91 (KP_F1) */ - { .altcode = NULL }, /* 0xff92 (KP_F2) */ - { .altcode = NULL }, /* 0xff93 (KP_F3) */ - { .altcode = NULL }, /* 0xff94 (KP_F4) */ - { .altcode = NULL }, /* 0xff95 (KP_Home) */ - { .altcode = NULL }, /* 0xff96 (KP_Left) */ - { .altcode = NULL }, /* 0xff97 (KP_Up) */ - { .altcode = NULL }, /* 0xff98 (KP_Right) */ - { .altcode = NULL }, /* 0xff99 (KP_Down) */ - { .altcode = NULL }, /* 0xff9a (KP_Page_Up) */ - { .altcode = NULL }, /* 0xff9b (KP_Page_Down) */ - { .altcode = NULL }, /* 0xff9c (KP_End) */ - { .altcode = NULL }, /* 0xff9d (KP_Begin) */ - { .altcode = NULL }, /* 0xff9e (KP_Insert) */ - { .altcode = NULL }, /* 0xff9f (KP_Delete) */ - { .altcode = NULL }, /* 0xffa0 */ - { .altcode = NULL }, /* 0xffa1 */ - { .altcode = NULL }, /* 0xffa2 */ - { .altcode = NULL }, /* 0xffa3 */ - { .altcode = NULL }, /* 0xffa4 */ - { .altcode = NULL }, /* 0xffa5 */ - { .altcode = NULL }, /* 0xffa6 */ - { .altcode = NULL }, /* 0xffa7 */ - { .altcode = NULL }, /* 0xffa8 */ - { .altcode = NULL }, /* 0xffa9 */ - { .altcode = NULL }, /* 0xffaa (KP_Multiply) */ - { .altcode = NULL }, /* 0xffab (KP_Add) */ - { .altcode = NULL }, /* 0xffac (KP_Separator) */ - { .altcode = NULL }, /* 0xffad (KP_Subtract) */ - { .altcode = NULL }, /* 0xffae (KP_Decimal) */ - { .altcode = NULL }, /* 0xffaf (KP_Divide) */ - { .altcode = NULL }, /* 0xffb0 (KP_0) */ - { .altcode = NULL }, /* 0xffb1 (KP_1) */ - { .altcode = NULL }, /* 0xffb2 (KP_2) */ - { .altcode = NULL }, /* 0xffb3 (KP_3) */ - { .altcode = NULL }, /* 0xffb4 (KP_4) */ - { .altcode = NULL }, /* 0xffb5 (KP_5) */ - { .altcode = NULL }, /* 0xffb6 (KP_6) */ - { .altcode = NULL }, /* 0xffb7 (KP_7) */ - { .altcode = NULL }, /* 0xffb8 (KP_8) */ - { .altcode = NULL }, /* 0xffb9 (KP_9) */ - { .altcode = NULL }, /* 0xffba */ - { .altcode = NULL }, /* 0xffbb */ - { .altcode = NULL }, /* 0xffbc */ - { .altcode = NULL }, /* 0xffbd (KP_Equal) */ - { .altcode = NULL }, /* 0xffbe (F1) */ - { .altcode = NULL }, /* 0xffbf (F2) */ - { .altcode = NULL }, /* 0xffc0 (F3) */ - { .altcode = NULL }, /* 0xffc1 (F4) */ - { .altcode = NULL }, /* 0xffc2 (F5) */ - { .altcode = NULL }, /* 0xffc3 (F6) */ - { .altcode = NULL }, /* 0xffc4 (F7) */ - { .altcode = NULL }, /* 0xffc5 (F8) */ - { .altcode = NULL }, /* 0xffc6 (F9) */ - { .altcode = NULL }, /* 0xffc7 (F10) */ - { .altcode = NULL }, /* 0xffc8 (L1) */ - { .altcode = NULL }, /* 0xffc9 (L2) */ - { .altcode = NULL }, /* 0xffca (L3) */ - { .altcode = NULL }, /* 0xffcb (L4) */ - { .altcode = NULL }, /* 0xffcc (L5) */ - { .altcode = NULL }, /* 0xffcd (L6) */ - { .altcode = NULL }, /* 0xffce (L7) */ - { .altcode = NULL }, /* 0xffcf (L8) */ - { .altcode = NULL }, /* 0xffd0 (L9) */ - { .altcode = NULL }, /* 0xffd1 (L10) */ - { .altcode = NULL }, /* 0xffd2 (R1) */ - { .altcode = NULL }, /* 0xffd3 (R2) */ - { .altcode = NULL }, /* 0xffd4 (R3) */ - { .altcode = NULL }, /* 0xffd5 (R4) */ - { .altcode = NULL }, /* 0xffd6 (R5) */ - { .altcode = NULL }, /* 0xffd7 (R6) */ - { .altcode = NULL }, /* 0xffd8 (R7) */ - { .altcode = NULL }, /* 0xffd9 (R8) */ - { .altcode = NULL }, /* 0xffda (R9) */ - { .altcode = NULL }, /* 0xffdb (R10) */ - { .altcode = NULL }, /* 0xffdc (R11) */ - { .altcode = NULL }, /* 0xffdd (R12) */ - { .altcode = NULL }, /* 0xffde (R13) */ - { .altcode = NULL }, /* 0xffdf (R14) */ - { .altcode = NULL }, /* 0xffe0 (R15) */ - { .altcode = NULL }, /* 0xffe1 (Shift_L) */ - { .altcode = NULL }, /* 0xffe2 (Shift_R) */ - { .altcode = NULL }, /* 0xffe3 (Control_L) */ - { .altcode = NULL }, /* 0xffe4 (Control_R) */ - { .altcode = NULL }, /* 0xffe5 (Caps_Lock) */ - { .altcode = NULL }, /* 0xffe6 (Shift_Lock) */ - { .altcode = NULL }, /* 0xffe7 (Meta_L) */ - { .altcode = NULL }, /* 0xffe8 (Meta_R) */ - { .altcode = NULL }, /* 0xffe9 (Alt_L) */ - { .altcode = NULL }, /* 0xffea (Alt_R) */ - { .altcode = NULL }, /* 0xffeb (Super_L) */ - { .altcode = NULL }, /* 0xffec (Super_R) */ - { .altcode = NULL }, /* 0xffed (Hyper_L) */ - { .altcode = NULL }, /* 0xffee (Hyper_R) */ - { .altcode = NULL }, /* 0xffef */ - { .altcode = NULL }, /* 0xfff0 */ - { .altcode = NULL }, /* 0xfff1 (braille_dot_1) */ - { .altcode = NULL }, /* 0xfff2 (braille_dot_2) */ - { .altcode = NULL }, /* 0xfff3 (braille_dot_3) */ - { .altcode = NULL }, /* 0xfff4 (braille_dot_4) */ - { .altcode = NULL }, /* 0xfff5 (braille_dot_5) */ - { .altcode = NULL }, /* 0xfff6 (braille_dot_6) */ - { .altcode = NULL }, /* 0xfff7 (braille_dot_7) */ - { .altcode = NULL }, /* 0xfff8 (braille_dot_8) */ - { .altcode = NULL }, /* 0xfff9 (braille_dot_9) */ - { .altcode = NULL }, /* 0xfffa (braille_dot_10) */ - { .altcode = NULL }, /* 0xfffb */ - { .altcode = NULL }, /* 0xfffc */ - { .altcode = NULL }, /* 0xfffd */ - { .altcode = NULL }, /* 0xfffe */ - { .altcode = NULL }, /* 0xffff (Delete) */ - }, -}; - From 2eb1d05704fbc2dcddb3ec2646d914d1db2b53bc Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Wed, 21 Mar 2012 10:45:40 -0700 Subject: [PATCH 119/253] Major refactor of keymap - now using simple keysym description lists, which can be hierarchical, and are loaded at connect time into the client's static keymapping. --- protocols/rdp/include/client.h | 2 +- protocols/rdp/include/rdp_keymap.h | 48 +- protocols/rdp/src/client.c | 43 +- protocols/rdp/src/guac_handlers.c | 33 +- protocols/rdp/src/rdp_keymap_en_us.c | 5786 ++------------------------ 5 files changed, 484 insertions(+), 5428 deletions(-) diff --git a/protocols/rdp/include/client.h b/protocols/rdp/include/client.h index 1a13feef..a6bb8016 100644 --- a/protocols/rdp/include/client.h +++ b/protocols/rdp/include/client.h @@ -65,7 +65,7 @@ typedef struct rdp_guac_client_data { const guac_layer* current_surface; - const guac_rdp_keysym_scancode_map* keysym_scancodes; + guac_rdp_static_keymap keymap; guac_rdp_keysym_state_map keysym_state; diff --git a/protocols/rdp/include/rdp_keymap.h b/protocols/rdp/include/rdp_keymap.h index bf426269..b0459294 100644 --- a/protocols/rdp/include/rdp_keymap.h +++ b/protocols/rdp/include/rdp_keymap.h @@ -42,7 +42,12 @@ * Represents a keysym-to-scancode mapping for RDP, with extra information * about the state of prerequisite keysyms. */ -typedef struct guac_rdp_scancode_map { +typedef struct guac_rdp_keysym_desc { + + /** + * The keysym being mapped. + */ + int keysym; /** * The scancode this keysym maps to. @@ -50,7 +55,7 @@ typedef struct guac_rdp_scancode_map { int scancode; /** - * Required RDP-specific flags + * Required RDP-specific flags. */ int flags; @@ -66,22 +71,47 @@ typedef struct guac_rdp_scancode_map { */ const int* clear_keysyms; -} guac_rdp_scancode_map; +} guac_rdp_keysym_desc; + +/** + * Hierarchical keysym mapping + */ +typedef struct guac_rdp_keymap guac_rdp_keymap; +struct guac_rdp_keymap { + + /** + * The parent mapping this map will inherit its initial mapping from. + * Any other mapping information will add to or override the mapping + * inherited from the parent. + */ + const guac_rdp_keymap* parent; + + /** + * Descriptive name of this keymap + */ + const char* name; + + /** + * Null-terminated array of scancode mappings. + */ + const guac_rdp_keysym_desc* mapping; + +}; + +/** + * Static mapping from keysyms to scancodes. + */ +typedef guac_rdp_keysym_desc guac_rdp_static_keymap[256][256]; /** * Mapping from keysym to current state */ typedef int guac_rdp_keysym_state_map[256][256]; -/** - * Static mapping from keysyms to scancodes. - */ -typedef guac_rdp_scancode_map guac_rdp_keysym_scancode_map[256][256]; - /** * Map of X11 keysyms to RDP scancodes (US English). */ -extern const guac_rdp_keysym_scancode_map guac_rdp_keysym_scancode_en_us; +extern const guac_rdp_keymap guac_rdp_keymap_en_us; /** * Simple macro for referencing the mapped value of an altcode or scancode for a given keysym. diff --git a/protocols/rdp/src/client.c b/protocols/rdp/src/client.c index 365bfa4c..42030b55 100644 --- a/protocols/rdp/src/client.c +++ b/protocols/rdp/src/client.c @@ -204,6 +204,35 @@ void rdp_freerdp_context_free(freerdp* instance, rdpContext* context) { /* EMPTY */ } +void __guac_rdp_client_load_keymap(guac_client* client, + const guac_rdp_keymap* keymap) { + + rdp_guac_client_data* guac_client_data = + (rdp_guac_client_data*) client->data; + /* Get mapping */ + const guac_rdp_keysym_desc* mapping = keymap->mapping; + + /* If parent exists, load parent first */ + if (keymap->parent != NULL) + __guac_rdp_client_load_keymap(client, keymap->parent); + + /* Log load */ + guac_client_log_info(client, "Loading keymap %s", keymap->name); + + /* Load mapping into keymap */ + while (mapping->keysym != 0) { + + /* Copy mapping */ + GUAC_RDP_KEYSYM_LOOKUP(guac_client_data->keymap, mapping->keysym) = + *mapping; + + /* Next keysym */ + mapping++; + + } + +} + int guac_client_init(guac_client* client, int argc, char** argv) { rdp_guac_client_data* guac_client_data; @@ -323,13 +352,19 @@ int guac_client_init(guac_client* client, int argc, char** argv) { guac_client_data->rdp_inst = rdp_inst; guac_client_data->mouse_button_mask = 0; guac_client_data->current_surface = GUAC_DEFAULT_LAYER; - guac_client_data->keysym_scancodes = &guac_rdp_keysym_scancode_en_us; - /* Clear keysym state mapping */ - memset(guac_client_data->keysym_state, 0, sizeof(guac_rdp_keysym_state_map)); + /* Clear keysym state mapping and keymap */ + memset(guac_client_data->keysym_state, 0, + sizeof(guac_rdp_keysym_state_map)); + + memset(guac_client_data->keymap, 0, + sizeof(guac_rdp_static_keymap)); - ((rdp_freerdp_context*) rdp_inst->context)->client = client; client->data = guac_client_data; + ((rdp_freerdp_context*) rdp_inst->context)->client = client; + + /* Load keymap into client */ + __guac_rdp_client_load_keymap(client, &guac_rdp_keymap_en_us); /* Connect to RDP server */ if (!freerdp_connect(rdp_inst)) { diff --git a/protocols/rdp/src/guac_handlers.c b/protocols/rdp/src/guac_handlers.c index 896a7a3d..1e3a08fa 100644 --- a/protocols/rdp/src/guac_handlers.c +++ b/protocols/rdp/src/guac_handlers.c @@ -231,11 +231,12 @@ void __guac_rdp_send_altcode(guac_client* client, int altcode) { rdp_guac_client_data* guac_client_data = (rdp_guac_client_data*) client->data; freerdp* rdp_inst = guac_client_data->rdp_inst; - const guac_rdp_keysym_scancode_map* keysym_scancodes = guac_client_data->keysym_scancodes; int i; /* Lookup scancode for Alt */ - int alt = GUAC_RDP_KEYSYM_LOOKUP(*keysym_scancodes, 0xFFE9 /* Alt_L */).scancode; + int alt = GUAC_RDP_KEYSYM_LOOKUP( + guac_client_data->keymap, + 0xFFE9 /* Alt_L */).scancode; /* Release all pressed modifiers */ __guac_rdp_update_keysyms(client, GUAC_KEYSYMS_ALL_MODIFIERS, 1, 0); @@ -248,7 +249,7 @@ void __guac_rdp_send_altcode(guac_client* client, int altcode) { /* Get scancode of keypad digit */ int scancode = GUAC_RDP_KEYSYM_LOOKUP( - *keysym_scancodes, + guac_client_data->keymap, 0xFFB0 + (altcode / 1000) ).scancode; @@ -273,39 +274,39 @@ int __guac_rdp_send_keysym(guac_client* client, int keysym, int pressed) { rdp_guac_client_data* guac_client_data = (rdp_guac_client_data*) client->data; freerdp* rdp_inst = guac_client_data->rdp_inst; - const guac_rdp_keysym_scancode_map* keysym_scancodes = guac_client_data->keysym_scancodes; /* If keysym can be in lookup table */ if (keysym <= 0xFFFF) { /* Look up scancode mapping */ - const guac_rdp_scancode_map* scancode_map = &GUAC_RDP_KEYSYM_LOOKUP(*keysym_scancodes, keysym); + const guac_rdp_keysym_desc* keysym_desc = + &GUAC_RDP_KEYSYM_LOOKUP(guac_client_data->keymap, keysym); /* If defined, send event */ - if (scancode_map->scancode != 0) { + if (keysym_desc->scancode != 0) { /* If defined, send any prerequesite keys that must be set */ - if (scancode_map->set_keysyms != NULL) - __guac_rdp_update_keysyms(client, scancode_map->set_keysyms, 0, 1); + if (keysym_desc->set_keysyms != NULL) + __guac_rdp_update_keysyms(client, keysym_desc->set_keysyms, 0, 1); /* If defined, release any keys that must be cleared */ - if (scancode_map->clear_keysyms != NULL) - __guac_rdp_update_keysyms(client, scancode_map->clear_keysyms, 1, 0); + if (keysym_desc->clear_keysyms != NULL) + __guac_rdp_update_keysyms(client, keysym_desc->clear_keysyms, 1, 0); /* Send actual key */ rdp_inst->input->KeyboardEvent( rdp_inst->input, - scancode_map->flags + keysym_desc->flags | (pressed ? KBD_FLAGS_DOWN : KBD_FLAGS_RELEASE), - scancode_map->scancode); + keysym_desc->scancode); /* If defined, release any keys that were originally released */ - if (scancode_map->set_keysyms != NULL) - __guac_rdp_update_keysyms(client, scancode_map->set_keysyms, 0, 0); + if (keysym_desc->set_keysyms != NULL) + __guac_rdp_update_keysyms(client, keysym_desc->set_keysyms, 0, 0); /* If defined, send any keys that were originally set */ - if (scancode_map->clear_keysyms != NULL) - __guac_rdp_update_keysyms(client, scancode_map->clear_keysyms, 1, 1); + if (keysym_desc->clear_keysyms != NULL) + __guac_rdp_update_keysyms(client, keysym_desc->clear_keysyms, 1, 1); } diff --git a/protocols/rdp/src/rdp_keymap_en_us.c b/protocols/rdp/src/rdp_keymap_en_us.c index 10d86de0..7e4605ac 100644 --- a/protocols/rdp/src/rdp_keymap_en_us.c +++ b/protocols/rdp/src/rdp_keymap_en_us.c @@ -40,5403 +40,393 @@ #include "rdp_keymap.h" -const guac_rdp_keysym_scancode_map guac_rdp_keysym_scancode_en_us = { - { /* 0x00?? */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0000 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0001 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0002 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0003 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0004 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0005 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0006 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0007 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0008 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0009 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x000a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x000b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x000c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x000d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x000e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x000f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0010 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0011 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0012 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0013 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0014 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0015 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0016 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0017 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0018 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0019 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x001a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x001b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x001c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x001d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x001e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x001f */ - { .scancode = 0x39, .flags = 0x00 }, /* 0x0020 (space) */ - { .scancode = 0x02, .flags = 0x00 }, /* 0x0021 (exclam) */ - { .scancode = 0x28, .flags = 0x00 }, /* 0x0022 (quotedbl) */ - { .scancode = 0x04, .flags = 0x00 }, /* 0x0023 (numbersign) */ - { .scancode = 0x05, .flags = 0x00, - .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* 0x0024 (dollar) */ - { .scancode = 0x06, .flags = 0x00 }, /* 0x0025 (percent) */ - { .scancode = 0x08, .flags = 0x00 }, /* 0x0026 (ampersand) */ - { .scancode = 0x28, .flags = 0x00 }, /* 0x0027 (quoteright) */ - { .scancode = 0x0A, .flags = 0x00 }, /* 0x0028 (parenleft) */ - { .scancode = 0x0B, .flags = 0x00 }, /* 0x0029 (parenright) */ - { .scancode = 0x09, .flags = 0x00 }, /* 0x002a (asterisk) */ - { .scancode = 0x0D, .flags = 0x00 }, /* 0x002b (plus) */ - { .scancode = 0x33, .flags = 0x00 }, /* 0x002c (comma) */ - { .scancode = 0x0C, .flags = 0x00 }, /* 0x002d (minus) */ - { .scancode = 0x34, .flags = 0x00 }, /* 0x002e (period) */ - { .scancode = 0x35, .flags = 0x00 }, /* 0x002f (slash) */ - { .scancode = 0x0B, .flags = 0x00 }, /* 0x0030 (0) */ - { .scancode = 0x02, .flags = 0x00 }, /* 0x0031 (1) */ - { .scancode = 0x03, .flags = 0x00 }, /* 0x0032 (2) */ - { .scancode = 0x04, .flags = 0x00 }, /* 0x0033 (3) */ - { .scancode = 0x05, .flags = 0x00 }, /* 0x0034 (4) */ - { .scancode = 0x06, .flags = 0x00 }, /* 0x0035 (5) */ - { .scancode = 0x07, .flags = 0x00 }, /* 0x0036 (6) */ - { .scancode = 0x08, .flags = 0x00 }, /* 0x0037 (7) */ - { .scancode = 0x09, .flags = 0x00 }, /* 0x0038 (8) */ - { .scancode = 0x0A, .flags = 0x00 }, /* 0x0039 (9) */ - { .scancode = 0x27, .flags = 0x00 }, /* 0x003a (colon) */ - { .scancode = 0x27, .flags = 0x00 }, /* 0x003b (semicolon) */ - { .scancode = 0x33, .flags = 0x00 }, /* 0x003c (less) */ - { .scancode = 0x0D, .flags = 0x00 }, /* 0x003d (equal) */ - { .scancode = 0x34, .flags = 0x00 }, /* 0x003e (greater) */ - { .scancode = 0x35, .flags = 0x00 }, /* 0x003f (question) */ - { .scancode = 0x03, .flags = 0x00 }, /* 0x0040 (at) */ - { .scancode = 0x1E, .flags = 0x00 }, /* 0x0041 (A) */ - { .scancode = 0x30, .flags = 0x00 }, /* 0x0042 (B) */ - { .scancode = 0x2E, .flags = 0x00 }, /* 0x0043 (C) */ - { .scancode = 0x20, .flags = 0x00 }, /* 0x0044 (D) */ - { .scancode = 0x12, .flags = 0x00 }, /* 0x0045 (E) */ - { .scancode = 0x21, .flags = 0x00 }, /* 0x0046 (F) */ - { .scancode = 0x22, .flags = 0x00 }, /* 0x0047 (G) */ - { .scancode = 0x23, .flags = 0x00 }, /* 0x0048 (H) */ - { .scancode = 0x17, .flags = 0x00 }, /* 0x0049 (I) */ - { .scancode = 0x24, .flags = 0x00 }, /* 0x004a (J) */ - { .scancode = 0x25, .flags = 0x00 }, /* 0x004b (K) */ - { .scancode = 0x26, .flags = 0x00 }, /* 0x004c (L) */ - { .scancode = 0x32, .flags = 0x00 }, /* 0x004d (M) */ - { .scancode = 0x31, .flags = 0x00 }, /* 0x004e (N) */ - { .scancode = 0x18, .flags = 0x00 }, /* 0x004f (O) */ - { .scancode = 0x19, .flags = 0x00 }, /* 0x0050 (P) */ - { .scancode = 0x10, .flags = 0x00 }, /* 0x0051 (Q) */ - { .scancode = 0x13, .flags = 0x00 }, /* 0x0052 (R) */ - { .scancode = 0x1F, .flags = 0x00 }, /* 0x0053 (S) */ - { .scancode = 0x14, .flags = 0x00 }, /* 0x0054 (T) */ - { .scancode = 0x16, .flags = 0x00 }, /* 0x0055 (U) */ - { .scancode = 0x2F, .flags = 0x00 }, /* 0x0056 (V) */ - { .scancode = 0x11, .flags = 0x00 }, /* 0x0057 (W) */ - { .scancode = 0x2D, .flags = 0x00 }, /* 0x0058 (X) */ - { .scancode = 0x15, .flags = 0x00 }, /* 0x0059 (Y) */ - { .scancode = 0x2C, .flags = 0x00 }, /* 0x005a (Z) */ - { .scancode = 0x1A, .flags = 0x00 }, /* 0x005b (bracketleft) */ - { .scancode = 0x2B, .flags = 0x00 }, /* 0x005c (backslash) */ - { .scancode = 0x1B, .flags = 0x00 }, /* 0x005d (bracketright) */ - { .scancode = 0x29, .flags = 0x00 }, /* 0x005e (asciicircum) */ - { .scancode = 0x0C, .flags = 0x00 }, /* 0x005f (underscore) */ - { .scancode = 0x29, .flags = 0x00 }, /* 0x0060 (quoteleft) */ - { .scancode = 0x1E, .flags = 0x00 }, /* 0x0061 (a) */ - { .scancode = 0x30, .flags = 0x00 }, /* 0x0062 (b) */ - { .scancode = 0x2E, .flags = 0x00 }, /* 0x0063 (c) */ - { .scancode = 0x20, .flags = 0x00 }, /* 0x0064 (d) */ - { .scancode = 0x12, .flags = 0x00 }, /* 0x0065 (e) */ - { .scancode = 0x21, .flags = 0x00 }, /* 0x0066 (f) */ - { .scancode = 0x22, .flags = 0x00 }, /* 0x0067 (g) */ - { .scancode = 0x23, .flags = 0x00 }, /* 0x0068 (h) */ - { .scancode = 0x17, .flags = 0x00 }, /* 0x0069 (i) */ - { .scancode = 0x24, .flags = 0x00 }, /* 0x006a (j) */ - { .scancode = 0x25, .flags = 0x00 }, /* 0x006b (k) */ - { .scancode = 0x26, .flags = 0x00 }, /* 0x006c (l) */ - { .scancode = 0x32, .flags = 0x00 }, /* 0x006d (m) */ - { .scancode = 0x31, .flags = 0x00 }, /* 0x006e (n) */ - { .scancode = 0x18, .flags = 0x00 }, /* 0x006f (o) */ - { .scancode = 0x19, .flags = 0x00 }, /* 0x0070 (p) */ - { .scancode = 0x10, .flags = 0x00 }, /* 0x0071 (q) */ - { .scancode = 0x13, .flags = 0x00 }, /* 0x0072 (r) */ - { .scancode = 0x1F, .flags = 0x00 }, /* 0x0073 (s) */ - { .scancode = 0x14, .flags = 0x00 }, /* 0x0074 (t) */ - { .scancode = 0x16, .flags = 0x00 }, /* 0x0075 (u) */ - { .scancode = 0x2F, .flags = 0x00 }, /* 0x0076 (v) */ - { .scancode = 0x11, .flags = 0x00 }, /* 0x0077 (w) */ - { .scancode = 0x2D, .flags = 0x00 }, /* 0x0078 (x) */ - { .scancode = 0x15, .flags = 0x00 }, /* 0x0079 (y) */ - { .scancode = 0x2C, .flags = 0x00 }, /* 0x007a (z) */ - { .scancode = 0x1A, .flags = 0x00 }, /* 0x007b (braceleft) */ - { .scancode = 0x2B, .flags = 0x00 }, /* 0x007c (bar) */ - { .scancode = 0x1B, .flags = 0x00 }, /* 0x007d (braceright) */ - { .scancode = 0x29, .flags = 0x00 }, /* 0x007e (asciitilde) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x007f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0080 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0081 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0082 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0083 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0084 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0085 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0086 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0087 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0088 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0089 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x008a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x008b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x008c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x008d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x008e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x008f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0090 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0091 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0092 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0093 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0094 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0095 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0096 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0097 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0098 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0099 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x009a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x009b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x009c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x009d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x009e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x009f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00a0 (nobreakspace) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00a1 (exclamdown) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00a2 (cent) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00a3 (sterling) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00a4 (currency) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00a5 (yen) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00a6 (brokenbar) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00a7 (section) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00a8 (diaeresis) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00a9 (copyright) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00aa (ordfeminine) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00ab (guillemotleft) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00ac (notsign) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00ad (hyphen) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00ae (registered) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00af (macron) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00b0 (degree) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00b1 (plusminus) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00b2 (twosuperior) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00b3 (threesuperior) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00b4 (acute) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00b5 (mu) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00b6 (paragraph) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00b7 (periodcentered) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00b8 (cedilla) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00b9 (onesuperior) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00ba (masculine) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00bb (guillemotright) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00bc (onequarter) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00bd (onehalf) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00be (threequarters) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00bf (questiondown) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00c0 (Agrave) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00c1 (Aacute) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00c2 (Acircumflex) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00c3 (Atilde) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00c4 (Adiaeresis) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00c5 (Aring) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00c6 (AE) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00c7 (Ccedilla) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00c8 (Egrave) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00c9 (Eacute) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00ca (Ecircumflex) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00cb (Ediaeresis) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00cc (Igrave) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00cd (Iacute) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00ce (Icircumflex) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00cf (Idiaeresis) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00d0 (Eth) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00d1 (Ntilde) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00d2 (Ograve) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00d3 (Oacute) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00d4 (Ocircumflex) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00d5 (Otilde) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00d6 (Odiaeresis) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00d7 (multiply) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00d8 (Ooblique) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00d9 (Ugrave) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00da (Uacute) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00db (Ucircumflex) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00dc (Udiaeresis) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00dd (Yacute) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00de (Thorn) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00df (ssharp) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00e0 (agrave) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00e1 (aacute) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00e2 (acircumflex) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00e3 (atilde) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00e4 (adiaeresis) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00e5 (aring) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00e6 (ae) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00e7 (ccedilla) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00e8 (egrave) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00e9 (eacute) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00ea (ecircumflex) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00eb (ediaeresis) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00ec (igrave) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00ed (iacute) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00ee (icircumflex) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00ef (idiaeresis) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00f0 (eth) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00f1 (ntilde) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00f2 (ograve) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00f3 (oacute) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00f4 (ocircumflex) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00f5 (otilde) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00f6 (odiaeresis) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00f7 (division) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00f8 (ooblique) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00f9 (ugrave) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00fa (uacute) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00fb (ucircumflex) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00fc (udiaeresis) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00fd (yacute) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00fe (thorn) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x00ff (ydiaeresis) */ - }, - { /* 0x01?? */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0100 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0101 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0102 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0103 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0104 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0105 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0106 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0107 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0108 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0109 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x010a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x010b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x010c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x010d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x010e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x010f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0110 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0111 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0112 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0113 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0114 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0115 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0116 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0117 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0118 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0119 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x011a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x011b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x011c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x011d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x011e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x011f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0120 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0121 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0122 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0123 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0124 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0125 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0126 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0127 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0128 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0129 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x012a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x012b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x012c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x012d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x012e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x012f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0130 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0131 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0132 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0133 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0134 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0135 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0136 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0137 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0138 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0139 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x013a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x013b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x013c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x013d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x013e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x013f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0140 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0141 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0142 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0143 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0144 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0145 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0146 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0147 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0148 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0149 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x014a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x014b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x014c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x014d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x014e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x014f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0150 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0151 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0152 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0153 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0154 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0155 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0156 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0157 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0158 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0159 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x015a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x015b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x015c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x015d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x015e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x015f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0160 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0161 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0162 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0163 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0164 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0165 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0166 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0167 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0168 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0169 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x016a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x016b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x016c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x016d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x016e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x016f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0170 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0171 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0172 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0173 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0174 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0175 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0176 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0177 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0178 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0179 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x017a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x017b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x017c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x017d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x017e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x017f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0180 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0181 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0182 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0183 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0184 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0185 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0186 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0187 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0188 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0189 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x018a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x018b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x018c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x018d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x018e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x018f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0190 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0191 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0192 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0193 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0194 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0195 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0196 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0197 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0198 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0199 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x019a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x019b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x019c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x019d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x019e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x019f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01a0 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01a1 (Aogonek) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01a2 (breve) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01a3 (Lstroke) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01a4 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01a5 (Lcaron) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01a6 (Sacute) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01a7 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01a8 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01a9 (Scaron) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01aa (Scedilla) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01ab (Tcaron) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01ac (Zacute) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01ad */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01ae (Zcaron) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01af (Zabovedot) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01b0 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01b1 (aogonek) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01b2 (ogonek) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01b3 (lstroke) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01b4 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01b5 (lcaron) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01b6 (sacute) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01b7 (caron) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01b8 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01b9 (scaron) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01ba (scedilla) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01bb (tcaron) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01bc (zacute) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01bd (doubleacute) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01be (zcaron) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01bf (zabovedot) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01c0 (Racute) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01c1 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01c2 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01c3 (Abreve) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01c4 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01c5 (Lacute) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01c6 (Cacute) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01c7 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01c8 (Ccaron) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01c9 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01ca (Eogonek) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01cb */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01cc (Ecaron) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01cd */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01ce */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01cf (Dcaron) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01d0 (Dstroke) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01d1 (Nacute) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01d2 (Ncaron) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01d3 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01d4 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01d5 (Odoubleacute) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01d6 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01d7 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01d8 (Rcaron) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01d9 (Uring) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01da */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01db (Udoubleacute) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01dc */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01dd */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01de (Tcedilla) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01df */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01e0 (racute) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01e1 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01e2 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01e3 (abreve) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01e4 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01e5 (lacute) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01e6 (cacute) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01e7 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01e8 (ccaron) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01e9 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01ea (eogonek) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01eb */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01ec (ecaron) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01ed */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01ee */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01ef (dcaron) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01f0 (dstroke) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01f1 (nacute) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01f2 (ncaron) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01f3 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01f4 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01f5 (odoubleacute) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01f6 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01f7 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01f8 (rcaron) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01f9 (uring) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01fa */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01fb (udoubleacute) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01fc */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01fd */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01fe (tcedilla) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x01ff (abovedot) */ - }, - { /* 0x02?? */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0200 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0201 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0202 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0203 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0204 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0205 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0206 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0207 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0208 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0209 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x020a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x020b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x020c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x020d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x020e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x020f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0210 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0211 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0212 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0213 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0214 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0215 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0216 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0217 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0218 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0219 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x021a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x021b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x021c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x021d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x021e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x021f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0220 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0221 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0222 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0223 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0224 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0225 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0226 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0227 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0228 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0229 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x022a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x022b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x022c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x022d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x022e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x022f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0230 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0231 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0232 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0233 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0234 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0235 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0236 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0237 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0238 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0239 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x023a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x023b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x023c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x023d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x023e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x023f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0240 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0241 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0242 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0243 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0244 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0245 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0246 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0247 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0248 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0249 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x024a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x024b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x024c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x024d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x024e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x024f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0250 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0251 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0252 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0253 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0254 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0255 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0256 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0257 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0258 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0259 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x025a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x025b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x025c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x025d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x025e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x025f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0260 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0261 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0262 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0263 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0264 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0265 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0266 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0267 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0268 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0269 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x026a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x026b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x026c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x026d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x026e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x026f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0270 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0271 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0272 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0273 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0274 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0275 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0276 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0277 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0278 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0279 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x027a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x027b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x027c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x027d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x027e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x027f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0280 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0281 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0282 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0283 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0284 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0285 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0286 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0287 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0288 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0289 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x028a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x028b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x028c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x028d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x028e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x028f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0290 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0291 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0292 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0293 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0294 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0295 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0296 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0297 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0298 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0299 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x029a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x029b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x029c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x029d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x029e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x029f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02a0 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02a1 (Hstroke) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02a2 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02a3 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02a4 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02a5 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02a6 (Hcircumflex) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02a7 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02a8 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02a9 (Iabovedot) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02aa */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02ab (Gbreve) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02ac (Jcircumflex) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02ad */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02ae */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02af */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02b0 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02b1 (hstroke) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02b2 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02b3 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02b4 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02b5 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02b6 (hcircumflex) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02b7 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02b8 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02b9 (idotless) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02ba */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02bb (gbreve) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02bc (jcircumflex) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02bd */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02be */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02bf */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02c0 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02c1 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02c2 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02c3 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02c4 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02c5 (Cabovedot) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02c6 (Ccircumflex) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02c7 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02c8 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02c9 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02ca */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02cb */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02cc */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02cd */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02ce */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02cf */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02d0 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02d1 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02d2 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02d3 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02d4 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02d5 (Gabovedot) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02d6 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02d7 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02d8 (Gcircumflex) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02d9 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02da */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02db */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02dc */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02dd (Ubreve) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02de (Scircumflex) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02df */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02e0 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02e1 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02e2 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02e3 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02e4 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02e5 (cabovedot) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02e6 (ccircumflex) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02e7 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02e8 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02e9 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02ea */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02eb */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02ec */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02ed */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02ee */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02ef */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02f0 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02f1 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02f2 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02f3 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02f4 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02f5 (gabovedot) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02f6 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02f7 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02f8 (gcircumflex) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02f9 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02fa */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02fb */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02fc */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02fd (ubreve) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02fe (scircumflex) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x02ff */ - }, - { /* 0x03?? */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0300 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0301 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0302 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0303 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0304 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0305 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0306 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0307 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0308 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0309 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x030a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x030b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x030c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x030d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x030e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x030f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0310 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0311 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0312 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0313 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0314 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0315 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0316 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0317 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0318 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0319 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x031a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x031b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x031c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x031d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x031e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x031f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0320 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0321 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0322 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0323 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0324 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0325 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0326 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0327 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0328 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0329 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x032a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x032b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x032c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x032d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x032e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x032f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0330 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0331 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0332 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0333 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0334 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0335 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0336 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0337 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0338 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0339 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x033a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x033b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x033c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x033d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x033e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x033f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0340 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0341 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0342 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0343 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0344 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0345 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0346 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0347 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0348 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0349 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x034a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x034b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x034c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x034d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x034e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x034f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0350 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0351 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0352 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0353 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0354 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0355 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0356 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0357 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0358 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0359 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x035a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x035b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x035c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x035d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x035e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x035f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0360 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0361 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0362 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0363 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0364 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0365 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0366 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0367 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0368 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0369 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x036a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x036b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x036c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x036d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x036e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x036f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0370 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0371 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0372 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0373 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0374 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0375 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0376 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0377 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0378 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0379 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x037a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x037b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x037c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x037d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x037e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x037f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0380 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0381 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0382 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0383 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0384 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0385 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0386 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0387 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0388 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0389 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x038a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x038b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x038c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x038d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x038e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x038f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0390 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0391 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0392 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0393 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0394 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0395 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0396 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0397 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0398 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0399 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x039a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x039b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x039c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x039d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x039e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x039f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03a0 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03a1 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03a2 (kappa) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03a3 (Rcedilla) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03a4 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03a5 (Itilde) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03a6 (Lcedilla) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03a7 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03a8 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03a9 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03aa (Emacron) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03ab (Gcedilla) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03ac (Tslash) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03ad */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03ae */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03af */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03b0 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03b1 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03b2 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03b3 (rcedilla) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03b4 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03b5 (itilde) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03b6 (lcedilla) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03b7 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03b8 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03b9 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03ba (emacron) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03bb (gcedilla) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03bc (tslash) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03bd (ENG) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03be */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03bf (eng) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03c0 (Amacron) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03c1 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03c2 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03c3 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03c4 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03c5 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03c6 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03c7 (Iogonek) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03c8 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03c9 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03ca */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03cb */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03cc (Eabovedot) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03cd */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03ce */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03cf (Imacron) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03d0 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03d1 (Ncedilla) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03d2 (Omacron) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03d3 (Kcedilla) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03d4 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03d5 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03d6 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03d7 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03d8 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03d9 (Uogonek) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03da */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03db */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03dc */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03dd (Utilde) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03de (Umacron) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03df */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03e0 (amacron) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03e1 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03e2 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03e3 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03e4 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03e5 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03e6 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03e7 (iogonek) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03e8 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03e9 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03ea */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03eb */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03ec (eabovedot) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03ed */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03ee */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03ef (imacron) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03f0 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03f1 (ncedilla) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03f2 (omacron) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03f3 (kcedilla) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03f4 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03f5 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03f6 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03f7 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03f8 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03f9 (uogonek) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03fa */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03fb */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03fc */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03fd (utilde) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03fe (umacron) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x03ff */ - }, - { /* 0x04?? */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0400 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0401 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0402 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0403 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0404 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0405 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0406 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0407 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0408 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0409 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x040a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x040b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x040c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x040d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x040e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x040f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0410 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0411 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0412 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0413 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0414 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0415 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0416 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0417 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0418 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0419 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x041a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x041b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x041c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x041d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x041e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x041f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0420 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0421 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0422 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0423 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0424 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0425 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0426 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0427 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0428 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0429 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x042a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x042b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x042c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x042d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x042e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x042f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0430 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0431 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0432 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0433 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0434 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0435 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0436 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0437 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0438 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0439 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x043a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x043b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x043c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x043d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x043e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x043f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0440 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0441 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0442 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0443 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0444 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0445 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0446 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0447 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0448 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0449 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x044a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x044b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x044c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x044d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x044e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x044f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0450 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0451 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0452 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0453 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0454 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0455 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0456 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0457 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0458 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0459 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x045a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x045b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x045c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x045d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x045e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x045f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0460 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0461 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0462 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0463 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0464 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0465 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0466 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0467 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0468 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0469 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x046a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x046b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x046c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x046d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x046e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x046f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0470 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0471 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0472 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0473 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0474 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0475 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0476 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0477 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0478 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0479 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x047a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x047b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x047c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x047d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x047e (overline) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x047f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0480 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0481 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0482 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0483 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0484 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0485 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0486 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0487 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0488 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0489 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x048a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x048b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x048c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x048d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x048e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x048f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0490 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0491 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0492 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0493 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0494 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0495 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0496 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0497 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0498 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0499 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x049a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x049b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x049c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x049d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x049e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x049f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04a0 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04a1 (kana_fullstop) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04a2 (kana_openingbracket) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04a3 (kana_closingbracket) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04a4 (kana_comma) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04a5 (kana_middledot) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04a6 (kana_WO) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04a7 (kana_a) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04a8 (kana_i) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04a9 (kana_u) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04aa (kana_e) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04ab (kana_o) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04ac (kana_ya) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04ad (kana_yu) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04ae (kana_yo) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04af (kana_tu) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04b0 (prolongedsound) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04b1 (kana_A) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04b2 (kana_I) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04b3 (kana_U) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04b4 (kana_E) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04b5 (kana_O) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04b6 (kana_KA) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04b7 (kana_KI) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04b8 (kana_KU) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04b9 (kana_KE) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04ba (kana_KO) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04bb (kana_SA) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04bc (kana_SHI) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04bd (kana_SU) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04be (kana_SE) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04bf (kana_SO) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04c0 (kana_TA) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04c1 (kana_TI) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04c2 (kana_TU) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04c3 (kana_TE) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04c4 (kana_TO) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04c5 (kana_NA) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04c6 (kana_NI) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04c7 (kana_NU) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04c8 (kana_NE) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04c9 (kana_NO) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04ca (kana_HA) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04cb (kana_HI) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04cc (kana_HU) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04cd (kana_HE) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04ce (kana_HO) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04cf (kana_MA) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04d0 (kana_MI) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04d1 (kana_MU) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04d2 (kana_ME) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04d3 (kana_MO) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04d4 (kana_YA) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04d5 (kana_YU) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04d6 (kana_YO) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04d7 (kana_RA) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04d8 (kana_RI) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04d9 (kana_RU) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04da (kana_RE) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04db (kana_RO) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04dc (kana_WA) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04dd (kana_N) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04de (voicedsound) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04df (semivoicedsound) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04e0 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04e1 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04e2 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04e3 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04e4 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04e5 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04e6 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04e7 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04e8 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04e9 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04ea */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04eb */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04ec */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04ed */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04ee */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04ef */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04f0 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04f1 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04f2 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04f3 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04f4 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04f5 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04f6 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04f7 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04f8 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04f9 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04fa */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04fb */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04fc */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04fd */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04fe */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x04ff */ - }, - { /* 0x05?? */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0500 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0501 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0502 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0503 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0504 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0505 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0506 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0507 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0508 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0509 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x050a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x050b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x050c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x050d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x050e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x050f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0510 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0511 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0512 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0513 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0514 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0515 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0516 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0517 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0518 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0519 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x051a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x051b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x051c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x051d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x051e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x051f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0520 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0521 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0522 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0523 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0524 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0525 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0526 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0527 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0528 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0529 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x052a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x052b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x052c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x052d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x052e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x052f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0530 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0531 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0532 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0533 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0534 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0535 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0536 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0537 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0538 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0539 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x053a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x053b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x053c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x053d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x053e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x053f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0540 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0541 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0542 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0543 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0544 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0545 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0546 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0547 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0548 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0549 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x054a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x054b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x054c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x054d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x054e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x054f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0550 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0551 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0552 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0553 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0554 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0555 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0556 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0557 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0558 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0559 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x055a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x055b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x055c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x055d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x055e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x055f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0560 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0561 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0562 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0563 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0564 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0565 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0566 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0567 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0568 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0569 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x056a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x056b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x056c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x056d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x056e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x056f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0570 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0571 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0572 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0573 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0574 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0575 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0576 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0577 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0578 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0579 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x057a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x057b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x057c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x057d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x057e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x057f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0580 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0581 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0582 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0583 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0584 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0585 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0586 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0587 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0588 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0589 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x058a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x058b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x058c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x058d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x058e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x058f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0590 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0591 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0592 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0593 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0594 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0595 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0596 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0597 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0598 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0599 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x059a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x059b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x059c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x059d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x059e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x059f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05a0 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05a1 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05a2 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05a3 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05a4 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05a5 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05a6 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05a7 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05a8 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05a9 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05aa */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05ab */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05ac (Arabic_comma) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05ad */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05ae */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05af */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05b0 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05b1 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05b2 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05b3 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05b4 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05b5 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05b6 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05b7 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05b8 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05b9 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05ba */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05bb (Arabic_semicolon) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05bc */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05bd */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05be */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05bf (Arabic_question_mark) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05c0 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05c1 (Arabic_hamza) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05c2 (Arabic_maddaonalef) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05c3 (Arabic_hamzaonalef) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05c4 (Arabic_hamzaonwaw) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05c5 (Arabic_hamzaunderalef) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05c6 (Arabic_hamzaonyeh) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05c7 (Arabic_alef) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05c8 (Arabic_beh) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05c9 (Arabic_tehmarbuta) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05ca (Arabic_teh) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05cb (Arabic_theh) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05cc (Arabic_jeem) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05cd (Arabic_hah) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05ce (Arabic_khah) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05cf (Arabic_dal) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05d0 (Arabic_thal) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05d1 (Arabic_ra) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05d2 (Arabic_zain) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05d3 (Arabic_seen) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05d4 (Arabic_sheen) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05d5 (Arabic_sad) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05d6 (Arabic_dad) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05d7 (Arabic_tah) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05d8 (Arabic_zah) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05d9 (Arabic_ain) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05da (Arabic_ghain) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05db */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05dc */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05dd */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05de */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05df */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05e0 (Arabic_tatweel) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05e1 (Arabic_feh) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05e2 (Arabic_qaf) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05e3 (Arabic_kaf) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05e4 (Arabic_lam) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05e5 (Arabic_meem) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05e6 (Arabic_noon) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05e7 (Arabic_heh) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05e8 (Arabic_waw) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05e9 (Arabic_alefmaksura) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05ea (Arabic_yeh) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05eb (Arabic_fathatan) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05ec (Arabic_dammatan) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05ed (Arabic_kasratan) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05ee (Arabic_fatha) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05ef (Arabic_damma) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05f0 (Arabic_kasra) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05f1 (Arabic_shadda) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05f2 (Arabic_sukun) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05f3 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05f4 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05f5 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05f6 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05f7 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05f8 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05f9 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05fa */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05fb */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05fc */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05fd */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05fe */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x05ff */ - }, - { /* 0x06?? */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0600 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0601 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0602 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0603 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0604 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0605 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0606 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0607 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0608 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0609 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x060a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x060b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x060c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x060d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x060e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x060f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0610 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0611 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0612 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0613 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0614 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0615 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0616 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0617 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0618 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0619 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x061a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x061b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x061c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x061d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x061e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x061f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0620 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0621 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0622 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0623 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0624 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0625 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0626 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0627 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0628 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0629 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x062a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x062b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x062c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x062d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x062e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x062f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0630 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0631 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0632 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0633 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0634 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0635 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0636 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0637 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0638 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0639 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x063a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x063b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x063c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x063d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x063e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x063f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0640 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0641 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0642 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0643 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0644 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0645 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0646 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0647 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0648 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0649 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x064a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x064b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x064c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x064d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x064e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x064f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0650 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0651 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0652 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0653 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0654 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0655 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0656 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0657 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0658 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0659 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x065a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x065b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x065c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x065d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x065e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x065f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0660 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0661 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0662 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0663 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0664 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0665 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0666 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0667 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0668 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0669 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x066a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x066b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x066c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x066d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x066e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x066f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0670 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0671 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0672 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0673 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0674 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0675 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0676 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0677 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0678 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0679 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x067a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x067b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x067c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x067d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x067e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x067f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0680 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0681 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0682 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0683 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0684 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0685 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0686 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0687 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0688 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0689 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x068a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x068b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x068c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x068d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x068e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x068f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0690 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0691 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0692 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0693 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0694 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0695 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0696 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0697 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0698 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0699 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x069a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x069b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x069c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x069d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x069e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x069f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06a0 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06a1 (Serbian_dje) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06a2 (Macedonia_gje) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06a3 (Cyrillic_io) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06a4 (Ukranian_je) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06a5 (Macedonia_dse) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06a6 (Ukranian_i) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06a7 (Ukranian_yi) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06a8 (Serbian_je) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06a9 (Serbian_lje) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06aa (Serbian_nje) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06ab (Serbian_tshe) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06ac (Macedonia_kje) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06ad (Ukrainian_ghe_with_upturn) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06ae (Byelorussian_shortu) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06af (Serbian_dze) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06b0 (numerosign) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06b1 (Serbian_DJE) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06b2 (Macedonia_GJE) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06b3 (Cyrillic_IO) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06b4 (Ukranian_JE) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06b5 (Macedonia_DSE) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06b6 (Ukranian_I) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06b7 (Ukranian_YI) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06b8 (Serbian_JE) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06b9 (Serbian_LJE) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06ba (Serbian_NJE) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06bb (Serbian_TSHE) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06bc (Macedonia_KJE) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06bd (Ukrainian_GHE_WITH_UPTURN) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06be (Byelorussian_SHORTU) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06bf (Serbian_DZE) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06c0 (Cyrillic_yu) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06c1 (Cyrillic_a) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06c2 (Cyrillic_be) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06c3 (Cyrillic_tse) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06c4 (Cyrillic_de) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06c5 (Cyrillic_ie) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06c6 (Cyrillic_ef) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06c7 (Cyrillic_ghe) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06c8 (Cyrillic_ha) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06c9 (Cyrillic_i) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06ca (Cyrillic_shorti) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06cb (Cyrillic_ka) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06cc (Cyrillic_el) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06cd (Cyrillic_em) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06ce (Cyrillic_en) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06cf (Cyrillic_o) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06d0 (Cyrillic_pe) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06d1 (Cyrillic_ya) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06d2 (Cyrillic_er) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06d3 (Cyrillic_es) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06d4 (Cyrillic_te) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06d5 (Cyrillic_u) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06d6 (Cyrillic_zhe) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06d7 (Cyrillic_ve) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06d8 (Cyrillic_softsign) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06d9 (Cyrillic_yeru) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06da (Cyrillic_ze) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06db (Cyrillic_sha) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06dc (Cyrillic_e) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06dd (Cyrillic_shcha) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06de (Cyrillic_che) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06df (Cyrillic_hardsign) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06e0 (Cyrillic_YU) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06e1 (Cyrillic_A) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06e2 (Cyrillic_BE) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06e3 (Cyrillic_TSE) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06e4 (Cyrillic_DE) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06e5 (Cyrillic_IE) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06e6 (Cyrillic_EF) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06e7 (Cyrillic_GHE) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06e8 (Cyrillic_HA) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06e9 (Cyrillic_I) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06ea (Cyrillic_SHORTI) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06eb (Cyrillic_KA) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06ec (Cyrillic_EL) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06ed (Cyrillic_EM) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06ee (Cyrillic_EN) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06ef (Cyrillic_O) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06f0 (Cyrillic_PE) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06f1 (Cyrillic_YA) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06f2 (Cyrillic_ER) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06f3 (Cyrillic_ES) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06f4 (Cyrillic_TE) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06f5 (Cyrillic_U) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06f6 (Cyrillic_ZHE) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06f7 (Cyrillic_VE) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06f8 (Cyrillic_SOFTSIGN) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06f9 (Cyrillic_YERU) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06fa (Cyrillic_ZE) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06fb (Cyrillic_SHA) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06fc (Cyrillic_E) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06fd (Cyrillic_SHCHA) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06fe (Cyrillic_CHE) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x06ff (Cyrillic_HARDSIGN) */ - }, - { /* 0x07?? */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0700 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0701 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0702 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0703 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0704 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0705 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0706 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0707 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0708 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0709 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x070a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x070b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x070c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x070d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x070e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x070f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0710 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0711 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0712 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0713 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0714 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0715 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0716 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0717 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0718 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0719 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x071a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x071b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x071c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x071d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x071e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x071f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0720 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0721 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0722 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0723 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0724 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0725 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0726 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0727 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0728 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0729 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x072a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x072b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x072c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x072d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x072e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x072f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0730 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0731 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0732 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0733 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0734 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0735 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0736 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0737 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0738 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0739 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x073a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x073b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x073c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x073d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x073e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x073f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0740 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0741 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0742 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0743 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0744 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0745 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0746 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0747 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0748 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0749 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x074a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x074b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x074c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x074d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x074e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x074f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0750 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0751 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0752 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0753 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0754 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0755 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0756 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0757 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0758 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0759 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x075a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x075b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x075c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x075d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x075e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x075f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0760 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0761 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0762 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0763 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0764 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0765 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0766 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0767 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0768 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0769 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x076a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x076b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x076c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x076d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x076e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x076f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0770 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0771 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0772 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0773 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0774 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0775 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0776 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0777 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0778 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0779 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x077a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x077b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x077c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x077d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x077e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x077f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0780 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0781 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0782 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0783 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0784 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0785 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0786 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0787 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0788 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0789 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x078a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x078b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x078c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x078d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x078e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x078f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0790 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0791 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0792 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0793 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0794 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0795 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0796 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0797 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0798 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0799 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x079a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x079b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x079c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x079d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x079e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x079f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07a0 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07a1 (Greek_ALPHAaccent) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07a2 (Greek_EPSILONaccent) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07a3 (Greek_ETAaccent) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07a4 (Greek_IOTAaccent) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07a5 (Greek_IOTAdiaeresis) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07a6 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07a7 (Greek_OMICRONaccent) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07a8 (Greek_UPSILONaccent) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07a9 (Greek_UPSILONdieresis) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07aa */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07ab (Greek_OMEGAaccent) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07ac */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07ad */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07ae (Greek_accentdieresis) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07af (Greek_horizbar) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07b0 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07b1 (Greek_alphaaccent) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07b2 (Greek_epsilonaccent) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07b3 (Greek_etaaccent) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07b4 (Greek_iotaaccent) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07b5 (Greek_iotadieresis) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07b6 (Greek_iotaaccentdieresis) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07b7 (Greek_omicronaccent) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07b8 (Greek_upsilonaccent) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07b9 (Greek_upsilondieresis) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07ba (Greek_upsilonaccentdieresis) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07bb (Greek_omegaaccent) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07bc */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07bd */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07be */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07bf */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07c0 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07c1 (Greek_ALPHA) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07c2 (Greek_BETA) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07c3 (Greek_GAMMA) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07c4 (Greek_DELTA) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07c5 (Greek_EPSILON) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07c6 (Greek_ZETA) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07c7 (Greek_ETA) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07c8 (Greek_THETA) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07c9 (Greek_IOTA) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07ca (Greek_KAPPA) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07cb (Greek_LAMBDA) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07cc (Greek_MU) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07cd (Greek_NU) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07ce (Greek_XI) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07cf (Greek_OMICRON) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07d0 (Greek_PI) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07d1 (Greek_RHO) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07d2 (Greek_SIGMA) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07d3 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07d4 (Greek_TAU) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07d5 (Greek_UPSILON) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07d6 (Greek_PHI) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07d7 (Greek_CHI) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07d8 (Greek_PSI) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07d9 (Greek_OMEGA) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07da */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07db */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07dc */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07dd */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07de */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07df */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07e0 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07e1 (Greek_alpha) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07e2 (Greek_beta) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07e3 (Greek_gamma) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07e4 (Greek_delta) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07e5 (Greek_epsilon) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07e6 (Greek_zeta) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07e7 (Greek_eta) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07e8 (Greek_theta) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07e9 (Greek_iota) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07ea (Greek_kappa) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07eb (Greek_lambda) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07ec (Greek_mu) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07ed (Greek_nu) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07ee (Greek_xi) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07ef (Greek_omicron) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07f0 (Greek_pi) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07f1 (Greek_rho) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07f2 (Greek_sigma) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07f3 (Greek_finalsmallsigma) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07f4 (Greek_tau) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07f5 (Greek_upsilon) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07f6 (Greek_phi) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07f7 (Greek_chi) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07f8 (Greek_psi) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07f9 (Greek_omega) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07fa */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07fb */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07fc */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07fd */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07fe */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x07ff */ - }, - { /* 0x08?? */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0800 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0801 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0802 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0803 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0804 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0805 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0806 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0807 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0808 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0809 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x080a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x080b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x080c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x080d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x080e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x080f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0810 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0811 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0812 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0813 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0814 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0815 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0816 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0817 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0818 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0819 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x081a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x081b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x081c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x081d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x081e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x081f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0820 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0821 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0822 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0823 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0824 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0825 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0826 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0827 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0828 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0829 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x082a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x082b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x082c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x082d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x082e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x082f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0830 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0831 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0832 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0833 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0834 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0835 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0836 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0837 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0838 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0839 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x083a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x083b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x083c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x083d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x083e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x083f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0840 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0841 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0842 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0843 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0844 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0845 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0846 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0847 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0848 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0849 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x084a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x084b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x084c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x084d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x084e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x084f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0850 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0851 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0852 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0853 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0854 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0855 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0856 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0857 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0858 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0859 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x085a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x085b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x085c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x085d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x085e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x085f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0860 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0861 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0862 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0863 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0864 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0865 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0866 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0867 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0868 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0869 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x086a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x086b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x086c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x086d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x086e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x086f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0870 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0871 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0872 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0873 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0874 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0875 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0876 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0877 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0878 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0879 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x087a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x087b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x087c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x087d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x087e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x087f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0880 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0881 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0882 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0883 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0884 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0885 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0886 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0887 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0888 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0889 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x088a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x088b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x088c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x088d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x088e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x088f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0890 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0891 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0892 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0893 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0894 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0895 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0896 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0897 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0898 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0899 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x089a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x089b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x089c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x089d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x089e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x089f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08a0 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08a1 (leftradical) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08a2 (topleftradical) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08a3 (horizconnector) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08a4 (topintegral) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08a5 (botintegral) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08a6 (vertconnector) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08a7 (topleftsqbracket) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08a8 (botleftsqbracket) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08a9 (toprightsqbracket) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08aa (botrightsqbracket) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08ab (topleftparens) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08ac (botleftparens) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08ad (toprightparens) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08ae (botrightparens) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08af (leftmiddlecurlybrace) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08b0 (rightmiddlecurlybrace) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08b1 (topleftsummation) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08b2 (botleftsummation) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08b3 (topvertsummationconnector) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08b4 (botvertsummationconnector) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08b5 (toprightsummation) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08b6 (botrightsummation) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08b7 (rightmiddlesummation) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08b8 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08b9 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08ba */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08bb */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08bc (lessthanequal) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08bd (notequal) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08be (greaterthanequal) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08bf (integral) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08c0 (therefore) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08c1 (variation) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08c2 (infinity) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08c3 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08c4 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08c5 (nabla) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08c6 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08c7 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08c8 (approximate) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08c9 (similarequal) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08ca */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08cb */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08cc */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08cd (ifonlyif) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08ce (implies) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08cf (identical) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08d0 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08d1 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08d2 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08d3 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08d4 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08d5 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08d6 (radical) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08d7 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08d8 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08d9 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08da (includedin) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08db (includes) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08dc (intersection) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08dd (union) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08de (logicaland) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08df (logicalor) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08e0 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08e1 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08e2 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08e3 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08e4 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08e5 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08e6 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08e7 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08e8 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08e9 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08ea */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08eb */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08ec */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08ed */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08ee */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08ef (partialderivative) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08f0 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08f1 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08f2 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08f3 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08f4 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08f5 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08f6 (function) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08f7 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08f8 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08f9 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08fa */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08fb (leftarrow) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08fc (uparrow) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08fd (rightarrow) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08fe (downarrow) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x08ff */ - }, - { /* 0x09?? */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0900 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0901 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0902 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0903 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0904 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0905 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0906 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0907 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0908 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0909 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x090a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x090b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x090c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x090d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x090e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x090f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0910 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0911 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0912 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0913 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0914 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0915 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0916 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0917 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0918 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0919 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x091a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x091b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x091c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x091d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x091e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x091f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0920 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0921 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0922 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0923 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0924 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0925 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0926 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0927 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0928 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0929 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x092a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x092b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x092c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x092d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x092e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x092f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0930 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0931 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0932 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0933 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0934 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0935 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0936 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0937 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0938 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0939 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x093a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x093b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x093c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x093d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x093e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x093f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0940 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0941 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0942 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0943 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0944 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0945 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0946 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0947 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0948 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0949 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x094a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x094b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x094c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x094d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x094e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x094f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0950 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0951 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0952 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0953 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0954 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0955 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0956 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0957 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0958 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0959 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x095a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x095b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x095c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x095d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x095e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x095f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0960 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0961 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0962 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0963 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0964 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0965 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0966 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0967 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0968 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0969 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x096a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x096b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x096c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x096d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x096e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x096f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0970 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0971 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0972 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0973 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0974 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0975 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0976 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0977 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0978 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0979 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x097a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x097b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x097c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x097d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x097e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x097f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0980 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0981 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0982 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0983 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0984 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0985 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0986 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0987 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0988 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0989 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x098a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x098b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x098c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x098d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x098e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x098f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0990 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0991 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0992 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0993 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0994 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0995 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0996 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0997 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0998 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0999 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x099a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x099b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x099c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x099d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x099e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x099f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09a0 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09a1 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09a2 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09a3 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09a4 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09a5 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09a6 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09a7 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09a8 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09a9 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09aa */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09ab */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09ac */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09ad */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09ae */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09af */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09b0 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09b1 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09b2 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09b3 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09b4 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09b5 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09b6 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09b7 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09b8 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09b9 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09ba */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09bb */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09bc */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09bd */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09be */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09bf */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09c0 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09c1 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09c2 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09c3 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09c4 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09c5 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09c6 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09c7 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09c8 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09c9 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09ca */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09cb */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09cc */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09cd */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09ce */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09cf */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09d0 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09d1 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09d2 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09d3 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09d4 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09d5 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09d6 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09d7 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09d8 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09d9 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09da */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09db */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09dc */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09dd */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09de */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09df (blank) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09e0 (soliddiamond) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09e1 (checkerboard) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09e2 (ht) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09e3 (ff) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09e4 (cr) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09e5 (lf) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09e6 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09e7 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09e8 (nl) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09e9 (vt) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09ea (lowrightcorner) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09eb (uprightcorner) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09ec (upleftcorner) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09ed (lowleftcorner) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09ee (crossinglines) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09ef (horizlinescan1) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09f0 (horizlinescan3) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09f1 (horizlinescan5) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09f2 (horizlinescan7) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09f3 (horizlinescan9) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09f4 (leftt) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09f5 (rightt) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09f6 (bott) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09f7 (topt) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09f8 (vertbar) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09f9 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09fa */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09fb */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09fc */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09fd */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09fe */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x09ff */ - }, - { /* 0x0a?? */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a00 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a01 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a02 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a03 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a04 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a05 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a06 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a07 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a08 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a09 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a0a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a0b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a0c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a0d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a0e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a0f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a10 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a11 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a12 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a13 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a14 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a15 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a16 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a17 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a18 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a19 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a1a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a1b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a1c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a1d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a1e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a1f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a20 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a21 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a22 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a23 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a24 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a25 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a26 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a27 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a28 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a29 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a2a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a2b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a2c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a2d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a2e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a2f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a30 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a31 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a32 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a33 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a34 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a35 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a36 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a37 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a38 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a39 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a3a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a3b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a3c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a3d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a3e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a3f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a40 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a41 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a42 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a43 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a44 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a45 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a46 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a47 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a48 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a49 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a4a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a4b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a4c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a4d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a4e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a4f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a50 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a51 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a52 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a53 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a54 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a55 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a56 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a57 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a58 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a59 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a5a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a5b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a5c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a5d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a5e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a5f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a60 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a61 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a62 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a63 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a64 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a65 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a66 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a67 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a68 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a69 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a6a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a6b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a6c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a6d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a6e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a6f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a70 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a71 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a72 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a73 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a74 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a75 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a76 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a77 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a78 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a79 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a7a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a7b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a7c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a7d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a7e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a7f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a80 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a81 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a82 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a83 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a84 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a85 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a86 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a87 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a88 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a89 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a8a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a8b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a8c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a8d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a8e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a8f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a90 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a91 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a92 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a93 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a94 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a95 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a96 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a97 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a98 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a99 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a9a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a9b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a9c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a9d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a9e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0a9f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0aa0 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0aa1 (emspace) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0aa2 (enspace) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0aa3 (em3space) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0aa4 (em4space) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0aa5 (digitspace) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0aa6 (punctspace) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0aa7 (thinspace) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0aa8 (hairspace) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0aa9 (emdash) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0aaa (endash) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0aab */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0aac (signifblank) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0aad */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0aae (ellipsis) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0aaf (doubbaselinedot) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ab0 (onethird) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ab1 (twothirds) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ab2 (onefifth) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ab3 (twofifths) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ab4 (threefifths) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ab5 (fourfifths) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ab6 (onesixth) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ab7 (fivesixths) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ab8 (careof) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ab9 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0aba */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0abb (figdash) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0abc (leftanglebracket) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0abd (decimalpoint) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0abe (rightanglebracket) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0abf (marker) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ac0 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ac1 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ac2 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ac3 (oneeighth) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ac4 (threeeighths) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ac5 (fiveeighths) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ac6 (seveneighths) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ac7 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ac8 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ac9 (trademark) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0aca (signaturemark) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0acb (trademarkincircle) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0acc (leftopentriangle) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0acd (rightopentriangle) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ace (emopencircle) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0acf (emopenrectangle) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ad0 (leftsinglequotemark) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ad1 (rightsinglequotemark) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ad2 (leftdoublequotemark) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ad3 (rightdoublequotemark) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ad4 (prescription) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ad5 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ad6 (minutes) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ad7 (seconds) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ad8 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ad9 (latincross) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ada (hexagram) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0adb (filledrectbullet) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0adc (filledlefttribullet) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0add (filledrighttribullet) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ade (emfilledcircle) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0adf (emfilledrect) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ae0 (enopencircbullet) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ae1 (enopensquarebullet) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ae2 (openrectbullet) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ae3 (opentribulletup) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ae4 (opentribulletdown) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ae5 (openstar) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ae6 (enfilledcircbullet) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ae7 (enfilledsqbullet) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ae8 (filledtribulletup) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ae9 (filledtribulletdown) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0aea (leftpointer) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0aeb (rightpointer) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0aec (club) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0aed (diamond) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0aee (heart) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0aef */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0af0 (maltesecross) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0af1 (dagger) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0af2 (doubledagger) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0af3 (checkmark) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0af4 (ballotcross) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0af5 (musicalsharp) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0af6 (musicalflat) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0af7 (malesymbol) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0af8 (femalesymbol) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0af9 (telephone) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0afa (telephonerecorder) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0afb (phonographcopyright) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0afc (caret) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0afd (singlelowquotemark) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0afe (doublelowquotemark) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0aff (cursor) */ - }, - { /* 0x0b?? */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b00 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b01 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b02 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b03 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b04 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b05 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b06 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b07 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b08 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b09 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b0a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b0b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b0c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b0d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b0e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b0f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b10 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b11 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b12 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b13 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b14 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b15 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b16 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b17 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b18 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b19 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b1a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b1b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b1c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b1d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b1e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b1f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b20 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b21 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b22 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b23 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b24 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b25 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b26 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b27 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b28 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b29 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b2a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b2b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b2c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b2d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b2e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b2f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b30 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b31 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b32 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b33 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b34 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b35 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b36 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b37 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b38 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b39 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b3a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b3b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b3c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b3d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b3e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b3f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b40 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b41 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b42 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b43 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b44 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b45 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b46 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b47 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b48 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b49 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b4a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b4b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b4c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b4d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b4e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b4f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b50 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b51 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b52 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b53 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b54 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b55 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b56 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b57 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b58 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b59 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b5a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b5b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b5c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b5d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b5e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b5f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b60 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b61 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b62 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b63 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b64 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b65 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b66 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b67 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b68 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b69 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b6a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b6b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b6c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b6d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b6e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b6f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b70 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b71 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b72 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b73 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b74 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b75 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b76 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b77 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b78 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b79 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b7a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b7b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b7c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b7d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b7e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b7f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b80 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b81 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b82 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b83 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b84 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b85 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b86 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b87 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b88 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b89 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b8a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b8b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b8c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b8d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b8e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b8f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b90 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b91 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b92 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b93 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b94 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b95 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b96 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b97 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b98 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b99 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b9a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b9b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b9c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b9d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b9e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0b9f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ba0 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ba1 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ba2 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ba3 (leftcaret) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ba4 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ba5 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ba6 (rightcaret) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ba7 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ba8 (downcaret) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ba9 (upcaret) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0baa */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0bab */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0bac */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0bad */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0bae */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0baf */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0bb0 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0bb1 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0bb2 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0bb3 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0bb4 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0bb5 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0bb6 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0bb7 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0bb8 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0bb9 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0bba */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0bbb */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0bbc */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0bbd */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0bbe */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0bbf */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0bc0 (overbar) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0bc1 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0bc2 (downtack) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0bc3 (upshoe) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0bc4 (downstile) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0bc5 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0bc6 (underbar) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0bc7 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0bc8 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0bc9 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0bca (jot) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0bcb */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0bcc (quad) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0bcd */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0bce (uptack) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0bcf (circle) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0bd0 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0bd1 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0bd2 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0bd3 (upstile) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0bd4 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0bd5 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0bd6 (downshoe) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0bd7 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0bd8 (rightshoe) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0bd9 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0bda (leftshoe) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0bdb */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0bdc (lefttack) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0bdd */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0bde */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0bdf */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0be0 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0be1 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0be2 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0be3 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0be4 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0be5 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0be6 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0be7 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0be8 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0be9 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0bea */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0beb */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0bec */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0bed */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0bee */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0bef */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0bf0 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0bf1 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0bf2 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0bf3 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0bf4 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0bf5 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0bf6 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0bf7 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0bf8 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0bf9 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0bfa */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0bfb */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0bfc (righttack) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0bfd */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0bfe */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0bff */ - }, - { /* 0x0c?? */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c00 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c01 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c02 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c03 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c04 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c05 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c06 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c07 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c08 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c09 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c0a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c0b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c0c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c0d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c0e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c0f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c10 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c11 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c12 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c13 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c14 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c15 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c16 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c17 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c18 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c19 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c1a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c1b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c1c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c1d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c1e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c1f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c20 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c21 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c22 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c23 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c24 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c25 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c26 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c27 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c28 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c29 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c2a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c2b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c2c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c2d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c2e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c2f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c30 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c31 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c32 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c33 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c34 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c35 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c36 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c37 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c38 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c39 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c3a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c3b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c3c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c3d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c3e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c3f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c40 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c41 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c42 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c43 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c44 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c45 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c46 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c47 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c48 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c49 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c4a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c4b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c4c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c4d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c4e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c4f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c50 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c51 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c52 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c53 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c54 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c55 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c56 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c57 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c58 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c59 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c5a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c5b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c5c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c5d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c5e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c5f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c60 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c61 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c62 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c63 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c64 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c65 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c66 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c67 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c68 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c69 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c6a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c6b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c6c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c6d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c6e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c6f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c70 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c71 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c72 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c73 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c74 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c75 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c76 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c77 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c78 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c79 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c7a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c7b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c7c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c7d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c7e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c7f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c80 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c81 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c82 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c83 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c84 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c85 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c86 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c87 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c88 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c89 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c8a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c8b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c8c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c8d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c8e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c8f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c90 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c91 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c92 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c93 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c94 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c95 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c96 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c97 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c98 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c99 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c9a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c9b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c9c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c9d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c9e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0c9f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ca0 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ca1 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ca2 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ca3 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ca4 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ca5 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ca6 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ca7 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ca8 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ca9 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0caa */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0cab */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0cac */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0cad */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0cae */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0caf */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0cb0 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0cb1 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0cb2 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0cb3 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0cb4 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0cb5 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0cb6 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0cb7 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0cb8 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0cb9 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0cba */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0cbb */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0cbc */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0cbd */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0cbe */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0cbf */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0cc0 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0cc1 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0cc2 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0cc3 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0cc4 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0cc5 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0cc6 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0cc7 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0cc8 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0cc9 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0cca */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ccb */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ccc */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ccd */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0cce */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ccf */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0cd0 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0cd1 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0cd2 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0cd3 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0cd4 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0cd5 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0cd6 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0cd7 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0cd8 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0cd9 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0cda */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0cdb */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0cdc */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0cdd */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0cde */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0cdf (hebrew_doublelowline) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ce0 (hebrew_aleph) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ce1 (hebrew_beth) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ce2 (hebrew_gimmel) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ce3 (hebrew_daleth) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ce4 (hebrew_he) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ce5 (hebrew_waw) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ce6 (hebrew_zayin) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ce7 (hebrew_het) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ce8 (hebrew_teth) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ce9 (hebrew_yod) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0cea (hebrew_finalkaph) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ceb (hebrew_kaph) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0cec (hebrew_lamed) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ced (hebrew_finalmem) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0cee (hebrew_mem) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0cef (hebrew_finalnun) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0cf0 (hebrew_nun) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0cf1 (hebrew_samekh) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0cf2 (hebrew_ayin) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0cf3 (hebrew_finalpe) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0cf4 (hebrew_pe) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0cf5 (hebrew_finalzadi) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0cf6 (hebrew_zadi) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0cf7 (hebrew_kuf) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0cf8 (hebrew_resh) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0cf9 (hebrew_shin) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0cfa (hebrew_taf) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0cfb */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0cfc */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0cfd */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0cfe */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0cff */ - }, - { /* 0x0d?? */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d00 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d01 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d02 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d03 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d04 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d05 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d06 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d07 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d08 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d09 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d0a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d0b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d0c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d0d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d0e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d0f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d10 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d11 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d12 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d13 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d14 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d15 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d16 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d17 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d18 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d19 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d1a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d1b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d1c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d1d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d1e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d1f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d20 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d21 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d22 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d23 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d24 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d25 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d26 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d27 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d28 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d29 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d2a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d2b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d2c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d2d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d2e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d2f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d30 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d31 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d32 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d33 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d34 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d35 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d36 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d37 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d38 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d39 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d3a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d3b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d3c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d3d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d3e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d3f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d40 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d41 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d42 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d43 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d44 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d45 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d46 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d47 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d48 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d49 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d4a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d4b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d4c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d4d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d4e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d4f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d50 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d51 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d52 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d53 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d54 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d55 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d56 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d57 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d58 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d59 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d5a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d5b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d5c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d5d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d5e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d5f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d60 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d61 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d62 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d63 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d64 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d65 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d66 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d67 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d68 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d69 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d6a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d6b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d6c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d6d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d6e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d6f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d70 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d71 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d72 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d73 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d74 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d75 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d76 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d77 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d78 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d79 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d7a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d7b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d7c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d7d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d7e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d7f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d80 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d81 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d82 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d83 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d84 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d85 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d86 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d87 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d88 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d89 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d8a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d8b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d8c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d8d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d8e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d8f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d90 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d91 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d92 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d93 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d94 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d95 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d96 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d97 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d98 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d99 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d9a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d9b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d9c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d9d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d9e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0d9f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0da0 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0da1 (Thai_kokai) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0da2 (Thai_khokhai) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0da3 (Thai_khokhuat) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0da4 (Thai_khokhwai) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0da5 (Thai_khokhon) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0da6 (Thai_khorakhang) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0da7 (Thai_ngongu) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0da8 (Thai_chochan) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0da9 (Thai_choching) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0daa (Thai_chochang) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0dab (Thai_soso) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0dac (Thai_chochoe) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0dad (Thai_yoying) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0dae (Thai_dochada) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0daf (Thai_topatak) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0db0 (Thai_thothan) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0db1 (Thai_thonangmontho) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0db2 (Thai_thophuthao) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0db3 (Thai_nonen) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0db4 (Thai_dodek) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0db5 (Thai_totao) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0db6 (Thai_thothung) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0db7 (Thai_thothahan) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0db8 (Thai_thothong) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0db9 (Thai_nonu) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0dba (Thai_bobaimai) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0dbb (Thai_popla) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0dbc (Thai_phophung) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0dbd (Thai_fofa) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0dbe (Thai_phophan) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0dbf (Thai_fofan) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0dc0 (Thai_phosamphao) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0dc1 (Thai_moma) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0dc2 (Thai_yoyak) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0dc3 (Thai_rorua) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0dc4 (Thai_ru) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0dc5 (Thai_loling) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0dc6 (Thai_lu) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0dc7 (Thai_wowaen) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0dc8 (Thai_sosala) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0dc9 (Thai_sorusi) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0dca (Thai_sosua) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0dcb (Thai_hohip) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0dcc (Thai_lochula) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0dcd (Thai_oang) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0dce (Thai_honokhuk) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0dcf (Thai_paiyannoi) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0dd0 (Thai_saraa) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0dd1 (Thai_maihanakat) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0dd2 (Thai_saraaa) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0dd3 (Thai_saraam) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0dd4 (Thai_sarai) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0dd5 (Thai_saraii) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0dd6 (Thai_saraue) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0dd7 (Thai_sarauee) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0dd8 (Thai_sarau) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0dd9 (Thai_sarauu) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0dda (Thai_phinthu) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ddb */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ddc */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ddd */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0dde (Thai_maihanakat_maitho) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ddf (Thai_baht) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0de0 (Thai_sarae) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0de1 (Thai_saraae) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0de2 (Thai_sarao) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0de3 (Thai_saraaimaimuan) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0de4 (Thai_saraaimaimalai) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0de5 (Thai_lakkhangyao) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0de6 (Thai_maiyamok) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0de7 (Thai_maitaikhu) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0de8 (Thai_maiek) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0de9 (Thai_maitho) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0dea (Thai_maitri) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0deb (Thai_maichattawa) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0dec (Thai_thanthakhat) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ded (Thai_nikhahit) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0dee */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0def */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0df0 (Thai_leksun) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0df1 (Thai_leknung) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0df2 (Thai_leksong) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0df3 (Thai_leksam) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0df4 (Thai_leksi) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0df5 (Thai_lekha) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0df6 (Thai_lekhok) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0df7 (Thai_lekchet) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0df8 (Thai_lekpaet) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0df9 (Thai_lekkao) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0dfa */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0dfb */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0dfc */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0dfd */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0dfe */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0dff */ - }, - { /* 0x0e?? */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e00 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e01 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e02 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e03 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e04 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e05 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e06 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e07 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e08 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e09 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e0a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e0b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e0c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e0d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e0e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e0f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e10 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e11 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e12 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e13 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e14 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e15 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e16 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e17 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e18 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e19 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e1a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e1b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e1c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e1d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e1e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e1f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e20 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e21 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e22 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e23 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e24 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e25 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e26 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e27 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e28 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e29 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e2a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e2b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e2c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e2d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e2e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e2f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e30 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e31 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e32 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e33 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e34 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e35 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e36 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e37 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e38 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e39 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e3a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e3b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e3c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e3d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e3e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e3f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e40 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e41 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e42 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e43 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e44 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e45 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e46 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e47 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e48 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e49 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e4a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e4b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e4c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e4d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e4e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e4f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e50 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e51 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e52 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e53 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e54 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e55 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e56 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e57 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e58 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e59 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e5a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e5b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e5c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e5d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e5e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e5f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e60 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e61 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e62 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e63 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e64 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e65 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e66 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e67 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e68 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e69 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e6a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e6b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e6c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e6d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e6e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e6f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e70 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e71 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e72 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e73 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e74 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e75 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e76 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e77 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e78 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e79 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e7a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e7b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e7c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e7d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e7e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e7f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e80 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e81 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e82 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e83 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e84 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e85 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e86 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e87 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e88 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e89 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e8a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e8b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e8c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e8d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e8e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e8f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e90 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e91 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e92 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e93 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e94 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e95 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e96 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e97 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e98 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e99 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e9a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e9b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e9c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e9d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e9e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0e9f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ea0 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ea1 (Hangul_Kiyeog) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ea2 (Hangul_SsangKiyeog) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ea3 (Hangul_KiyeogSios) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ea4 (Hangul_Nieun) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ea5 (Hangul_NieunJieuj) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ea6 (Hangul_NieunHieuh) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ea7 (Hangul_Dikeud) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ea8 (Hangul_SsangDikeud) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ea9 (Hangul_Rieul) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0eaa (Hangul_RieulKiyeog) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0eab (Hangul_RieulMieum) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0eac (Hangul_RieulPieub) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ead (Hangul_RieulSios) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0eae (Hangul_RieulTieut) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0eaf (Hangul_RieulPhieuf) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0eb0 (Hangul_RieulHieuh) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0eb1 (Hangul_Mieum) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0eb2 (Hangul_Pieub) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0eb3 (Hangul_SsangPieub) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0eb4 (Hangul_PieubSios) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0eb5 (Hangul_Sios) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0eb6 (Hangul_SsangSios) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0eb7 (Hangul_Ieung) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0eb8 (Hangul_Jieuj) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0eb9 (Hangul_SsangJieuj) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0eba (Hangul_Cieuc) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ebb (Hangul_Khieuq) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ebc (Hangul_Tieut) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ebd (Hangul_Phieuf) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ebe (Hangul_Hieuh) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ebf (Hangul_A) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ec0 (Hangul_AE) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ec1 (Hangul_YA) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ec2 (Hangul_YAE) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ec3 (Hangul_EO) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ec4 (Hangul_E) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ec5 (Hangul_YEO) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ec6 (Hangul_YE) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ec7 (Hangul_O) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ec8 (Hangul_WA) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ec9 (Hangul_WAE) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0eca (Hangul_OE) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ecb (Hangul_YO) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ecc (Hangul_U) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ecd (Hangul_WEO) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ece (Hangul_WE) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ecf (Hangul_WI) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ed0 (Hangul_YU) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ed1 (Hangul_EU) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ed2 (Hangul_YI) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ed3 (Hangul_I) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ed4 (Hangul_J_Kiyeog) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ed5 (Hangul_J_SsangKiyeog) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ed6 (Hangul_J_KiyeogSios) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ed7 (Hangul_J_Nieun) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ed8 (Hangul_J_NieunJieuj) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ed9 (Hangul_J_NieunHieuh) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0eda (Hangul_J_Dikeud) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0edb (Hangul_J_Rieul) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0edc (Hangul_J_RieulKiyeog) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0edd (Hangul_J_RieulMieum) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ede (Hangul_J_RieulPieub) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0edf (Hangul_J_RieulSios) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ee0 (Hangul_J_RieulTieut) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ee1 (Hangul_J_RieulPhieuf) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ee2 (Hangul_J_RieulHieuh) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ee3 (Hangul_J_Mieum) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ee4 (Hangul_J_Pieub) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ee5 (Hangul_J_PieubSios) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ee6 (Hangul_J_Sios) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ee7 (Hangul_J_SsangSios) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ee8 (Hangul_J_Ieung) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ee9 (Hangul_J_Jieuj) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0eea (Hangul_J_Cieuc) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0eeb (Hangul_J_Khieuq) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0eec (Hangul_J_Tieut) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0eed (Hangul_J_Phieuf) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0eee (Hangul_J_Hieuh) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0eef (Hangul_RieulYeorinHieuh) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ef0 (Hangul_SunkyeongeumMieum) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ef1 (Hangul_SunkyeongeumPieub) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ef2 (Hangul_PanSios) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ef3 (Hangul_KkogjiDalrinIeung) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ef4 (Hangul_SunkyeongeumPhieuf) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ef5 (Hangul_YeorinHieuh) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ef6 (Hangul_AraeA) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ef7 (Hangul_AraeAE) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ef8 (Hangul_J_PanSios) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0ef9 (Hangul_J_KkogjiDalrinIeung) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0efa (Hangul_J_YeorinHieuh) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0efb */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0efc */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0efd */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0efe */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x0eff (Korean_Won) */ - }, - {{0}}, /* 0x0f?? */ - {{0}}, /* 0x10?? */ - {{0}}, /* 0x11?? */ - {{0}}, /* 0x12?? */ - { /* 0x13?? */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1300 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1301 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1302 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1303 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1304 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1305 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1306 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1307 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1308 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1309 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x130a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x130b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x130c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x130d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x130e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x130f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1310 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1311 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1312 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1313 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1314 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1315 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1316 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1317 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1318 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1319 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x131a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x131b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x131c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x131d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x131e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x131f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1320 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1321 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1322 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1323 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1324 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1325 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1326 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1327 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1328 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1329 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x132a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x132b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x132c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x132d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x132e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x132f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1330 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1331 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1332 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1333 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1334 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1335 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1336 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1337 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1338 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1339 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x133a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x133b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x133c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x133d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x133e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x133f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1340 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1341 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1342 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1343 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1344 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1345 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1346 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1347 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1348 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1349 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x134a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x134b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x134c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x134d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x134e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x134f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1350 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1351 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1352 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1353 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1354 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1355 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1356 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1357 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1358 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1359 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x135a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x135b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x135c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x135d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x135e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x135f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1360 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1361 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1362 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1363 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1364 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1365 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1366 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1367 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1368 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1369 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x136a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x136b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x136c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x136d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x136e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x136f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1370 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1371 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1372 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1373 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1374 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1375 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1376 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1377 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1378 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1379 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x137a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x137b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x137c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x137d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x137e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x137f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1380 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1381 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1382 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1383 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1384 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1385 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1386 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1387 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1388 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1389 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x138a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x138b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x138c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x138d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x138e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x138f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1390 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1391 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1392 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1393 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1394 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1395 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1396 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1397 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1398 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x1399 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x139a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x139b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x139c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x139d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x139e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x139f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13a0 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13a1 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13a2 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13a3 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13a4 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13a5 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13a6 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13a7 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13a8 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13a9 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13aa */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13ab */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13ac */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13ad */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13ae */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13af */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13b0 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13b1 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13b2 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13b3 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13b4 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13b5 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13b6 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13b7 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13b8 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13b9 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13ba */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13bb */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13bc (OE) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13bd (oe) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13be (Ydiaeresis) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13bf */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13c0 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13c1 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13c2 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13c3 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13c4 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13c5 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13c6 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13c7 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13c8 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13c9 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13ca */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13cb */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13cc */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13cd */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13ce */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13cf */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13d0 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13d1 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13d2 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13d3 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13d4 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13d5 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13d6 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13d7 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13d8 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13d9 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13da */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13db */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13dc */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13dd */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13de */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13df */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13e0 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13e1 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13e2 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13e3 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13e4 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13e5 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13e6 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13e7 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13e8 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13e9 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13ea */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13eb */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13ec */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13ed */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13ee */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13ef */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13f0 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13f1 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13f2 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13f3 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13f4 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13f5 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13f6 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13f7 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13f8 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13f9 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13fa */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13fb */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13fc */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13fd */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13fe */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x13ff */ - }, - {{0}}, /* 0x14?? */ - {{0}}, /* 0x15?? */ - {{0}}, /* 0x16?? */ - {{0}}, /* 0x17?? */ - {{0}}, /* 0x18?? */ - {{0}}, /* 0x19?? */ - {{0}}, /* 0x1a?? */ - {{0}}, /* 0x1b?? */ - {{0}}, /* 0x1c?? */ - {{0}}, /* 0x1d?? */ - {{0}}, /* 0x1e?? */ - {{0}}, /* 0x1f?? */ - { /* 0x20?? */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2000 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2001 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2002 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2003 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2004 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2005 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2006 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2007 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2008 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2009 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x200a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x200b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x200c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x200d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x200e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x200f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2010 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2011 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2012 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2013 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2014 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2015 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2016 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2017 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2018 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2019 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x201a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x201b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x201c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x201d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x201e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x201f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2020 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2021 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2022 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2023 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2024 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2025 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2026 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2027 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2028 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2029 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x202a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x202b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x202c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x202d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x202e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x202f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2030 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2031 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2032 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2033 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2034 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2035 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2036 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2037 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2038 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2039 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x203a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x203b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x203c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x203d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x203e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x203f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2040 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2041 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2042 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2043 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2044 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2045 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2046 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2047 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2048 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2049 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x204a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x204b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x204c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x204d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x204e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x204f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2050 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2051 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2052 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2053 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2054 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2055 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2056 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2057 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2058 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2059 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x205a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x205b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x205c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x205d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x205e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x205f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2060 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2061 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2062 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2063 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2064 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2065 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2066 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2067 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2068 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2069 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x206a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x206b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x206c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x206d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x206e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x206f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2070 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2071 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2072 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2073 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2074 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2075 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2076 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2077 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2078 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2079 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x207a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x207b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x207c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x207d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x207e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x207f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2080 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2081 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2082 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2083 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2084 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2085 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2086 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2087 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2088 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2089 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x208a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x208b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x208c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x208d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x208e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x208f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2090 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2091 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2092 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2093 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2094 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2095 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2096 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2097 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2098 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x2099 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x209a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x209b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x209c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x209d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x209e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x209f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20a0 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20a1 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20a2 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20a3 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20a4 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20a5 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20a6 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20a7 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20a8 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20a9 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20aa */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20ab */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20ac (EuroSign) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20ad */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20ae */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20af */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20b0 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20b1 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20b2 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20b3 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20b4 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20b5 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20b6 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20b7 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20b8 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20b9 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20ba */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20bb */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20bc */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20bd */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20be */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20bf */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20c0 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20c1 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20c2 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20c3 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20c4 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20c5 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20c6 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20c7 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20c8 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20c9 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20ca */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20cb */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20cc */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20cd */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20ce */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20cf */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20d0 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20d1 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20d2 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20d3 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20d4 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20d5 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20d6 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20d7 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20d8 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20d9 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20da */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20db */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20dc */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20dd */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20de */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20df */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20e0 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20e1 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20e2 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20e3 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20e4 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20e5 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20e6 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20e7 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20e8 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20e9 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20ea */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20eb */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20ec */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20ed */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20ee */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20ef */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20f0 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20f1 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20f2 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20f3 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20f4 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20f5 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20f6 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20f7 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20f8 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20f9 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20fa */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20fb */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20fc */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20fd */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20fe */ - { .scancode = 0x00, .flags = 0x00 }, /* 0x20ff */ - }, - {{0}}, /* 0x21?? */ - {{0}}, /* 0x22?? */ - {{0}}, /* 0x23?? */ - {{0}}, /* 0x24?? */ - {{0}}, /* 0x25?? */ - {{0}}, /* 0x26?? */ - {{0}}, /* 0x27?? */ - {{0}}, /* 0x28?? */ - {{0}}, /* 0x29?? */ - {{0}}, /* 0x2a?? */ - {{0}}, /* 0x2b?? */ - {{0}}, /* 0x2c?? */ - {{0}}, /* 0x2d?? */ - {{0}}, /* 0x2e?? */ - {{0}}, /* 0x2f?? */ - {{0}}, /* 0x30?? */ - {{0}}, /* 0x31?? */ - {{0}}, /* 0x32?? */ - {{0}}, /* 0x33?? */ - {{0}}, /* 0x34?? */ - {{0}}, /* 0x35?? */ - {{0}}, /* 0x36?? */ - {{0}}, /* 0x37?? */ - {{0}}, /* 0x38?? */ - {{0}}, /* 0x39?? */ - {{0}}, /* 0x3a?? */ - {{0}}, /* 0x3b?? */ - {{0}}, /* 0x3c?? */ - {{0}}, /* 0x3d?? */ - {{0}}, /* 0x3e?? */ - {{0}}, /* 0x3f?? */ - {{0}}, /* 0x40?? */ - {{0}}, /* 0x41?? */ - {{0}}, /* 0x42?? */ - {{0}}, /* 0x43?? */ - {{0}}, /* 0x44?? */ - {{0}}, /* 0x45?? */ - {{0}}, /* 0x46?? */ - {{0}}, /* 0x47?? */ - {{0}}, /* 0x48?? */ - {{0}}, /* 0x49?? */ - {{0}}, /* 0x4a?? */ - {{0}}, /* 0x4b?? */ - {{0}}, /* 0x4c?? */ - {{0}}, /* 0x4d?? */ - {{0}}, /* 0x4e?? */ - {{0}}, /* 0x4f?? */ - {{0}}, /* 0x50?? */ - {{0}}, /* 0x51?? */ - {{0}}, /* 0x52?? */ - {{0}}, /* 0x53?? */ - {{0}}, /* 0x54?? */ - {{0}}, /* 0x55?? */ - {{0}}, /* 0x56?? */ - {{0}}, /* 0x57?? */ - {{0}}, /* 0x58?? */ - {{0}}, /* 0x59?? */ - {{0}}, /* 0x5a?? */ - {{0}}, /* 0x5b?? */ - {{0}}, /* 0x5c?? */ - {{0}}, /* 0x5d?? */ - {{0}}, /* 0x5e?? */ - {{0}}, /* 0x5f?? */ - {{0}}, /* 0x60?? */ - {{0}}, /* 0x61?? */ - {{0}}, /* 0x62?? */ - {{0}}, /* 0x63?? */ - {{0}}, /* 0x64?? */ - {{0}}, /* 0x65?? */ - {{0}}, /* 0x66?? */ - {{0}}, /* 0x67?? */ - {{0}}, /* 0x68?? */ - {{0}}, /* 0x69?? */ - {{0}}, /* 0x6a?? */ - {{0}}, /* 0x6b?? */ - {{0}}, /* 0x6c?? */ - {{0}}, /* 0x6d?? */ - {{0}}, /* 0x6e?? */ - {{0}}, /* 0x6f?? */ - {{0}}, /* 0x70?? */ - {{0}}, /* 0x71?? */ - {{0}}, /* 0x72?? */ - {{0}}, /* 0x73?? */ - {{0}}, /* 0x74?? */ - {{0}}, /* 0x75?? */ - {{0}}, /* 0x76?? */ - {{0}}, /* 0x77?? */ - {{0}}, /* 0x78?? */ - {{0}}, /* 0x79?? */ - {{0}}, /* 0x7a?? */ - {{0}}, /* 0x7b?? */ - {{0}}, /* 0x7c?? */ - {{0}}, /* 0x7d?? */ - {{0}}, /* 0x7e?? */ - {{0}}, /* 0x7f?? */ - {{0}}, /* 0x80?? */ - {{0}}, /* 0x81?? */ - {{0}}, /* 0x82?? */ - {{0}}, /* 0x83?? */ - {{0}}, /* 0x84?? */ - {{0}}, /* 0x85?? */ - {{0}}, /* 0x86?? */ - {{0}}, /* 0x87?? */ - {{0}}, /* 0x88?? */ - {{0}}, /* 0x89?? */ - {{0}}, /* 0x8a?? */ - {{0}}, /* 0x8b?? */ - {{0}}, /* 0x8c?? */ - {{0}}, /* 0x8d?? */ - {{0}}, /* 0x8e?? */ - {{0}}, /* 0x8f?? */ - {{0}}, /* 0x90?? */ - {{0}}, /* 0x91?? */ - {{0}}, /* 0x92?? */ - {{0}}, /* 0x93?? */ - {{0}}, /* 0x94?? */ - {{0}}, /* 0x95?? */ - {{0}}, /* 0x96?? */ - {{0}}, /* 0x97?? */ - {{0}}, /* 0x98?? */ - {{0}}, /* 0x99?? */ - {{0}}, /* 0x9a?? */ - {{0}}, /* 0x9b?? */ - {{0}}, /* 0x9c?? */ - {{0}}, /* 0x9d?? */ - {{0}}, /* 0x9e?? */ - {{0}}, /* 0x9f?? */ - {{0}}, /* 0xa0?? */ - {{0}}, /* 0xa1?? */ - {{0}}, /* 0xa2?? */ - {{0}}, /* 0xa3?? */ - {{0}}, /* 0xa4?? */ - {{0}}, /* 0xa5?? */ - {{0}}, /* 0xa6?? */ - {{0}}, /* 0xa7?? */ - {{0}}, /* 0xa8?? */ - {{0}}, /* 0xa9?? */ - {{0}}, /* 0xaa?? */ - {{0}}, /* 0xab?? */ - {{0}}, /* 0xac?? */ - {{0}}, /* 0xad?? */ - {{0}}, /* 0xae?? */ - {{0}}, /* 0xaf?? */ - {{0}}, /* 0xb0?? */ - {{0}}, /* 0xb1?? */ - {{0}}, /* 0xb2?? */ - {{0}}, /* 0xb3?? */ - {{0}}, /* 0xb4?? */ - {{0}}, /* 0xb5?? */ - {{0}}, /* 0xb6?? */ - {{0}}, /* 0xb7?? */ - {{0}}, /* 0xb8?? */ - {{0}}, /* 0xb9?? */ - {{0}}, /* 0xba?? */ - {{0}}, /* 0xbb?? */ - {{0}}, /* 0xbc?? */ - {{0}}, /* 0xbd?? */ - {{0}}, /* 0xbe?? */ - {{0}}, /* 0xbf?? */ - {{0}}, /* 0xc0?? */ - {{0}}, /* 0xc1?? */ - {{0}}, /* 0xc2?? */ - {{0}}, /* 0xc3?? */ - {{0}}, /* 0xc4?? */ - {{0}}, /* 0xc5?? */ - {{0}}, /* 0xc6?? */ - {{0}}, /* 0xc7?? */ - {{0}}, /* 0xc8?? */ - {{0}}, /* 0xc9?? */ - {{0}}, /* 0xca?? */ - {{0}}, /* 0xcb?? */ - {{0}}, /* 0xcc?? */ - {{0}}, /* 0xcd?? */ - {{0}}, /* 0xce?? */ - {{0}}, /* 0xcf?? */ - {{0}}, /* 0xd0?? */ - {{0}}, /* 0xd1?? */ - {{0}}, /* 0xd2?? */ - {{0}}, /* 0xd3?? */ - {{0}}, /* 0xd4?? */ - {{0}}, /* 0xd5?? */ - {{0}}, /* 0xd6?? */ - {{0}}, /* 0xd7?? */ - {{0}}, /* 0xd8?? */ - {{0}}, /* 0xd9?? */ - {{0}}, /* 0xda?? */ - {{0}}, /* 0xdb?? */ - {{0}}, /* 0xdc?? */ - {{0}}, /* 0xdd?? */ - {{0}}, /* 0xde?? */ - {{0}}, /* 0xdf?? */ - {{0}}, /* 0xe0?? */ - {{0}}, /* 0xe1?? */ - {{0}}, /* 0xe2?? */ - {{0}}, /* 0xe3?? */ - {{0}}, /* 0xe4?? */ - {{0}}, /* 0xe5?? */ - {{0}}, /* 0xe6?? */ - {{0}}, /* 0xe7?? */ - {{0}}, /* 0xe8?? */ - {{0}}, /* 0xe9?? */ - {{0}}, /* 0xea?? */ - {{0}}, /* 0xeb?? */ - {{0}}, /* 0xec?? */ - {{0}}, /* 0xed?? */ - {{0}}, /* 0xee?? */ - {{0}}, /* 0xef?? */ - {{0}}, /* 0xf0?? */ - {{0}}, /* 0xf1?? */ - {{0}}, /* 0xf2?? */ - {{0}}, /* 0xf3?? */ - {{0}}, /* 0xf4?? */ - {{0}}, /* 0xf5?? */ - {{0}}, /* 0xf6?? */ - {{0}}, /* 0xf7?? */ - {{0}}, /* 0xf8?? */ - {{0}}, /* 0xf9?? */ - {{0}}, /* 0xfa?? */ - {{0}}, /* 0xfb?? */ - {{0}}, /* 0xfc?? */ - { /* 0xfd?? */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd00 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd01 (3270_Duplicate) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd02 (3270_FieldMark) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd03 (3270_Right2) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd04 (3270_Left2) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd05 (3270_BackTab) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd06 (3270_EraseEOF) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd07 (3270_EraseInput) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd08 (3270_Reset) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd09 (3270_Quit) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd0a (3270_PA1) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd0b (3270_PA2) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd0c (3270_PA3) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd0d (3270_Test) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd0e (3270_Attn) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd0f (3270_CursorBlink) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd10 (3270_AltCursor) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd11 (3270_KeyClick) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd12 (3270_Jump) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd13 (3270_Ident) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd14 (3270_Rule) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd15 (3270_Copy) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd16 (3270_Play) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd17 (3270_Setup) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd18 (3270_Record) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd19 (3270_ChangeScreen) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd1a (3270_DeleteWord) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd1b (3270_ExSelect) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd1c (3270_CursorSelect) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd1d (3270_PrintScreen) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd1e (3270_Enter) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd1f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd20 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd21 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd22 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd23 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd24 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd25 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd26 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd27 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd28 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd29 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd2a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd2b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd2c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd2d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd2e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd2f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd30 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd31 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd32 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd33 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd34 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd35 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd36 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd37 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd38 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd39 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd3a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd3b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd3c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd3d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd3e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd3f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd40 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd41 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd42 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd43 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd44 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd45 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd46 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd47 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd48 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd49 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd4a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd4b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd4c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd4d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd4e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd4f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd50 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd51 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd52 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd53 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd54 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd55 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd56 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd57 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd58 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd59 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd5a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd5b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd5c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd5d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd5e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd5f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd60 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd61 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd62 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd63 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd64 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd65 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd66 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd67 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd68 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd69 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd6a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd6b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd6c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd6d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd6e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd6f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd70 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd71 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd72 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd73 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd74 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd75 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd76 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd77 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd78 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd79 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd7a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd7b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd7c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd7d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd7e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd7f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd80 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd81 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd82 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd83 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd84 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd85 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd86 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd87 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd88 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd89 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd8a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd8b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd8c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd8d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd8e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd8f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd90 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd91 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd92 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd93 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd94 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd95 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd96 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd97 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd98 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd99 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd9a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd9b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd9c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd9d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd9e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfd9f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfda0 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfda1 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfda2 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfda3 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfda4 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfda5 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfda6 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfda7 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfda8 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfda9 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfdaa */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfdab */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfdac */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfdad */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfdae */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfdaf */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfdb0 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfdb1 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfdb2 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfdb3 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfdb4 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfdb5 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfdb6 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfdb7 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfdb8 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfdb9 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfdba */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfdbb */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfdbc */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfdbd */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfdbe */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfdbf */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfdc0 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfdc1 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfdc2 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfdc3 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfdc4 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfdc5 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfdc6 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfdc7 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfdc8 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfdc9 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfdca */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfdcb */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfdcc */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfdcd */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfdce */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfdcf */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfdd0 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfdd1 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfdd2 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfdd3 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfdd4 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfdd5 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfdd6 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfdd7 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfdd8 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfdd9 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfdda */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfddb */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfddc */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfddd */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfdde */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfddf */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfde0 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfde1 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfde2 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfde3 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfde4 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfde5 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfde6 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfde7 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfde8 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfde9 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfdea */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfdeb */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfdec */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfded */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfdee */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfdef */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfdf0 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfdf1 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfdf2 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfdf3 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfdf4 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfdf5 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfdf6 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfdf7 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfdf8 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfdf9 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfdfa */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfdfb */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfdfc */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfdfd */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfdfe */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfdff */ - }, - { /* 0xfe?? */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe00 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe01 (ISO_Lock) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe02 (ISO_Level2_Latch) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe03 (ISO_Level3_Shift) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe04 (ISO_Level3_Latch) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe05 (ISO_Level3_Lock) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe06 (ISO_Group_Latch) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe07 (ISO_Group_Lock) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe08 (ISO_Next_Group) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe09 (ISO_Next_Group_Lock) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe0a (ISO_Prev_Group) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe0b (ISO_Prev_Group_Lock) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe0c (ISO_First_Group) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe0d (ISO_First_Group_Lock) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe0e (ISO_Last_Group) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe0f (ISO_Last_Group_Lock) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe10 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe11 (ISO_Level5_Shift) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe12 (ISO_Level5_Latch) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe13 (ISO_Level5_Lock) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe14 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe15 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe16 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe17 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe18 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe19 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe1a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe1b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe1c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe1d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe1e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe1f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe20 (ISO_Left_Tab) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe21 (ISO_Move_Line_Up) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe22 (ISO_Move_Line_Down) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe23 (ISO_Partial_Line_Up) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe24 (ISO_Partial_Line_Down) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe25 (ISO_Partial_Space_Left) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe26 (ISO_Partial_Space_Right) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe27 (ISO_Set_Margin_Left) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe28 (ISO_Set_Margin_Right) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe29 (ISO_Release_Margin_Left) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe2a (ISO_Release_Margin_Right) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe2b (ISO_Release_Both_Margins) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe2c (ISO_Fast_Cursor_Left) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe2d (ISO_Fast_Cursor_Right) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe2e (ISO_Fast_Cursor_Up) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe2f (ISO_Fast_Cursor_Down) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe30 (ISO_Continuous_Underline) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe31 (ISO_Discontinuous_Underline) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe32 (ISO_Emphasize) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe33 (ISO_Center_Object) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe34 (ISO_Enter) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe35 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe36 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe37 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe38 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe39 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe3a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe3b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe3c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe3d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe3e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe3f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe40 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe41 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe42 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe43 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe44 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe45 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe46 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe47 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe48 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe49 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe4a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe4b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe4c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe4d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe4e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe4f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe50 (dead_grave) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe51 (dead_acute) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe52 (dead_circumflex) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe53 (dead_perispomeni) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe54 (dead_macron) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe55 (dead_breve) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe56 (dead_abovedot) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe57 (dead_diaeresis) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe58 (dead_abovering) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe59 (dead_doubleacute) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe5a (dead_caron) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe5b (dead_cedilla) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe5c (dead_ogonek) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe5d (dead_iota) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe5e (dead_voiced_sound) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe5f (dead_semivoiced_sound) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe60 (dead_belowdot) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe61 (dead_hook) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe62 (dead_horn) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe63 (dead_stroke) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe64 (dead_psili) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe65 (dead_dasia) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe66 (dead_doublegrave) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe67 (dead_belowring) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe68 (dead_belowmacron) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe69 (dead_belowcircumflex) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe6a (dead_belowtilde) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe6b (dead_belowbreve) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe6c (dead_belowdiaeresis) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe6d (dead_invertedbreve) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe6e (dead_belowcomma) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe6f (dead_currency) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe70 (AccessX_Enable) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe71 (AccessX_Feedback_Enable) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe72 (RepeatKeys_Enable) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe73 (SlowKeys_Enable) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe74 (BounceKeys_Enable) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe75 (StickyKeys_Enable) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe76 (MouseKeys_Enable) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe77 (MouseKeys_Accel_Enable) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe78 (Overlay1_Enable) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe79 (Overlay2_Enable) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe7a (AudibleBell_Enable) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe7b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe7c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe7d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe7e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe7f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe80 (dead_a) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe81 (dead_A) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe82 (dead_e) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe83 (dead_E) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe84 (dead_i) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe85 (dead_I) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe86 (dead_o) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe87 (dead_O) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe88 (dead_u) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe89 (dead_U) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe8a (dead_small_schwa) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe8b (dead_capital_schwa) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe8c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe8d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe8e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe8f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe90 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe91 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe92 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe93 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe94 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe95 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe96 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe97 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe98 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe99 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe9a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe9b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe9c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe9d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe9e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfe9f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfea0 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfea1 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfea2 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfea3 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfea4 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfea5 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfea6 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfea7 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfea8 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfea9 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfeaa */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfeab */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfeac */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfead */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfeae */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfeaf */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfeb0 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfeb1 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfeb2 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfeb3 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfeb4 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfeb5 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfeb6 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfeb7 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfeb8 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfeb9 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfeba */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfebb */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfebc */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfebd */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfebe */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfebf */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfec0 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfec1 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfec2 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfec3 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfec4 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfec5 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfec6 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfec7 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfec8 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfec9 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfeca */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfecb */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfecc */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfecd */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfece */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfecf */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfed0 (First_Virtual_Screen) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfed1 (Prev_Virtual_Screen) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfed2 (Next_Virtual_Screen) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfed3 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfed4 (Last_Virtual_Screen) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfed5 (Terminate_Server) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfed6 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfed7 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfed8 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfed9 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfeda */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfedb */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfedc */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfedd */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfede */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfedf */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfee0 (Pointer_Left) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfee1 (Pointer_Right) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfee2 (Pointer_Up) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfee3 (Pointer_Down) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfee4 (Pointer_UpLeft) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfee5 (Pointer_UpRight) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfee6 (Pointer_DownLeft) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfee7 (Pointer_DownRight) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfee8 (Pointer_Button_Dflt) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfee9 (Pointer_Button1) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfeea (Pointer_Button2) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfeeb (Pointer_Button3) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfeec (Pointer_Button4) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfeed (Pointer_Button5) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfeee (Pointer_DblClick_Dflt) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfeef (Pointer_DblClick1) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfef0 (Pointer_DblClick2) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfef1 (Pointer_DblClick3) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfef2 (Pointer_DblClick4) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfef3 (Pointer_DblClick5) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfef4 (Pointer_Drag_Dflt) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfef5 (Pointer_Drag1) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfef6 (Pointer_Drag2) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfef7 (Pointer_Drag3) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfef8 (Pointer_Drag4) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfef9 (Pointer_EnableKeys) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfefa (Pointer_Accelerate) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfefb (Pointer_DfltBtnNext) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfefc (Pointer_DfltBtnPrev) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfefd (Pointer_Drag5) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfefe */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfeff */ - }, - { /* 0xff?? */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff00 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff01 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff02 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff03 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff04 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff05 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff06 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff07 */ - { .scancode = 0x0E, .flags = 0x00 }, /* 0xff08 (BackSpace) */ - { .scancode = 0x0F, .flags = 0x00 }, /* 0xff09 (Tab) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff0a (Linefeed) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff0b (Clear) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff0c */ - { .scancode = 0x1C, .flags = 0x00 }, /* 0xff0d (Return) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff0e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff0f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff10 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff11 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff12 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff13 (Pause) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff14 (Scroll_Lock) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff15 (Sys_Req) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff16 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff17 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff18 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff19 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff1a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff1b (Escape) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff1c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff1d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff1e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff1f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff20 (Multi_key) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff21 (Kanji) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff22 (Muhenkan) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff23 (Henkan) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff24 (Romaji) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff25 (Hiragana) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff26 (Katakana) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff27 (Hiragana_Katakana) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff28 (Zenkaku) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff29 (Hankaku) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff2a (Zenkaku_Hankaku) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff2b (Touroku) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff2c (Massyo) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff2d (Kana_Lock) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff2e (Kana_Shift) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff2f (Eisu_Shift) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff30 (Eisu_toggle) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff31 (Hangul) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff32 (Hangul_Start) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff33 (Hangul_End) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff34 (Hangul_Hanja) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff35 (Hangul_Jamo) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff36 (Hangul_Romaja) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff37 (Hangul_Codeinput) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff38 (Hangul_Jeonja) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff39 (Hangul_Banja) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff3a (Hangul_PreHanja) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff3b (Hangul_PostHanja) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff3c (Hangul_SingleCandidate) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff3d (Hangul_MultipleCandidate) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff3e (Hangul_PreviousCandidate) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff3f (Hangul_Special) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff40 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff41 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff42 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff43 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff44 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff45 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff46 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff47 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff48 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff49 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff4a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff4b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff4c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff4d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff4e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff4f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff50 (Home) */ - { .scancode = 0x4B, .flags = KBD_FLAGS_EXTENDED }, /* 0xff51 (Left) */ - { .scancode = 0x48, .flags = KBD_FLAGS_EXTENDED }, /* 0xff52 (Up) */ - { .scancode = 0x4D, .flags = KBD_FLAGS_EXTENDED }, /* 0xff53 (Right) */ - { .scancode = 0x50, .flags = KBD_FLAGS_EXTENDED }, /* 0xff54 (Down) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff55 (Page_Up) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff56 (Page_Down) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff57 (End) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff58 (Begin) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff59 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff5a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff5b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff5c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff5d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff5e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff5f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff60 (Select) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff61 (Print) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff62 (Execute) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff63 (Insert) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff64 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff65 (Undo) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff66 (Redo) */ - { .scancode = 0x5D, .flags = KBD_FLAGS_EXTENDED }, /* 0xff67 (Menu) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff68 (Find) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff69 (Cancel) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff6a (Help) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff6b (Break) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff6c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff6d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff6e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff6f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff70 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff71 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff72 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff73 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff74 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff75 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff76 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff77 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff78 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff79 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff7a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff7b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff7c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff7d */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff7e (Hangul_switch) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff7f (Num_Lock) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff80 (KP_Space) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff81 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff82 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff83 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff84 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff85 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff86 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff87 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff88 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff89 (KP_Tab) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff8a */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff8b */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff8c */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff8d (KP_Enter) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff8e */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff8f */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff90 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff91 (KP_F1) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff92 (KP_F2) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff93 (KP_F3) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff94 (KP_F4) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff95 (KP_Home) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff96 (KP_Left) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff97 (KP_Up) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff98 (KP_Right) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff99 (KP_Down) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff9a (KP_Page_Up) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff9b (KP_Page_Down) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff9c (KP_End) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff9d (KP_Begin) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff9e (KP_Insert) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xff9f (KP_Delete) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xffa0 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xffa1 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xffa2 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xffa3 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xffa4 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xffa5 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xffa6 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xffa7 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xffa8 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xffa9 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xffaa (KP_Multiply) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xffab (KP_Add) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xffac (KP_Separator) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xffad (KP_Subtract) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xffae (KP_Decimal) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xffaf (KP_Divide) */ - { .scancode = 0x52, .flags = 0x00 }, /* 0xffb0 (KP_0) */ - { .scancode = 0x4F, .flags = 0x00 }, /* 0xffb1 (KP_1) */ - { .scancode = 0x50, .flags = 0x00 }, /* 0xffb2 (KP_2) */ - { .scancode = 0x51, .flags = 0x00 }, /* 0xffb3 (KP_3) */ - { .scancode = 0x4B, .flags = 0x00 }, /* 0xffb4 (KP_4) */ - { .scancode = 0x4C, .flags = 0x00 }, /* 0xffb5 (KP_5) */ - { .scancode = 0x4D, .flags = 0x00 }, /* 0xffb6 (KP_6) */ - { .scancode = 0x47, .flags = 0x00 }, /* 0xffb7 (KP_7) */ - { .scancode = 0x48, .flags = 0x00 }, /* 0xffb8 (KP_8) */ - { .scancode = 0x49, .flags = 0x00 }, /* 0xffb9 (KP_9) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xffba */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xffbb */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xffbc */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xffbd (KP_Equal) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xffbe (F1) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xffbf (F2) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xffc0 (F3) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xffc1 (F4) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xffc2 (F5) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xffc3 (F6) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xffc4 (F7) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xffc5 (F8) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xffc6 (F9) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xffc7 (F10) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xffc8 (L1) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xffc9 (L2) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xffca (L3) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xffcb (L4) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xffcc (L5) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xffcd (L6) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xffce (L7) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xffcf (L8) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xffd0 (L9) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xffd1 (L10) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xffd2 (R1) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xffd3 (R2) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xffd4 (R3) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xffd5 (R4) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xffd6 (R5) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xffd7 (R6) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xffd8 (R7) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xffd9 (R8) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xffda (R9) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xffdb (R10) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xffdc (R11) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xffdd (R12) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xffde (R13) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xffdf (R14) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xffe0 (R15) */ - { .scancode = 0x2A, .flags = 0x00 }, /* 0xffe1 (Shift_L) */ - { .scancode = 0x36, .flags = 0x00 }, /* 0xffe2 (Shift_R) */ - { .scancode = 0x1D, .flags = 0x00 }, /* 0xffe3 (Control_L) */ - { .scancode = 0x1D, .flags = 0x00 }, /* 0xffe4 (Control_R) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xffe5 (Caps_Lock) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xffe6 (Shift_Lock) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xffe7 (Meta_L) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xffe8 (Meta_R) */ - { .scancode = 0x38, .flags = 0x00 }, /* 0xffe9 (Alt_L) */ - { .scancode = 0x38, .flags = 0x00 }, /* 0xffea (Alt_R) */ - { .scancode = 0x5B, .flags = KBD_FLAGS_EXTENDED }, /* 0xffeb (Super_L) */ - { .scancode = 0x5C, .flags = KBD_FLAGS_EXTENDED }, /* 0xffec (Super_R) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xffed (Hyper_L) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xffee (Hyper_R) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xffef */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfff0 */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfff1 (braille_dot_1) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfff2 (braille_dot_2) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfff3 (braille_dot_3) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfff4 (braille_dot_4) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfff5 (braille_dot_5) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfff6 (braille_dot_6) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfff7 (braille_dot_7) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfff8 (braille_dot_8) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfff9 (braille_dot_9) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfffa (braille_dot_10) */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfffb */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfffc */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfffd */ - { .scancode = 0x00, .flags = 0x00 }, /* 0xfffe */ - { .scancode = 0x53, .flags = KBD_FLAGS_EXTENDED }, /* 0xffff (Delete) */ - }, +static guac_rdp_keysym_desc __guac_rdp_keymap_mapping[] = { + + /* space */ + { .keysym = 0x0020, .scancode = 0x39 }, + + /* exclam */ + { .keysym = 0x0021, .scancode = 0x02 }, + + /* quotedbl */ + { .keysym = 0x0022, .scancode = 0x28 }, + + /* numbersign */ + { .keysym = 0x0023, .scancode = 0x04 }, + + /* dollar */ + { .keysym = 0x0024, .scancode = 0x05, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* percent */ + { .keysym = 0x0025, .scancode = 0x06 }, + + /* ampersand */ + { .keysym = 0x0026, .scancode = 0x08 }, + + /* quoteright */ + { .keysym = 0x0027, .scancode = 0x28 }, + + /* parenleft */ + { .keysym = 0x0028, .scancode = 0x0A }, + + /* parenright */ + { .keysym = 0x0029, .scancode = 0x0B }, + + /* asterisk */ + { .keysym = 0x002a, .scancode = 0x09 }, + + /* plus */ + { .keysym = 0x002b, .scancode = 0x0D }, + + /* comma */ + { .keysym = 0x002c, .scancode = 0x33 }, + + /* minus */ + { .keysym = 0x002d, .scancode = 0x0C }, + + /* period */ + { .keysym = 0x002e, .scancode = 0x34 }, + + /* slash */ + { .keysym = 0x002f, .scancode = 0x35 }, + + /* 0 */ + { .keysym = 0x0030, .scancode = 0x0B }, + + /* 1 */ + { .keysym = 0x0031, .scancode = 0x02 }, + + /* 2 */ + { .keysym = 0x0032, .scancode = 0x03 }, + + /* 3 */ + { .keysym = 0x0033, .scancode = 0x04 }, + + /* 4 */ + { .keysym = 0x0034, .scancode = 0x05 }, + + /* 5 */ + { .keysym = 0x0035, .scancode = 0x06 }, + + /* 6 */ + { .keysym = 0x0036, .scancode = 0x07 }, + + /* 7 */ + { .keysym = 0x0037, .scancode = 0x08 }, + + /* 8 */ + { .keysym = 0x0038, .scancode = 0x09 }, + + /* 9 */ + { .keysym = 0x0039, .scancode = 0x0A }, + + /* colon */ + { .keysym = 0x003a, .scancode = 0x27 }, + + /* semicolon */ + { .keysym = 0x003b, .scancode = 0x27 }, + + /* less */ + { .keysym = 0x003c, .scancode = 0x33 }, + + /* equal */ + { .keysym = 0x003d, .scancode = 0x0D }, + + /* greater */ + { .keysym = 0x003e, .scancode = 0x34 }, + + /* question */ + { .keysym = 0x003f, .scancode = 0x35 }, + + /* at */ + { .keysym = 0x0040, .scancode = 0x03 }, + + /* A */ + { .keysym = 0x0041, .scancode = 0x1E }, + + /* B */ + { .keysym = 0x0042, .scancode = 0x30 }, + + /* C */ + { .keysym = 0x0043, .scancode = 0x2E }, + + /* D */ + { .keysym = 0x0044, .scancode = 0x20 }, + + /* E */ + { .keysym = 0x0045, .scancode = 0x12 }, + + /* F */ + { .keysym = 0x0046, .scancode = 0x21 }, + + /* G */ + { .keysym = 0x0047, .scancode = 0x22 }, + + /* H */ + { .keysym = 0x0048, .scancode = 0x23 }, + + /* I */ + { .keysym = 0x0049, .scancode = 0x17 }, + + /* J */ + { .keysym = 0x004a, .scancode = 0x24 }, + + /* K */ + { .keysym = 0x004b, .scancode = 0x25 }, + + /* L */ + { .keysym = 0x004c, .scancode = 0x26 }, + + /* M */ + { .keysym = 0x004d, .scancode = 0x32 }, + + /* N */ + { .keysym = 0x004e, .scancode = 0x31 }, + + /* O */ + { .keysym = 0x004f, .scancode = 0x18 }, + + /* P */ + { .keysym = 0x0050, .scancode = 0x19 }, + + /* Q */ + { .keysym = 0x0051, .scancode = 0x10 }, + + /* R */ + { .keysym = 0x0052, .scancode = 0x13 }, + + /* S */ + { .keysym = 0x0053, .scancode = 0x1F }, + + /* T */ + { .keysym = 0x0054, .scancode = 0x14 }, + + /* U */ + { .keysym = 0x0055, .scancode = 0x16 }, + + /* V */ + { .keysym = 0x0056, .scancode = 0x2F }, + + /* W */ + { .keysym = 0x0057, .scancode = 0x11 }, + + /* X */ + { .keysym = 0x0058, .scancode = 0x2D }, + + /* Y */ + { .keysym = 0x0059, .scancode = 0x15 }, + + /* Z */ + { .keysym = 0x005a, .scancode = 0x2C }, + + /* bracketleft */ + { .keysym = 0x005b, .scancode = 0x1A }, + + /* backslash */ + { .keysym = 0x005c, .scancode = 0x2B }, + + /* bracketright */ + { .keysym = 0x005d, .scancode = 0x1B }, + + /* asciicircum */ + { .keysym = 0x005e, .scancode = 0x29 }, + + /* underscore */ + { .keysym = 0x005f, .scancode = 0x0C }, + + /* quoteleft */ + { .keysym = 0x0060, .scancode = 0x29 }, + + /* a */ + { .keysym = 0x0061, .scancode = 0x1E }, + + /* b */ + { .keysym = 0x0062, .scancode = 0x30 }, + + /* c */ + { .keysym = 0x0063, .scancode = 0x2E }, + + /* d */ + { .keysym = 0x0064, .scancode = 0x20 }, + + /* e */ + { .keysym = 0x0065, .scancode = 0x12 }, + + /* f */ + { .keysym = 0x0066, .scancode = 0x21 }, + + /* g */ + { .keysym = 0x0067, .scancode = 0x22 }, + + /* h */ + { .keysym = 0x0068, .scancode = 0x23 }, + + /* i */ + { .keysym = 0x0069, .scancode = 0x17 }, + + /* j */ + { .keysym = 0x006a, .scancode = 0x24 }, + + /* k */ + { .keysym = 0x006b, .scancode = 0x25 }, + + /* l */ + { .keysym = 0x006c, .scancode = 0x26 }, + + /* m */ + { .keysym = 0x006d, .scancode = 0x32 }, + + /* n */ + { .keysym = 0x006e, .scancode = 0x31 }, + + /* o */ + { .keysym = 0x006f, .scancode = 0x18 }, + + /* p */ + { .keysym = 0x0070, .scancode = 0x19 }, + + /* q */ + { .keysym = 0x0071, .scancode = 0x10 }, + + /* r */ + { .keysym = 0x0072, .scancode = 0x13 }, + + /* s */ + { .keysym = 0x0073, .scancode = 0x1F }, + + /* t */ + { .keysym = 0x0074, .scancode = 0x14 }, + + /* u */ + { .keysym = 0x0075, .scancode = 0x16 }, + + /* v */ + { .keysym = 0x0076, .scancode = 0x2F }, + + /* w */ + { .keysym = 0x0077, .scancode = 0x11 }, + + /* x */ + { .keysym = 0x0078, .scancode = 0x2D }, + + /* y */ + { .keysym = 0x0079, .scancode = 0x15 }, + + /* z */ + { .keysym = 0x007a, .scancode = 0x2C }, + + /* braceleft */ + { .keysym = 0x007b, .scancode = 0x1A }, + + /* bar */ + { .keysym = 0x007c, .scancode = 0x2B }, + + /* braceright */ + { .keysym = 0x007d, .scancode = 0x1B }, + + /* asciitilde */ + { .keysym = 0x007e, .scancode = 0x29 }, + + /* BackSpace */ + { .keysym = 0xff08, .scancode = 0x0E }, + + /* Tab */ + { .keysym = 0xff09, .scancode = 0x0F }, + + /* Return */ + { .keysym = 0xff0d, .scancode = 0x1C }, + + /* Left */ + { .keysym = 0xff51, .scancode = 0x4B, + .flags = KBD_FLAGS_EXTENDED }, + + /* Up */ + { .keysym = 0xff52, .scancode = 0x48, + .flags = KBD_FLAGS_EXTENDED }, + + /* Right */ + { .keysym = 0xff53, .scancode = 0x4D, + .flags = KBD_FLAGS_EXTENDED }, + + /* Down */ + { .keysym = 0xff54, .scancode = 0x50, + .flags = KBD_FLAGS_EXTENDED }, + + /* Menu */ + { .keysym = 0xff67, .scancode = 0x5D, + .flags = KBD_FLAGS_EXTENDED }, + + /* KP_0 */ + { .keysym = 0xffb0, .scancode = 0x52 }, + + /* KP_1 */ + { .keysym = 0xffb1, .scancode = 0x4F }, + + /* KP_2 */ + { .keysym = 0xffb2, .scancode = 0x50 }, + + /* KP_3 */ + { .keysym = 0xffb3, .scancode = 0x51 }, + + /* KP_4 */ + { .keysym = 0xffb4, .scancode = 0x4B }, + + /* KP_5 */ + { .keysym = 0xffb5, .scancode = 0x4C }, + + /* KP_6 */ + { .keysym = 0xffb6, .scancode = 0x4D }, + + /* KP_7 */ + { .keysym = 0xffb7, .scancode = 0x47 }, + + /* KP_8 */ + { .keysym = 0xffb8, .scancode = 0x48 }, + + /* KP_9 */ + { .keysym = 0xffb9, .scancode = 0x49 }, + + /* Shift_L */ + { .keysym = 0xffe1, .scancode = 0x2A }, + + /* Shift_R */ + { .keysym = 0xffe2, .scancode = 0x36 }, + + /* Control_L */ + { .keysym = 0xffe3, .scancode = 0x1D }, + + /* Control_R */ + { .keysym = 0xffe4, .scancode = 0x1D }, + + /* Alt_L */ + { .keysym = 0xffe9, .scancode = 0x38 }, + + /* Alt_R */ + { .keysym = 0xffea, .scancode = 0x38 }, + + /* Super_L */ + { .keysym = 0xffeb, .scancode = 0x5B, + .flags = KBD_FLAGS_EXTENDED }, + + /* Super_R */ + { .keysym = 0xffec, .scancode = 0x5C, + .flags = KBD_FLAGS_EXTENDED }, + + /* Delete */ + { .keysym = 0xffff, .scancode = 0x53, + .flags = KBD_FLAGS_EXTENDED }, + + {0} + +}; + +const guac_rdp_keymap guac_rdp_keymap_en_us = { + + .name = "en-us-qwerty", + + .parent = NULL, + .mapping = __guac_rdp_keymap_mapping + }; From f5b4b0ca00408e1abb749ebc34b18c9129224bdc Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Wed, 21 Mar 2012 10:53:13 -0700 Subject: [PATCH 120/253] Add shift to keysyms that require it. --- protocols/rdp/src/rdp_keymap_en_us.c | 138 ++++++++++++++++++--------- 1 file changed, 92 insertions(+), 46 deletions(-) diff --git a/protocols/rdp/src/rdp_keymap_en_us.c b/protocols/rdp/src/rdp_keymap_en_us.c index 7e4605ac..4b9f95b1 100644 --- a/protocols/rdp/src/rdp_keymap_en_us.c +++ b/protocols/rdp/src/rdp_keymap_en_us.c @@ -46,38 +46,47 @@ static guac_rdp_keysym_desc __guac_rdp_keymap_mapping[] = { { .keysym = 0x0020, .scancode = 0x39 }, /* exclam */ - { .keysym = 0x0021, .scancode = 0x02 }, + { .keysym = 0x0021, .scancode = 0x02, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* quotedbl */ - { .keysym = 0x0022, .scancode = 0x28 }, + { .keysym = 0x0022, .scancode = 0x28, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* numbersign */ - { .keysym = 0x0023, .scancode = 0x04 }, + { .keysym = 0x0023, .scancode = 0x04, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* dollar */ { .keysym = 0x0024, .scancode = 0x05, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* percent */ - { .keysym = 0x0025, .scancode = 0x06 }, + { .keysym = 0x0025, .scancode = 0x06, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* ampersand */ - { .keysym = 0x0026, .scancode = 0x08 }, + { .keysym = 0x0026, .scancode = 0x08, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* quoteright */ { .keysym = 0x0027, .scancode = 0x28 }, /* parenleft */ - { .keysym = 0x0028, .scancode = 0x0A }, + { .keysym = 0x0028, .scancode = 0x0A, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* parenright */ - { .keysym = 0x0029, .scancode = 0x0B }, + { .keysym = 0x0029, .scancode = 0x0B, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* asterisk */ - { .keysym = 0x002a, .scancode = 0x09 }, + { .keysym = 0x002a, .scancode = 0x09, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* plus */ - { .keysym = 0x002b, .scancode = 0x0D }, + { .keysym = 0x002b, .scancode = 0x0D, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* comma */ { .keysym = 0x002c, .scancode = 0x33 }, @@ -122,103 +131,134 @@ static guac_rdp_keysym_desc __guac_rdp_keymap_mapping[] = { { .keysym = 0x0039, .scancode = 0x0A }, /* colon */ - { .keysym = 0x003a, .scancode = 0x27 }, + { .keysym = 0x003a, .scancode = 0x27, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* semicolon */ { .keysym = 0x003b, .scancode = 0x27 }, /* less */ - { .keysym = 0x003c, .scancode = 0x33 }, + { .keysym = 0x003c, .scancode = 0x33, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* equal */ { .keysym = 0x003d, .scancode = 0x0D }, /* greater */ - { .keysym = 0x003e, .scancode = 0x34 }, + { .keysym = 0x003e, .scancode = 0x34, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* question */ - { .keysym = 0x003f, .scancode = 0x35 }, + { .keysym = 0x003f, .scancode = 0x35, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* at */ - { .keysym = 0x0040, .scancode = 0x03 }, + { .keysym = 0x0040, .scancode = 0x03, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* A */ - { .keysym = 0x0041, .scancode = 0x1E }, + { .keysym = 0x0041, .scancode = 0x1E, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* B */ - { .keysym = 0x0042, .scancode = 0x30 }, + { .keysym = 0x0042, .scancode = 0x30, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* C */ - { .keysym = 0x0043, .scancode = 0x2E }, + { .keysym = 0x0043, .scancode = 0x2E, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* D */ - { .keysym = 0x0044, .scancode = 0x20 }, + { .keysym = 0x0044, .scancode = 0x20, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* E */ - { .keysym = 0x0045, .scancode = 0x12 }, + { .keysym = 0x0045, .scancode = 0x12, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* F */ - { .keysym = 0x0046, .scancode = 0x21 }, + { .keysym = 0x0046, .scancode = 0x21, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* G */ - { .keysym = 0x0047, .scancode = 0x22 }, + { .keysym = 0x0047, .scancode = 0x22, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* H */ - { .keysym = 0x0048, .scancode = 0x23 }, + { .keysym = 0x0048, .scancode = 0x23, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* I */ - { .keysym = 0x0049, .scancode = 0x17 }, + { .keysym = 0x0049, .scancode = 0x17, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* J */ - { .keysym = 0x004a, .scancode = 0x24 }, + { .keysym = 0x004a, .scancode = 0x24, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* K */ - { .keysym = 0x004b, .scancode = 0x25 }, + { .keysym = 0x004b, .scancode = 0x25, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* L */ - { .keysym = 0x004c, .scancode = 0x26 }, + { .keysym = 0x004c, .scancode = 0x26, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* M */ - { .keysym = 0x004d, .scancode = 0x32 }, + { .keysym = 0x004d, .scancode = 0x32, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* N */ - { .keysym = 0x004e, .scancode = 0x31 }, + { .keysym = 0x004e, .scancode = 0x31, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* O */ - { .keysym = 0x004f, .scancode = 0x18 }, + { .keysym = 0x004f, .scancode = 0x18, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* P */ - { .keysym = 0x0050, .scancode = 0x19 }, + { .keysym = 0x0050, .scancode = 0x19, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* Q */ - { .keysym = 0x0051, .scancode = 0x10 }, + { .keysym = 0x0051, .scancode = 0x10, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* R */ - { .keysym = 0x0052, .scancode = 0x13 }, + { .keysym = 0x0052, .scancode = 0x13, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* S */ - { .keysym = 0x0053, .scancode = 0x1F }, + { .keysym = 0x0053, .scancode = 0x1F, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* T */ - { .keysym = 0x0054, .scancode = 0x14 }, + { .keysym = 0x0054, .scancode = 0x14, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* U */ - { .keysym = 0x0055, .scancode = 0x16 }, + { .keysym = 0x0055, .scancode = 0x16, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* V */ - { .keysym = 0x0056, .scancode = 0x2F }, + { .keysym = 0x0056, .scancode = 0x2F, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* W */ - { .keysym = 0x0057, .scancode = 0x11 }, + { .keysym = 0x0057, .scancode = 0x11, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* X */ - { .keysym = 0x0058, .scancode = 0x2D }, + { .keysym = 0x0058, .scancode = 0x2D, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* Y */ - { .keysym = 0x0059, .scancode = 0x15 }, + { .keysym = 0x0059, .scancode = 0x15, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* Z */ - { .keysym = 0x005a, .scancode = 0x2C }, + { .keysym = 0x005a, .scancode = 0x2C, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* bracketleft */ { .keysym = 0x005b, .scancode = 0x1A }, @@ -230,10 +270,12 @@ static guac_rdp_keysym_desc __guac_rdp_keymap_mapping[] = { { .keysym = 0x005d, .scancode = 0x1B }, /* asciicircum */ - { .keysym = 0x005e, .scancode = 0x29 }, + { .keysym = 0x005e, .scancode = 0x29, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* underscore */ - { .keysym = 0x005f, .scancode = 0x0C }, + { .keysym = 0x005f, .scancode = 0x0C, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* quoteleft */ { .keysym = 0x0060, .scancode = 0x29 }, @@ -317,16 +359,20 @@ static guac_rdp_keysym_desc __guac_rdp_keymap_mapping[] = { { .keysym = 0x007a, .scancode = 0x2C }, /* braceleft */ - { .keysym = 0x007b, .scancode = 0x1A }, + { .keysym = 0x007b, .scancode = 0x1A, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* bar */ - { .keysym = 0x007c, .scancode = 0x2B }, + { .keysym = 0x007c, .scancode = 0x2B, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* braceright */ - { .keysym = 0x007d, .scancode = 0x1B }, + { .keysym = 0x007d, .scancode = 0x1B, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* asciitilde */ - { .keysym = 0x007e, .scancode = 0x29 }, + { .keysym = 0x007e, .scancode = 0x29, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* BackSpace */ { .keysym = 0xff08, .scancode = 0x0E }, From 02bd90e4fb765eebcc4835005ef89f4213e1e522 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Wed, 21 Mar 2012 12:34:21 -0700 Subject: [PATCH 121/253] Moved non-printable keys into base keymap. --- protocols/rdp/Makefile.am | 1 + protocols/rdp/include/rdp_keymap.h | 5 + protocols/rdp/src/rdp_keymap_base.c | 146 +++++++++++++++++++++++++++ protocols/rdp/src/rdp_keymap_en_us.c | 91 +---------------- 4 files changed, 153 insertions(+), 90 deletions(-) create mode 100644 protocols/rdp/src/rdp_keymap_base.c diff --git a/protocols/rdp/Makefile.am b/protocols/rdp/Makefile.am index 78803885..9ad53f81 100644 --- a/protocols/rdp/Makefile.am +++ b/protocols/rdp/Makefile.am @@ -43,6 +43,7 @@ lib_LTLIBRARIES = libguac-client-rdp.la libguac_client_rdp_la_SOURCES = src/client.c src/rdp_bitmap.c src/rdp_glyph.c src/rdp_pointer.c src/rdp_gdi.c src/guac_handlers.c \ src/rdp_keymap.c \ + src/rdp_keymap_base.c \ src/rdp_keymap_en_us.c libguac_client_rdp_la_LDFLAGS = -version-info 0:0:0 diff --git a/protocols/rdp/include/rdp_keymap.h b/protocols/rdp/include/rdp_keymap.h index b0459294..1c95c439 100644 --- a/protocols/rdp/include/rdp_keymap.h +++ b/protocols/rdp/include/rdp_keymap.h @@ -113,6 +113,11 @@ typedef int guac_rdp_keysym_state_map[256][256]; */ extern const guac_rdp_keymap guac_rdp_keymap_en_us; +/** + * Map of X11 keysyms to RDP scancodes (common non-printable keys). + */ +extern const guac_rdp_keymap guac_rdp_keymap_base; + /** * Simple macro for referencing the mapped value of an altcode or scancode for a given keysym. */ diff --git a/protocols/rdp/src/rdp_keymap_base.c b/protocols/rdp/src/rdp_keymap_base.c new file mode 100644 index 00000000..4f24b709 --- /dev/null +++ b/protocols/rdp/src/rdp_keymap_base.c @@ -0,0 +1,146 @@ + +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is libguac-client-rdp. + * + * The Initial Developer of the Original Code is + * Michael Jumper. + * Portions created by the Initial Developer are Copyright (C) 2011 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Matt Hortman + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#include + +#include "rdp_keymap.h" + +static guac_rdp_keysym_desc __guac_rdp_keymap_mapping[] = { + + /* BackSpace */ + { .keysym = 0xff08, .scancode = 0x0E }, + + /* Tab */ + { .keysym = 0xff09, .scancode = 0x0F }, + + /* Return */ + { .keysym = 0xff0d, .scancode = 0x1C }, + + /* Left */ + { .keysym = 0xff51, .scancode = 0x4B, + .flags = KBD_FLAGS_EXTENDED }, + + /* Up */ + { .keysym = 0xff52, .scancode = 0x48, + .flags = KBD_FLAGS_EXTENDED }, + + /* Right */ + { .keysym = 0xff53, .scancode = 0x4D, + .flags = KBD_FLAGS_EXTENDED }, + + /* Down */ + { .keysym = 0xff54, .scancode = 0x50, + .flags = KBD_FLAGS_EXTENDED }, + + /* Menu */ + { .keysym = 0xff67, .scancode = 0x5D, + .flags = KBD_FLAGS_EXTENDED }, + + /* KP_0 */ + { .keysym = 0xffb0, .scancode = 0x52 }, + + /* KP_1 */ + { .keysym = 0xffb1, .scancode = 0x4F }, + + /* KP_2 */ + { .keysym = 0xffb2, .scancode = 0x50 }, + + /* KP_3 */ + { .keysym = 0xffb3, .scancode = 0x51 }, + + /* KP_4 */ + { .keysym = 0xffb4, .scancode = 0x4B }, + + /* KP_5 */ + { .keysym = 0xffb5, .scancode = 0x4C }, + + /* KP_6 */ + { .keysym = 0xffb6, .scancode = 0x4D }, + + /* KP_7 */ + { .keysym = 0xffb7, .scancode = 0x47 }, + + /* KP_8 */ + { .keysym = 0xffb8, .scancode = 0x48 }, + + /* KP_9 */ + { .keysym = 0xffb9, .scancode = 0x49 }, + + /* Shift_L */ + { .keysym = 0xffe1, .scancode = 0x2A }, + + /* Shift_R */ + { .keysym = 0xffe2, .scancode = 0x36 }, + + /* Control_L */ + { .keysym = 0xffe3, .scancode = 0x1D }, + + /* Control_R */ + { .keysym = 0xffe4, .scancode = 0x1D }, + + /* Alt_L */ + { .keysym = 0xffe9, .scancode = 0x38 }, + + /* Alt_R */ + { .keysym = 0xffea, .scancode = 0x38 }, + + /* Super_L */ + { .keysym = 0xffeb, .scancode = 0x5B, + .flags = KBD_FLAGS_EXTENDED }, + + /* Super_R */ + { .keysym = 0xffec, .scancode = 0x5C, + .flags = KBD_FLAGS_EXTENDED }, + + /* Delete */ + { .keysym = 0xffff, .scancode = 0x53, + .flags = KBD_FLAGS_EXTENDED }, + + {0} + +}; + +const guac_rdp_keymap guac_rdp_keymap_base = { + + .name = "base", + + .parent = NULL, + .mapping = __guac_rdp_keymap_mapping + +}; + diff --git a/protocols/rdp/src/rdp_keymap_en_us.c b/protocols/rdp/src/rdp_keymap_en_us.c index 4b9f95b1..e73d60d9 100644 --- a/protocols/rdp/src/rdp_keymap_en_us.c +++ b/protocols/rdp/src/rdp_keymap_en_us.c @@ -374,95 +374,6 @@ static guac_rdp_keysym_desc __guac_rdp_keymap_mapping[] = { { .keysym = 0x007e, .scancode = 0x29, .set_keysyms = GUAC_KEYSYMS_SHIFT }, - /* BackSpace */ - { .keysym = 0xff08, .scancode = 0x0E }, - - /* Tab */ - { .keysym = 0xff09, .scancode = 0x0F }, - - /* Return */ - { .keysym = 0xff0d, .scancode = 0x1C }, - - /* Left */ - { .keysym = 0xff51, .scancode = 0x4B, - .flags = KBD_FLAGS_EXTENDED }, - - /* Up */ - { .keysym = 0xff52, .scancode = 0x48, - .flags = KBD_FLAGS_EXTENDED }, - - /* Right */ - { .keysym = 0xff53, .scancode = 0x4D, - .flags = KBD_FLAGS_EXTENDED }, - - /* Down */ - { .keysym = 0xff54, .scancode = 0x50, - .flags = KBD_FLAGS_EXTENDED }, - - /* Menu */ - { .keysym = 0xff67, .scancode = 0x5D, - .flags = KBD_FLAGS_EXTENDED }, - - /* KP_0 */ - { .keysym = 0xffb0, .scancode = 0x52 }, - - /* KP_1 */ - { .keysym = 0xffb1, .scancode = 0x4F }, - - /* KP_2 */ - { .keysym = 0xffb2, .scancode = 0x50 }, - - /* KP_3 */ - { .keysym = 0xffb3, .scancode = 0x51 }, - - /* KP_4 */ - { .keysym = 0xffb4, .scancode = 0x4B }, - - /* KP_5 */ - { .keysym = 0xffb5, .scancode = 0x4C }, - - /* KP_6 */ - { .keysym = 0xffb6, .scancode = 0x4D }, - - /* KP_7 */ - { .keysym = 0xffb7, .scancode = 0x47 }, - - /* KP_8 */ - { .keysym = 0xffb8, .scancode = 0x48 }, - - /* KP_9 */ - { .keysym = 0xffb9, .scancode = 0x49 }, - - /* Shift_L */ - { .keysym = 0xffe1, .scancode = 0x2A }, - - /* Shift_R */ - { .keysym = 0xffe2, .scancode = 0x36 }, - - /* Control_L */ - { .keysym = 0xffe3, .scancode = 0x1D }, - - /* Control_R */ - { .keysym = 0xffe4, .scancode = 0x1D }, - - /* Alt_L */ - { .keysym = 0xffe9, .scancode = 0x38 }, - - /* Alt_R */ - { .keysym = 0xffea, .scancode = 0x38 }, - - /* Super_L */ - { .keysym = 0xffeb, .scancode = 0x5B, - .flags = KBD_FLAGS_EXTENDED }, - - /* Super_R */ - { .keysym = 0xffec, .scancode = 0x5C, - .flags = KBD_FLAGS_EXTENDED }, - - /* Delete */ - { .keysym = 0xffff, .scancode = 0x53, - .flags = KBD_FLAGS_EXTENDED }, - {0} }; @@ -471,7 +382,7 @@ const guac_rdp_keymap guac_rdp_keymap_en_us = { .name = "en-us-qwerty", - .parent = NULL, + .parent = &guac_rdp_keymap_base, .mapping = __guac_rdp_keymap_mapping }; From 6443ffc0c2fdae9963b3d3c225623ed827e30b50 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Wed, 21 Mar 2012 12:35:20 -0700 Subject: [PATCH 122/253] Adding quotes around keymap in log message. --- protocols/rdp/src/client.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/protocols/rdp/src/client.c b/protocols/rdp/src/client.c index 42030b55..f979147e 100644 --- a/protocols/rdp/src/client.c +++ b/protocols/rdp/src/client.c @@ -217,7 +217,7 @@ void __guac_rdp_client_load_keymap(guac_client* client, __guac_rdp_client_load_keymap(client, keymap->parent); /* Log load */ - guac_client_log_info(client, "Loading keymap %s", keymap->name); + guac_client_log_info(client, "Loading keymap \"%s\"", keymap->name); /* Load mapping into keymap */ while (mapping->keysym != 0) { From d3c8377c26e789f3b5a861a62c0e1b290315747b Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Wed, 21 Mar 2012 23:45:37 -0700 Subject: [PATCH 123/253] Add remaining modifier strings, fix unshifted en-us mappings. --- protocols/rdp/include/rdp_keymap.h | 20 ++++ protocols/rdp/src/rdp_keymap.c | 5 + protocols/rdp/src/rdp_keymap_en_us.c | 140 ++++++++++++++++++--------- 3 files changed, 118 insertions(+), 47 deletions(-) diff --git a/protocols/rdp/include/rdp_keymap.h b/protocols/rdp/include/rdp_keymap.h index 1c95c439..a75e08e5 100644 --- a/protocols/rdp/include/rdp_keymap.h +++ b/protocols/rdp/include/rdp_keymap.h @@ -128,11 +128,31 @@ extern const guac_rdp_keymap guac_rdp_keymap_base; */ extern const int GUAC_KEYSYMS_SHIFT[]; +/** + * Keysym string containing both "shift" keys. + */ +extern const int GUAC_KEYSYMS_ALL_SHIFT[]; + +/** + * Keysym string containing only the left "ctrl" key. + */ +extern const int GUAC_KEYSYMS_CTRL[]; + +/** + * Keysym string containing both "ctrl" keys. + */ +extern const int GUAC_KEYSYMS_ALL_CTRL[]; + /** * Keysym string containing only the left "alt" key. */ extern const int GUAC_KEYSYMS_ALT[]; +/** + * Keysym string containing both "alt" keys. + */ +extern const int GUAC_KEYSYMS_ALL_ALT[]; + /** * Keysym string containing all modifier keys. */ diff --git a/protocols/rdp/src/rdp_keymap.c b/protocols/rdp/src/rdp_keymap.c index a1a8388d..8391754f 100644 --- a/protocols/rdp/src/rdp_keymap.c +++ b/protocols/rdp/src/rdp_keymap.c @@ -38,8 +38,13 @@ #include "rdp_keymap.h" const int GUAC_KEYSYMS_SHIFT[] = {0xFFE1, 0}; +const int GUAC_KEYSYMS_ALL_SHIFT[] = {0xFFE1, 0xFFE2, 0}; + +const int GUAC_KEYSYMS_CTRL[] = {0xFFE3, 0}; +const int GUAC_KEYSYMS_ALL_CTRL[] = {0xFFE3, 0xFFE4, 0}; const int GUAC_KEYSYMS_ALT[] = {0xFFE9, 0}; +const int GUAC_KEYSYMS_ALL_ALT[] = {0xFFE9, 0xFFEA, 0}; const int GUAC_KEYSYMS_ALL_MODIFIERS[] = { 0xFFE1, 0xFFE2, /* Left and right shift */ diff --git a/protocols/rdp/src/rdp_keymap_en_us.c b/protocols/rdp/src/rdp_keymap_en_us.c index e73d60d9..fa4a6341 100644 --- a/protocols/rdp/src/rdp_keymap_en_us.c +++ b/protocols/rdp/src/rdp_keymap_en_us.c @@ -89,60 +89,76 @@ static guac_rdp_keysym_desc __guac_rdp_keymap_mapping[] = { .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* comma */ - { .keysym = 0x002c, .scancode = 0x33 }, + { .keysym = 0x002c, .scancode = 0x33, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, /* minus */ - { .keysym = 0x002d, .scancode = 0x0C }, + { .keysym = 0x002d, .scancode = 0x0C, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, /* period */ - { .keysym = 0x002e, .scancode = 0x34 }, + { .keysym = 0x002e, .scancode = 0x34, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, /* slash */ - { .keysym = 0x002f, .scancode = 0x35 }, + { .keysym = 0x002f, .scancode = 0x35, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, /* 0 */ - { .keysym = 0x0030, .scancode = 0x0B }, + { .keysym = 0x0030, .scancode = 0x0B, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, /* 1 */ - { .keysym = 0x0031, .scancode = 0x02 }, + { .keysym = 0x0031, .scancode = 0x02, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, /* 2 */ - { .keysym = 0x0032, .scancode = 0x03 }, + { .keysym = 0x0032, .scancode = 0x03, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, /* 3 */ - { .keysym = 0x0033, .scancode = 0x04 }, + { .keysym = 0x0033, .scancode = 0x04, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, /* 4 */ - { .keysym = 0x0034, .scancode = 0x05 }, + { .keysym = 0x0034, .scancode = 0x05, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, /* 5 */ - { .keysym = 0x0035, .scancode = 0x06 }, + { .keysym = 0x0035, .scancode = 0x06, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, /* 6 */ - { .keysym = 0x0036, .scancode = 0x07 }, + { .keysym = 0x0036, .scancode = 0x07, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, /* 7 */ - { .keysym = 0x0037, .scancode = 0x08 }, + { .keysym = 0x0037, .scancode = 0x08, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, /* 8 */ - { .keysym = 0x0038, .scancode = 0x09 }, + { .keysym = 0x0038, .scancode = 0x09, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, /* 9 */ - { .keysym = 0x0039, .scancode = 0x0A }, + { .keysym = 0x0039, .scancode = 0x0A, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, /* colon */ { .keysym = 0x003a, .scancode = 0x27, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* semicolon */ - { .keysym = 0x003b, .scancode = 0x27 }, + { .keysym = 0x003b, .scancode = 0x27, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, /* less */ { .keysym = 0x003c, .scancode = 0x33, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* equal */ - { .keysym = 0x003d, .scancode = 0x0D }, + { .keysym = 0x003d, .scancode = 0x0D, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, /* greater */ { .keysym = 0x003e, .scancode = 0x34, @@ -261,16 +277,19 @@ static guac_rdp_keysym_desc __guac_rdp_keymap_mapping[] = { .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* bracketleft */ - { .keysym = 0x005b, .scancode = 0x1A }, + { .keysym = 0x005b, .scancode = 0x1A, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, /* backslash */ - { .keysym = 0x005c, .scancode = 0x2B }, + { .keysym = 0x005c, .scancode = 0x2B, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, /* bracketright */ - { .keysym = 0x005d, .scancode = 0x1B }, + { .keysym = 0x005d, .scancode = 0x1B, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, /* asciicircum */ - { .keysym = 0x005e, .scancode = 0x29, + { .keysym = 0x005e, .scancode = 0x07, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* underscore */ @@ -278,85 +297,112 @@ static guac_rdp_keysym_desc __guac_rdp_keymap_mapping[] = { .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* quoteleft */ - { .keysym = 0x0060, .scancode = 0x29 }, + { .keysym = 0x0060, .scancode = 0x29, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, /* a */ - { .keysym = 0x0061, .scancode = 0x1E }, + { .keysym = 0x0061, .scancode = 0x1E, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, /* b */ - { .keysym = 0x0062, .scancode = 0x30 }, + { .keysym = 0x0062, .scancode = 0x30, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, /* c */ - { .keysym = 0x0063, .scancode = 0x2E }, + { .keysym = 0x0063, .scancode = 0x2E, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, /* d */ - { .keysym = 0x0064, .scancode = 0x20 }, + { .keysym = 0x0064, .scancode = 0x20, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, /* e */ - { .keysym = 0x0065, .scancode = 0x12 }, + { .keysym = 0x0065, .scancode = 0x12, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, /* f */ - { .keysym = 0x0066, .scancode = 0x21 }, + { .keysym = 0x0066, .scancode = 0x21, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, /* g */ - { .keysym = 0x0067, .scancode = 0x22 }, + { .keysym = 0x0067, .scancode = 0x22, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, /* h */ - { .keysym = 0x0068, .scancode = 0x23 }, + { .keysym = 0x0068, .scancode = 0x23, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, /* i */ - { .keysym = 0x0069, .scancode = 0x17 }, + { .keysym = 0x0069, .scancode = 0x17, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, /* j */ - { .keysym = 0x006a, .scancode = 0x24 }, + { .keysym = 0x006a, .scancode = 0x24, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, /* k */ - { .keysym = 0x006b, .scancode = 0x25 }, + { .keysym = 0x006b, .scancode = 0x25, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, /* l */ - { .keysym = 0x006c, .scancode = 0x26 }, + { .keysym = 0x006c, .scancode = 0x26, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, /* m */ - { .keysym = 0x006d, .scancode = 0x32 }, + { .keysym = 0x006d, .scancode = 0x32, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, /* n */ - { .keysym = 0x006e, .scancode = 0x31 }, + { .keysym = 0x006e, .scancode = 0x31, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, /* o */ - { .keysym = 0x006f, .scancode = 0x18 }, + { .keysym = 0x006f, .scancode = 0x18, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, /* p */ - { .keysym = 0x0070, .scancode = 0x19 }, + { .keysym = 0x0070, .scancode = 0x19, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, /* q */ - { .keysym = 0x0071, .scancode = 0x10 }, + { .keysym = 0x0071, .scancode = 0x10, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, /* r */ - { .keysym = 0x0072, .scancode = 0x13 }, + { .keysym = 0x0072, .scancode = 0x13, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, /* s */ - { .keysym = 0x0073, .scancode = 0x1F }, + { .keysym = 0x0073, .scancode = 0x1F, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, /* t */ - { .keysym = 0x0074, .scancode = 0x14 }, + { .keysym = 0x0074, .scancode = 0x14, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, /* u */ - { .keysym = 0x0075, .scancode = 0x16 }, + { .keysym = 0x0075, .scancode = 0x16, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, /* v */ - { .keysym = 0x0076, .scancode = 0x2F }, + { .keysym = 0x0076, .scancode = 0x2F, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, /* w */ - { .keysym = 0x0077, .scancode = 0x11 }, + { .keysym = 0x0077, .scancode = 0x11, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, /* x */ - { .keysym = 0x0078, .scancode = 0x2D }, + { .keysym = 0x0078, .scancode = 0x2D, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, /* y */ - { .keysym = 0x0079, .scancode = 0x15 }, + { .keysym = 0x0079, .scancode = 0x15, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, /* z */ - { .keysym = 0x007a, .scancode = 0x2C }, + { .keysym = 0x007a, .scancode = 0x2C, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, /* braceleft */ { .keysym = 0x007b, .scancode = 0x1A, From b41f925fed657fa6ab1d371d253c5e1b00687823 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Thu, 22 Mar 2012 00:16:36 -0700 Subject: [PATCH 124/253] Finish base keymap. --- protocols/rdp/src/rdp_keymap_base.c | 69 +++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) diff --git a/protocols/rdp/src/rdp_keymap_base.c b/protocols/rdp/src/rdp_keymap_base.c index 4f24b709..59ed68e9 100644 --- a/protocols/rdp/src/rdp_keymap_base.c +++ b/protocols/rdp/src/rdp_keymap_base.c @@ -51,6 +51,16 @@ static guac_rdp_keysym_desc __guac_rdp_keymap_mapping[] = { /* Return */ { .keysym = 0xff0d, .scancode = 0x1C }, + /* Scroll_Lock */ + { .keysym = 0xff14, .scancode = 0x46 }, + + /* Escape */ + { .keysym = 0xff1b, .scancode = 0x01 }, + + /* Home */ + { .keysym = 0xff50, .scancode = 0x47, + .flags = KBD_FLAGS_EXTENDED }, + /* Left */ { .keysym = 0xff51, .scancode = 0x4B, .flags = KBD_FLAGS_EXTENDED }, @@ -67,10 +77,29 @@ static guac_rdp_keysym_desc __guac_rdp_keymap_mapping[] = { { .keysym = 0xff54, .scancode = 0x50, .flags = KBD_FLAGS_EXTENDED }, + /* Page_Up */ + { .keysym = 0xff55, .scancode = 0x49, + .flags = KBD_FLAGS_EXTENDED }, + /* Menu */ { .keysym = 0xff67, .scancode = 0x5D, .flags = KBD_FLAGS_EXTENDED }, + /* Page_Down */ + { .keysym = 0xff56, .scancode = 0x51, + .flags = KBD_FLAGS_EXTENDED }, + + /* End */ + { .keysym = 0xff57, .scancode = 0x4F, + .flags = KBD_FLAGS_EXTENDED }, + + /* Insert */ + { .keysym = 0xff63, .scancode = 0x52, + .flags = KBD_FLAGS_EXTENDED }, + + /* Num_Lock */ + { .keysym = 0xff7f, .scancode = 0x45 }, + /* KP_0 */ { .keysym = 0xffb0, .scancode = 0x52 }, @@ -101,6 +130,42 @@ static guac_rdp_keysym_desc __guac_rdp_keymap_mapping[] = { /* KP_9 */ { .keysym = 0xffb9, .scancode = 0x49 }, + /* F1 */ + { .keysym = 0xffbe, .scancode = 0x3B }, + + /* F2 */ + { .keysym = 0xffbf, .scancode = 0x3C }, + + /* F3 */ + { .keysym = 0xffc0, .scancode = 0x3D }, + + /* F4 */ + { .keysym = 0xffc1, .scancode = 0x3E }, + + /* F5 */ + { .keysym = 0xffc2, .scancode = 0x3F }, + + /* F6 */ + { .keysym = 0xffc3, .scancode = 0x40 }, + + /* F7 */ + { .keysym = 0xffc4, .scancode = 0x41 }, + + /* F8 */ + { .keysym = 0xffc5, .scancode = 0x42 }, + + /* F9 */ + { .keysym = 0xffc6, .scancode = 0x43 }, + + /* F10 */ + { .keysym = 0xffc7, .scancode = 0x44 }, + + /* F11 */ + { .keysym = 0xffc8, .scancode = 0x57 }, + + /* F12 */ + { .keysym = 0xffc9, .scancode = 0x58 }, + /* Shift_L */ { .keysym = 0xffe1, .scancode = 0x2A }, @@ -113,6 +178,10 @@ static guac_rdp_keysym_desc __guac_rdp_keymap_mapping[] = { /* Control_R */ { .keysym = 0xffe4, .scancode = 0x1D }, + /* Caps_Lock */ + { .keysym = 0xffe5, .scancode = 0x3A, + .flags = KBD_FLAGS_EXTENDED }, + /* Alt_L */ { .keysym = 0xffe9, .scancode = 0x38 }, From b1cb2713519a1e0a54836ba9fba31e8ea8789153 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Thu, 22 Mar 2012 10:27:57 -0700 Subject: [PATCH 125/253] Fix memory leaks. --- protocols/rdp/src/client.c | 3 +++ protocols/rdp/src/guac_handlers.c | 20 ++++++++++++++++++-- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/protocols/rdp/src/client.c b/protocols/rdp/src/client.c index f979147e..41b1bbcd 100644 --- a/protocols/rdp/src/client.c +++ b/protocols/rdp/src/client.c @@ -121,6 +121,7 @@ boolean rdp_freerdp_pre_connect(freerdp* instance) { bitmap->Decompress = guac_rdp_bitmap_decompress; bitmap->SetSurface = guac_rdp_bitmap_setsurface; graphics_register_bitmap(context->graphics, bitmap); + xfree(bitmap); /* Set up glyph handling */ glyph = xnew(rdpGlyph); @@ -131,6 +132,7 @@ boolean rdp_freerdp_pre_connect(freerdp* instance) { glyph->BeginDraw = guac_rdp_glyph_begindraw; glyph->EndDraw = guac_rdp_glyph_enddraw; graphics_register_glyph(context->graphics, glyph); + xfree(glyph); /* Set up pointer handling */ pointer = xnew(rdpPointer); @@ -139,6 +141,7 @@ boolean rdp_freerdp_pre_connect(freerdp* instance) { pointer->Free = guac_rdp_pointer_free; pointer->Set = guac_rdp_pointer_set; graphics_register_pointer(context->graphics, pointer); + xfree(pointer); /* Set up GDI */ instance->update->Palette = guac_rdp_gdi_palette_update; diff --git a/protocols/rdp/src/guac_handlers.c b/protocols/rdp/src/guac_handlers.c index 1e3a08fa..932abe24 100644 --- a/protocols/rdp/src/guac_handlers.c +++ b/protocols/rdp/src/guac_handlers.c @@ -45,6 +45,8 @@ #include #include #include +#include +#include #include #include @@ -58,11 +60,25 @@ void __guac_rdp_update_keysyms(guac_client* client, const int* keysym_string, in int __guac_rdp_send_keysym(guac_client* client, int keysym, int pressed); void __guac_rdp_send_altcode(guac_client* client, int altcode); + int rdp_guac_client_free_handler(guac_client* client) { - /* STUB */ + rdp_guac_client_data* guac_client_data = + (rdp_guac_client_data*) client->data; - /* FIXME: Clean up RDP client + disconnect */ + freerdp* rdp_inst = guac_client_data->rdp_inst; + rdpChannels* channels = rdp_inst->context->channels; + + /* Clean up RDP client */ + freerdp_channels_close(channels, rdp_inst); + freerdp_channels_free(channels); + freerdp_disconnect(rdp_inst); + freerdp_clrconv_free(((rdp_freerdp_context*) rdp_inst->context)->clrconv); + cache_free(rdp_inst->context->cache); + freerdp_free(rdp_inst); + + /* Free client data */ + free(guac_client_data); return 0; From 8a771d2cd97b3a366c74260ff27990b276744e63 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Sun, 25 Mar 2012 13:07:31 -0700 Subject: [PATCH 126/253] Use guac_error appropriately. --- protocols/rdp/src/client.c | 17 +++++++++++++++-- protocols/rdp/src/guac_handlers.c | 19 +++++++++++++------ 2 files changed, 28 insertions(+), 8 deletions(-) diff --git a/protocols/rdp/src/client.c b/protocols/rdp/src/client.c index 41b1bbcd..e45c5cc9 100644 --- a/protocols/rdp/src/client.c +++ b/protocols/rdp/src/client.c @@ -57,6 +57,7 @@ #include #include #include +#include #include "client.h" #include "guac_handlers.h" @@ -248,8 +249,14 @@ int guac_client_init(guac_client* client, int argc, char** argv) { boolean bitmap_cache; if (argc < 8) { - guac_protocol_send_error(client->socket, "Wrong argument count received."); + + guac_protocol_send_error(client->socket, + "Wrong argument count received."); guac_socket_flush(client->socket); + + guac_error = GUAC_STATUS_BAD_ARGUMENT; + guac_error_message = "Wrong argument count received"; + return 1; } @@ -371,8 +378,14 @@ int guac_client_init(guac_client* client, int argc, char** argv) { /* Connect to RDP server */ if (!freerdp_connect(rdp_inst)) { - guac_protocol_send_error(client->socket, "Error connecting to RDP server"); + + guac_protocol_send_error(client->socket, + "Error connecting to RDP server"); guac_socket_flush(client->socket); + + guac_error = GUAC_STATUS_BAD_STATE; + guac_error_message = "Error connecting to RDP server"; + return 1; } diff --git a/protocols/rdp/src/guac_handlers.c b/protocols/rdp/src/guac_handlers.c index 932abe24..ef4c0cbb 100644 --- a/protocols/rdp/src/guac_handlers.c +++ b/protocols/rdp/src/guac_handlers.c @@ -51,6 +51,7 @@ #include #include #include +#include #include "client.h" #include "rdp_keymap.h" @@ -105,13 +106,15 @@ int rdp_guac_client_handle_messages(guac_client* client) { /* get rdp fds */ if (!freerdp_get_fds(rdp_inst, read_fds, &read_count, write_fds, &write_count)) { - guac_client_log_error(client, "Unable to read RDP file descriptors."); + guac_error = GUAC_STATUS_BAD_STATE; + guac_error_message = "Unable to read RDP file descriptors"; return 1; } /* get channel fds */ if (!freerdp_channels_get_fds(channels, rdp_inst, read_fds, &read_count, write_fds, &write_count)) { - guac_client_log_error(client, "Unable to read RDP channel file descriptors."); + guac_error = GUAC_STATUS_BAD_STATE; + guac_error_message = "Unable to read RDP channel file descriptors"; return 1; } @@ -136,7 +139,8 @@ int rdp_guac_client_handle_messages(guac_client* client) { /* If no file descriptors, error */ if (max_fd == 0) { - guac_client_log_error(client, "No file descriptors"); + guac_error = GUAC_STATUS_BAD_STATE; + guac_error_message = "No file descriptors"; return 1; } @@ -148,20 +152,23 @@ int rdp_guac_client_handle_messages(guac_client* client) { (errno == EINPROGRESS) || (errno == EINTR))) /* signal occurred */ { - guac_client_log_error(client, "Error waiting for file descriptor."); + guac_error = GUAC_STATUS_SEE_ERRNO; + guac_error_message = "Error waiting for file descriptor"; return 1; } } /* Check the libfreerdp fds */ if (!freerdp_check_fds(rdp_inst)) { - guac_client_log_error(client, "Error handling RDP file descriptors."); + guac_error = GUAC_STATUS_BAD_STATE; + guac_error_message = "Error handling RDP file descriptors"; return 1; } /* Check channel fds */ if (!freerdp_channels_check_fds(channels, rdp_inst)) { - guac_client_log_error(client, "Error handling RDP channel file descriptors."); + guac_error = GUAC_STATUS_BAD_STATE; + guac_error_message = "Error handling RDP channel file descriptors"; return 1; } From 59a32064d44d1c479bbaabdfb78f2ccd14404136 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Sun, 25 Mar 2012 21:46:20 -0700 Subject: [PATCH 127/253] Handle RDP disconnect. --- protocols/rdp/src/guac_handlers.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/protocols/rdp/src/guac_handlers.c b/protocols/rdp/src/guac_handlers.c index ef4c0cbb..dab2b279 100644 --- a/protocols/rdp/src/guac_handlers.c +++ b/protocols/rdp/src/guac_handlers.c @@ -172,6 +172,13 @@ int rdp_guac_client_handle_messages(guac_client* client) { return 1; } + /* Handle RDP disconnect */ + if (freerdp_shall_disconnect(rdp_inst)) { + guac_error = GUAC_STATUS_NO_INPUT; + guac_error_message = "RDP server closed connection"; + return 1; + } + /* Success */ return 0; From 583273994e24f3e920b0f4ba4196716c073c04ad Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Sun, 25 Mar 2012 21:49:58 -0700 Subject: [PATCH 128/253] Send name after connect. --- protocols/rdp/src/client.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/protocols/rdp/src/client.c b/protocols/rdp/src/client.c index e45c5cc9..e6a028b9 100644 --- a/protocols/rdp/src/client.c +++ b/protocols/rdp/src/client.c @@ -389,6 +389,9 @@ int guac_client_init(guac_client* client, int argc, char** argv) { return 1; } + /* Send connection name */ + guac_protocol_send_name(client->socket, settings->window_title); + /* Success */ return 0; From a3d07903fc5a6117c3e3a07474cc2fe73fb572cb Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Fri, 30 Mar 2012 11:26:52 -0700 Subject: [PATCH 129/253] Added clipboard event stubs. --- protocols/rdp/Makefile.am | 2 +- protocols/rdp/include/rdp_cliprdr.h | 50 +++++++++++++ protocols/rdp/src/client.c | 8 +++ protocols/rdp/src/guac_handlers.c | 16 +++++ protocols/rdp/src/rdp_cliprdr.c | 104 ++++++++++++++++++++++++++++ 5 files changed, 179 insertions(+), 1 deletion(-) create mode 100644 protocols/rdp/include/rdp_cliprdr.h create mode 100644 protocols/rdp/src/rdp_cliprdr.c diff --git a/protocols/rdp/Makefile.am b/protocols/rdp/Makefile.am index 9ad53f81..a18a14f3 100644 --- a/protocols/rdp/Makefile.am +++ b/protocols/rdp/Makefile.am @@ -41,7 +41,7 @@ AM_CFLAGS = -Werror -Wall -pedantic -Iinclude lib_LTLIBRARIES = libguac-client-rdp.la -libguac_client_rdp_la_SOURCES = src/client.c src/rdp_bitmap.c src/rdp_glyph.c src/rdp_pointer.c src/rdp_gdi.c src/guac_handlers.c \ +libguac_client_rdp_la_SOURCES = src/client.c src/rdp_bitmap.c src/rdp_glyph.c src/rdp_pointer.c src/rdp_gdi.c src/guac_handlers.c src/rdp_cliprdr.c \ src/rdp_keymap.c \ src/rdp_keymap_base.c \ src/rdp_keymap_en_us.c diff --git a/protocols/rdp/include/rdp_cliprdr.h b/protocols/rdp/include/rdp_cliprdr.h new file mode 100644 index 00000000..83ab599e --- /dev/null +++ b/protocols/rdp/include/rdp_cliprdr.h @@ -0,0 +1,50 @@ + +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is libguac-client-rdp. + * + * The Initial Developer of the Original Code is + * Michael Jumper. + * Portions created by the Initial Developer are Copyright (C) 2011 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#ifndef __GUAC_RDP_RDP_CLIPRDR_H +#define __GUAC_RDP_RDP_CLIPRDR_H + +#include + +void guac_rdp_process_cliprdr_event(guac_client* client, RDP_EVENT* event); +void guac_rdp_process_cb_monitor_ready(guac_client* client); +void guac_rdp_process_cb_format_list(guac_client* client); +void guac_rdp_process_cb_data_request(guac_client* client); +void guac_rdp_process_cb_data_response(guac_client* client); + +#endif + diff --git a/protocols/rdp/src/client.c b/protocols/rdp/src/client.c index e6a028b9..caca83f5 100644 --- a/protocols/rdp/src/client.c +++ b/protocols/rdp/src/client.c @@ -91,6 +91,10 @@ enum ARGS_IDX { IDX_COLOR_DEPTH }; +int __guac_receive_channel_data(freerdp* rdp_inst, int channelId, uint8* data, int size, int flags, int total_size) { + return freerdp_channels_data(rdp_inst, channelId, data, size, flags, total_size); +} + boolean rdp_freerdp_pre_connect(freerdp* instance) { rdpContext* context = instance->context; @@ -102,6 +106,9 @@ boolean rdp_freerdp_pre_connect(freerdp* instance) { rdpPrimaryUpdate* primary; CLRCONV* clrconv; + /* Load clipboard plugin */ + freerdp_channels_load_plugin(channels, instance->settings, "cliprdr", NULL); + /* Init color conversion structure */ clrconv = xnew(CLRCONV); clrconv->alpha = 1; @@ -274,6 +281,7 @@ int guac_client_init(guac_client* client, int argc, char** argv) { rdp_inst = freerdp_new(); rdp_inst->PreConnect = rdp_freerdp_pre_connect; rdp_inst->PostConnect = rdp_freerdp_post_connect; + rdp_inst->ReceiveChannelData = __guac_receive_channel_data; /* Allocate FreeRDP context */ rdp_inst->context_size = sizeof(rdp_freerdp_context); diff --git a/protocols/rdp/src/guac_handlers.c b/protocols/rdp/src/guac_handlers.c index dab2b279..671fd8f2 100644 --- a/protocols/rdp/src/guac_handlers.c +++ b/protocols/rdp/src/guac_handlers.c @@ -47,6 +47,8 @@ #include #include #include +#include +#include #include #include @@ -55,6 +57,7 @@ #include "client.h" #include "rdp_keymap.h" +#include "rdp_cliprdr.h" #include "guac_handlers.h" void __guac_rdp_update_keysyms(guac_client* client, const int* keysym_string, int from, int to); @@ -98,6 +101,7 @@ int rdp_guac_client_handle_messages(guac_client* client) { int read_count = 0; int write_count = 0; fd_set rfds, wfds; + RDP_EVENT* event; struct timeval timeout = { .tv_sec = 0, @@ -172,6 +176,18 @@ int rdp_guac_client_handle_messages(guac_client* client) { return 1; } + /* Check for channel events */ + event = freerdp_channels_pop_event(channels); + if (event) { + + /* Handle clipboard events */ + if (event->event_class == RDP_EVENT_CLASS_CLIPRDR) + guac_rdp_process_cliprdr_event(client, event); + + freerdp_event_free(event); + + } + /* Handle RDP disconnect */ if (freerdp_shall_disconnect(rdp_inst)) { guac_error = GUAC_STATUS_NO_INPUT; diff --git a/protocols/rdp/src/rdp_cliprdr.c b/protocols/rdp/src/rdp_cliprdr.c new file mode 100644 index 00000000..bb1ede75 --- /dev/null +++ b/protocols/rdp/src/rdp_cliprdr.c @@ -0,0 +1,104 @@ + +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is libguac-client-rdp. + * + * The Initial Developer of the Original Code is + * Michael Jumper. + * Portions created by the Initial Developer are Copyright (C) 2011 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + + +#include +#include +#include +#include + +#include + +#include "client.h" +#include "rdp_cliprdr.h" + +void guac_rdp_process_cliprdr_event(guac_client* client, RDP_EVENT* event) { + + switch (event->event_type) { + + case RDP_EVENT_TYPE_CB_MONITOR_READY: + guac_rdp_process_cb_monitor_ready(client); + break; + + case RDP_EVENT_TYPE_CB_FORMAT_LIST: + guac_rdp_process_cb_format_list(client); + break; + + case RDP_EVENT_TYPE_CB_DATA_REQUEST: + guac_rdp_process_cb_data_request(client); + break; + + case RDP_EVENT_TYPE_CB_DATA_RESPONSE: + guac_rdp_process_cb_data_response(client); + break; + + default: + guac_client_log_info(client, + "Unknown cliprdr event type: 0x%x", + event->event_type); + } + +} + +void guac_rdp_process_cb_monitor_ready(guac_client* client) { + + rdpChannels* channels = + ((rdp_guac_client_data*) client->data)->rdp_inst->context->channels; + + RDP_EVENT* event = freerdp_event_new( + RDP_EVENT_CLASS_CLIPRDR, + RDP_EVENT_TYPE_CB_FORMAT_LIST, + NULL, NULL); + + ((RDP_CB_FORMAT_LIST_EVENT*) event)->num_formats = 0; + + freerdp_channels_send_event(channels, event); + +} + +void guac_rdp_process_cb_format_list(guac_client* client) { + /* STUB */ +} + +void guac_rdp_process_cb_data_request(guac_client* client) { + /* STUB */ +} + +void guac_rdp_process_cb_data_response(guac_client* client) { + /* STUB */ +} + From 4710994bc37bfec64240ade7480506a50e1343ca Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Tue, 3 Apr 2012 11:19:37 -0700 Subject: [PATCH 130/253] Do NOT flush the socket after EVERY GLYPH! --- protocols/rdp/src/rdp_glyph.c | 1 - 1 file changed, 1 deletion(-) diff --git a/protocols/rdp/src/rdp_glyph.c b/protocols/rdp/src/rdp_glyph.c index 9e33ba09..08b33aa1 100644 --- a/protocols/rdp/src/rdp_glyph.c +++ b/protocols/rdp/src/rdp_glyph.c @@ -99,7 +99,6 @@ void guac_rdp_glyph_new(rdpContext* context, rdpGlyph* glyph) { surface = cairo_image_surface_create_for_data(image_buffer, CAIRO_FORMAT_ARGB32, width, height, stride); guac_protocol_send_png(socket, GUAC_COMP_SRC, layer, 0, 0, surface); - guac_socket_flush(socket); /* Free surface */ cairo_surface_destroy(surface); From e75e6bbb53ff361a5860a10f1623ccb27d900c01 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Tue, 3 Apr 2012 14:03:52 -0700 Subject: [PATCH 131/253] Only cache bitmap on client if not ephemeral. --- protocols/rdp/src/rdp_bitmap.c | 55 +++++++++++++++++++++++----------- 1 file changed, 38 insertions(+), 17 deletions(-) diff --git a/protocols/rdp/src/rdp_bitmap.c b/protocols/rdp/src/rdp_bitmap.c index 38a90fc4..2a514476 100644 --- a/protocols/rdp/src/rdp_bitmap.c +++ b/protocols/rdp/src/rdp_bitmap.c @@ -73,20 +73,21 @@ void guac_rdp_bitmap_new(rdpContext* context, rdpBitmap* bitmap) { context->instance->settings->color_depth, 32, ((rdp_freerdp_context*) context)->clrconv); - /* Create surface from image data */ - cairo_surface_t* surface = cairo_image_surface_create_for_data( - image_buffer, CAIRO_FORMAT_RGB24, - bitmap->width, bitmap->height, 4*bitmap->width); - - /* Send surface to buffer */ - guac_protocol_send_png(socket, GUAC_COMP_SRC, buffer, 0, 0, surface); - - /* Free surface */ - cairo_surface_destroy(surface); - - /* If ephemeral, just free image data */ + /* If not ephemeral, store cached image, and free image data */ if (!bitmap->ephemeral) { + /* Create surface from image data */ + cairo_surface_t* surface = cairo_image_surface_create_for_data( + image_buffer, CAIRO_FORMAT_RGB24, + bitmap->width, bitmap->height, 4*bitmap->width); + + /* Send surface to buffer */ + guac_protocol_send_png(socket, + GUAC_COMP_SRC, buffer, 0, 0, surface); + + /* Free surface */ + cairo_surface_destroy(surface); + /* Free image data if actually alloated */ if (image_buffer != bitmap->data) free(image_buffer); @@ -117,11 +118,31 @@ void guac_rdp_bitmap_paint(rdpContext* context, rdpBitmap* bitmap) { int width = bitmap->right - bitmap->left + 1; int height = bitmap->bottom - bitmap->top + 1; - guac_protocol_send_copy(socket, - ((guac_rdp_bitmap*) bitmap)->layer, - 0, 0, width, height, - GUAC_COMP_OVER, - GUAC_DEFAULT_LAYER, bitmap->left, bitmap->top); + /* If not ephemeral, retrieve from cache */ + if (!bitmap->ephemeral) + guac_protocol_send_copy(socket, + ((guac_rdp_bitmap*) bitmap)->layer, + 0, 0, width, height, + GUAC_COMP_OVER, + GUAC_DEFAULT_LAYER, bitmap->left, bitmap->top); + + /* Otherwise, draw with stored image data */ + else if (bitmap->data != NULL) { + + /* Create surface from image data */ + cairo_surface_t* surface = cairo_image_surface_create_for_data( + bitmap->data, CAIRO_FORMAT_RGB24, + width, height, 4*bitmap->width); + + /* Send surface to buffer */ + guac_protocol_send_png(socket, + GUAC_COMP_OVER, GUAC_DEFAULT_LAYER, + bitmap->left, bitmap->top, surface); + + /* Free surface */ + cairo_surface_destroy(surface); + + } } From ec66c2b1b655eaa17aac40789d482f22c78b483a Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Tue, 3 Apr 2012 17:58:31 -0700 Subject: [PATCH 132/253] Implement EndPaint. --- protocols/rdp/include/rdp_gdi.h | 1 + protocols/rdp/src/client.c | 1 + protocols/rdp/src/rdp_gdi.c | 5 +++++ 3 files changed, 7 insertions(+) diff --git a/protocols/rdp/include/rdp_gdi.h b/protocols/rdp/include/rdp_gdi.h index 97cc3057..1f68352e 100644 --- a/protocols/rdp/include/rdp_gdi.h +++ b/protocols/rdp/include/rdp_gdi.h @@ -51,5 +51,6 @@ void guac_rdp_gdi_memblt(rdpContext* context, MEMBLT_ORDER* memblt); void guac_rdp_gdi_opaquerect(rdpContext* context, OPAQUE_RECT_ORDER* opaque_rect); void guac_rdp_gdi_palette_update(rdpContext* context, PALETTE_UPDATE* palette); void guac_rdp_gdi_set_bounds(rdpContext* context, rdpBounds* bounds); +void guac_rdp_gdi_end_paint(rdpContext* context); #endif diff --git a/protocols/rdp/src/client.c b/protocols/rdp/src/client.c index e6a028b9..d7f0b8d4 100644 --- a/protocols/rdp/src/client.c +++ b/protocols/rdp/src/client.c @@ -145,6 +145,7 @@ boolean rdp_freerdp_pre_connect(freerdp* instance) { xfree(pointer); /* Set up GDI */ + instance->update->EndPaint = guac_rdp_gdi_end_paint; instance->update->Palette = guac_rdp_gdi_palette_update; instance->update->SetBounds = guac_rdp_gdi_set_bounds; diff --git a/protocols/rdp/src/rdp_gdi.c b/protocols/rdp/src/rdp_gdi.c index e2202e73..7153f4bb 100644 --- a/protocols/rdp/src/rdp_gdi.c +++ b/protocols/rdp/src/rdp_gdi.c @@ -264,3 +264,8 @@ void guac_rdp_gdi_set_bounds(rdpContext* context, rdpBounds* bounds) { } +void guac_rdp_gdi_end_paint(rdpContext* context) { + guac_client* client = ((rdp_freerdp_context*) context)->client; + guac_socket_flush(client->socket); +} + From 6659af55c27fc7c17838ed1ab6462064a10354bc Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Thu, 5 Apr 2012 16:45:04 -0700 Subject: [PATCH 133/253] Render all glyphs server-side. --- protocols/rdp/include/client.h | 10 ++++ protocols/rdp/include/rdp_glyph.h | 4 +- protocols/rdp/src/rdp_glyph.c | 98 +++++++++++++++++-------------- 3 files changed, 66 insertions(+), 46 deletions(-) diff --git a/protocols/rdp/include/client.h b/protocols/rdp/include/client.h index a6bb8016..ac869110 100644 --- a/protocols/rdp/include/client.h +++ b/protocols/rdp/include/client.h @@ -63,6 +63,16 @@ typedef struct rdp_guac_client_data { guac_rdp_color foreground; guac_rdp_color background; + /** + * Cairo surface which will receive all drawn glyphs. + */ + cairo_surface_t* glyph_surface; + + /** + * Cairo instance for drawing to glyph surface. + */ + cairo_t* glyph_cairo; + const guac_layer* current_surface; guac_rdp_static_keymap keymap; diff --git a/protocols/rdp/include/rdp_glyph.h b/protocols/rdp/include/rdp_glyph.h index 8270fbbf..2c9510a3 100644 --- a/protocols/rdp/include/rdp_glyph.h +++ b/protocols/rdp/include/rdp_glyph.h @@ -50,9 +50,9 @@ typedef struct guac_rdp_glyph { rdpGlyph glyph; /** - * Guacamole layer containing cached image data. + * Cairo surface layer containing cached image data. */ - guac_layer* layer; + cairo_surface_t* surface; } guac_rdp_glyph; diff --git a/protocols/rdp/src/rdp_glyph.c b/protocols/rdp/src/rdp_glyph.c index 08b33aa1..8a65c6ff 100644 --- a/protocols/rdp/src/rdp_glyph.c +++ b/protocols/rdp/src/rdp_glyph.c @@ -45,11 +45,6 @@ void guac_rdp_glyph_new(rdpContext* context, rdpGlyph* glyph) { - /* Allocate buffer */ - guac_client* client = ((rdp_freerdp_context*) context)->client; - guac_socket* socket = client->socket; - guac_layer* layer = guac_client_alloc_buffer(client); - int x, y, i; int stride; unsigned char* image_buffer; @@ -59,8 +54,6 @@ void guac_rdp_glyph_new(rdpContext* context, rdpGlyph* glyph) { int width = glyph->cx; int height = glyph->cy; - cairo_surface_t* surface; - /* Init Cairo buffer */ stride = cairo_format_stride_for_width(CAIRO_FORMAT_ARGB32, width); image_buffer = malloc(height*stride); @@ -97,15 +90,9 @@ void guac_rdp_glyph_new(rdpContext* context, rdpGlyph* glyph) { } } - surface = cairo_image_surface_create_for_data(image_buffer, CAIRO_FORMAT_ARGB32, width, height, stride); - guac_protocol_send_png(socket, GUAC_COMP_SRC, layer, 0, 0, surface); - - /* Free surface */ - cairo_surface_destroy(surface); - free(image_buffer); - - /* Store layer */ - ((guac_rdp_glyph*) glyph)->layer = layer; + /* Store glyph surface */ + ((guac_rdp_glyph*) glyph)->surface = cairo_image_surface_create_for_data( + image_buffer, CAIRO_FORMAT_ARGB32, width, height, stride); } @@ -113,29 +100,27 @@ void guac_rdp_glyph_draw(rdpContext* context, rdpGlyph* glyph, int x, int y) { guac_client* client = ((rdp_freerdp_context*) context)->client; rdp_guac_client_data* guac_client_data = (rdp_guac_client_data*) client->data; - const guac_layer* current_layer = ((rdp_guac_client_data*) client->data)->current_surface; - /* Colorize glyph */ - guac_protocol_send_rect(client->socket, ((guac_rdp_glyph*) glyph)->layer, - 0, 0, glyph->cx, glyph->cy); + /* Use glyph as mask */ + cairo_mask_surface( + guac_client_data->glyph_cairo, + ((guac_rdp_glyph*) glyph)->surface, x, y); - guac_protocol_send_cfill(client->socket, - GUAC_COMP_ATOP, ((guac_rdp_glyph*) glyph)->layer, - guac_client_data->foreground.red, - guac_client_data->foreground.green, - guac_client_data->foreground.blue, - 255); - - /* Draw glyph */ - guac_protocol_send_copy(client->socket, - ((guac_rdp_glyph*) glyph)->layer, 0, 0, glyph->cx, glyph->cy, - GUAC_COMP_OVER, current_layer, x, y); + /* Fill rectangle with foreground */ + cairo_rectangle(guac_client_data->glyph_cairo, x, y, glyph->cx, glyph->cy); + cairo_fill(guac_client_data->glyph_cairo); } void guac_rdp_glyph_free(rdpContext* context, rdpGlyph* glyph) { - guac_client* client = ((rdp_freerdp_context*) context)->client; - guac_client_free_buffer(client, ((guac_rdp_glyph*) glyph)->layer); + + unsigned char* image_buffer = cairo_image_surface_get_data( + ((guac_rdp_glyph*) glyph)->surface); + + /* Free surface */ + cairo_surface_destroy(((guac_rdp_glyph*) glyph)->surface); + free(image_buffer); + } void guac_rdp_glyph_begindraw(rdpContext* context, @@ -143,7 +128,6 @@ void guac_rdp_glyph_begindraw(rdpContext* context, guac_client* client = ((rdp_freerdp_context*) context)->client; rdp_guac_client_data* guac_client_data = (rdp_guac_client_data*) client->data; - const guac_layer* current_layer = ((rdp_guac_client_data*) client->data)->current_surface; bgcolor = freerdp_color_convert_var(bgcolor, context->instance->settings->color_depth, 32, @@ -161,21 +145,47 @@ void guac_rdp_glyph_begindraw(rdpContext* context, guac_client_data->background.green = (bgcolor & 0x00FF00) >> 8; guac_client_data->background.red = (bgcolor & 0xFF0000) >> 16; - /* Paint background on destination */ - guac_protocol_send_rect(client->socket, current_layer, - x, y, width, height); + /* Create glyph surface and cairo instance */ + guac_client_data->glyph_surface = cairo_image_surface_create( + CAIRO_FORMAT_RGB24, width, height); - guac_protocol_send_cfill(client->socket, - GUAC_COMP_OVER, current_layer, - guac_client_data->background.red, - guac_client_data->background.green, - guac_client_data->background.blue, - 255); + guac_client_data->glyph_cairo = cairo_create( + guac_client_data->glyph_surface); + + /* Fill with color */ + cairo_set_source_rgb(guac_client_data->glyph_cairo, + guac_client_data->background.red / 255.0, + guac_client_data->background.green / 255.0, + guac_client_data->background.blue / 255.0); + + cairo_rectangle(guac_client_data->glyph_cairo, + 0, 0, width, height); + + cairo_fill(guac_client_data->glyph_cairo); + + /* Prepare for glyph drawing */ + cairo_set_source_rgb(guac_client_data->glyph_cairo, + guac_client_data->foreground.red / 255.0, + guac_client_data->foreground.green / 255.0, + guac_client_data->foreground.blue / 255.0); } void guac_rdp_glyph_enddraw(rdpContext* context, int x, int y, int width, int height, uint32 fgcolor, uint32 bgcolor) { - /* UNUSED */ + + guac_client* client = ((rdp_freerdp_context*) context)->client; + rdp_guac_client_data* guac_client_data = (rdp_guac_client_data*) client->data; + const guac_layer* current_layer = ((rdp_guac_client_data*) client->data)->current_surface; + + /* Send surface with all glyphs to layer */ + guac_protocol_send_png(client->socket, + GUAC_COMP_OVER, current_layer, x, y, + guac_client_data->glyph_surface); + + /* Clean up cairo and glyph surface */ + cairo_destroy(guac_client_data->glyph_cairo); + cairo_surface_destroy(guac_client_data->glyph_surface); + } From 6781338aaa58c47958e200f570a6a196409fc685 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Thu, 5 Apr 2012 22:38:10 -0700 Subject: [PATCH 134/253] Working glyph rendering (except for transparent text) --- protocols/rdp/include/client.h | 9 ---- protocols/rdp/src/client.c | 15 +++++-- protocols/rdp/src/rdp_glyph.c | 80 ++++++++++++++++++---------------- 3 files changed, 54 insertions(+), 50 deletions(-) diff --git a/protocols/rdp/include/client.h b/protocols/rdp/include/client.h index ac869110..246834f3 100644 --- a/protocols/rdp/include/client.h +++ b/protocols/rdp/include/client.h @@ -47,12 +47,6 @@ #define RDP_DEFAULT_PORT 3389 -typedef struct guac_rdp_color { - int red; - int green; - int blue; -} guac_rdp_color; - typedef struct rdp_guac_client_data { freerdp* rdp_inst; @@ -60,9 +54,6 @@ typedef struct rdp_guac_client_data { int mouse_button_mask; - guac_rdp_color foreground; - guac_rdp_color background; - /** * Cairo surface which will receive all drawn glyphs. */ diff --git a/protocols/rdp/src/client.c b/protocols/rdp/src/client.c index d7f0b8d4..e71d8393 100644 --- a/protocols/rdp/src/client.c +++ b/protocols/rdp/src/client.c @@ -193,10 +193,6 @@ boolean rdp_freerdp_post_connect(freerdp* instance) { client->mouse_handler = rdp_guac_client_mouse_handler; client->key_handler = rdp_guac_client_key_handler; - /* Send size */ - guac_protocol_send_size(client->socket, GUAC_DEFAULT_LAYER, - instance->settings->width, instance->settings->height); - return true; } @@ -393,6 +389,17 @@ int guac_client_init(guac_client* client, int argc, char** argv) { /* Send connection name */ guac_protocol_send_name(client->socket, settings->window_title); + /* Send size */ + guac_protocol_send_size(client->socket, GUAC_DEFAULT_LAYER, + settings->width, settings->height); + + /* Create glyph surface and cairo instance */ + guac_client_data->glyph_surface = cairo_image_surface_create( + CAIRO_FORMAT_RGB24, settings->width, settings->height); + + guac_client_data->glyph_cairo = cairo_create( + guac_client_data->glyph_surface); + /* Success */ return 0; diff --git a/protocols/rdp/src/rdp_glyph.c b/protocols/rdp/src/rdp_glyph.c index 8a65c6ff..c2597252 100644 --- a/protocols/rdp/src/rdp_glyph.c +++ b/protocols/rdp/src/rdp_glyph.c @@ -39,6 +39,7 @@ #include #include +#include #include "client.h" #include "rdp_glyph.h" @@ -100,16 +101,16 @@ void guac_rdp_glyph_draw(rdpContext* context, rdpGlyph* glyph, int x, int y) { guac_client* client = ((rdp_freerdp_context*) context)->client; rdp_guac_client_data* guac_client_data = (rdp_guac_client_data*) client->data; - + + /* Do not attempt to draw glyphs if glyph drawing is not begun */ + if (guac_client_data->glyph_cairo == NULL) + return; + /* Use glyph as mask */ cairo_mask_surface( guac_client_data->glyph_cairo, ((guac_rdp_glyph*) glyph)->surface, x, y); - /* Fill rectangle with foreground */ - cairo_rectangle(guac_client_data->glyph_cairo, x, y, glyph->cx, glyph->cy); - cairo_fill(guac_client_data->glyph_cairo); - } void guac_rdp_glyph_free(rdpContext* context, rdpGlyph* glyph) { @@ -127,47 +128,40 @@ void guac_rdp_glyph_begindraw(rdpContext* context, int x, int y, int width, int height, uint32 fgcolor, uint32 bgcolor) { guac_client* client = ((rdp_freerdp_context*) context)->client; - rdp_guac_client_data* guac_client_data = (rdp_guac_client_data*) client->data; - - bgcolor = freerdp_color_convert_var(bgcolor, - context->instance->settings->color_depth, 32, - ((rdp_freerdp_context*) context)->clrconv); + rdp_guac_client_data* guac_client_data = + (rdp_guac_client_data*) client->data; + /* Convert foreground color */ fgcolor = freerdp_color_convert_var(fgcolor, context->instance->settings->color_depth, 32, ((rdp_freerdp_context*) context)->clrconv); - guac_client_data->foreground.blue = fgcolor & 0x0000FF; - guac_client_data->foreground.green = (fgcolor & 0x00FF00) >> 8; - guac_client_data->foreground.red = (fgcolor & 0xFF0000) >> 16; + /* Fill background with color if specified */ + if (width != 0 && height != 0) { - guac_client_data->background.blue = bgcolor & 0x0000FF; - guac_client_data->background.green = (bgcolor & 0x00FF00) >> 8; - guac_client_data->background.red = (bgcolor & 0xFF0000) >> 16; + /* Convert background color */ + bgcolor = freerdp_color_convert_var(bgcolor, + context->instance->settings->color_depth, 32, + ((rdp_freerdp_context*) context)->clrconv); - /* Create glyph surface and cairo instance */ - guac_client_data->glyph_surface = cairo_image_surface_create( - CAIRO_FORMAT_RGB24, width, height); + /* Fill background */ + cairo_rectangle(guac_client_data->glyph_cairo, + x, y, width, height); - guac_client_data->glyph_cairo = cairo_create( - guac_client_data->glyph_surface); + cairo_set_source_rgb(guac_client_data->glyph_cairo, + ( bgcolor & 0x0000FF ) / 255.0, + ((bgcolor & 0x00FF00) >> 8 ) / 255.0, + ((bgcolor & 0xFF0000) >> 16) / 255.0); - /* Fill with color */ - cairo_set_source_rgb(guac_client_data->glyph_cairo, - guac_client_data->background.red / 255.0, - guac_client_data->background.green / 255.0, - guac_client_data->background.blue / 255.0); + cairo_fill(guac_client_data->glyph_cairo); - cairo_rectangle(guac_client_data->glyph_cairo, - 0, 0, width, height); - - cairo_fill(guac_client_data->glyph_cairo); + } /* Prepare for glyph drawing */ cairo_set_source_rgb(guac_client_data->glyph_cairo, - guac_client_data->foreground.red / 255.0, - guac_client_data->foreground.green / 255.0, - guac_client_data->foreground.blue / 255.0); + ( fgcolor & 0x0000FF ) / 255.0, + ((fgcolor & 0x00FF00) >> 8 ) / 255.0, + ((fgcolor & 0xFF0000) >> 16) / 255.0); } @@ -178,14 +172,26 @@ void guac_rdp_glyph_enddraw(rdpContext* context, rdp_guac_client_data* guac_client_data = (rdp_guac_client_data*) client->data; const guac_layer* current_layer = ((rdp_guac_client_data*) client->data)->current_surface; + /* Use glyph surface to provide image data for glyph rectangle */ + cairo_surface_t* glyph_surface = guac_client_data->glyph_surface; + int stride = cairo_image_surface_get_stride(glyph_surface); + + /* Ensure data is ready */ + cairo_surface_flush(glyph_surface); + + /* Create surface for subsection with text */ + cairo_surface_t* surface = cairo_image_surface_create_for_data( + cairo_image_surface_get_data(glyph_surface) + 4*x + y*stride, + cairo_image_surface_get_format(glyph_surface), + width, height, stride); + /* Send surface with all glyphs to layer */ guac_protocol_send_png(client->socket, GUAC_COMP_OVER, current_layer, x, y, - guac_client_data->glyph_surface); + surface); - /* Clean up cairo and glyph surface */ - cairo_destroy(guac_client_data->glyph_cairo); - cairo_surface_destroy(guac_client_data->glyph_surface); + /* Destroy surface */ + cairo_surface_destroy(surface); } From a0cdb35b3bd1f9cef06a365b0cdb0f504855e008 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Thu, 5 Apr 2012 22:55:46 -0700 Subject: [PATCH 135/253] Fix transparent glyphs --- protocols/rdp/include/client.h | 16 ++++++++++++++-- protocols/rdp/src/client.c | 8 ++++---- protocols/rdp/src/rdp_glyph.c | 34 ++++++++++++++++++++++++++++++++++ 3 files changed, 52 insertions(+), 6 deletions(-) diff --git a/protocols/rdp/include/client.h b/protocols/rdp/include/client.h index 246834f3..306dbcec 100644 --- a/protocols/rdp/include/client.h +++ b/protocols/rdp/include/client.h @@ -55,12 +55,24 @@ typedef struct rdp_guac_client_data { int mouse_button_mask; /** - * Cairo surface which will receive all drawn glyphs. + * Cairo surface which will receive all TRANSPARENT glyphs. + */ + cairo_surface_t* trans_glyph_surface; + + /** + * Cairo surface which will receive all OPAQUE glyphs. + */ + cairo_surface_t* opaque_glyph_surface; + + /** + * The current Cairo surface which will receive all drawn glyphs, + * depending on whether we are currently drawing transparent or + * opaque glyphs. */ cairo_surface_t* glyph_surface; /** - * Cairo instance for drawing to glyph surface. + * Cairo instance for drawing to the current glyph surface. */ cairo_t* glyph_cairo; diff --git a/protocols/rdp/src/client.c b/protocols/rdp/src/client.c index e71d8393..8a87d059 100644 --- a/protocols/rdp/src/client.c +++ b/protocols/rdp/src/client.c @@ -393,12 +393,12 @@ int guac_client_init(guac_client* client, int argc, char** argv) { guac_protocol_send_size(client->socket, GUAC_DEFAULT_LAYER, settings->width, settings->height); - /* Create glyph surface and cairo instance */ - guac_client_data->glyph_surface = cairo_image_surface_create( + /* Create glyph surfaces */ + guac_client_data->opaque_glyph_surface = cairo_image_surface_create( CAIRO_FORMAT_RGB24, settings->width, settings->height); - guac_client_data->glyph_cairo = cairo_create( - guac_client_data->glyph_surface); + guac_client_data->trans_glyph_surface = cairo_image_surface_create( + CAIRO_FORMAT_ARGB32, settings->width, settings->height); /* Success */ return 0; diff --git a/protocols/rdp/src/rdp_glyph.c b/protocols/rdp/src/rdp_glyph.c index c2597252..3e939f64 100644 --- a/protocols/rdp/src/rdp_glyph.c +++ b/protocols/rdp/src/rdp_glyph.c @@ -139,6 +139,14 @@ void guac_rdp_glyph_begindraw(rdpContext* context, /* Fill background with color if specified */ if (width != 0 && height != 0) { + /* Prepare for opaque glyphs */ + guac_client_data->glyph_surface = + guac_client_data->opaque_glyph_surface; + + /* Create cairo instance */ + guac_client_data->glyph_cairo = cairo_create( + guac_client_data->glyph_surface); + /* Convert background color */ bgcolor = freerdp_color_convert_var(bgcolor, context->instance->settings->color_depth, 32, @@ -157,6 +165,29 @@ void guac_rdp_glyph_begindraw(rdpContext* context, } + /* Otherwise, prepare for transparent glyphs */ + else { + + /* Select transparent glyph surface */ + guac_client_data->glyph_surface = + guac_client_data->trans_glyph_surface; + + guac_client_data->glyph_cairo = cairo_create( + guac_client_data->glyph_surface); + + /* Clear surface */ + cairo_set_operator(guac_client_data->glyph_cairo, + CAIRO_OPERATOR_SOURCE); + + cairo_set_source_rgba(guac_client_data->glyph_cairo, 0, 0, 0, 0); + cairo_paint(guac_client_data->glyph_cairo); + + /* Restore operator */ + cairo_set_operator(guac_client_data->glyph_cairo, + CAIRO_OPERATOR_OVER); + + } + /* Prepare for glyph drawing */ cairo_set_source_rgb(guac_client_data->glyph_cairo, ( fgcolor & 0x0000FF ) / 255.0, @@ -193,5 +224,8 @@ void guac_rdp_glyph_enddraw(rdpContext* context, /* Destroy surface */ cairo_surface_destroy(surface); + /* Destroy cairo instance */ + cairo_destroy(guac_client_data->glyph_cairo); + } From 7211513001e7b4747bb58b17d79f673023ee92ea Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Thu, 5 Apr 2012 23:03:19 -0700 Subject: [PATCH 136/253] Fix color order regression. --- protocols/rdp/src/rdp_glyph.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/protocols/rdp/src/rdp_glyph.c b/protocols/rdp/src/rdp_glyph.c index 3e939f64..603a1048 100644 --- a/protocols/rdp/src/rdp_glyph.c +++ b/protocols/rdp/src/rdp_glyph.c @@ -157,9 +157,9 @@ void guac_rdp_glyph_begindraw(rdpContext* context, x, y, width, height); cairo_set_source_rgb(guac_client_data->glyph_cairo, - ( bgcolor & 0x0000FF ) / 255.0, + ((bgcolor & 0xFF0000) >> 16) / 255.0, ((bgcolor & 0x00FF00) >> 8 ) / 255.0, - ((bgcolor & 0xFF0000) >> 16) / 255.0); + ( bgcolor & 0x0000FF ) / 255.0); cairo_fill(guac_client_data->glyph_cairo); @@ -190,9 +190,9 @@ void guac_rdp_glyph_begindraw(rdpContext* context, /* Prepare for glyph drawing */ cairo_set_source_rgb(guac_client_data->glyph_cairo, - ( fgcolor & 0x0000FF ) / 255.0, + ((fgcolor & 0xFF0000) >> 16) / 255.0, ((fgcolor & 0x00FF00) >> 8 ) / 255.0, - ((fgcolor & 0xFF0000) >> 16) / 255.0); + ( fgcolor & 0x0000FF ) / 255.0); } From 18a1996f6bb2a83d9a506605651e896ae18394ea Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Tue, 10 Apr 2012 11:04:38 -0700 Subject: [PATCH 137/253] Allocate buffers conservatively. --- protocols/rdp/src/rdp_bitmap.c | 91 +++++++++++++++++++--------------- 1 file changed, 52 insertions(+), 39 deletions(-) diff --git a/protocols/rdp/src/rdp_bitmap.c b/protocols/rdp/src/rdp_bitmap.c index 2a514476..bf351be2 100644 --- a/protocols/rdp/src/rdp_bitmap.c +++ b/protocols/rdp/src/rdp_bitmap.c @@ -53,16 +53,38 @@ #include "client.h" #include "rdp_bitmap.h" -void guac_rdp_bitmap_new(rdpContext* context, rdpBitmap* bitmap) { +void __guac_rdp_cache_bitmap(rdpContext* context, rdpBitmap* bitmap) { guac_client* client = ((rdp_freerdp_context*) context)->client; guac_socket* socket = client->socket; - /* Allocate buffer */ - guac_layer* buffer = guac_client_alloc_buffer(client); + /* Cache image data if present */ + if (bitmap->data != NULL) { - /* Store buffer reference in bitmap */ - ((guac_rdp_bitmap*) bitmap)->layer = buffer; + /* Allocate buffer */ + guac_layer* buffer = guac_client_alloc_buffer(client); + + /* Create surface from image data */ + cairo_surface_t* surface = cairo_image_surface_create_for_data( + bitmap->data, CAIRO_FORMAT_RGB24, + bitmap->width, bitmap->height, 4*bitmap->width); + + /* Send surface to buffer */ + guac_protocol_send_png(socket, + GUAC_COMP_SRC, buffer, 0, 0, surface); + + /* Free surface */ + cairo_surface_destroy(surface); + + /* Store buffer reference in bitmap */ + ((guac_rdp_bitmap*) bitmap)->layer = buffer; + + } + +} + + +void guac_rdp_bitmap_new(rdpContext* context, rdpBitmap* bitmap) { /* Convert image data if present */ if (bitmap->data != NULL) { @@ -73,41 +95,27 @@ void guac_rdp_bitmap_new(rdpContext* context, rdpBitmap* bitmap) { context->instance->settings->color_depth, 32, ((rdp_freerdp_context*) context)->clrconv); - /* If not ephemeral, store cached image, and free image data */ - if (!bitmap->ephemeral) { + /* Free existing image, if any */ + if (image_buffer != bitmap->data) + free(bitmap->data); - /* Create surface from image data */ - cairo_surface_t* surface = cairo_image_surface_create_for_data( - image_buffer, CAIRO_FORMAT_RGB24, - bitmap->width, bitmap->height, 4*bitmap->width); + /* Store converted image in bitmap */ + bitmap->data = image_buffer; - /* Send surface to buffer */ - guac_protocol_send_png(socket, - GUAC_COMP_SRC, buffer, 0, 0, surface); + /* If not ephemeral, store cached image */ + if (!bitmap->ephemeral) + __guac_rdp_cache_bitmap(context, bitmap); - /* Free surface */ - cairo_surface_destroy(surface); - - /* Free image data if actually alloated */ - if (image_buffer != bitmap->data) - free(image_buffer); - - } - - /* Otherwise, store converted image in bitmap, free any existing */ - else { - - /* Free existing image, if any */ - if (image_buffer != bitmap->data) - free(bitmap->data); - - /* Store converted image in bitmap */ - bitmap->data = image_buffer; - - } + else + /* No corresponding layer */ + ((guac_rdp_bitmap*) bitmap)->layer = NULL; } + else + /* No corresponding layer */ + ((guac_rdp_bitmap*) bitmap)->layer = NULL; + } void guac_rdp_bitmap_paint(rdpContext* context, rdpBitmap* bitmap) { @@ -118,8 +126,8 @@ void guac_rdp_bitmap_paint(rdpContext* context, rdpBitmap* bitmap) { int width = bitmap->right - bitmap->left + 1; int height = bitmap->bottom - bitmap->top + 1; - /* If not ephemeral, retrieve from cache */ - if (!bitmap->ephemeral) + /* If cached, retrieve from cache */ + if (((guac_rdp_bitmap*) bitmap)->layer != NULL) guac_protocol_send_copy(socket, ((guac_rdp_bitmap*) bitmap)->layer, 0, 0, width, height, @@ -160,9 +168,14 @@ void guac_rdp_bitmap_setsurface(rdpContext* context, rdpBitmap* bitmap, boolean if (primary) ((rdp_guac_client_data*) client->data)->current_surface = GUAC_DEFAULT_LAYER; - else - ((rdp_guac_client_data*) client->data)->current_surface - = ((guac_rdp_bitmap*) bitmap)->layer; + + else { + + if (((guac_rdp_bitmap*) bitmap)->layer != NULL) + ((rdp_guac_client_data*) client->data)->current_surface + = ((guac_rdp_bitmap*) bitmap)->layer; + + } } From 4de910748d9947fc56a6bae339c8b27c772d8ba6 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Tue, 10 Apr 2012 11:51:46 -0700 Subject: [PATCH 138/253] Fix artifacts. --- protocols/rdp/src/rdp_bitmap.c | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/protocols/rdp/src/rdp_bitmap.c b/protocols/rdp/src/rdp_bitmap.c index bf351be2..2448fdbf 100644 --- a/protocols/rdp/src/rdp_bitmap.c +++ b/protocols/rdp/src/rdp_bitmap.c @@ -58,12 +58,12 @@ void __guac_rdp_cache_bitmap(rdpContext* context, rdpBitmap* bitmap) { guac_client* client = ((rdp_freerdp_context*) context)->client; guac_socket* socket = client->socket; + /* Allocate buffer */ + guac_layer* buffer = guac_client_alloc_buffer(client); + /* Cache image data if present */ if (bitmap->data != NULL) { - /* Allocate buffer */ - guac_layer* buffer = guac_client_alloc_buffer(client); - /* Create surface from image data */ cairo_surface_t* surface = cairo_image_surface_create_for_data( bitmap->data, CAIRO_FORMAT_RGB24, @@ -76,11 +76,11 @@ void __guac_rdp_cache_bitmap(rdpContext* context, rdpBitmap* bitmap) { /* Free surface */ cairo_surface_destroy(surface); - /* Store buffer reference in bitmap */ - ((guac_rdp_bitmap*) bitmap)->layer = buffer; - } + /* Store buffer reference in bitmap */ + ((guac_rdp_bitmap*) bitmap)->layer = buffer; + } @@ -171,9 +171,12 @@ void guac_rdp_bitmap_setsurface(rdpContext* context, rdpBitmap* bitmap, boolean else { - if (((guac_rdp_bitmap*) bitmap)->layer != NULL) - ((rdp_guac_client_data*) client->data)->current_surface - = ((guac_rdp_bitmap*) bitmap)->layer; + /* If not available as a surface, make available. */ + if (((guac_rdp_bitmap*) bitmap)->layer == NULL) + __guac_rdp_cache_bitmap(context, bitmap); + + ((rdp_guac_client_data*) client->data)->current_surface + = ((guac_rdp_bitmap*) bitmap)->layer; } From 8d9a0211d33ca39ef1a19dd29a76b20467b97a18 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Tue, 10 Apr 2012 13:21:13 -0700 Subject: [PATCH 139/253] Defer caching. --- protocols/rdp/include/rdp_bitmap.h | 5 +++++ protocols/rdp/src/rdp_bitmap.c | 33 +++++++++++++++++++----------- 2 files changed, 26 insertions(+), 12 deletions(-) diff --git a/protocols/rdp/include/rdp_bitmap.h b/protocols/rdp/include/rdp_bitmap.h index 72fa11f7..39e51f4d 100644 --- a/protocols/rdp/include/rdp_bitmap.h +++ b/protocols/rdp/include/rdp_bitmap.h @@ -54,6 +54,11 @@ typedef struct guac_rdp_bitmap { */ guac_layer* layer; + /** + * The number of times a bitmap has been used. + */ + int used; + } guac_rdp_bitmap; void guac_rdp_bitmap_new(rdpContext* context, rdpBitmap* bitmap); diff --git a/protocols/rdp/src/rdp_bitmap.c b/protocols/rdp/src/rdp_bitmap.c index 2448fdbf..405aa00e 100644 --- a/protocols/rdp/src/rdp_bitmap.c +++ b/protocols/rdp/src/rdp_bitmap.c @@ -102,19 +102,13 @@ void guac_rdp_bitmap_new(rdpContext* context, rdpBitmap* bitmap) { /* Store converted image in bitmap */ bitmap->data = image_buffer; - /* If not ephemeral, store cached image */ - if (!bitmap->ephemeral) - __guac_rdp_cache_bitmap(context, bitmap); - - else - /* No corresponding layer */ - ((guac_rdp_bitmap*) bitmap)->layer = NULL; - } - else - /* No corresponding layer */ - ((guac_rdp_bitmap*) bitmap)->layer = NULL; + /* No corresponding layer yet - caching is deferred. */ + ((guac_rdp_bitmap*) bitmap)->layer = NULL; + + /* Start at zero usage */ + ((guac_rdp_bitmap*) bitmap)->used = 0; } @@ -126,6 +120,15 @@ void guac_rdp_bitmap_paint(rdpContext* context, rdpBitmap* bitmap) { int width = bitmap->right - bitmap->left + 1; int height = bitmap->bottom - bitmap->top + 1; + /* If not cached, cache if necessary */ + if (((guac_rdp_bitmap*) bitmap)->layer == NULL + && ((guac_rdp_bitmap*) bitmap)->used >= 2) { + __guac_rdp_cache_bitmap(context, bitmap); + + guac_client_log_info(client, "Deferred cache! bitmap used=%i", ((guac_rdp_bitmap*) bitmap)->used); + + } + /* If cached, retrieve from cache */ if (((guac_rdp_bitmap*) bitmap)->layer != NULL) guac_protocol_send_copy(socket, @@ -152,14 +155,20 @@ void guac_rdp_bitmap_paint(rdpContext* context, rdpBitmap* bitmap) { } + /* Increment usage counter */ + ((guac_rdp_bitmap*) bitmap)->used++; + + guac_client_log_info(client, "Used bitmap... used=%i", ((guac_rdp_bitmap*) bitmap)->used); + } void guac_rdp_bitmap_free(rdpContext* context, rdpBitmap* bitmap) { guac_client* client = ((rdp_freerdp_context*) context)->client; - /* Free layer, if any */ + /* If cached, free buffer */ if (((guac_rdp_bitmap*) bitmap)->layer != NULL) guac_client_free_buffer(client, ((guac_rdp_bitmap*) bitmap)->layer); + } void guac_rdp_bitmap_setsurface(rdpContext* context, rdpBitmap* bitmap, boolean primary) { From 82c2594320e686baf27d46811246d7f3241d8e02 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Tue, 10 Apr 2012 14:23:37 -0700 Subject: [PATCH 140/253] Implement deferred cache via memblt. --- protocols/rdp/include/rdp_bitmap.h | 1 + protocols/rdp/src/rdp_bitmap.c | 14 ++----- protocols/rdp/src/rdp_gdi.c | 59 ++++++++++++++++++++++++------ 3 files changed, 53 insertions(+), 21 deletions(-) diff --git a/protocols/rdp/include/rdp_bitmap.h b/protocols/rdp/include/rdp_bitmap.h index 39e51f4d..b4cdd1e0 100644 --- a/protocols/rdp/include/rdp_bitmap.h +++ b/protocols/rdp/include/rdp_bitmap.h @@ -61,6 +61,7 @@ typedef struct guac_rdp_bitmap { } guac_rdp_bitmap; +void guac_rdp_cache_bitmap(rdpContext* context, rdpBitmap* bitmap); void guac_rdp_bitmap_new(rdpContext* context, rdpBitmap* bitmap); void guac_rdp_bitmap_decompress(rdpContext* context, rdpBitmap* bitmap, uint8* data, int width, int height, int bpp, int length, boolean compressed); void guac_rdp_bitmap_paint(rdpContext* context, rdpBitmap* bitmap); diff --git a/protocols/rdp/src/rdp_bitmap.c b/protocols/rdp/src/rdp_bitmap.c index 405aa00e..2d674102 100644 --- a/protocols/rdp/src/rdp_bitmap.c +++ b/protocols/rdp/src/rdp_bitmap.c @@ -53,7 +53,7 @@ #include "client.h" #include "rdp_bitmap.h" -void __guac_rdp_cache_bitmap(rdpContext* context, rdpBitmap* bitmap) { +void guac_rdp_cache_bitmap(rdpContext* context, rdpBitmap* bitmap) { guac_client* client = ((rdp_freerdp_context*) context)->client; guac_socket* socket = client->socket; @@ -122,12 +122,8 @@ void guac_rdp_bitmap_paint(rdpContext* context, rdpBitmap* bitmap) { /* If not cached, cache if necessary */ if (((guac_rdp_bitmap*) bitmap)->layer == NULL - && ((guac_rdp_bitmap*) bitmap)->used >= 2) { - __guac_rdp_cache_bitmap(context, bitmap); - - guac_client_log_info(client, "Deferred cache! bitmap used=%i", ((guac_rdp_bitmap*) bitmap)->used); - - } + && ((guac_rdp_bitmap*) bitmap)->used >= 1) + guac_rdp_cache_bitmap(context, bitmap); /* If cached, retrieve from cache */ if (((guac_rdp_bitmap*) bitmap)->layer != NULL) @@ -158,8 +154,6 @@ void guac_rdp_bitmap_paint(rdpContext* context, rdpBitmap* bitmap) { /* Increment usage counter */ ((guac_rdp_bitmap*) bitmap)->used++; - guac_client_log_info(client, "Used bitmap... used=%i", ((guac_rdp_bitmap*) bitmap)->used); - } void guac_rdp_bitmap_free(rdpContext* context, rdpBitmap* bitmap) { @@ -182,7 +176,7 @@ void guac_rdp_bitmap_setsurface(rdpContext* context, rdpBitmap* bitmap, boolean /* If not available as a surface, make available. */ if (((guac_rdp_bitmap*) bitmap)->layer == NULL) - __guac_rdp_cache_bitmap(context, bitmap); + guac_rdp_cache_bitmap(context, bitmap); ((rdp_guac_client_data*) client->data)->current_surface = ((guac_rdp_bitmap*) bitmap)->layer; diff --git a/protocols/rdp/src/rdp_gdi.c b/protocols/rdp/src/rdp_gdi.c index 7153f4bb..a287e101 100644 --- a/protocols/rdp/src/rdp_gdi.c +++ b/protocols/rdp/src/rdp_gdi.c @@ -159,9 +159,7 @@ void guac_rdp_gdi_memblt(rdpContext* context, MEMBLT_ORDER* memblt) { guac_socket* socket = client->socket; guac_rdp_bitmap* bitmap = (guac_rdp_bitmap*) memblt->bitmap; - if (bitmap->layer != NULL) { - - switch (memblt->bRop) { + switch (memblt->bRop) { /* If blackness, send black rectangle */ case 0x00: @@ -180,12 +178,45 @@ void guac_rdp_gdi_memblt(rdpContext* context, MEMBLT_ORDER* memblt) { /* If operation is just SRC, simply copy */ case 0xCC: - guac_protocol_send_copy(socket, - bitmap->layer, - memblt->nXSrc, memblt->nYSrc, - memblt->nWidth, memblt->nHeight, - GUAC_COMP_OVER, - current_layer, memblt->nLeftRect, memblt->nTopRect); + + /* If not cached, cache if necessary */ + if (((guac_rdp_bitmap*) bitmap)->used >= 1) + guac_rdp_cache_bitmap(context, memblt->bitmap); + + /* If not cached, send as PNG */ + if (bitmap->layer == NULL) { + if (memblt->bitmap->data != NULL) { + + /* Create surface from image data */ + cairo_surface_t* surface = cairo_image_surface_create_for_data( + memblt->bitmap->data + 4*(memblt->nXSrc + memblt->nYSrc*memblt->bitmap->width), + CAIRO_FORMAT_RGB24, + memblt->nWidth, memblt->nHeight, + 4*memblt->bitmap->width); + + /* Send surface to buffer */ + guac_protocol_send_png(socket, + GUAC_COMP_OVER, current_layer, + memblt->nLeftRect, memblt->nTopRect, surface); + + /* Free surface */ + cairo_surface_destroy(surface); + + } + } + + /* Otherwise, copy */ + else + guac_protocol_send_copy(socket, + bitmap->layer, + memblt->nXSrc, memblt->nYSrc, + memblt->nWidth, memblt->nHeight, + GUAC_COMP_OVER, + current_layer, memblt->nLeftRect, memblt->nTopRect); + + /* Increment usage counter */ + ((guac_rdp_bitmap*) bitmap)->used++; + break; /* If whiteness, send white rectangle */ @@ -201,6 +232,11 @@ void guac_rdp_gdi_memblt(rdpContext* context, MEMBLT_ORDER* memblt) { /* Otherwise, use transfer */ default: + + /* If not available as a surface, make available. */ + if (bitmap->layer == NULL) + guac_rdp_cache_bitmap(context, memblt->bitmap); + guac_protocol_send_transfer(socket, bitmap->layer, memblt->nXSrc, memblt->nYSrc, @@ -208,9 +244,10 @@ void guac_rdp_gdi_memblt(rdpContext* context, MEMBLT_ORDER* memblt) { guac_rdp_rop3_transfer_function(client, memblt->bRop), current_layer, memblt->nLeftRect, memblt->nTopRect); - } + /* Increment usage counter */ + ((guac_rdp_bitmap*) bitmap)->used++; - } /* end if layer not NULL */ + } } From e659fca9228403117f95f38083103f11b846b272 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Tue, 10 Apr 2012 16:25:05 -0700 Subject: [PATCH 141/253] Only cache within memblt if not already cached. --- protocols/rdp/src/rdp_gdi.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/protocols/rdp/src/rdp_gdi.c b/protocols/rdp/src/rdp_gdi.c index a287e101..66b3cde2 100644 --- a/protocols/rdp/src/rdp_gdi.c +++ b/protocols/rdp/src/rdp_gdi.c @@ -180,7 +180,8 @@ void guac_rdp_gdi_memblt(rdpContext* context, MEMBLT_ORDER* memblt) { case 0xCC: /* If not cached, cache if necessary */ - if (((guac_rdp_bitmap*) bitmap)->used >= 1) + if (((guac_rdp_bitmap*) bitmap)->layer == NULL + && ((guac_rdp_bitmap*) bitmap)->used >= 1) guac_rdp_cache_bitmap(context, memblt->bitmap); /* If not cached, send as PNG */ From 79d388e0ecf8f6d2eb0e091eacf97bd1ed367f4b Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Tue, 10 Apr 2012 21:40:05 -0700 Subject: [PATCH 142/253] Fix boundary overflow. --- protocols/rdp/src/rdp_glyph.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/protocols/rdp/src/rdp_glyph.c b/protocols/rdp/src/rdp_glyph.c index 603a1048..951d8ecf 100644 --- a/protocols/rdp/src/rdp_glyph.c +++ b/protocols/rdp/src/rdp_glyph.c @@ -207,6 +207,14 @@ void guac_rdp_glyph_enddraw(rdpContext* context, cairo_surface_t* glyph_surface = guac_client_data->glyph_surface; int stride = cairo_image_surface_get_stride(glyph_surface); + /* Calculate bounds */ + int max_width = cairo_image_surface_get_width(glyph_surface) - x; + int max_height = cairo_image_surface_get_height(glyph_surface) - y; + + /* Ensure dimensions of glyph do not exceed bounds */ + if (width > max_width) width = max_width; + if (height > max_height) height = max_height; + /* Ensure data is ready */ cairo_surface_flush(glyph_surface); From f57e4f05ab5530cb0b3f4e15bbf9dec5f2b5ab88 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Sun, 29 Apr 2012 23:09:00 -0700 Subject: [PATCH 143/253] Read support for clipboard. --- protocols/rdp/include/rdp_cliprdr.h | 12 +++-- protocols/rdp/src/rdp_cliprdr.c | 80 +++++++++++++++++++++++------ 2 files changed, 73 insertions(+), 19 deletions(-) diff --git a/protocols/rdp/include/rdp_cliprdr.h b/protocols/rdp/include/rdp_cliprdr.h index 83ab599e..f86dd093 100644 --- a/protocols/rdp/include/rdp_cliprdr.h +++ b/protocols/rdp/include/rdp_cliprdr.h @@ -41,10 +41,14 @@ #include void guac_rdp_process_cliprdr_event(guac_client* client, RDP_EVENT* event); -void guac_rdp_process_cb_monitor_ready(guac_client* client); -void guac_rdp_process_cb_format_list(guac_client* client); -void guac_rdp_process_cb_data_request(guac_client* client); -void guac_rdp_process_cb_data_response(guac_client* client); +void guac_rdp_process_cb_monitor_ready(guac_client* client, RDP_EVENT* event); + +void guac_rdp_process_cb_format_list(guac_client* client, + RDP_CB_FORMAT_LIST_EVENT* event); + +void guac_rdp_process_cb_data_request(guac_client* client, RDP_EVENT* event); +void guac_rdp_process_cb_data_response(guac_client* client, + RDP_CB_DATA_RESPONSE_EVENT* event); #endif diff --git a/protocols/rdp/src/rdp_cliprdr.c b/protocols/rdp/src/rdp_cliprdr.c index bb1ede75..db57bf82 100644 --- a/protocols/rdp/src/rdp_cliprdr.c +++ b/protocols/rdp/src/rdp_cliprdr.c @@ -51,19 +51,21 @@ void guac_rdp_process_cliprdr_event(guac_client* client, RDP_EVENT* event) { switch (event->event_type) { case RDP_EVENT_TYPE_CB_MONITOR_READY: - guac_rdp_process_cb_monitor_ready(client); + guac_rdp_process_cb_monitor_ready(client, event); break; case RDP_EVENT_TYPE_CB_FORMAT_LIST: - guac_rdp_process_cb_format_list(client); + guac_rdp_process_cb_format_list(client, + (RDP_CB_FORMAT_LIST_EVENT*) event); break; case RDP_EVENT_TYPE_CB_DATA_REQUEST: - guac_rdp_process_cb_data_request(client); + guac_rdp_process_cb_data_request(client, event); break; case RDP_EVENT_TYPE_CB_DATA_RESPONSE: - guac_rdp_process_cb_data_response(client); + guac_rdp_process_cb_data_response(client, + (RDP_CB_DATA_RESPONSE_EVENT*) event); break; default: @@ -74,31 +76,79 @@ void guac_rdp_process_cliprdr_event(guac_client* client, RDP_EVENT* event) { } -void guac_rdp_process_cb_monitor_ready(guac_client* client) { +void guac_rdp_process_cb_monitor_ready(guac_client* client, RDP_EVENT* event) { rdpChannels* channels = ((rdp_guac_client_data*) client->data)->rdp_inst->context->channels; - RDP_EVENT* event = freerdp_event_new( + RDP_CB_FORMAT_LIST_EVENT* format_list = + (RDP_CB_FORMAT_LIST_EVENT*) freerdp_event_new( RDP_EVENT_CLASS_CLIPRDR, RDP_EVENT_TYPE_CB_FORMAT_LIST, NULL, NULL); - ((RDP_CB_FORMAT_LIST_EVENT*) event)->num_formats = 0; + /* Received notification of clipboard support. */ - freerdp_channels_send_event(channels, event); + /* Respond with supported format list */ + format_list->formats = (uint32*) malloc(sizeof(uint32)); + format_list->formats[0] = CB_FORMAT_TEXT; + format_list->num_formats = 1; + + freerdp_channels_send_event(channels, (RDP_EVENT*) format_list); } -void guac_rdp_process_cb_format_list(guac_client* client) { +void guac_rdp_process_cb_format_list(guac_client* client, + RDP_CB_FORMAT_LIST_EVENT* event) { + + rdpChannels* channels = + ((rdp_guac_client_data*) client->data)->rdp_inst->context->channels; + + /* Received notification of available data */ + + int i; + for (i=0; inum_formats; i++) { + + /* If plain text available, request it */ + if (event->formats[i] == CB_FORMAT_TEXT) { + + /* Create new data request */ + RDP_CB_DATA_REQUEST_EVENT* data_request = + (RDP_CB_DATA_REQUEST_EVENT*) freerdp_event_new( + RDP_EVENT_CLASS_CLIPRDR, + RDP_EVENT_TYPE_CB_DATA_REQUEST, + NULL, NULL); + + /* We want plain text */ + data_request->format = CB_FORMAT_TEXT; + + /* Send request */ + freerdp_channels_send_event(channels, (RDP_EVENT*) data_request); + return; + + } + + } + + /* Otherwise, no supported data available */ + guac_client_log_info(client, "Ignoring unsupported clipboard data"); + +} + +void guac_rdp_process_cb_data_request(guac_client* client, RDP_EVENT* event) { /* STUB */ + guac_client_log_info(client, "data_request"); } -void guac_rdp_process_cb_data_request(guac_client* client) { - /* STUB */ -} - -void guac_rdp_process_cb_data_response(guac_client* client) { - /* STUB */ +void guac_rdp_process_cb_data_response(guac_client* client, + RDP_CB_DATA_RESPONSE_EVENT* event) { + + /* Received clipboard data */ + if (event->data[event->size - 1] == '\0') + guac_protocol_send_clipboard(client->socket, (char*) event->data); + else + guac_client_log_error(client, + "Clipboard data missing null terminator"); + } From 61ee76bf162caf14a9f8011f6797eaeb6716fae5 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Sun, 29 Apr 2012 23:12:58 -0700 Subject: [PATCH 144/253] Store clipboard data in client data. --- protocols/rdp/include/client.h | 2 ++ protocols/rdp/src/client.c | 1 + protocols/rdp/src/rdp_cliprdr.c | 10 +++++++++- 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/protocols/rdp/include/client.h b/protocols/rdp/include/client.h index 306dbcec..f3e4dad0 100644 --- a/protocols/rdp/include/client.h +++ b/protocols/rdp/include/client.h @@ -82,6 +82,8 @@ typedef struct rdp_guac_client_data { guac_rdp_keysym_state_map keysym_state; + const char* clipboard; + } rdp_guac_client_data; typedef struct rdp_freerdp_context { diff --git a/protocols/rdp/src/client.c b/protocols/rdp/src/client.c index 87823add..930f55cb 100644 --- a/protocols/rdp/src/client.c +++ b/protocols/rdp/src/client.c @@ -367,6 +367,7 @@ int guac_client_init(guac_client* client, int argc, char** argv) { guac_client_data->rdp_inst = rdp_inst; guac_client_data->mouse_button_mask = 0; guac_client_data->current_surface = GUAC_DEFAULT_LAYER; + guac_client_data->clipboard = ""; /* Clear keysym state mapping and keymap */ memset(guac_client_data->keysym_state, 0, diff --git a/protocols/rdp/src/rdp_cliprdr.c b/protocols/rdp/src/rdp_cliprdr.c index db57bf82..44318bbd 100644 --- a/protocols/rdp/src/rdp_cliprdr.c +++ b/protocols/rdp/src/rdp_cliprdr.c @@ -144,8 +144,16 @@ void guac_rdp_process_cb_data_response(guac_client* client, RDP_CB_DATA_RESPONSE_EVENT* event) { /* Received clipboard data */ - if (event->data[event->size - 1] == '\0') + if (event->data[event->size - 1] == '\0') { + + /* Store clipboard data */ + ((rdp_guac_client_data*) client->data)->clipboard = + strdup((char*) event->data); + + /* Send clipboard data */ guac_protocol_send_clipboard(client->socket, (char*) event->data); + + } else guac_client_log_error(client, "Clipboard data missing null terminator"); From 11303e0813025660e8fe3465ec2402acc111ae59 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Sun, 29 Apr 2012 23:28:29 -0700 Subject: [PATCH 145/253] Write support in clipboard. --- protocols/rdp/include/guac_handlers.h | 1 + protocols/rdp/include/rdp_cliprdr.h | 4 ++- protocols/rdp/src/client.c | 1 + protocols/rdp/src/guac_handlers.c | 25 +++++++++++++++++ protocols/rdp/src/rdp_cliprdr.c | 40 ++++++++++++++++++++++++--- 5 files changed, 66 insertions(+), 5 deletions(-) diff --git a/protocols/rdp/include/guac_handlers.h b/protocols/rdp/include/guac_handlers.h index e7914fac..5e9ccee3 100644 --- a/protocols/rdp/include/guac_handlers.h +++ b/protocols/rdp/include/guac_handlers.h @@ -44,6 +44,7 @@ int rdp_guac_client_free_handler(guac_client* client); int rdp_guac_client_handle_messages(guac_client* client); int rdp_guac_client_mouse_handler(guac_client* client, int x, int y, int mask); int rdp_guac_client_key_handler(guac_client* client, int keysym, int pressed); +int rdp_guac_client_clipboard_handler(guac_client* client, char* data); #endif diff --git a/protocols/rdp/include/rdp_cliprdr.h b/protocols/rdp/include/rdp_cliprdr.h index f86dd093..be838c4a 100644 --- a/protocols/rdp/include/rdp_cliprdr.h +++ b/protocols/rdp/include/rdp_cliprdr.h @@ -46,7 +46,9 @@ void guac_rdp_process_cb_monitor_ready(guac_client* client, RDP_EVENT* event); void guac_rdp_process_cb_format_list(guac_client* client, RDP_CB_FORMAT_LIST_EVENT* event); -void guac_rdp_process_cb_data_request(guac_client* client, RDP_EVENT* event); +void guac_rdp_process_cb_data_request(guac_client* client, + RDP_CB_DATA_REQUEST_EVENT* event); + void guac_rdp_process_cb_data_response(guac_client* client, RDP_CB_DATA_RESPONSE_EVENT* event); diff --git a/protocols/rdp/src/client.c b/protocols/rdp/src/client.c index 930f55cb..e8c511f4 100644 --- a/protocols/rdp/src/client.c +++ b/protocols/rdp/src/client.c @@ -199,6 +199,7 @@ boolean rdp_freerdp_post_connect(freerdp* instance) { client->handle_messages = rdp_guac_client_handle_messages; client->mouse_handler = rdp_guac_client_mouse_handler; client->key_handler = rdp_guac_client_key_handler; + client->clipboard_handler = rdp_guac_client_clipboard_handler; return true; diff --git a/protocols/rdp/src/guac_handlers.c b/protocols/rdp/src/guac_handlers.c index 671fd8f2..e5977f2c 100644 --- a/protocols/rdp/src/guac_handlers.c +++ b/protocols/rdp/src/guac_handlers.c @@ -409,3 +409,28 @@ int rdp_guac_client_key_handler(guac_client* client, int keysym, int pressed) { } +int rdp_guac_client_clipboard_handler(guac_client* client, char* data) { + + rdpChannels* channels = + ((rdp_guac_client_data*) client->data)->rdp_inst->context->channels; + + RDP_CB_FORMAT_LIST_EVENT* format_list = + (RDP_CB_FORMAT_LIST_EVENT*) freerdp_event_new( + RDP_EVENT_CLASS_CLIPRDR, + RDP_EVENT_TYPE_CB_FORMAT_LIST, + NULL, NULL); + + /* Store data in client */ + ((rdp_guac_client_data*) client->data)->clipboard = strdup(data); + + /* Notify server that text data is now available */ + format_list->formats = (uint32*) malloc(sizeof(uint32)); + format_list->formats[0] = CB_FORMAT_TEXT; + format_list->num_formats = 1; + + freerdp_channels_send_event(channels, (RDP_EVENT*) format_list); + + return 0; + +} + diff --git a/protocols/rdp/src/rdp_cliprdr.c b/protocols/rdp/src/rdp_cliprdr.c index 44318bbd..7770ef9f 100644 --- a/protocols/rdp/src/rdp_cliprdr.c +++ b/protocols/rdp/src/rdp_cliprdr.c @@ -60,7 +60,8 @@ void guac_rdp_process_cliprdr_event(guac_client* client, RDP_EVENT* event) { break; case RDP_EVENT_TYPE_CB_DATA_REQUEST: - guac_rdp_process_cb_data_request(client, event); + guac_rdp_process_cb_data_request(client, + (RDP_CB_DATA_REQUEST_EVENT*) event); break; case RDP_EVENT_TYPE_CB_DATA_RESPONSE: @@ -135,9 +136,40 @@ void guac_rdp_process_cb_format_list(guac_client* client, } -void guac_rdp_process_cb_data_request(guac_client* client, RDP_EVENT* event) { - /* STUB */ - guac_client_log_info(client, "data_request"); +void guac_rdp_process_cb_data_request(guac_client* client, + RDP_CB_DATA_REQUEST_EVENT* event) { + + rdpChannels* channels = + ((rdp_guac_client_data*) client->data)->rdp_inst->context->channels; + + /* If text requested, send clipboard text contents */ + if (event->format == CB_FORMAT_TEXT) { + + /* Get clipboard data */ + const char* clipboard = + ((rdp_guac_client_data*) client->data)->clipboard; + + /* Create new data response */ + RDP_CB_DATA_RESPONSE_EVENT* data_response = + (RDP_CB_DATA_RESPONSE_EVENT*) freerdp_event_new( + RDP_EVENT_CLASS_CLIPRDR, + RDP_EVENT_TYPE_CB_DATA_RESPONSE, + NULL, NULL); + + /* Set data and length */ + data_response->data = (uint8*) strdup(clipboard); + data_response->size = strlen(clipboard) + 1; + + /* Send response */ + freerdp_channels_send_event(channels, (RDP_EVENT*) data_response); + + } + + /* Otherwise ... failure */ + else + guac_client_log_error(client, + "Server requested unsupported clipboard data type"); + } void guac_rdp_process_cb_data_response(guac_client* client, From 71b1a2e0cc7e2b42f38324827a57bb906bfaecc2 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Sun, 29 Apr 2012 23:33:27 -0700 Subject: [PATCH 146/253] Free clipboard data properly. --- protocols/rdp/include/client.h | 2 +- protocols/rdp/src/client.c | 2 +- protocols/rdp/src/guac_handlers.c | 3 +++ protocols/rdp/src/rdp_cliprdr.c | 13 +++++++++++-- 4 files changed, 16 insertions(+), 4 deletions(-) diff --git a/protocols/rdp/include/client.h b/protocols/rdp/include/client.h index f3e4dad0..02c6ab6e 100644 --- a/protocols/rdp/include/client.h +++ b/protocols/rdp/include/client.h @@ -82,7 +82,7 @@ typedef struct rdp_guac_client_data { guac_rdp_keysym_state_map keysym_state; - const char* clipboard; + char* clipboard; } rdp_guac_client_data; diff --git a/protocols/rdp/src/client.c b/protocols/rdp/src/client.c index e8c511f4..1dcd3098 100644 --- a/protocols/rdp/src/client.c +++ b/protocols/rdp/src/client.c @@ -368,7 +368,7 @@ int guac_client_init(guac_client* client, int argc, char** argv) { guac_client_data->rdp_inst = rdp_inst; guac_client_data->mouse_button_mask = 0; guac_client_data->current_surface = GUAC_DEFAULT_LAYER; - guac_client_data->clipboard = ""; + guac_client_data->clipboard = NULL; /* Clear keysym state mapping and keymap */ memset(guac_client_data->keysym_state, 0, diff --git a/protocols/rdp/src/guac_handlers.c b/protocols/rdp/src/guac_handlers.c index e5977f2c..3b60a288 100644 --- a/protocols/rdp/src/guac_handlers.c +++ b/protocols/rdp/src/guac_handlers.c @@ -420,6 +420,9 @@ int rdp_guac_client_clipboard_handler(guac_client* client, char* data) { RDP_EVENT_TYPE_CB_FORMAT_LIST, NULL, NULL); + /* Free existing data */ + free(((rdp_guac_client_data*) client->data)->clipboard); + /* Store data in client */ ((rdp_guac_client_data*) client->data)->clipboard = strdup(data); diff --git a/protocols/rdp/src/rdp_cliprdr.c b/protocols/rdp/src/rdp_cliprdr.c index 7770ef9f..ff9860aa 100644 --- a/protocols/rdp/src/rdp_cliprdr.c +++ b/protocols/rdp/src/rdp_cliprdr.c @@ -157,8 +157,14 @@ void guac_rdp_process_cb_data_request(guac_client* client, NULL, NULL); /* Set data and length */ - data_response->data = (uint8*) strdup(clipboard); - data_response->size = strlen(clipboard) + 1; + if (clipboard != NULL) { + data_response->data = (uint8*) strdup(clipboard); + data_response->size = strlen(clipboard) + 1; + } + else { + data_response->data = (uint8*) strdup(""); + data_response->size = 1; + } /* Send response */ freerdp_channels_send_event(channels, (RDP_EVENT*) data_response); @@ -178,6 +184,9 @@ void guac_rdp_process_cb_data_response(guac_client* client, /* Received clipboard data */ if (event->data[event->size - 1] == '\0') { + /* Free existing data */ + free(((rdp_guac_client_data*) client->data)->clipboard); + /* Store clipboard data */ ((rdp_guac_client_data*) client->data)->clipboard = strdup((char*) event->data); From cb28ced171b50b322c25576ba8e5734ac5fb50c5 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Tue, 1 May 2012 09:09:16 -0700 Subject: [PATCH 147/253] Embed RDP keyboard layout within keymap (see ticket #126). --- protocols/rdp/include/rdp_keymap.h | 9 +++++++++ protocols/rdp/src/client.c | 15 ++++++++++++++- protocols/rdp/src/rdp_keymap_en_us.c | 4 +++- 3 files changed, 26 insertions(+), 2 deletions(-) diff --git a/protocols/rdp/include/rdp_keymap.h b/protocols/rdp/include/rdp_keymap.h index a75e08e5..5316b520 100644 --- a/protocols/rdp/include/rdp_keymap.h +++ b/protocols/rdp/include/rdp_keymap.h @@ -38,6 +38,8 @@ #ifndef _GUAC_RDP_RDP_KEYMAP_H #define _GUAC_RDP_RDP_KEYMAP_H +#include + /** * Represents a keysym-to-scancode mapping for RDP, with extra information * about the state of prerequisite keysyms. @@ -96,6 +98,13 @@ struct guac_rdp_keymap { */ const guac_rdp_keysym_desc* mapping; + /** + * FreeRDP keyboard layout associated with this + * keymap. If this keymap is selected, this layout + * will be requested from the server. + */ + const uint32 freerdp_keyboard_layout; + }; /** diff --git a/protocols/rdp/src/client.c b/protocols/rdp/src/client.c index 1dcd3098..aa37ad32 100644 --- a/protocols/rdp/src/client.c +++ b/protocols/rdp/src/client.c @@ -218,6 +218,7 @@ void __guac_rdp_client_load_keymap(guac_client* client, rdp_guac_client_data* guac_client_data = (rdp_guac_client_data*) client->data; + /* Get mapping */ const guac_rdp_keysym_desc* mapping = keymap->mapping; @@ -253,6 +254,15 @@ int guac_client_init(guac_client* client, int argc, char** argv) { int port = RDP_DEFAULT_PORT; boolean bitmap_cache; + /** + * Selected server-side keymap. Client will be assumed to also use this + * keymap. Keys will be sent to server based on client input on a + * best-effort basis. + * + * Currently hard-coded to en-us-qwerty. + */ + const guac_rdp_keymap* chosen_keymap = &guac_rdp_keymap_en_us; + if (argc < 8) { guac_protocol_send_error(client->socket, @@ -381,7 +391,10 @@ int guac_client_init(guac_client* client, int argc, char** argv) { ((rdp_freerdp_context*) rdp_inst->context)->client = client; /* Load keymap into client */ - __guac_rdp_client_load_keymap(client, &guac_rdp_keymap_en_us); + __guac_rdp_client_load_keymap(client, chosen_keymap); + + /* Set server-side keymap */ + settings->kbd_layout = chosen_keymap->freerdp_keyboard_layout; /* Connect to RDP server */ if (!freerdp_connect(rdp_inst)) { diff --git a/protocols/rdp/src/rdp_keymap_en_us.c b/protocols/rdp/src/rdp_keymap_en_us.c index fa4a6341..7be64224 100644 --- a/protocols/rdp/src/rdp_keymap_en_us.c +++ b/protocols/rdp/src/rdp_keymap_en_us.c @@ -37,6 +37,7 @@ * ***** END LICENSE BLOCK ***** */ #include +#include #include "rdp_keymap.h" @@ -429,7 +430,8 @@ const guac_rdp_keymap guac_rdp_keymap_en_us = { .name = "en-us-qwerty", .parent = &guac_rdp_keymap_base, - .mapping = __guac_rdp_keymap_mapping + .mapping = __guac_rdp_keymap_mapping, + .freerdp_keyboard_layout = KBD_US }; From 325e4dfdb1e8ed5341cf0974cc889c58f0daa895 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Fri, 4 May 2012 01:11:07 -0700 Subject: [PATCH 148/253] Style corrections, add domain parameter. --- protocols/rdp/src/client.c | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/protocols/rdp/src/client.c b/protocols/rdp/src/client.c index aa37ad32..3a7c5f61 100644 --- a/protocols/rdp/src/client.c +++ b/protocols/rdp/src/client.c @@ -71,18 +71,20 @@ const char* GUAC_CLIENT_ARGS[] = { "hostname", "port", + "domain", "username", "password", "width", "height", - "initial_program", - "color_depth", + "initial-program", + "color-depth", NULL }; enum ARGS_IDX { IDX_HOSTNAME, IDX_PORT, + IDX_DOMAIN, IDX_USERNAME, IDX_PASSWORD, IDX_WIDTH, @@ -263,7 +265,7 @@ int guac_client_init(guac_client* client, int argc, char** argv) { */ const guac_rdp_keymap* chosen_keymap = &guac_rdp_keymap_en_us; - if (argc < 8) { + if (argc < 9) { guac_protocol_send_error(client->socket, "Wrong argument count received."); @@ -330,20 +332,24 @@ int guac_client_init(guac_client* client, int argc, char** argv) { settings->port = port; settings->window_title = strdup(hostname); - /* username */ + /* Domain */ + if (argv[IDX_DOMAIN][0] != '\0') + settings->domain = strdup(argv[IDX_DOMAIN]); + + /* Username */ settings->username = "guest"; if (argv[IDX_USERNAME][0] != '\0') - settings->username = strdup (argv[IDX_USERNAME]); + settings->username = strdup(argv[IDX_USERNAME]); - /* password */ + /* Password */ if (argv[IDX_PASSWORD][0] != '\0') { - settings->password = strdup (argv[IDX_PASSWORD]); + settings->password = strdup(argv[IDX_PASSWORD]); settings->autologon = 1; } - /* initial program */ + /* Initial program */ if (argv[IDX_INITIAL_PROGRAM][0] != '\0') - settings->shell = strdup (argv[IDX_INITIAL_PROGRAM]); + settings->shell = strdup(argv[IDX_INITIAL_PROGRAM]); /* Order support */ bitmap_cache = settings->bitmap_cache; From ed5e57ae711651c6de254eee8b96d97dfd6f8212 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Fri, 4 May 2012 13:37:32 -0700 Subject: [PATCH 149/253] Fix leaks - free clipboard and glyph surfaces. --- protocols/rdp/src/guac_handlers.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/protocols/rdp/src/guac_handlers.c b/protocols/rdp/src/guac_handlers.c index 3b60a288..a605b0c0 100644 --- a/protocols/rdp/src/guac_handlers.c +++ b/protocols/rdp/src/guac_handlers.c @@ -82,6 +82,9 @@ int rdp_guac_client_free_handler(guac_client* client) { freerdp_free(rdp_inst); /* Free client data */ + cairo_surface_destroy(guac_client_data->opaque_glyph_surface); + cairo_surface_destroy(guac_client_data->trans_glyph_surface); + free(guac_client_data->clipboard); free(guac_client_data); return 0; From 21d4ca5b2ca63609c708aa0528f32b1ffade8d82 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Fri, 4 May 2012 15:41:08 -0700 Subject: [PATCH 150/253] Final comments. --- protocols/rdp/include/client.h | 52 ++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/protocols/rdp/include/client.h b/protocols/rdp/include/client.h index 02c6ab6e..ad2d1fa3 100644 --- a/protocols/rdp/include/client.h +++ b/protocols/rdp/include/client.h @@ -45,13 +45,31 @@ #include "rdp_keymap.h" +/** + * The default RDP port. + */ #define RDP_DEFAULT_PORT 3389 +/** + * Client data that will remain accessible through the guac_client. + * This should generally include data commonly used by Guacamole handlers. + */ typedef struct rdp_guac_client_data { + /** + * Pointer to the FreeRDP client instance handling the current connection. + */ freerdp* rdp_inst; + + /** + * The settings structure associated with the FreeRDP client instance + * handling the current connection. + */ rdpSettings* settings; + /** + * Button mask containing the OR'd value of all currently pressed buttons. + */ int mouse_button_mask; /** @@ -76,21 +94,55 @@ typedef struct rdp_guac_client_data { */ cairo_t* glyph_cairo; + /** + * The Guacamole layer that GDI operations should draw to. RDP messages + * exist which change this surface to allow drawing to occur off-screen. + */ const guac_layer* current_surface; + /** + * The keymap to use when translating keysyms into scancodes or sequences + * of scancodes for RDP. + */ guac_rdp_static_keymap keymap; + /** + * The state of all keys, based on whether events for pressing/releasing + * particular keysyms have been received. This is necessary in order to + * determine which keys must be released/pressed when a particular + * keysym can only be typed through a sequence of scancodes (such as + * an Alt-code) because the server-side keymap does not support that + * keysym. + */ guac_rdp_keysym_state_map keysym_state; + /** + * The current text (NOT Unicode) clipboard contents. + */ char* clipboard; } rdp_guac_client_data; +/** + * Client data that will remain accessible through the RDP context. + * This should generally include data commonly used by FreeRDP handlers. + */ typedef struct rdp_freerdp_context { + /** + * The parent context. THIS MUST BE THE FIRST ELEMENT. + */ rdpContext _p; + /** + * Pointer to the guac_client instance handling the RDP connection with + * this context. + */ guac_client* client; + + /** + * Color conversion structure to be used to convert RDP images to PNGs. + */ CLRCONV* clrconv; } rdp_freerdp_context; From a5cc062a789ccca0d9015befa1ee5a0ba4248cdf Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Fri, 4 May 2012 15:42:35 -0700 Subject: [PATCH 151/253] Update AUTHORS. --- protocols/rdp/AUTHORS | 1 + 1 file changed, 1 insertion(+) diff --git a/protocols/rdp/AUTHORS b/protocols/rdp/AUTHORS index 517d7a79..c5009773 100644 --- a/protocols/rdp/AUTHORS +++ b/protocols/rdp/AUTHORS @@ -1 +1,2 @@ Michael Jumper +Matt Hortman From 7bafe4af2eb5825d4f239916ac995e93c4dab530 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Fri, 4 May 2012 15:43:26 -0700 Subject: [PATCH 152/253] Update ChangeLog --- protocols/rdp/ChangeLog | 3 +++ 1 file changed, 3 insertions(+) diff --git a/protocols/rdp/ChangeLog b/protocols/rdp/ChangeLog index 8b137891..06624834 100644 --- a/protocols/rdp/ChangeLog +++ b/protocols/rdp/ChangeLog @@ -1 +1,4 @@ +2012-05-04 Michael Jumper + + * Initial release From c667219fe73485f6a21d487310e1537a3dec5e93 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Sat, 5 May 2012 13:30:23 -0700 Subject: [PATCH 153/253] Added missing noinst_HEADERS --- protocols/rdp/Makefile.am | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/protocols/rdp/Makefile.am b/protocols/rdp/Makefile.am index a18a14f3..c7069eec 100644 --- a/protocols/rdp/Makefile.am +++ b/protocols/rdp/Makefile.am @@ -46,6 +46,16 @@ libguac_client_rdp_la_SOURCES = src/client.c src/rdp_bitmap.c src/rdp_glyph.c sr src/rdp_keymap_base.c \ src/rdp_keymap_en_us.c +noinst_HEADERS = \ + include/client.h \ + include/guac_handlers.h \ + include/rdp_bitmap.h \ + include/rdp_cliprdr.h \ + include/rdp_gdi.h \ + include/rdp_glyph.h \ + include/rdp_keymap.h \ + include/rdp_pointer.h + libguac_client_rdp_la_LDFLAGS = -version-info 0:0:0 EXTRA_DIST = LICENSE From 12d7353fb701857282d0e72672dd325bf29cd246 Mon Sep 17 00:00:00 2001 From: Jocelyn DELALANDE Date: Tue, 1 May 2012 08:56:42 +0200 Subject: [PATCH 154/253] Added keysym to unicode translation mechanisms. Signed-off-by: Michael Jumper --- protocols/rdp/Makefile.am | 1 + protocols/rdp/include/unicode_convtable.h | 1055 +++++++++++++++++++++ protocols/rdp/src/unicode_convtable.c | 56 ++ protocols/rdp/tools/ini2dot_h_unimap.py | 93 ++ 4 files changed, 1205 insertions(+) create mode 100644 protocols/rdp/include/unicode_convtable.h create mode 100644 protocols/rdp/src/unicode_convtable.c create mode 100644 protocols/rdp/tools/ini2dot_h_unimap.py diff --git a/protocols/rdp/Makefile.am b/protocols/rdp/Makefile.am index c7069eec..be4b4161 100644 --- a/protocols/rdp/Makefile.am +++ b/protocols/rdp/Makefile.am @@ -42,6 +42,7 @@ AM_CFLAGS = -Werror -Wall -pedantic -Iinclude lib_LTLIBRARIES = libguac-client-rdp.la libguac_client_rdp_la_SOURCES = src/client.c src/rdp_bitmap.c src/rdp_glyph.c src/rdp_pointer.c src/rdp_gdi.c src/guac_handlers.c src/rdp_cliprdr.c \ + src/unicode_convtable.c\ src/rdp_keymap.c \ src/rdp_keymap_base.c \ src/rdp_keymap_en_us.c diff --git a/protocols/rdp/include/unicode_convtable.h b/protocols/rdp/include/unicode_convtable.h new file mode 100644 index 00000000..7d6c758c --- /dev/null +++ b/protocols/rdp/include/unicode_convtable.h @@ -0,0 +1,1055 @@ + +#ifndef _GUAC_UNICODE_CONVTABLE_H +#define _GUAC_UNICODE_CONVTABLE_H + +int keysym2uni(int keysym); + +/* Keysym->unicode Exceptions tables */ +int keysym2uni_base[65536];// = { 0x0 }; +int keysym2uni_ext0[4096];// = { 0x0 }; +int keysym2uni_ext1[4096];// = { 0x0 }; +int keysym2uni_ext2[4096];// = { 0x0 }; +int keysym2uni_initialized = 0; + + +/* Fill global tables, if needed (only on first call) */ +void init_unicode_tables() { + if (keysym2uni_initialized >0) + return; + else + keysym2uni_initialized = 1; + +/* Filled with script tools/ini2dot_h_unimap.py */ +keysym2uni_base[0x11] = 104; +keysym2uni_base[0x1a1] = 0x104; +keysym2uni_base[0x1a2] = 0x2d8; +keysym2uni_base[0x1a3] = 0x141; +keysym2uni_base[0x1a5] = 0x13d; +keysym2uni_base[0x1a6] = 0x15a; +keysym2uni_base[0x1a9] = 0x160; +keysym2uni_base[0x1aa] = 0x15e; +keysym2uni_base[0x1ab] = 0x164; +keysym2uni_base[0x1ac] = 0x179; +keysym2uni_base[0x1ae] = 0x17d; +keysym2uni_base[0x1af] = 0x17b; +keysym2uni_base[0x1b1] = 0x105; +keysym2uni_base[0x1b2] = 0x2db; +keysym2uni_base[0x1b3] = 0x142; +keysym2uni_base[0x1b5] = 0x13e; +keysym2uni_base[0x1b6] = 0x15b; +keysym2uni_base[0x1b7] = 0x2c7; +keysym2uni_base[0x1b9] = 0x161; +keysym2uni_base[0x1ba] = 0x15f; +keysym2uni_base[0x1bb] = 0x165; +keysym2uni_base[0x1bc] = 0x17a; +keysym2uni_base[0x1bd] = 0x2dd; +keysym2uni_base[0x1be] = 0x17e; +keysym2uni_base[0x1bf] = 0x17c; +keysym2uni_base[0x1c0] = 0x154; +keysym2uni_base[0x1c3] = 0x102; +keysym2uni_base[0x1c5] = 0x139; +keysym2uni_base[0x1c6] = 0x106; +keysym2uni_base[0x1c8] = 0x10c; +keysym2uni_base[0x1ca] = 0x118; +keysym2uni_base[0x1cc] = 0x11a; +keysym2uni_base[0x1cf] = 0x10e; +keysym2uni_base[0x1d0] = 0x110; +keysym2uni_base[0x1d1] = 0x143; +keysym2uni_base[0x1d2] = 0x147; +keysym2uni_base[0x1d5] = 0x150; +keysym2uni_base[0x1d8] = 0x158; +keysym2uni_base[0x1d9] = 0x16e; +keysym2uni_base[0x1db] = 0x170; +keysym2uni_base[0x1de] = 0x162; +keysym2uni_base[0x1e0] = 0x155; +keysym2uni_base[0x1e3] = 0x103; +keysym2uni_base[0x1e5] = 0x13a; +keysym2uni_base[0x1e6] = 0x107; +keysym2uni_base[0x1e8] = 0x10d; +keysym2uni_base[0x1ea] = 0x119; +keysym2uni_base[0x1ec] = 0x11b; +keysym2uni_base[0x1ef] = 0x10f; +keysym2uni_base[0x1f0] = 0x111; +keysym2uni_base[0x1f1] = 0x144; +keysym2uni_base[0x1f2] = 0x148; +keysym2uni_base[0x1f5] = 0x151; +keysym2uni_base[0x1fb] = 0x171; +keysym2uni_base[0x1f8] = 0x159; +keysym2uni_base[0x1f9] = 0x16f; +keysym2uni_base[0x1fe] = 0x163; +keysym2uni_base[0x2a1] = 0x126; +keysym2uni_base[0x2a6] = 0x124; +keysym2uni_base[0x2a9] = 0x130; +keysym2uni_base[0x2ab] = 0x11e; +keysym2uni_base[0x2ac] = 0x134; +keysym2uni_base[0x2b1] = 0x127; +keysym2uni_base[0x2b6] = 0x125; +keysym2uni_base[0x2b9] = 0x131; +keysym2uni_base[0x2bb] = 0x11f; +keysym2uni_base[0x2bc] = 0x135; +keysym2uni_base[0x2c5] = 0x10a; +keysym2uni_base[0x2c6] = 0x108; +keysym2uni_base[0x2d5] = 0x120; +keysym2uni_base[0x2d8] = 0x11c; +keysym2uni_base[0x2dd] = 0x16c; +keysym2uni_base[0x2de] = 0x15c; +keysym2uni_base[0x2e5] = 0x10b; +keysym2uni_base[0x2e6] = 0x109; +keysym2uni_base[0x2f5] = 0x121; +keysym2uni_base[0x2f8] = 0x11d; +keysym2uni_base[0x2fd] = 0x16d; +keysym2uni_base[0x2fe] = 0x15d; +keysym2uni_base[0x3a2] = 0x138; +keysym2uni_base[0x3a3] = 0x156; +keysym2uni_base[0x3a5] = 0x128; +keysym2uni_base[0x3a6] = 0x13b; +keysym2uni_base[0x3aa] = 0x112; +keysym2uni_base[0x3ab] = 0x122; +keysym2uni_base[0x3ac] = 0x166; +keysym2uni_base[0x3b3] = 0x157; +keysym2uni_base[0x3b5] = 0x129; +keysym2uni_base[0x3b6] = 0x13c; +keysym2uni_base[0x3ba] = 0x113; +keysym2uni_base[0x3bb] = 0x123; +keysym2uni_base[0x3bc] = 0x167; +keysym2uni_base[0x3bd] = 0x14a; +keysym2uni_base[0x3bf] = 0x14b; +keysym2uni_base[0x3c0] = 0x100; +keysym2uni_base[0x3c7] = 0x12e; +keysym2uni_base[0x3cc] = 0x116; +keysym2uni_base[0x3cf] = 0x12a; +keysym2uni_base[0x3d1] = 0x145; +keysym2uni_base[0x3d2] = 0x14c; +keysym2uni_base[0x3d3] = 0x136; +keysym2uni_base[0x3d9] = 0x172; +keysym2uni_base[0x3dd] = 0x168; +keysym2uni_base[0x3de] = 0x16a; +keysym2uni_base[0x3e0] = 0x101; +keysym2uni_base[0x3e7] = 0x12f; +keysym2uni_base[0x3ec] = 0x117; +keysym2uni_base[0x3ef] = 0x12b; +keysym2uni_base[0x3f1] = 0x146; +keysym2uni_base[0x3f2] = 0x14d; +keysym2uni_base[0x3f3] = 0x137; +keysym2uni_base[0x3f9] = 0x173; +keysym2uni_base[0x3fd] = 0x169; +keysym2uni_base[0x3fe] = 0x16b; +keysym2uni_base[0x13bc] = 0x152; +keysym2uni_base[0x13bd] = 0x153; +keysym2uni_base[0x13be] = 0x178; +keysym2uni_base[0x47e] = 0x203e; +keysym2uni_base[0x4a1] = 0x3002; +keysym2uni_base[0x4a2] = 0x300c; +keysym2uni_base[0x4a3] = 0x300d; +keysym2uni_base[0x4a4] = 0x3001; +keysym2uni_base[0x4a5] = 0x30fb; +keysym2uni_base[0x4a6] = 0x30f2; +keysym2uni_base[0x4a7] = 0x30a1; +keysym2uni_base[0x4a8] = 0x30a3; +keysym2uni_base[0x4a9] = 0x30a5; +keysym2uni_base[0x4aa] = 0x30a7; +keysym2uni_base[0x4ab] = 0x30a9; +keysym2uni_base[0x4ac] = 0x30e3; +keysym2uni_base[0x4ad] = 0x30e5; +keysym2uni_base[0x4ae] = 0x30e7; +keysym2uni_base[0x4af] = 0x30c3; +keysym2uni_base[0x4b0] = 0x30fc; +keysym2uni_base[0x4b1] = 0x30a2; +keysym2uni_base[0x4b2] = 0x30a4; +keysym2uni_base[0x4b3] = 0x30a6; +keysym2uni_base[0x4b4] = 0x30a8; +keysym2uni_base[0x4b5] = 0x30aa; +keysym2uni_base[0x4b6] = 0x30ab; +keysym2uni_base[0x4b7] = 0x30ad; +keysym2uni_base[0x4b8] = 0x30af; +keysym2uni_base[0x4b9] = 0x30b1; +keysym2uni_base[0x4ba] = 0x30b3; +keysym2uni_base[0x4bb] = 0x30b5; +keysym2uni_base[0x4bc] = 0x30b7; +keysym2uni_base[0x4bd] = 0x30b9; +keysym2uni_base[0x4be] = 0x30bb; +keysym2uni_base[0x4bf] = 0x30bd; +keysym2uni_base[0x4c0] = 0x30bf; +keysym2uni_base[0x4c1] = 0x30c1; +keysym2uni_base[0x4c2] = 0x30c4; +keysym2uni_base[0x4c3] = 0x30c6; +keysym2uni_base[0x4c4] = 0x30c8; +keysym2uni_base[0x4c5] = 0x30ca; +keysym2uni_base[0x4c6] = 0x30cb; +keysym2uni_base[0x4c7] = 0x30cc; +keysym2uni_base[0x4c8] = 0x30cd; +keysym2uni_base[0x4c9] = 0x30ce; +keysym2uni_base[0x4ca] = 0x30cf; +keysym2uni_base[0x4cb] = 0x30d2; +keysym2uni_base[0x4cc] = 0x30d5; +keysym2uni_base[0x4cd] = 0x30d8; +keysym2uni_base[0x4ce] = 0x30db; +keysym2uni_base[0x4cf] = 0x30de; +keysym2uni_base[0x4d0] = 0x30df; +keysym2uni_base[0x4d1] = 0x30e0; +keysym2uni_base[0x4d2] = 0x30e1; +keysym2uni_base[0x4d3] = 0x30e2; +keysym2uni_base[0x4d4] = 0x30e4; +keysym2uni_base[0x4d5] = 0x30e6; +keysym2uni_base[0x4d6] = 0x30e8; +keysym2uni_base[0x4d7] = 0x30e9; +keysym2uni_base[0x4d8] = 0x30ea; +keysym2uni_base[0x4d9] = 0x30eb; +keysym2uni_base[0x4da] = 0x30ec; +keysym2uni_base[0x4db] = 0x30ed; +keysym2uni_base[0x4dc] = 0x30ef; +keysym2uni_base[0x4dd] = 0x30f3; +keysym2uni_base[0x4de] = 0x309b; +keysym2uni_base[0x4df] = 0x309c; +keysym2uni_base[0x5ac] = 0x60c; +keysym2uni_base[0x5bb] = 0x61b; +keysym2uni_base[0x5bf] = 0x61f; +keysym2uni_base[0x5c1] = 0x621; +keysym2uni_base[0x5c2] = 0x622; +keysym2uni_base[0x5c3] = 0x623; +keysym2uni_base[0x5c4] = 0x624; +keysym2uni_base[0x5c5] = 0x625; +keysym2uni_base[0x5c6] = 0x626; +keysym2uni_base[0x5c7] = 0x627; +keysym2uni_base[0x5c8] = 0x628; +keysym2uni_base[0x5c9] = 0x629; +keysym2uni_base[0x5ca] = 0x62a; +keysym2uni_base[0x5cb] = 0x62b; +keysym2uni_base[0x5cc] = 0x62c; +keysym2uni_base[0x5cd] = 0x62d; +keysym2uni_base[0x5ce] = 0x62e; +keysym2uni_base[0x5cf] = 0x62f; +keysym2uni_base[0x5d0] = 0x630; +keysym2uni_base[0x5d1] = 0x631; +keysym2uni_base[0x5d2] = 0x632; +keysym2uni_base[0x5d3] = 0x633; +keysym2uni_base[0x5d4] = 0x634; +keysym2uni_base[0x5d5] = 0x635; +keysym2uni_base[0x5d6] = 0x636; +keysym2uni_base[0x5d7] = 0x637; +keysym2uni_base[0x5d8] = 0x638; +keysym2uni_base[0x5d9] = 0x639; +keysym2uni_base[0x5da] = 0x63a; +keysym2uni_base[0x5e0] = 0x640; +keysym2uni_base[0x5e1] = 0x641; +keysym2uni_base[0x5e2] = 0x642; +keysym2uni_base[0x5e3] = 0x643; +keysym2uni_base[0x5e4] = 0x644; +keysym2uni_base[0x5e5] = 0x645; +keysym2uni_base[0x5e6] = 0x646; +keysym2uni_base[0x5e7] = 0x647; +keysym2uni_base[0x5e8] = 0x648; +keysym2uni_base[0x5e9] = 0x649; +keysym2uni_base[0x5ea] = 0x64a; +keysym2uni_base[0x5eb] = 0x64b; +keysym2uni_base[0x5ec] = 0x64c; +keysym2uni_base[0x5ed] = 0x64d; +keysym2uni_base[0x5ee] = 0x64e; +keysym2uni_base[0x5ef] = 0x64f; +keysym2uni_base[0x5f0] = 0x650; +keysym2uni_base[0x5f1] = 0x651; +keysym2uni_base[0x5f2] = 0x652; +keysym2uni_base[0x6a1] = 0x452; +keysym2uni_base[0x6a2] = 0x453; +keysym2uni_base[0x6a3] = 0x451; +keysym2uni_base[0x6a4] = 0x454; +keysym2uni_base[0x6a5] = 0x455; +keysym2uni_base[0x6a6] = 0x456; +keysym2uni_base[0x6a7] = 0x457; +keysym2uni_base[0x6a8] = 0x458; +keysym2uni_base[0x6a9] = 0x459; +keysym2uni_base[0x6aa] = 0x45a; +keysym2uni_base[0x6ab] = 0x45b; +keysym2uni_base[0x6ac] = 0x45c; +keysym2uni_base[0x6ad] = 0x491; +keysym2uni_base[0x6ae] = 0x45e; +keysym2uni_base[0x6af] = 0x45f; +keysym2uni_base[0x6b0] = 0x2116; +keysym2uni_base[0x6b1] = 0x402; +keysym2uni_base[0x6b2] = 0x403; +keysym2uni_base[0x6b3] = 0x401; +keysym2uni_base[0x6b4] = 0x404; +keysym2uni_base[0x6b5] = 0x405; +keysym2uni_base[0x6b6] = 0x406; +keysym2uni_base[0x6b7] = 0x407; +keysym2uni_base[0x6b8] = 0x408; +keysym2uni_base[0x6b9] = 0x409; +keysym2uni_base[0x6ba] = 0x40a; +keysym2uni_base[0x6bb] = 0x40b; +keysym2uni_base[0x6bc] = 0x40c; +keysym2uni_base[0x6bd] = 0x490; +keysym2uni_base[0x6be] = 0x40e; +keysym2uni_base[0x6bf] = 0x40f; +keysym2uni_base[0x6c0] = 0x44e; +keysym2uni_base[0x6c1] = 0x430; +keysym2uni_base[0x6c2] = 0x431; +keysym2uni_base[0x6c3] = 0x446; +keysym2uni_base[0x6c4] = 0x434; +keysym2uni_base[0x6c5] = 0x435; +keysym2uni_base[0x6c6] = 0x444; +keysym2uni_base[0x6c7] = 0x433; +keysym2uni_base[0x6c8] = 0x445; +keysym2uni_base[0x6c9] = 0x438; +keysym2uni_base[0x6ca] = 0x439; +keysym2uni_base[0x6cb] = 0x43a; +keysym2uni_base[0x6cc] = 0x43b; +keysym2uni_base[0x6cd] = 0x43c; +keysym2uni_base[0x6ce] = 0x43d; +keysym2uni_base[0x6cf] = 0x43e; +keysym2uni_base[0x6d0] = 0x43f; +keysym2uni_base[0x6d1] = 0x44f; +keysym2uni_base[0x6d2] = 0x440; +keysym2uni_base[0x6d3] = 0x441; +keysym2uni_base[0x6d4] = 0x442; +keysym2uni_base[0x6d5] = 0x443; +keysym2uni_base[0x6d6] = 0x436; +keysym2uni_base[0x6d7] = 0x432; +keysym2uni_base[0x6d8] = 0x44c; +keysym2uni_base[0x6d9] = 0x44b; +keysym2uni_base[0x6da] = 0x437; +keysym2uni_base[0x6db] = 0x448; +keysym2uni_base[0x6dc] = 0x44d; +keysym2uni_base[0x6dd] = 0x449; +keysym2uni_base[0x6de] = 0x447; +keysym2uni_base[0x6df] = 0x44a; +keysym2uni_base[0x6e0] = 0x42e; +keysym2uni_base[0x6e1] = 0x410; +keysym2uni_base[0x6e2] = 0x411; +keysym2uni_base[0x6e3] = 0x426; +keysym2uni_base[0x6e4] = 0x414; +keysym2uni_base[0x6e5] = 0x415; +keysym2uni_base[0x6e6] = 0x424; +keysym2uni_base[0x6e7] = 0x413; +keysym2uni_base[0x6e8] = 0x425; +keysym2uni_base[0x6e9] = 0x418; +keysym2uni_base[0x6ea] = 0x419; +keysym2uni_base[0x6eb] = 0x41a; +keysym2uni_base[0x6ec] = 0x41b; +keysym2uni_base[0x6ed] = 0x41c; +keysym2uni_base[0x6ee] = 0x41d; +keysym2uni_base[0x6ef] = 0x41e; +keysym2uni_base[0x6f0] = 0x41f; +keysym2uni_base[0x6f1] = 0x42f; +keysym2uni_base[0x6f2] = 0x420; +keysym2uni_base[0x6f3] = 0x421; +keysym2uni_base[0x6f4] = 0x422; +keysym2uni_base[0x6f5] = 0x423; +keysym2uni_base[0x6f6] = 0x416; +keysym2uni_base[0x6f7] = 0x412; +keysym2uni_base[0x6f8] = 0x42c; +keysym2uni_base[0x6f9] = 0x42b; +keysym2uni_base[0x6fa] = 0x417; +keysym2uni_base[0x6fb] = 0x428; +keysym2uni_base[0x6fc] = 0x42d; +keysym2uni_base[0x6fd] = 0x429; +keysym2uni_base[0x6fe] = 0x427; +keysym2uni_base[0x6ff] = 0x42a; +keysym2uni_base[0x7a1] = 0x386; +keysym2uni_base[0x7a2] = 0x388; +keysym2uni_base[0x7a3] = 0x389; +keysym2uni_base[0x7a4] = 0x38a; +keysym2uni_base[0x7a5] = 0x3aa; +keysym2uni_base[0x7a7] = 0x38c; +keysym2uni_base[0x7a8] = 0x38e; +keysym2uni_base[0x7a9] = 0x3ab; +keysym2uni_base[0x7ab] = 0x38f; +keysym2uni_base[0x7ae] = 0x385; +keysym2uni_base[0x7af] = 0x2015; +keysym2uni_base[0x7b1] = 0x3ac; +keysym2uni_base[0x7b2] = 0x3ad; +keysym2uni_base[0x7b3] = 0x3ae; +keysym2uni_base[0x7b4] = 0x3af; +keysym2uni_base[0x7b5] = 0x3ca; +keysym2uni_base[0x7b6] = 0x390; +keysym2uni_base[0x7b7] = 0x3cc; +keysym2uni_base[0x7b8] = 0x3cd; +keysym2uni_base[0x7b9] = 0x3cb; +keysym2uni_base[0x7ba] = 0x3b0; +keysym2uni_base[0x7bb] = 0x3ce; +keysym2uni_base[0x7c1] = 0x391; +keysym2uni_base[0x7c2] = 0x392; +keysym2uni_base[0x7c3] = 0x393; +keysym2uni_base[0x7c4] = 0x394; +keysym2uni_base[0x7c5] = 0x395; +keysym2uni_base[0x7c6] = 0x396; +keysym2uni_base[0x7c7] = 0x397; +keysym2uni_base[0x7c8] = 0x398; +keysym2uni_base[0x7c9] = 0x399; +keysym2uni_base[0x7ca] = 0x39a; +keysym2uni_base[0x7cb] = 0x39b; +keysym2uni_base[0x7cc] = 0x39c; +keysym2uni_base[0x7cd] = 0x39d; +keysym2uni_base[0x7ce] = 0x39e; +keysym2uni_base[0x7cf] = 0x39f; +keysym2uni_base[0x7d0] = 0x3a0; +keysym2uni_base[0x7d1] = 0x3a1; +keysym2uni_base[0x7d2] = 0x3a3; +keysym2uni_base[0x7d4] = 0x3a4; +keysym2uni_base[0x7d5] = 0x3a5; +keysym2uni_base[0x7d6] = 0x3a6; +keysym2uni_base[0x7d7] = 0x3a7; +keysym2uni_base[0x7d8] = 0x3a8; +keysym2uni_base[0x7d9] = 0x3a9; +keysym2uni_base[0x7e1] = 0x3b1; +keysym2uni_base[0x7e2] = 0x3b2; +keysym2uni_base[0x7e3] = 0x3b3; +keysym2uni_base[0x7e4] = 0x3b4; +keysym2uni_base[0x7e5] = 0x3b5; +keysym2uni_base[0x7e6] = 0x3b6; +keysym2uni_base[0x7e7] = 0x3b7; +keysym2uni_base[0x7e8] = 0x3b8; +keysym2uni_base[0x7e9] = 0x3b9; +keysym2uni_base[0x7ea] = 0x3ba; +keysym2uni_base[0x7eb] = 0x3bb; +keysym2uni_base[0x7ec] = 0x3bc; +keysym2uni_base[0x7ed] = 0x3bd; +keysym2uni_base[0x7ee] = 0x3be; +keysym2uni_base[0x7ef] = 0x3bf; +keysym2uni_base[0x7f0] = 0x3c0; +keysym2uni_base[0x7f1] = 0x3c1; +keysym2uni_base[0x7f2] = 0x3c3; +keysym2uni_base[0x7f3] = 0x3c2; +keysym2uni_base[0x7f4] = 0x3c4; +keysym2uni_base[0x7f5] = 0x3c5; +keysym2uni_base[0x7f6] = 0x3c6; +keysym2uni_base[0x7f7] = 0x3c7; +keysym2uni_base[0x7f8] = 0x3c8; +keysym2uni_base[0x7f9] = 0x3c9; +keysym2uni_base[0x8a1] = 0x23b7; +keysym2uni_base[0x9ec] = 0x250c; +keysym2uni_base[0x9f1] = 0x2500; +keysym2uni_base[0x8a4] = 0x2320; +keysym2uni_base[0x8a5] = 0x2321; +keysym2uni_base[0x9f8] = 0x2502; +keysym2uni_base[0x8a7] = 0x23a1; +keysym2uni_base[0x8a8] = 0x23a3; +keysym2uni_base[0x8a9] = 0x23a4; +keysym2uni_base[0x8aa] = 0x23a6; +keysym2uni_base[0x8ab] = 0x239b; +keysym2uni_base[0x8ac] = 0x239d; +keysym2uni_base[0x8ad] = 0x239e; +keysym2uni_base[0x8ae] = 0x23a0; +keysym2uni_base[0x8af] = 0x23a8; +keysym2uni_base[0x8b0] = 0x23ac; +keysym2uni_base[0x8bc] = 0x2264; +keysym2uni_base[0x8bd] = 0x2260; +keysym2uni_base[0x8be] = 0x2265; +keysym2uni_base[0x8bf] = 0x222b; +keysym2uni_base[0x8c0] = 0x2234; +keysym2uni_base[0x8c1] = 0x221d; +keysym2uni_base[0x8c2] = 0x221e; +keysym2uni_base[0x8c5] = 0x2207; +keysym2uni_base[0x8c8] = 0x223c; +keysym2uni_base[0x8c9] = 0x2243; +keysym2uni_base[0x8cd] = 0x21d4; +keysym2uni_base[0x8ce] = 0x21d2; +keysym2uni_base[0x8cf] = 0x2261; +keysym2uni_base[0xbda] = 0x2282; +keysym2uni_base[0xbd8] = 0x2283; +keysym2uni_base[0xbc3] = 0x2229; +keysym2uni_base[0xbd6] = 0x222a; +keysym2uni_base[0xba9] = 0x2227; +keysym2uni_base[0xba8] = 0x2228; +keysym2uni_base[0x8f6] = 0x192; +keysym2uni_base[0x8fb] = 0x2190; +keysym2uni_base[0x8fc] = 0x2191; +keysym2uni_base[0x8fd] = 0x2192; +keysym2uni_base[0x8fe] = 0x2193; +keysym2uni_base[0x9e0] = 0x25c6; +keysym2uni_base[0x9e1] = 0x2592; +keysym2uni_base[0x9e2] = 0x2409; +keysym2uni_base[0x9e3] = 0x240c; +keysym2uni_base[0x9e4] = 0x240d; +keysym2uni_base[0x9e5] = 0x240a; +keysym2uni_base[0x9e8] = 0x2424; +keysym2uni_base[0x9e9] = 0x240b; +keysym2uni_base[0x9ea] = 0x2518; +keysym2uni_base[0x9eb] = 0x2510; +keysym2uni_base[0x9ed] = 0x2514; +keysym2uni_base[0x9ee] = 0x253c; +keysym2uni_base[0x9ef] = 0x23ba; +keysym2uni_base[0x9f0] = 0x23bb; +keysym2uni_base[0x9f2] = 0x23bc; +keysym2uni_base[0x9f3] = 0x23bd; +keysym2uni_base[0x9f4] = 0x251c; +keysym2uni_base[0x9f5] = 0x2524; +keysym2uni_base[0x9f6] = 0x2534; +keysym2uni_base[0x9f7] = 0x252c; +keysym2uni_base[0xaa1] = 0x2003; +keysym2uni_base[0xaa2] = 0x2002; +keysym2uni_base[0xaa3] = 0x2004; +keysym2uni_base[0xaa4] = 0x2005; +keysym2uni_base[0xaa5] = 0x2007; +keysym2uni_base[0xaa6] = 0x2008; +keysym2uni_base[0xaa7] = 0x2009; +keysym2uni_base[0xaa8] = 0x200a; +keysym2uni_base[0xaa9] = 0x2014; +keysym2uni_base[0xaaa] = 0x2013; +keysym2uni_base[0xaac] = 0x2423; +keysym2uni_base[0xaae] = 0x2026; +keysym2uni_base[0xaaf] = 0x2025; +keysym2uni_base[0xab0] = 0x2153; +keysym2uni_base[0xab1] = 0x2154; +keysym2uni_base[0xab2] = 0x2155; +keysym2uni_base[0xab3] = 0x2156; +keysym2uni_base[0xab4] = 0x2157; +keysym2uni_base[0xab5] = 0x2158; +keysym2uni_base[0xab6] = 0x2159; +keysym2uni_base[0xab7] = 0x215a; +keysym2uni_base[0xab8] = 0x2105; +keysym2uni_base[0xabb] = 0x2012; +keysym2uni_base[0xabc] = 0x27e8; +keysym2uni_base[0xabd] = 0x2e; +keysym2uni_base[0xabe] = 0x27e9; +keysym2uni_base[0xac3] = 0x215b; +keysym2uni_base[0xac4] = 0x215c; +keysym2uni_base[0xac5] = 0x215d; +keysym2uni_base[0xac6] = 0x215e; +keysym2uni_base[0xac9] = 0x2122; +keysym2uni_base[0xaca] = 0x2613; +keysym2uni_base[0xacc] = 0x25c1; +keysym2uni_base[0xacd] = 0x25b7; +keysym2uni_base[0xbcf] = 0x25cb; +keysym2uni_base[0xacf] = 0x25af; +keysym2uni_base[0xad0] = 0x2018; +keysym2uni_base[0xad1] = 0x2019; +keysym2uni_base[0xad2] = 0x201c; +keysym2uni_base[0xad3] = 0x201d; +keysym2uni_base[0xad4] = 0x211e; +keysym2uni_base[0xad6] = 0x2032; +keysym2uni_base[0xad7] = 0x2033; +keysym2uni_base[0xad9] = 0x271d; +keysym2uni_base[0xadb] = 0x25ac; +keysym2uni_base[0xadc] = 0x25c0; +keysym2uni_base[0xadd] = 0x25b6; +keysym2uni_base[0xade] = 0x25cf; +keysym2uni_base[0xadf] = 0x25ae; +keysym2uni_base[0xae0] = 0x25e6; +keysym2uni_base[0xae1] = 0x25ab; +keysym2uni_base[0xae2] = 0x25ad; +keysym2uni_base[0xae3] = 0x25b3; +keysym2uni_base[0xae4] = 0x25bd; +keysym2uni_base[0xae5] = 0x2606; +keysym2uni_base[0xae6] = 0x2022; +keysym2uni_base[0xae7] = 0x25aa; +keysym2uni_base[0xae8] = 0x25b2; +keysym2uni_base[0xae9] = 0x25bc; +keysym2uni_base[0xaea] = 0x261c; +keysym2uni_base[0xaeb] = 0x261e; +keysym2uni_base[0xaec] = 0x2663; +keysym2uni_base[0xaed] = 0x2666; +keysym2uni_base[0xaee] = 0x2665; +keysym2uni_base[0xaf0] = 0x2720; +keysym2uni_base[0xaf1] = 0x2020; +keysym2uni_base[0xaf2] = 0x2021; +keysym2uni_base[0xaf3] = 0x2713; +keysym2uni_base[0xaf4] = 0x2717; +keysym2uni_base[0xaf5] = 0x266f; +keysym2uni_base[0xaf6] = 0x266d; +keysym2uni_base[0xaf7] = 0x2642; +keysym2uni_base[0xaf8] = 0x2640; +keysym2uni_base[0xaf9] = 0x260e; +keysym2uni_base[0xafa] = 0x2315; +keysym2uni_base[0xafb] = 0x2117; +keysym2uni_base[0xafc] = 0x2038; +keysym2uni_base[0xafd] = 0x201a; +keysym2uni_base[0xafe] = 0x201e; +keysym2uni_base[0xba3] = 0x3c; +keysym2uni_base[0xba6] = 0x3e; +keysym2uni_base[0xbc0] = 0xaf; +keysym2uni_base[0xbc2] = 0x22a4; +keysym2uni_base[0xbc4] = 0x230a; +keysym2uni_base[0xbca] = 0x2218; +keysym2uni_base[0xbcc] = 0x2395; +keysym2uni_base[0xbce] = 0x22a5; +keysym2uni_base[0xbd3] = 0x2308; +keysym2uni_base[0xbdc] = 0x22a3; +keysym2uni_base[0xbfc] = 0x22a2; +keysym2uni_base[0xcdf] = 0x2017; +keysym2uni_base[0xce0] = 0x5d0; +keysym2uni_base[0xce1] = 0x5d1; +keysym2uni_base[0xce2] = 0x5d2; +keysym2uni_base[0xce3] = 0x5d3; +keysym2uni_base[0xce4] = 0x5d4; +keysym2uni_base[0xce5] = 0x5d5; +keysym2uni_base[0xce6] = 0x5d6; +keysym2uni_base[0xce7] = 0x5d7; +keysym2uni_base[0xce8] = 0x5d8; +keysym2uni_base[0xce9] = 0x5d9; +keysym2uni_base[0xcea] = 0x5da; +keysym2uni_base[0xceb] = 0x5db; +keysym2uni_base[0xcec] = 0x5dc; +keysym2uni_base[0xced] = 0x5dd; +keysym2uni_base[0xcee] = 0x5de; +keysym2uni_base[0xcef] = 0x5df; +keysym2uni_base[0xcf0] = 0x5e0; +keysym2uni_base[0xcf1] = 0x5e1; +keysym2uni_base[0xcf2] = 0x5e2; +keysym2uni_base[0xcf3] = 0x5e3; +keysym2uni_base[0xcf4] = 0x5e4; +keysym2uni_base[0xcf5] = 0x5e5; +keysym2uni_base[0xcf6] = 0x5e6; +keysym2uni_base[0xcf7] = 0x5e7; +keysym2uni_base[0xcf8] = 0x5e8; +keysym2uni_base[0xcf9] = 0x5e9; +keysym2uni_base[0xcfa] = 0x5ea; +keysym2uni_base[0xda1] = 0xe01; +keysym2uni_base[0xda2] = 0xe02; +keysym2uni_base[0xda3] = 0xe03; +keysym2uni_base[0xda4] = 0xe04; +keysym2uni_base[0xda5] = 0xe05; +keysym2uni_base[0xda6] = 0xe06; +keysym2uni_base[0xda7] = 0xe07; +keysym2uni_base[0xda8] = 0xe08; +keysym2uni_base[0xda9] = 0xe09; +keysym2uni_base[0xdaa] = 0xe0a; +keysym2uni_base[0xdab] = 0xe0b; +keysym2uni_base[0xdac] = 0xe0c; +keysym2uni_base[0xdad] = 0xe0d; +keysym2uni_base[0xdae] = 0xe0e; +keysym2uni_base[0xdaf] = 0xe0f; +keysym2uni_base[0xdb0] = 0xe10; +keysym2uni_base[0xdb1] = 0xe11; +keysym2uni_base[0xdb2] = 0xe12; +keysym2uni_base[0xdb3] = 0xe13; +keysym2uni_base[0xdb4] = 0xe14; +keysym2uni_base[0xdb5] = 0xe15; +keysym2uni_base[0xdb6] = 0xe16; +keysym2uni_base[0xdb7] = 0xe17; +keysym2uni_base[0xdb8] = 0xe18; +keysym2uni_base[0xdb9] = 0xe19; +keysym2uni_base[0xdba] = 0xe1a; +keysym2uni_base[0xdbb] = 0xe1b; +keysym2uni_base[0xdbc] = 0xe1c; +keysym2uni_base[0xdbd] = 0xe1d; +keysym2uni_base[0xdbe] = 0xe1e; +keysym2uni_base[0xdbf] = 0xe1f; +keysym2uni_base[0xdc0] = 0xe20; +keysym2uni_base[0xdc1] = 0xe21; +keysym2uni_base[0xdc2] = 0xe22; +keysym2uni_base[0xdc3] = 0xe23; +keysym2uni_base[0xdc4] = 0xe24; +keysym2uni_base[0xdc5] = 0xe25; +keysym2uni_base[0xdc6] = 0xe26; +keysym2uni_base[0xdc7] = 0xe27; +keysym2uni_base[0xdc8] = 0xe28; +keysym2uni_base[0xdc9] = 0xe29; +keysym2uni_base[0xdca] = 0xe2a; +keysym2uni_base[0xdcb] = 0xe2b; +keysym2uni_base[0xdcc] = 0xe2c; +keysym2uni_base[0xdcd] = 0xe2d; +keysym2uni_base[0xdce] = 0xe2e; +keysym2uni_base[0xdcf] = 0xe2f; +keysym2uni_base[0xdd0] = 0xe30; +keysym2uni_base[0xdd1] = 0xe31; +keysym2uni_base[0xdd2] = 0xe32; +keysym2uni_base[0xdd3] = 0xe33; +keysym2uni_base[0xdd4] = 0xe34; +keysym2uni_base[0xdd5] = 0xe35; +keysym2uni_base[0xdd6] = 0xe36; +keysym2uni_base[0xdd7] = 0xe37; +keysym2uni_base[0xdd8] = 0xe38; +keysym2uni_base[0xdd9] = 0xe39; +keysym2uni_base[0xdda] = 0xe3a; +keysym2uni_base[0xddf] = 0xe3f; +keysym2uni_base[0xde0] = 0xe40; +keysym2uni_base[0xde1] = 0xe41; +keysym2uni_base[0xde2] = 0xe42; +keysym2uni_base[0xde3] = 0xe43; +keysym2uni_base[0xde4] = 0xe44; +keysym2uni_base[0xde5] = 0xe45; +keysym2uni_base[0xde6] = 0xe46; +keysym2uni_base[0xde7] = 0xe47; +keysym2uni_base[0xde8] = 0xe48; +keysym2uni_base[0xde9] = 0xe49; +keysym2uni_base[0xdea] = 0xe4a; +keysym2uni_base[0xdeb] = 0xe4b; +keysym2uni_base[0xdec] = 0xe4c; +keysym2uni_base[0xded] = 0xe4d; +keysym2uni_base[0xdf0] = 0xe50; +keysym2uni_base[0xdf1] = 0xe51; +keysym2uni_base[0xdf2] = 0xe52; +keysym2uni_base[0xdf3] = 0xe53; +keysym2uni_base[0xdf4] = 0xe54; +keysym2uni_base[0xdf5] = 0xe55; +keysym2uni_base[0xdf6] = 0xe56; +keysym2uni_base[0xdf7] = 0xe57; +keysym2uni_base[0xdf8] = 0xe58; +keysym2uni_base[0xdf9] = 0xe59; + + +keysym2uni_ext0[0x174] = 0x174; +keysym2uni_ext0[0x176] = 0x176; +keysym2uni_ext0[0x175] = 0x175; +keysym2uni_ext0[0x177] = 0x177; +keysym2uni_ext0[0x6f0] = 0x6f0; +keysym2uni_ext0[0x6f1] = 0x6f1; +keysym2uni_ext0[0x6f2] = 0x6f2; +keysym2uni_ext0[0x6f3] = 0x6f3; +keysym2uni_ext0[0x6f4] = 0x6f4; +keysym2uni_ext0[0x6f5] = 0x6f5; +keysym2uni_ext0[0x6f6] = 0x6f6; +keysym2uni_ext0[0x6f7] = 0x6f7; +keysym2uni_ext0[0x6f8] = 0x6f8; +keysym2uni_ext0[0x6f9] = 0x6f9; +keysym2uni_ext0[0x66a] = 0x66a; +keysym2uni_ext0[0x670] = 0x670; +keysym2uni_ext0[0x679] = 0x679; +keysym2uni_ext0[0x67e] = 0x67e; +keysym2uni_ext0[0x686] = 0x686; +keysym2uni_ext0[0x688] = 0x688; +keysym2uni_ext0[0x691] = 0x691; +keysym2uni_ext0[0x6d4] = 0x6d4; +keysym2uni_ext0[0x660] = 0x660; +keysym2uni_ext0[0x661] = 0x661; +keysym2uni_ext0[0x662] = 0x662; +keysym2uni_ext0[0x663] = 0x663; +keysym2uni_ext0[0x664] = 0x664; +keysym2uni_ext0[0x665] = 0x665; +keysym2uni_ext0[0x666] = 0x666; +keysym2uni_ext0[0x667] = 0x667; +keysym2uni_ext0[0x668] = 0x668; +keysym2uni_ext0[0x669] = 0x669; +keysym2uni_ext0[0x653] = 0x653; +keysym2uni_ext0[0x654] = 0x654; +keysym2uni_ext0[0x655] = 0x655; +keysym2uni_ext0[0x698] = 0x698; +keysym2uni_ext0[0x6a4] = 0x6a4; +keysym2uni_ext0[0x6a9] = 0x6a9; +keysym2uni_ext0[0x6af] = 0x6af; +keysym2uni_ext0[0x6ba] = 0x6ba; +keysym2uni_ext0[0x6be] = 0x6be; +keysym2uni_ext0[0x6cc] = 0x6cc; +keysym2uni_ext0[0x6d2] = 0x6d2; +keysym2uni_ext0[0x6c1] = 0x6c1; +keysym2uni_ext0[0x492] = 0x492; +keysym2uni_ext0[0x493] = 0x493; +keysym2uni_ext0[0x496] = 0x496; +keysym2uni_ext0[0x497] = 0x497; +keysym2uni_ext0[0x49a] = 0x49a; +keysym2uni_ext0[0x49b] = 0x49b; +keysym2uni_ext0[0x49c] = 0x49c; +keysym2uni_ext0[0x49d] = 0x49d; +keysym2uni_ext0[0x4a2] = 0x4a2; +keysym2uni_ext0[0x4a3] = 0x4a3; +keysym2uni_ext0[0x4ae] = 0x4ae; +keysym2uni_ext0[0x4af] = 0x4af; +keysym2uni_ext0[0x4b0] = 0x4b0; +keysym2uni_ext0[0x4b1] = 0x4b1; +keysym2uni_ext0[0x4b2] = 0x4b2; +keysym2uni_ext0[0x4b3] = 0x4b3; +keysym2uni_ext0[0x4b6] = 0x4b6; +keysym2uni_ext0[0x4b7] = 0x4b7; +keysym2uni_ext0[0x4b8] = 0x4b8; +keysym2uni_ext0[0x4b9] = 0x4b9; +keysym2uni_ext0[0x4ba] = 0x4ba; +keysym2uni_ext0[0x4bb] = 0x4bb; +keysym2uni_ext0[0x4d8] = 0x4d8; +keysym2uni_ext0[0x4d9] = 0x4d9; +keysym2uni_ext0[0x4e2] = 0x4e2; +keysym2uni_ext0[0x4e3] = 0x4e3; +keysym2uni_ext0[0x4e8] = 0x4e8; +keysym2uni_ext0[0x4e9] = 0x4e9; +keysym2uni_ext0[0x4ee] = 0x4ee; +keysym2uni_ext0[0x4ef] = 0x4ef; +keysym2uni_ext0[0x587] = 0x587; +keysym2uni_ext0[0x589] = 0x589; +keysym2uni_ext0[0x55d] = 0x55d; +keysym2uni_ext0[0x58a] = 0x58a; +keysym2uni_ext0[0x55c] = 0x55c; +keysym2uni_ext0[0x55b] = 0x55b; +keysym2uni_ext0[0x55e] = 0x55e; +keysym2uni_ext0[0x531] = 0x531; +keysym2uni_ext0[0x561] = 0x561; +keysym2uni_ext0[0x532] = 0x532; +keysym2uni_ext0[0x562] = 0x562; +keysym2uni_ext0[0x533] = 0x533; +keysym2uni_ext0[0x563] = 0x563; +keysym2uni_ext0[0x534] = 0x534; +keysym2uni_ext0[0x564] = 0x564; +keysym2uni_ext0[0x535] = 0x535; +keysym2uni_ext0[0x565] = 0x565; +keysym2uni_ext0[0x536] = 0x536; +keysym2uni_ext0[0x566] = 0x566; +keysym2uni_ext0[0x537] = 0x537; +keysym2uni_ext0[0x567] = 0x567; +keysym2uni_ext0[0x538] = 0x538; +keysym2uni_ext0[0x568] = 0x568; +keysym2uni_ext0[0x539] = 0x539; +keysym2uni_ext0[0x569] = 0x569; +keysym2uni_ext0[0x53a] = 0x53a; +keysym2uni_ext0[0x56a] = 0x56a; +keysym2uni_ext0[0x53b] = 0x53b; +keysym2uni_ext0[0x56b] = 0x56b; +keysym2uni_ext0[0x53c] = 0x53c; +keysym2uni_ext0[0x56c] = 0x56c; +keysym2uni_ext0[0x53d] = 0x53d; +keysym2uni_ext0[0x56d] = 0x56d; +keysym2uni_ext0[0x53e] = 0x53e; +keysym2uni_ext0[0x56e] = 0x56e; +keysym2uni_ext0[0x53f] = 0x53f; +keysym2uni_ext0[0x56f] = 0x56f; +keysym2uni_ext0[0x540] = 0x540; +keysym2uni_ext0[0x570] = 0x570; +keysym2uni_ext0[0x541] = 0x541; +keysym2uni_ext0[0x571] = 0x571; +keysym2uni_ext0[0x542] = 0x542; +keysym2uni_ext0[0x572] = 0x572; +keysym2uni_ext0[0x543] = 0x543; +keysym2uni_ext0[0x573] = 0x573; +keysym2uni_ext0[0x544] = 0x544; +keysym2uni_ext0[0x574] = 0x574; +keysym2uni_ext0[0x545] = 0x545; +keysym2uni_ext0[0x575] = 0x575; +keysym2uni_ext0[0x546] = 0x546; +keysym2uni_ext0[0x576] = 0x576; +keysym2uni_ext0[0x547] = 0x547; +keysym2uni_ext0[0x577] = 0x577; +keysym2uni_ext0[0x548] = 0x548; +keysym2uni_ext0[0x578] = 0x578; +keysym2uni_ext0[0x549] = 0x549; +keysym2uni_ext0[0x579] = 0x579; +keysym2uni_ext0[0x54a] = 0x54a; +keysym2uni_ext0[0x57a] = 0x57a; +keysym2uni_ext0[0x54b] = 0x54b; +keysym2uni_ext0[0x57b] = 0x57b; +keysym2uni_ext0[0x54c] = 0x54c; +keysym2uni_ext0[0x57c] = 0x57c; +keysym2uni_ext0[0x54d] = 0x54d; +keysym2uni_ext0[0x57d] = 0x57d; +keysym2uni_ext0[0x54e] = 0x54e; +keysym2uni_ext0[0x57e] = 0x57e; +keysym2uni_ext0[0x54f] = 0x54f; +keysym2uni_ext0[0x57f] = 0x57f; +keysym2uni_ext0[0x550] = 0x550; +keysym2uni_ext0[0x580] = 0x580; +keysym2uni_ext0[0x551] = 0x551; +keysym2uni_ext0[0x581] = 0x581; +keysym2uni_ext0[0x552] = 0x552; +keysym2uni_ext0[0x582] = 0x582; +keysym2uni_ext0[0x553] = 0x553; +keysym2uni_ext0[0x583] = 0x583; +keysym2uni_ext0[0x554] = 0x554; +keysym2uni_ext0[0x584] = 0x584; +keysym2uni_ext0[0x555] = 0x555; +keysym2uni_ext0[0x585] = 0x585; +keysym2uni_ext0[0x556] = 0x556; +keysym2uni_ext0[0x586] = 0x586; +keysym2uni_ext0[0x55a] = 0x55a; +keysym2uni_ext0[0x1b5] = 0x1b5; +keysym2uni_ext0[0x1e6] = 0x1e6; +keysym2uni_ext0[0x1d2] = 0x1d2; +keysym2uni_ext0[0x19f] = 0x19f; +keysym2uni_ext0[0x12d] = 0x12d; +keysym2uni_ext0[0x1b6] = 0x1b6; +keysym2uni_ext0[0x1e7] = 0x1e7; +keysym2uni_ext0[0x275] = 0x275; +keysym2uni_ext0[0x18f] = 0x18f; +keysym2uni_ext0[0x259] = 0x259; +keysym2uni_ext0[0x1a0] = 0x1a0; +keysym2uni_ext0[0x1a1] = 0x1a1; +keysym2uni_ext0[0x1af] = 0x1af; +keysym2uni_ext0[0x1b0] = 0x1b0; + + +keysym2uni_ext1[0xe02] = 0x1e02; +keysym2uni_ext1[0xe03] = 0x1e03; +keysym2uni_ext1[0xe0a] = 0x1e0a; +keysym2uni_ext1[0xe80] = 0x1e80; +keysym2uni_ext1[0xe82] = 0x1e82; +keysym2uni_ext1[0xe0b] = 0x1e0b; +keysym2uni_ext1[0xef2] = 0x1ef2; +keysym2uni_ext1[0xe1e] = 0x1e1e; +keysym2uni_ext1[0xe1f] = 0x1e1f; +keysym2uni_ext1[0xe40] = 0x1e40; +keysym2uni_ext1[0xe41] = 0x1e41; +keysym2uni_ext1[0xe56] = 0x1e56; +keysym2uni_ext1[0xe81] = 0x1e81; +keysym2uni_ext1[0xe57] = 0x1e57; +keysym2uni_ext1[0xe83] = 0x1e83; +keysym2uni_ext1[0xe60] = 0x1e60; +keysym2uni_ext1[0xef3] = 0x1ef3; +keysym2uni_ext1[0xe84] = 0x1e84; +keysym2uni_ext1[0xe85] = 0x1e85; +keysym2uni_ext1[0xe61] = 0x1e61; +keysym2uni_ext1[0xe6a] = 0x1e6a; +keysym2uni_ext1[0xe6b] = 0x1e6b; +keysym2uni_ext1[0x0d0] = 0x10d0; +keysym2uni_ext1[0x0d1] = 0x10d1; +keysym2uni_ext1[0x0d2] = 0x10d2; +keysym2uni_ext1[0x0d3] = 0x10d3; +keysym2uni_ext1[0x0d4] = 0x10d4; +keysym2uni_ext1[0x0d5] = 0x10d5; +keysym2uni_ext1[0x0d6] = 0x10d6; +keysym2uni_ext1[0x0d7] = 0x10d7; +keysym2uni_ext1[0x0d8] = 0x10d8; +keysym2uni_ext1[0x0d9] = 0x10d9; +keysym2uni_ext1[0x0da] = 0x10da; +keysym2uni_ext1[0x0db] = 0x10db; +keysym2uni_ext1[0x0dc] = 0x10dc; +keysym2uni_ext1[0x0dd] = 0x10dd; +keysym2uni_ext1[0x0de] = 0x10de; +keysym2uni_ext1[0x0df] = 0x10df; +keysym2uni_ext1[0x0e0] = 0x10e0; +keysym2uni_ext1[0x0e1] = 0x10e1; +keysym2uni_ext1[0x0e2] = 0x10e2; +keysym2uni_ext1[0x0e3] = 0x10e3; +keysym2uni_ext1[0x0e4] = 0x10e4; +keysym2uni_ext1[0x0e5] = 0x10e5; +keysym2uni_ext1[0x0e6] = 0x10e6; +keysym2uni_ext1[0x0e7] = 0x10e7; +keysym2uni_ext1[0x0e8] = 0x10e8; +keysym2uni_ext1[0x0e9] = 0x10e9; +keysym2uni_ext1[0x0ea] = 0x10ea; +keysym2uni_ext1[0x0eb] = 0x10eb; +keysym2uni_ext1[0x0ec] = 0x10ec; +keysym2uni_ext1[0x0ed] = 0x10ed; +keysym2uni_ext1[0x0ee] = 0x10ee; +keysym2uni_ext1[0x0ef] = 0x10ef; +keysym2uni_ext1[0x0f0] = 0x10f0; +keysym2uni_ext1[0x0f1] = 0x10f1; +keysym2uni_ext1[0x0f2] = 0x10f2; +keysym2uni_ext1[0x0f3] = 0x10f3; +keysym2uni_ext1[0x0f4] = 0x10f4; +keysym2uni_ext1[0x0f5] = 0x10f5; +keysym2uni_ext1[0x0f6] = 0x10f6; +keysym2uni_ext1[0xe8b] = 0x1e8b; +keysym2uni_ext1[0xe36] = 0x1e36; +keysym2uni_ext1[0xe37] = 0x1e37; +keysym2uni_ext1[0xea0] = 0x1ea0; +keysym2uni_ext1[0xea1] = 0x1ea1; +keysym2uni_ext1[0xea2] = 0x1ea2; +keysym2uni_ext1[0xea3] = 0x1ea3; +keysym2uni_ext1[0xea4] = 0x1ea4; +keysym2uni_ext1[0xea5] = 0x1ea5; +keysym2uni_ext1[0xea6] = 0x1ea6; +keysym2uni_ext1[0xea7] = 0x1ea7; +keysym2uni_ext1[0xea8] = 0x1ea8; +keysym2uni_ext1[0xea9] = 0x1ea9; +keysym2uni_ext1[0xeaa] = 0x1eaa; +keysym2uni_ext1[0xeab] = 0x1eab; +keysym2uni_ext1[0xeac] = 0x1eac; +keysym2uni_ext1[0xead] = 0x1ead; +keysym2uni_ext1[0xeae] = 0x1eae; +keysym2uni_ext1[0xeaf] = 0x1eaf; +keysym2uni_ext1[0xeb0] = 0x1eb0; +keysym2uni_ext1[0xeb1] = 0x1eb1; +keysym2uni_ext1[0xeb2] = 0x1eb2; +keysym2uni_ext1[0xeb3] = 0x1eb3; +keysym2uni_ext1[0xeb4] = 0x1eb4; +keysym2uni_ext1[0xeb5] = 0x1eb5; +keysym2uni_ext1[0xeb6] = 0x1eb6; +keysym2uni_ext1[0xeb7] = 0x1eb7; +keysym2uni_ext1[0xeb8] = 0x1eb8; +keysym2uni_ext1[0xeb9] = 0x1eb9; +keysym2uni_ext1[0xeba] = 0x1eba; +keysym2uni_ext1[0xebb] = 0x1ebb; +keysym2uni_ext1[0xebc] = 0x1ebc; +keysym2uni_ext1[0xebd] = 0x1ebd; +keysym2uni_ext1[0xebe] = 0x1ebe; +keysym2uni_ext1[0xebf] = 0x1ebf; +keysym2uni_ext1[0xec0] = 0x1ec0; +keysym2uni_ext1[0xec1] = 0x1ec1; +keysym2uni_ext1[0xec2] = 0x1ec2; +keysym2uni_ext1[0xec3] = 0x1ec3; +keysym2uni_ext1[0xec4] = 0x1ec4; +keysym2uni_ext1[0xec5] = 0x1ec5; +keysym2uni_ext1[0xec6] = 0x1ec6; +keysym2uni_ext1[0xec7] = 0x1ec7; +keysym2uni_ext1[0xec8] = 0x1ec8; +keysym2uni_ext1[0xec9] = 0x1ec9; +keysym2uni_ext1[0xeca] = 0x1eca; +keysym2uni_ext1[0xecb] = 0x1ecb; +keysym2uni_ext1[0xecc] = 0x1ecc; +keysym2uni_ext1[0xecd] = 0x1ecd; +keysym2uni_ext1[0xece] = 0x1ece; +keysym2uni_ext1[0xecf] = 0x1ecf; +keysym2uni_ext1[0xed0] = 0x1ed0; +keysym2uni_ext1[0xed1] = 0x1ed1; +keysym2uni_ext1[0xed2] = 0x1ed2; +keysym2uni_ext1[0xed3] = 0x1ed3; +keysym2uni_ext1[0xed4] = 0x1ed4; +keysym2uni_ext1[0xed5] = 0x1ed5; +keysym2uni_ext1[0xed6] = 0x1ed6; +keysym2uni_ext1[0xed7] = 0x1ed7; +keysym2uni_ext1[0xed8] = 0x1ed8; +keysym2uni_ext1[0xed9] = 0x1ed9; +keysym2uni_ext1[0xeda] = 0x1eda; +keysym2uni_ext1[0xedb] = 0x1edb; +keysym2uni_ext1[0xedc] = 0x1edc; +keysym2uni_ext1[0xedd] = 0x1edd; +keysym2uni_ext1[0xede] = 0x1ede; +keysym2uni_ext1[0xedf] = 0x1edf; +keysym2uni_ext1[0xee0] = 0x1ee0; +keysym2uni_ext1[0xee1] = 0x1ee1; +keysym2uni_ext1[0xee2] = 0x1ee2; +keysym2uni_ext1[0xee3] = 0x1ee3; +keysym2uni_ext1[0xee4] = 0x1ee4; +keysym2uni_ext1[0xee5] = 0x1ee5; +keysym2uni_ext1[0xee6] = 0x1ee6; +keysym2uni_ext1[0xee7] = 0x1ee7; +keysym2uni_ext1[0xee8] = 0x1ee8; +keysym2uni_ext1[0xee9] = 0x1ee9; +keysym2uni_ext1[0xeea] = 0x1eea; +keysym2uni_ext1[0xeeb] = 0x1eeb; +keysym2uni_ext1[0xeec] = 0x1eec; +keysym2uni_ext1[0xeed] = 0x1eed; +keysym2uni_ext1[0xeee] = 0x1eee; +keysym2uni_ext1[0xeef] = 0x1eef; +keysym2uni_ext1[0xef0] = 0x1ef0; +keysym2uni_ext1[0xef1] = 0x1ef1; +keysym2uni_ext1[0xef4] = 0x1ef4; +keysym2uni_ext1[0xef5] = 0x1ef5; +keysym2uni_ext1[0xef6] = 0x1ef6; +keysym2uni_ext1[0xef7] = 0x1ef7; +keysym2uni_ext1[0xef8] = 0x1ef8; +keysym2uni_ext1[0xef9] = 0x1ef9; + + +keysym2uni_ext2[0x21a] = 0x221a; +keysym2uni_ext2[0x202] = 0x2202; +keysym2uni_ext2[0x0a9] = 0x20a9; +keysym2uni_ext2[0x0a0] = 0x20a0; +keysym2uni_ext2[0x0a1] = 0x20a1; +keysym2uni_ext2[0x0a2] = 0x20a2; +keysym2uni_ext2[0x0a3] = 0x20a3; +keysym2uni_ext2[0x0a4] = 0x20a4; +keysym2uni_ext2[0x0a5] = 0x20a5; +keysym2uni_ext2[0x0a6] = 0x20a6; +keysym2uni_ext2[0x0a7] = 0x20a7; +keysym2uni_ext2[0x0a8] = 0x20a8; +keysym2uni_ext2[0x0aa] = 0x20aa; +keysym2uni_ext2[0x0ab] = 0x20ab; +keysym2uni_ext2[0x070] = 0x2070; +keysym2uni_ext2[0x074] = 0x2074; +keysym2uni_ext2[0x075] = 0x2075; +keysym2uni_ext2[0x076] = 0x2076; +keysym2uni_ext2[0x077] = 0x2077; +keysym2uni_ext2[0x078] = 0x2078; +keysym2uni_ext2[0x079] = 0x2079; +keysym2uni_ext2[0x080] = 0x2080; +keysym2uni_ext2[0x081] = 0x2081; +keysym2uni_ext2[0x082] = 0x2082; +keysym2uni_ext2[0x083] = 0x2083; +keysym2uni_ext2[0x084] = 0x2084; +keysym2uni_ext2[0x085] = 0x2085; +keysym2uni_ext2[0x086] = 0x2086; +keysym2uni_ext2[0x087] = 0x2087; +keysym2uni_ext2[0x088] = 0x2088; +keysym2uni_ext2[0x089] = 0x2089; +keysym2uni_ext2[0x205] = 0x2205; +keysym2uni_ext2[0x208] = 0x2208; +keysym2uni_ext2[0x209] = 0x2209; +keysym2uni_ext2[0x20b] = 0x220b; +keysym2uni_ext2[0x21b] = 0x221b; +keysym2uni_ext2[0x21c] = 0x221c; +keysym2uni_ext2[0x22c] = 0x222c; +keysym2uni_ext2[0x22d] = 0x222d; +keysym2uni_ext2[0x235] = 0x2235; +keysym2uni_ext2[0x248] = 0x2245; +keysym2uni_ext2[0x247] = 0x2247; +keysym2uni_ext2[0x262] = 0x2262; +keysym2uni_ext2[0x263] = 0x2263; +} + +#endif diff --git a/protocols/rdp/src/unicode_convtable.c b/protocols/rdp/src/unicode_convtable.c new file mode 100644 index 00000000..38d79928 --- /dev/null +++ b/protocols/rdp/src/unicode_convtable.c @@ -0,0 +1,56 @@ +/** + * Copyright (C) 2012 Ulteo SAS + * http://www.ulteo.com + * Author Jocelyn DELALANDE 2012 + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; version 2 + * of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + **/ + + +#include "unicode_convtable.h" + +int keysym2uni(int keysym) { + init_unicode_tables(); + /* Default: no exception */ + int exception = 0; + + if (keysym < 0x100000) { + // Look for a 4-digits-form exception + exception = keysym2uni_base[keysym]; + } else { + // Look for a 7-digits-form exception + /* Switch to look for 0x1001XXX 0x1002XXX or 0x1002XXX + the tables only indexes on XXX + */ + switch(keysym & 0xFFFF000) { + case 0x1000000: + exception = keysym2uni_ext0[keysym & 0x0000FFF]; + break; + case 0x1001000: + exception = keysym2uni_ext1[keysym & 0x0000FFF]; + break; + case 0x1002000: + exception = keysym2uni_ext2[keysym & 0x0000FFF]; + break; + } + + /* If the keysym is not within exceptions, keysym = unicode */ + } + if (exception != 0) { + return exception; + } else { + return keysym; + } +} diff --git a/protocols/rdp/tools/ini2dot_h_unimap.py b/protocols/rdp/tools/ini2dot_h_unimap.py new file mode 100644 index 00000000..68a523fb --- /dev/null +++ b/protocols/rdp/tools/ini2dot_h_unimap.py @@ -0,0 +1,93 @@ +#!/usr/bin/env python + +# Copyright (C) 2012 Ulteo SAS +# http://www.ulteo.com +# Author Jocelyn DELALANDE 2012 +# +# Converts a .ini file defining unicode exceptions to a dot_h file +# The dot_h file defines an array of keysim->unicode +# +# Used to extract the keysym<->unicode mapping exceptions from +# unicode_exception.ini (can be found in Ulteo patched version of xrdp) + +import sys +import ConfigParser + + +class KeysymMaps: + def __init__(self): + # 4 digits keysyms + self.base = [] + # Extented keysym starting with 0x1000 + self.ext0 = [] + # Extented keysym starting with 0x1001 + self.ext1 = [] + # Extented keysym starting with 0x1002 + self.ext2 = [] + + def insert(self, keysym, uni): + # Main keysym table is 4-digit hexa keysyms + # (most of 'em are 3-digits but they lack the leading zero) + if len(keysym) <= 6: + self.base.append((keysym[2:], uni)) + + elif keysym.startswith('0x100'): + if keysym[:6] == '0x1000': + self.ext0.append((keysym[6:], uni)) + elif keysym[:6] == '0x1001': + self.ext1.append((keysym[6:], uni)) + elif keysym[:6] == '0x1002': + self.ext2.append((keysym[6:], uni)) + + else: + raise ValueError("Unexpected keysym : %s" % keysym) + + else: + raise ValueError("Unexpected keysym : %s" % keysym) + + def get_h_content(self, base_name, ext0_name, ext1_name, ext2_name): + out = '' + maps = ((base_name, self.base), + (ext0_name, self.ext0), + (ext1_name, self.ext1), + (ext2_name, self.ext2)) + + for var_name, kmap in maps: + for keysym, uni in kmap: + out += '%s[0x%s] = %s;\n' %(var_name, keysym, uni) + out += '\n\n' + return out + + +if __name__ == '__main__': + if len(sys.argv) < 2: + print "ini2dot_h_unimap.py " + exit(2) + + inifile = sys.argv[1] + + print "uni2keysym_map[]" + + ini = ConfigParser.ConfigParser() + ini.read([inifile]) + mapping = ini.items('unicode_exception') + + maps = KeysymMaps() + + + for uni, keysym in mapping: + maps.insert(keysym, uni) + + dot_h_content = \ +""" +int keysm2uni_base[4096]; +int keysm2uni_ext0[4096]; +int keysm2uni_ext1[4096]; +int keysm2uni_ext2[4096]; + + +""" + dot_h_content += maps.get_h_content('keysm2uni_base', 'keysm2uni_ext0', + 'keysm2uni_ext1', 'keysm2uni_ext2'); + + print dot_h_content From 4d0ed19243377c5acf05a5f2fb6a08a5add6c4dc Mon Sep 17 00:00:00 2001 From: Jocelyn DELALANDE Date: Tue, 1 May 2012 10:59:50 +0200 Subject: [PATCH 155/253] First working implementation with special characters handled by unicodekeyboardevents. Signed-off-by: Michael Jumper --- protocols/rdp/include/unicode_convtable.h | 1041 +------------------- protocols/rdp/src/guac_handlers.c | 47 +- protocols/rdp/src/unicode_convtable.c | 1042 +++++++++++++++++++++ 3 files changed, 1077 insertions(+), 1053 deletions(-) diff --git a/protocols/rdp/include/unicode_convtable.h b/protocols/rdp/include/unicode_convtable.h index 7d6c758c..46b42299 100644 --- a/protocols/rdp/include/unicode_convtable.h +++ b/protocols/rdp/include/unicode_convtable.h @@ -9,1047 +9,10 @@ int keysym2uni_base[65536];// = { 0x0 }; int keysym2uni_ext0[4096];// = { 0x0 }; int keysym2uni_ext1[4096];// = { 0x0 }; int keysym2uni_ext2[4096];// = { 0x0 }; -int keysym2uni_initialized = 0; + /* Fill global tables, if needed (only on first call) */ -void init_unicode_tables() { - if (keysym2uni_initialized >0) - return; - else - keysym2uni_initialized = 1; - -/* Filled with script tools/ini2dot_h_unimap.py */ -keysym2uni_base[0x11] = 104; -keysym2uni_base[0x1a1] = 0x104; -keysym2uni_base[0x1a2] = 0x2d8; -keysym2uni_base[0x1a3] = 0x141; -keysym2uni_base[0x1a5] = 0x13d; -keysym2uni_base[0x1a6] = 0x15a; -keysym2uni_base[0x1a9] = 0x160; -keysym2uni_base[0x1aa] = 0x15e; -keysym2uni_base[0x1ab] = 0x164; -keysym2uni_base[0x1ac] = 0x179; -keysym2uni_base[0x1ae] = 0x17d; -keysym2uni_base[0x1af] = 0x17b; -keysym2uni_base[0x1b1] = 0x105; -keysym2uni_base[0x1b2] = 0x2db; -keysym2uni_base[0x1b3] = 0x142; -keysym2uni_base[0x1b5] = 0x13e; -keysym2uni_base[0x1b6] = 0x15b; -keysym2uni_base[0x1b7] = 0x2c7; -keysym2uni_base[0x1b9] = 0x161; -keysym2uni_base[0x1ba] = 0x15f; -keysym2uni_base[0x1bb] = 0x165; -keysym2uni_base[0x1bc] = 0x17a; -keysym2uni_base[0x1bd] = 0x2dd; -keysym2uni_base[0x1be] = 0x17e; -keysym2uni_base[0x1bf] = 0x17c; -keysym2uni_base[0x1c0] = 0x154; -keysym2uni_base[0x1c3] = 0x102; -keysym2uni_base[0x1c5] = 0x139; -keysym2uni_base[0x1c6] = 0x106; -keysym2uni_base[0x1c8] = 0x10c; -keysym2uni_base[0x1ca] = 0x118; -keysym2uni_base[0x1cc] = 0x11a; -keysym2uni_base[0x1cf] = 0x10e; -keysym2uni_base[0x1d0] = 0x110; -keysym2uni_base[0x1d1] = 0x143; -keysym2uni_base[0x1d2] = 0x147; -keysym2uni_base[0x1d5] = 0x150; -keysym2uni_base[0x1d8] = 0x158; -keysym2uni_base[0x1d9] = 0x16e; -keysym2uni_base[0x1db] = 0x170; -keysym2uni_base[0x1de] = 0x162; -keysym2uni_base[0x1e0] = 0x155; -keysym2uni_base[0x1e3] = 0x103; -keysym2uni_base[0x1e5] = 0x13a; -keysym2uni_base[0x1e6] = 0x107; -keysym2uni_base[0x1e8] = 0x10d; -keysym2uni_base[0x1ea] = 0x119; -keysym2uni_base[0x1ec] = 0x11b; -keysym2uni_base[0x1ef] = 0x10f; -keysym2uni_base[0x1f0] = 0x111; -keysym2uni_base[0x1f1] = 0x144; -keysym2uni_base[0x1f2] = 0x148; -keysym2uni_base[0x1f5] = 0x151; -keysym2uni_base[0x1fb] = 0x171; -keysym2uni_base[0x1f8] = 0x159; -keysym2uni_base[0x1f9] = 0x16f; -keysym2uni_base[0x1fe] = 0x163; -keysym2uni_base[0x2a1] = 0x126; -keysym2uni_base[0x2a6] = 0x124; -keysym2uni_base[0x2a9] = 0x130; -keysym2uni_base[0x2ab] = 0x11e; -keysym2uni_base[0x2ac] = 0x134; -keysym2uni_base[0x2b1] = 0x127; -keysym2uni_base[0x2b6] = 0x125; -keysym2uni_base[0x2b9] = 0x131; -keysym2uni_base[0x2bb] = 0x11f; -keysym2uni_base[0x2bc] = 0x135; -keysym2uni_base[0x2c5] = 0x10a; -keysym2uni_base[0x2c6] = 0x108; -keysym2uni_base[0x2d5] = 0x120; -keysym2uni_base[0x2d8] = 0x11c; -keysym2uni_base[0x2dd] = 0x16c; -keysym2uni_base[0x2de] = 0x15c; -keysym2uni_base[0x2e5] = 0x10b; -keysym2uni_base[0x2e6] = 0x109; -keysym2uni_base[0x2f5] = 0x121; -keysym2uni_base[0x2f8] = 0x11d; -keysym2uni_base[0x2fd] = 0x16d; -keysym2uni_base[0x2fe] = 0x15d; -keysym2uni_base[0x3a2] = 0x138; -keysym2uni_base[0x3a3] = 0x156; -keysym2uni_base[0x3a5] = 0x128; -keysym2uni_base[0x3a6] = 0x13b; -keysym2uni_base[0x3aa] = 0x112; -keysym2uni_base[0x3ab] = 0x122; -keysym2uni_base[0x3ac] = 0x166; -keysym2uni_base[0x3b3] = 0x157; -keysym2uni_base[0x3b5] = 0x129; -keysym2uni_base[0x3b6] = 0x13c; -keysym2uni_base[0x3ba] = 0x113; -keysym2uni_base[0x3bb] = 0x123; -keysym2uni_base[0x3bc] = 0x167; -keysym2uni_base[0x3bd] = 0x14a; -keysym2uni_base[0x3bf] = 0x14b; -keysym2uni_base[0x3c0] = 0x100; -keysym2uni_base[0x3c7] = 0x12e; -keysym2uni_base[0x3cc] = 0x116; -keysym2uni_base[0x3cf] = 0x12a; -keysym2uni_base[0x3d1] = 0x145; -keysym2uni_base[0x3d2] = 0x14c; -keysym2uni_base[0x3d3] = 0x136; -keysym2uni_base[0x3d9] = 0x172; -keysym2uni_base[0x3dd] = 0x168; -keysym2uni_base[0x3de] = 0x16a; -keysym2uni_base[0x3e0] = 0x101; -keysym2uni_base[0x3e7] = 0x12f; -keysym2uni_base[0x3ec] = 0x117; -keysym2uni_base[0x3ef] = 0x12b; -keysym2uni_base[0x3f1] = 0x146; -keysym2uni_base[0x3f2] = 0x14d; -keysym2uni_base[0x3f3] = 0x137; -keysym2uni_base[0x3f9] = 0x173; -keysym2uni_base[0x3fd] = 0x169; -keysym2uni_base[0x3fe] = 0x16b; -keysym2uni_base[0x13bc] = 0x152; -keysym2uni_base[0x13bd] = 0x153; -keysym2uni_base[0x13be] = 0x178; -keysym2uni_base[0x47e] = 0x203e; -keysym2uni_base[0x4a1] = 0x3002; -keysym2uni_base[0x4a2] = 0x300c; -keysym2uni_base[0x4a3] = 0x300d; -keysym2uni_base[0x4a4] = 0x3001; -keysym2uni_base[0x4a5] = 0x30fb; -keysym2uni_base[0x4a6] = 0x30f2; -keysym2uni_base[0x4a7] = 0x30a1; -keysym2uni_base[0x4a8] = 0x30a3; -keysym2uni_base[0x4a9] = 0x30a5; -keysym2uni_base[0x4aa] = 0x30a7; -keysym2uni_base[0x4ab] = 0x30a9; -keysym2uni_base[0x4ac] = 0x30e3; -keysym2uni_base[0x4ad] = 0x30e5; -keysym2uni_base[0x4ae] = 0x30e7; -keysym2uni_base[0x4af] = 0x30c3; -keysym2uni_base[0x4b0] = 0x30fc; -keysym2uni_base[0x4b1] = 0x30a2; -keysym2uni_base[0x4b2] = 0x30a4; -keysym2uni_base[0x4b3] = 0x30a6; -keysym2uni_base[0x4b4] = 0x30a8; -keysym2uni_base[0x4b5] = 0x30aa; -keysym2uni_base[0x4b6] = 0x30ab; -keysym2uni_base[0x4b7] = 0x30ad; -keysym2uni_base[0x4b8] = 0x30af; -keysym2uni_base[0x4b9] = 0x30b1; -keysym2uni_base[0x4ba] = 0x30b3; -keysym2uni_base[0x4bb] = 0x30b5; -keysym2uni_base[0x4bc] = 0x30b7; -keysym2uni_base[0x4bd] = 0x30b9; -keysym2uni_base[0x4be] = 0x30bb; -keysym2uni_base[0x4bf] = 0x30bd; -keysym2uni_base[0x4c0] = 0x30bf; -keysym2uni_base[0x4c1] = 0x30c1; -keysym2uni_base[0x4c2] = 0x30c4; -keysym2uni_base[0x4c3] = 0x30c6; -keysym2uni_base[0x4c4] = 0x30c8; -keysym2uni_base[0x4c5] = 0x30ca; -keysym2uni_base[0x4c6] = 0x30cb; -keysym2uni_base[0x4c7] = 0x30cc; -keysym2uni_base[0x4c8] = 0x30cd; -keysym2uni_base[0x4c9] = 0x30ce; -keysym2uni_base[0x4ca] = 0x30cf; -keysym2uni_base[0x4cb] = 0x30d2; -keysym2uni_base[0x4cc] = 0x30d5; -keysym2uni_base[0x4cd] = 0x30d8; -keysym2uni_base[0x4ce] = 0x30db; -keysym2uni_base[0x4cf] = 0x30de; -keysym2uni_base[0x4d0] = 0x30df; -keysym2uni_base[0x4d1] = 0x30e0; -keysym2uni_base[0x4d2] = 0x30e1; -keysym2uni_base[0x4d3] = 0x30e2; -keysym2uni_base[0x4d4] = 0x30e4; -keysym2uni_base[0x4d5] = 0x30e6; -keysym2uni_base[0x4d6] = 0x30e8; -keysym2uni_base[0x4d7] = 0x30e9; -keysym2uni_base[0x4d8] = 0x30ea; -keysym2uni_base[0x4d9] = 0x30eb; -keysym2uni_base[0x4da] = 0x30ec; -keysym2uni_base[0x4db] = 0x30ed; -keysym2uni_base[0x4dc] = 0x30ef; -keysym2uni_base[0x4dd] = 0x30f3; -keysym2uni_base[0x4de] = 0x309b; -keysym2uni_base[0x4df] = 0x309c; -keysym2uni_base[0x5ac] = 0x60c; -keysym2uni_base[0x5bb] = 0x61b; -keysym2uni_base[0x5bf] = 0x61f; -keysym2uni_base[0x5c1] = 0x621; -keysym2uni_base[0x5c2] = 0x622; -keysym2uni_base[0x5c3] = 0x623; -keysym2uni_base[0x5c4] = 0x624; -keysym2uni_base[0x5c5] = 0x625; -keysym2uni_base[0x5c6] = 0x626; -keysym2uni_base[0x5c7] = 0x627; -keysym2uni_base[0x5c8] = 0x628; -keysym2uni_base[0x5c9] = 0x629; -keysym2uni_base[0x5ca] = 0x62a; -keysym2uni_base[0x5cb] = 0x62b; -keysym2uni_base[0x5cc] = 0x62c; -keysym2uni_base[0x5cd] = 0x62d; -keysym2uni_base[0x5ce] = 0x62e; -keysym2uni_base[0x5cf] = 0x62f; -keysym2uni_base[0x5d0] = 0x630; -keysym2uni_base[0x5d1] = 0x631; -keysym2uni_base[0x5d2] = 0x632; -keysym2uni_base[0x5d3] = 0x633; -keysym2uni_base[0x5d4] = 0x634; -keysym2uni_base[0x5d5] = 0x635; -keysym2uni_base[0x5d6] = 0x636; -keysym2uni_base[0x5d7] = 0x637; -keysym2uni_base[0x5d8] = 0x638; -keysym2uni_base[0x5d9] = 0x639; -keysym2uni_base[0x5da] = 0x63a; -keysym2uni_base[0x5e0] = 0x640; -keysym2uni_base[0x5e1] = 0x641; -keysym2uni_base[0x5e2] = 0x642; -keysym2uni_base[0x5e3] = 0x643; -keysym2uni_base[0x5e4] = 0x644; -keysym2uni_base[0x5e5] = 0x645; -keysym2uni_base[0x5e6] = 0x646; -keysym2uni_base[0x5e7] = 0x647; -keysym2uni_base[0x5e8] = 0x648; -keysym2uni_base[0x5e9] = 0x649; -keysym2uni_base[0x5ea] = 0x64a; -keysym2uni_base[0x5eb] = 0x64b; -keysym2uni_base[0x5ec] = 0x64c; -keysym2uni_base[0x5ed] = 0x64d; -keysym2uni_base[0x5ee] = 0x64e; -keysym2uni_base[0x5ef] = 0x64f; -keysym2uni_base[0x5f0] = 0x650; -keysym2uni_base[0x5f1] = 0x651; -keysym2uni_base[0x5f2] = 0x652; -keysym2uni_base[0x6a1] = 0x452; -keysym2uni_base[0x6a2] = 0x453; -keysym2uni_base[0x6a3] = 0x451; -keysym2uni_base[0x6a4] = 0x454; -keysym2uni_base[0x6a5] = 0x455; -keysym2uni_base[0x6a6] = 0x456; -keysym2uni_base[0x6a7] = 0x457; -keysym2uni_base[0x6a8] = 0x458; -keysym2uni_base[0x6a9] = 0x459; -keysym2uni_base[0x6aa] = 0x45a; -keysym2uni_base[0x6ab] = 0x45b; -keysym2uni_base[0x6ac] = 0x45c; -keysym2uni_base[0x6ad] = 0x491; -keysym2uni_base[0x6ae] = 0x45e; -keysym2uni_base[0x6af] = 0x45f; -keysym2uni_base[0x6b0] = 0x2116; -keysym2uni_base[0x6b1] = 0x402; -keysym2uni_base[0x6b2] = 0x403; -keysym2uni_base[0x6b3] = 0x401; -keysym2uni_base[0x6b4] = 0x404; -keysym2uni_base[0x6b5] = 0x405; -keysym2uni_base[0x6b6] = 0x406; -keysym2uni_base[0x6b7] = 0x407; -keysym2uni_base[0x6b8] = 0x408; -keysym2uni_base[0x6b9] = 0x409; -keysym2uni_base[0x6ba] = 0x40a; -keysym2uni_base[0x6bb] = 0x40b; -keysym2uni_base[0x6bc] = 0x40c; -keysym2uni_base[0x6bd] = 0x490; -keysym2uni_base[0x6be] = 0x40e; -keysym2uni_base[0x6bf] = 0x40f; -keysym2uni_base[0x6c0] = 0x44e; -keysym2uni_base[0x6c1] = 0x430; -keysym2uni_base[0x6c2] = 0x431; -keysym2uni_base[0x6c3] = 0x446; -keysym2uni_base[0x6c4] = 0x434; -keysym2uni_base[0x6c5] = 0x435; -keysym2uni_base[0x6c6] = 0x444; -keysym2uni_base[0x6c7] = 0x433; -keysym2uni_base[0x6c8] = 0x445; -keysym2uni_base[0x6c9] = 0x438; -keysym2uni_base[0x6ca] = 0x439; -keysym2uni_base[0x6cb] = 0x43a; -keysym2uni_base[0x6cc] = 0x43b; -keysym2uni_base[0x6cd] = 0x43c; -keysym2uni_base[0x6ce] = 0x43d; -keysym2uni_base[0x6cf] = 0x43e; -keysym2uni_base[0x6d0] = 0x43f; -keysym2uni_base[0x6d1] = 0x44f; -keysym2uni_base[0x6d2] = 0x440; -keysym2uni_base[0x6d3] = 0x441; -keysym2uni_base[0x6d4] = 0x442; -keysym2uni_base[0x6d5] = 0x443; -keysym2uni_base[0x6d6] = 0x436; -keysym2uni_base[0x6d7] = 0x432; -keysym2uni_base[0x6d8] = 0x44c; -keysym2uni_base[0x6d9] = 0x44b; -keysym2uni_base[0x6da] = 0x437; -keysym2uni_base[0x6db] = 0x448; -keysym2uni_base[0x6dc] = 0x44d; -keysym2uni_base[0x6dd] = 0x449; -keysym2uni_base[0x6de] = 0x447; -keysym2uni_base[0x6df] = 0x44a; -keysym2uni_base[0x6e0] = 0x42e; -keysym2uni_base[0x6e1] = 0x410; -keysym2uni_base[0x6e2] = 0x411; -keysym2uni_base[0x6e3] = 0x426; -keysym2uni_base[0x6e4] = 0x414; -keysym2uni_base[0x6e5] = 0x415; -keysym2uni_base[0x6e6] = 0x424; -keysym2uni_base[0x6e7] = 0x413; -keysym2uni_base[0x6e8] = 0x425; -keysym2uni_base[0x6e9] = 0x418; -keysym2uni_base[0x6ea] = 0x419; -keysym2uni_base[0x6eb] = 0x41a; -keysym2uni_base[0x6ec] = 0x41b; -keysym2uni_base[0x6ed] = 0x41c; -keysym2uni_base[0x6ee] = 0x41d; -keysym2uni_base[0x6ef] = 0x41e; -keysym2uni_base[0x6f0] = 0x41f; -keysym2uni_base[0x6f1] = 0x42f; -keysym2uni_base[0x6f2] = 0x420; -keysym2uni_base[0x6f3] = 0x421; -keysym2uni_base[0x6f4] = 0x422; -keysym2uni_base[0x6f5] = 0x423; -keysym2uni_base[0x6f6] = 0x416; -keysym2uni_base[0x6f7] = 0x412; -keysym2uni_base[0x6f8] = 0x42c; -keysym2uni_base[0x6f9] = 0x42b; -keysym2uni_base[0x6fa] = 0x417; -keysym2uni_base[0x6fb] = 0x428; -keysym2uni_base[0x6fc] = 0x42d; -keysym2uni_base[0x6fd] = 0x429; -keysym2uni_base[0x6fe] = 0x427; -keysym2uni_base[0x6ff] = 0x42a; -keysym2uni_base[0x7a1] = 0x386; -keysym2uni_base[0x7a2] = 0x388; -keysym2uni_base[0x7a3] = 0x389; -keysym2uni_base[0x7a4] = 0x38a; -keysym2uni_base[0x7a5] = 0x3aa; -keysym2uni_base[0x7a7] = 0x38c; -keysym2uni_base[0x7a8] = 0x38e; -keysym2uni_base[0x7a9] = 0x3ab; -keysym2uni_base[0x7ab] = 0x38f; -keysym2uni_base[0x7ae] = 0x385; -keysym2uni_base[0x7af] = 0x2015; -keysym2uni_base[0x7b1] = 0x3ac; -keysym2uni_base[0x7b2] = 0x3ad; -keysym2uni_base[0x7b3] = 0x3ae; -keysym2uni_base[0x7b4] = 0x3af; -keysym2uni_base[0x7b5] = 0x3ca; -keysym2uni_base[0x7b6] = 0x390; -keysym2uni_base[0x7b7] = 0x3cc; -keysym2uni_base[0x7b8] = 0x3cd; -keysym2uni_base[0x7b9] = 0x3cb; -keysym2uni_base[0x7ba] = 0x3b0; -keysym2uni_base[0x7bb] = 0x3ce; -keysym2uni_base[0x7c1] = 0x391; -keysym2uni_base[0x7c2] = 0x392; -keysym2uni_base[0x7c3] = 0x393; -keysym2uni_base[0x7c4] = 0x394; -keysym2uni_base[0x7c5] = 0x395; -keysym2uni_base[0x7c6] = 0x396; -keysym2uni_base[0x7c7] = 0x397; -keysym2uni_base[0x7c8] = 0x398; -keysym2uni_base[0x7c9] = 0x399; -keysym2uni_base[0x7ca] = 0x39a; -keysym2uni_base[0x7cb] = 0x39b; -keysym2uni_base[0x7cc] = 0x39c; -keysym2uni_base[0x7cd] = 0x39d; -keysym2uni_base[0x7ce] = 0x39e; -keysym2uni_base[0x7cf] = 0x39f; -keysym2uni_base[0x7d0] = 0x3a0; -keysym2uni_base[0x7d1] = 0x3a1; -keysym2uni_base[0x7d2] = 0x3a3; -keysym2uni_base[0x7d4] = 0x3a4; -keysym2uni_base[0x7d5] = 0x3a5; -keysym2uni_base[0x7d6] = 0x3a6; -keysym2uni_base[0x7d7] = 0x3a7; -keysym2uni_base[0x7d8] = 0x3a8; -keysym2uni_base[0x7d9] = 0x3a9; -keysym2uni_base[0x7e1] = 0x3b1; -keysym2uni_base[0x7e2] = 0x3b2; -keysym2uni_base[0x7e3] = 0x3b3; -keysym2uni_base[0x7e4] = 0x3b4; -keysym2uni_base[0x7e5] = 0x3b5; -keysym2uni_base[0x7e6] = 0x3b6; -keysym2uni_base[0x7e7] = 0x3b7; -keysym2uni_base[0x7e8] = 0x3b8; -keysym2uni_base[0x7e9] = 0x3b9; -keysym2uni_base[0x7ea] = 0x3ba; -keysym2uni_base[0x7eb] = 0x3bb; -keysym2uni_base[0x7ec] = 0x3bc; -keysym2uni_base[0x7ed] = 0x3bd; -keysym2uni_base[0x7ee] = 0x3be; -keysym2uni_base[0x7ef] = 0x3bf; -keysym2uni_base[0x7f0] = 0x3c0; -keysym2uni_base[0x7f1] = 0x3c1; -keysym2uni_base[0x7f2] = 0x3c3; -keysym2uni_base[0x7f3] = 0x3c2; -keysym2uni_base[0x7f4] = 0x3c4; -keysym2uni_base[0x7f5] = 0x3c5; -keysym2uni_base[0x7f6] = 0x3c6; -keysym2uni_base[0x7f7] = 0x3c7; -keysym2uni_base[0x7f8] = 0x3c8; -keysym2uni_base[0x7f9] = 0x3c9; -keysym2uni_base[0x8a1] = 0x23b7; -keysym2uni_base[0x9ec] = 0x250c; -keysym2uni_base[0x9f1] = 0x2500; -keysym2uni_base[0x8a4] = 0x2320; -keysym2uni_base[0x8a5] = 0x2321; -keysym2uni_base[0x9f8] = 0x2502; -keysym2uni_base[0x8a7] = 0x23a1; -keysym2uni_base[0x8a8] = 0x23a3; -keysym2uni_base[0x8a9] = 0x23a4; -keysym2uni_base[0x8aa] = 0x23a6; -keysym2uni_base[0x8ab] = 0x239b; -keysym2uni_base[0x8ac] = 0x239d; -keysym2uni_base[0x8ad] = 0x239e; -keysym2uni_base[0x8ae] = 0x23a0; -keysym2uni_base[0x8af] = 0x23a8; -keysym2uni_base[0x8b0] = 0x23ac; -keysym2uni_base[0x8bc] = 0x2264; -keysym2uni_base[0x8bd] = 0x2260; -keysym2uni_base[0x8be] = 0x2265; -keysym2uni_base[0x8bf] = 0x222b; -keysym2uni_base[0x8c0] = 0x2234; -keysym2uni_base[0x8c1] = 0x221d; -keysym2uni_base[0x8c2] = 0x221e; -keysym2uni_base[0x8c5] = 0x2207; -keysym2uni_base[0x8c8] = 0x223c; -keysym2uni_base[0x8c9] = 0x2243; -keysym2uni_base[0x8cd] = 0x21d4; -keysym2uni_base[0x8ce] = 0x21d2; -keysym2uni_base[0x8cf] = 0x2261; -keysym2uni_base[0xbda] = 0x2282; -keysym2uni_base[0xbd8] = 0x2283; -keysym2uni_base[0xbc3] = 0x2229; -keysym2uni_base[0xbd6] = 0x222a; -keysym2uni_base[0xba9] = 0x2227; -keysym2uni_base[0xba8] = 0x2228; -keysym2uni_base[0x8f6] = 0x192; -keysym2uni_base[0x8fb] = 0x2190; -keysym2uni_base[0x8fc] = 0x2191; -keysym2uni_base[0x8fd] = 0x2192; -keysym2uni_base[0x8fe] = 0x2193; -keysym2uni_base[0x9e0] = 0x25c6; -keysym2uni_base[0x9e1] = 0x2592; -keysym2uni_base[0x9e2] = 0x2409; -keysym2uni_base[0x9e3] = 0x240c; -keysym2uni_base[0x9e4] = 0x240d; -keysym2uni_base[0x9e5] = 0x240a; -keysym2uni_base[0x9e8] = 0x2424; -keysym2uni_base[0x9e9] = 0x240b; -keysym2uni_base[0x9ea] = 0x2518; -keysym2uni_base[0x9eb] = 0x2510; -keysym2uni_base[0x9ed] = 0x2514; -keysym2uni_base[0x9ee] = 0x253c; -keysym2uni_base[0x9ef] = 0x23ba; -keysym2uni_base[0x9f0] = 0x23bb; -keysym2uni_base[0x9f2] = 0x23bc; -keysym2uni_base[0x9f3] = 0x23bd; -keysym2uni_base[0x9f4] = 0x251c; -keysym2uni_base[0x9f5] = 0x2524; -keysym2uni_base[0x9f6] = 0x2534; -keysym2uni_base[0x9f7] = 0x252c; -keysym2uni_base[0xaa1] = 0x2003; -keysym2uni_base[0xaa2] = 0x2002; -keysym2uni_base[0xaa3] = 0x2004; -keysym2uni_base[0xaa4] = 0x2005; -keysym2uni_base[0xaa5] = 0x2007; -keysym2uni_base[0xaa6] = 0x2008; -keysym2uni_base[0xaa7] = 0x2009; -keysym2uni_base[0xaa8] = 0x200a; -keysym2uni_base[0xaa9] = 0x2014; -keysym2uni_base[0xaaa] = 0x2013; -keysym2uni_base[0xaac] = 0x2423; -keysym2uni_base[0xaae] = 0x2026; -keysym2uni_base[0xaaf] = 0x2025; -keysym2uni_base[0xab0] = 0x2153; -keysym2uni_base[0xab1] = 0x2154; -keysym2uni_base[0xab2] = 0x2155; -keysym2uni_base[0xab3] = 0x2156; -keysym2uni_base[0xab4] = 0x2157; -keysym2uni_base[0xab5] = 0x2158; -keysym2uni_base[0xab6] = 0x2159; -keysym2uni_base[0xab7] = 0x215a; -keysym2uni_base[0xab8] = 0x2105; -keysym2uni_base[0xabb] = 0x2012; -keysym2uni_base[0xabc] = 0x27e8; -keysym2uni_base[0xabd] = 0x2e; -keysym2uni_base[0xabe] = 0x27e9; -keysym2uni_base[0xac3] = 0x215b; -keysym2uni_base[0xac4] = 0x215c; -keysym2uni_base[0xac5] = 0x215d; -keysym2uni_base[0xac6] = 0x215e; -keysym2uni_base[0xac9] = 0x2122; -keysym2uni_base[0xaca] = 0x2613; -keysym2uni_base[0xacc] = 0x25c1; -keysym2uni_base[0xacd] = 0x25b7; -keysym2uni_base[0xbcf] = 0x25cb; -keysym2uni_base[0xacf] = 0x25af; -keysym2uni_base[0xad0] = 0x2018; -keysym2uni_base[0xad1] = 0x2019; -keysym2uni_base[0xad2] = 0x201c; -keysym2uni_base[0xad3] = 0x201d; -keysym2uni_base[0xad4] = 0x211e; -keysym2uni_base[0xad6] = 0x2032; -keysym2uni_base[0xad7] = 0x2033; -keysym2uni_base[0xad9] = 0x271d; -keysym2uni_base[0xadb] = 0x25ac; -keysym2uni_base[0xadc] = 0x25c0; -keysym2uni_base[0xadd] = 0x25b6; -keysym2uni_base[0xade] = 0x25cf; -keysym2uni_base[0xadf] = 0x25ae; -keysym2uni_base[0xae0] = 0x25e6; -keysym2uni_base[0xae1] = 0x25ab; -keysym2uni_base[0xae2] = 0x25ad; -keysym2uni_base[0xae3] = 0x25b3; -keysym2uni_base[0xae4] = 0x25bd; -keysym2uni_base[0xae5] = 0x2606; -keysym2uni_base[0xae6] = 0x2022; -keysym2uni_base[0xae7] = 0x25aa; -keysym2uni_base[0xae8] = 0x25b2; -keysym2uni_base[0xae9] = 0x25bc; -keysym2uni_base[0xaea] = 0x261c; -keysym2uni_base[0xaeb] = 0x261e; -keysym2uni_base[0xaec] = 0x2663; -keysym2uni_base[0xaed] = 0x2666; -keysym2uni_base[0xaee] = 0x2665; -keysym2uni_base[0xaf0] = 0x2720; -keysym2uni_base[0xaf1] = 0x2020; -keysym2uni_base[0xaf2] = 0x2021; -keysym2uni_base[0xaf3] = 0x2713; -keysym2uni_base[0xaf4] = 0x2717; -keysym2uni_base[0xaf5] = 0x266f; -keysym2uni_base[0xaf6] = 0x266d; -keysym2uni_base[0xaf7] = 0x2642; -keysym2uni_base[0xaf8] = 0x2640; -keysym2uni_base[0xaf9] = 0x260e; -keysym2uni_base[0xafa] = 0x2315; -keysym2uni_base[0xafb] = 0x2117; -keysym2uni_base[0xafc] = 0x2038; -keysym2uni_base[0xafd] = 0x201a; -keysym2uni_base[0xafe] = 0x201e; -keysym2uni_base[0xba3] = 0x3c; -keysym2uni_base[0xba6] = 0x3e; -keysym2uni_base[0xbc0] = 0xaf; -keysym2uni_base[0xbc2] = 0x22a4; -keysym2uni_base[0xbc4] = 0x230a; -keysym2uni_base[0xbca] = 0x2218; -keysym2uni_base[0xbcc] = 0x2395; -keysym2uni_base[0xbce] = 0x22a5; -keysym2uni_base[0xbd3] = 0x2308; -keysym2uni_base[0xbdc] = 0x22a3; -keysym2uni_base[0xbfc] = 0x22a2; -keysym2uni_base[0xcdf] = 0x2017; -keysym2uni_base[0xce0] = 0x5d0; -keysym2uni_base[0xce1] = 0x5d1; -keysym2uni_base[0xce2] = 0x5d2; -keysym2uni_base[0xce3] = 0x5d3; -keysym2uni_base[0xce4] = 0x5d4; -keysym2uni_base[0xce5] = 0x5d5; -keysym2uni_base[0xce6] = 0x5d6; -keysym2uni_base[0xce7] = 0x5d7; -keysym2uni_base[0xce8] = 0x5d8; -keysym2uni_base[0xce9] = 0x5d9; -keysym2uni_base[0xcea] = 0x5da; -keysym2uni_base[0xceb] = 0x5db; -keysym2uni_base[0xcec] = 0x5dc; -keysym2uni_base[0xced] = 0x5dd; -keysym2uni_base[0xcee] = 0x5de; -keysym2uni_base[0xcef] = 0x5df; -keysym2uni_base[0xcf0] = 0x5e0; -keysym2uni_base[0xcf1] = 0x5e1; -keysym2uni_base[0xcf2] = 0x5e2; -keysym2uni_base[0xcf3] = 0x5e3; -keysym2uni_base[0xcf4] = 0x5e4; -keysym2uni_base[0xcf5] = 0x5e5; -keysym2uni_base[0xcf6] = 0x5e6; -keysym2uni_base[0xcf7] = 0x5e7; -keysym2uni_base[0xcf8] = 0x5e8; -keysym2uni_base[0xcf9] = 0x5e9; -keysym2uni_base[0xcfa] = 0x5ea; -keysym2uni_base[0xda1] = 0xe01; -keysym2uni_base[0xda2] = 0xe02; -keysym2uni_base[0xda3] = 0xe03; -keysym2uni_base[0xda4] = 0xe04; -keysym2uni_base[0xda5] = 0xe05; -keysym2uni_base[0xda6] = 0xe06; -keysym2uni_base[0xda7] = 0xe07; -keysym2uni_base[0xda8] = 0xe08; -keysym2uni_base[0xda9] = 0xe09; -keysym2uni_base[0xdaa] = 0xe0a; -keysym2uni_base[0xdab] = 0xe0b; -keysym2uni_base[0xdac] = 0xe0c; -keysym2uni_base[0xdad] = 0xe0d; -keysym2uni_base[0xdae] = 0xe0e; -keysym2uni_base[0xdaf] = 0xe0f; -keysym2uni_base[0xdb0] = 0xe10; -keysym2uni_base[0xdb1] = 0xe11; -keysym2uni_base[0xdb2] = 0xe12; -keysym2uni_base[0xdb3] = 0xe13; -keysym2uni_base[0xdb4] = 0xe14; -keysym2uni_base[0xdb5] = 0xe15; -keysym2uni_base[0xdb6] = 0xe16; -keysym2uni_base[0xdb7] = 0xe17; -keysym2uni_base[0xdb8] = 0xe18; -keysym2uni_base[0xdb9] = 0xe19; -keysym2uni_base[0xdba] = 0xe1a; -keysym2uni_base[0xdbb] = 0xe1b; -keysym2uni_base[0xdbc] = 0xe1c; -keysym2uni_base[0xdbd] = 0xe1d; -keysym2uni_base[0xdbe] = 0xe1e; -keysym2uni_base[0xdbf] = 0xe1f; -keysym2uni_base[0xdc0] = 0xe20; -keysym2uni_base[0xdc1] = 0xe21; -keysym2uni_base[0xdc2] = 0xe22; -keysym2uni_base[0xdc3] = 0xe23; -keysym2uni_base[0xdc4] = 0xe24; -keysym2uni_base[0xdc5] = 0xe25; -keysym2uni_base[0xdc6] = 0xe26; -keysym2uni_base[0xdc7] = 0xe27; -keysym2uni_base[0xdc8] = 0xe28; -keysym2uni_base[0xdc9] = 0xe29; -keysym2uni_base[0xdca] = 0xe2a; -keysym2uni_base[0xdcb] = 0xe2b; -keysym2uni_base[0xdcc] = 0xe2c; -keysym2uni_base[0xdcd] = 0xe2d; -keysym2uni_base[0xdce] = 0xe2e; -keysym2uni_base[0xdcf] = 0xe2f; -keysym2uni_base[0xdd0] = 0xe30; -keysym2uni_base[0xdd1] = 0xe31; -keysym2uni_base[0xdd2] = 0xe32; -keysym2uni_base[0xdd3] = 0xe33; -keysym2uni_base[0xdd4] = 0xe34; -keysym2uni_base[0xdd5] = 0xe35; -keysym2uni_base[0xdd6] = 0xe36; -keysym2uni_base[0xdd7] = 0xe37; -keysym2uni_base[0xdd8] = 0xe38; -keysym2uni_base[0xdd9] = 0xe39; -keysym2uni_base[0xdda] = 0xe3a; -keysym2uni_base[0xddf] = 0xe3f; -keysym2uni_base[0xde0] = 0xe40; -keysym2uni_base[0xde1] = 0xe41; -keysym2uni_base[0xde2] = 0xe42; -keysym2uni_base[0xde3] = 0xe43; -keysym2uni_base[0xde4] = 0xe44; -keysym2uni_base[0xde5] = 0xe45; -keysym2uni_base[0xde6] = 0xe46; -keysym2uni_base[0xde7] = 0xe47; -keysym2uni_base[0xde8] = 0xe48; -keysym2uni_base[0xde9] = 0xe49; -keysym2uni_base[0xdea] = 0xe4a; -keysym2uni_base[0xdeb] = 0xe4b; -keysym2uni_base[0xdec] = 0xe4c; -keysym2uni_base[0xded] = 0xe4d; -keysym2uni_base[0xdf0] = 0xe50; -keysym2uni_base[0xdf1] = 0xe51; -keysym2uni_base[0xdf2] = 0xe52; -keysym2uni_base[0xdf3] = 0xe53; -keysym2uni_base[0xdf4] = 0xe54; -keysym2uni_base[0xdf5] = 0xe55; -keysym2uni_base[0xdf6] = 0xe56; -keysym2uni_base[0xdf7] = 0xe57; -keysym2uni_base[0xdf8] = 0xe58; -keysym2uni_base[0xdf9] = 0xe59; - - -keysym2uni_ext0[0x174] = 0x174; -keysym2uni_ext0[0x176] = 0x176; -keysym2uni_ext0[0x175] = 0x175; -keysym2uni_ext0[0x177] = 0x177; -keysym2uni_ext0[0x6f0] = 0x6f0; -keysym2uni_ext0[0x6f1] = 0x6f1; -keysym2uni_ext0[0x6f2] = 0x6f2; -keysym2uni_ext0[0x6f3] = 0x6f3; -keysym2uni_ext0[0x6f4] = 0x6f4; -keysym2uni_ext0[0x6f5] = 0x6f5; -keysym2uni_ext0[0x6f6] = 0x6f6; -keysym2uni_ext0[0x6f7] = 0x6f7; -keysym2uni_ext0[0x6f8] = 0x6f8; -keysym2uni_ext0[0x6f9] = 0x6f9; -keysym2uni_ext0[0x66a] = 0x66a; -keysym2uni_ext0[0x670] = 0x670; -keysym2uni_ext0[0x679] = 0x679; -keysym2uni_ext0[0x67e] = 0x67e; -keysym2uni_ext0[0x686] = 0x686; -keysym2uni_ext0[0x688] = 0x688; -keysym2uni_ext0[0x691] = 0x691; -keysym2uni_ext0[0x6d4] = 0x6d4; -keysym2uni_ext0[0x660] = 0x660; -keysym2uni_ext0[0x661] = 0x661; -keysym2uni_ext0[0x662] = 0x662; -keysym2uni_ext0[0x663] = 0x663; -keysym2uni_ext0[0x664] = 0x664; -keysym2uni_ext0[0x665] = 0x665; -keysym2uni_ext0[0x666] = 0x666; -keysym2uni_ext0[0x667] = 0x667; -keysym2uni_ext0[0x668] = 0x668; -keysym2uni_ext0[0x669] = 0x669; -keysym2uni_ext0[0x653] = 0x653; -keysym2uni_ext0[0x654] = 0x654; -keysym2uni_ext0[0x655] = 0x655; -keysym2uni_ext0[0x698] = 0x698; -keysym2uni_ext0[0x6a4] = 0x6a4; -keysym2uni_ext0[0x6a9] = 0x6a9; -keysym2uni_ext0[0x6af] = 0x6af; -keysym2uni_ext0[0x6ba] = 0x6ba; -keysym2uni_ext0[0x6be] = 0x6be; -keysym2uni_ext0[0x6cc] = 0x6cc; -keysym2uni_ext0[0x6d2] = 0x6d2; -keysym2uni_ext0[0x6c1] = 0x6c1; -keysym2uni_ext0[0x492] = 0x492; -keysym2uni_ext0[0x493] = 0x493; -keysym2uni_ext0[0x496] = 0x496; -keysym2uni_ext0[0x497] = 0x497; -keysym2uni_ext0[0x49a] = 0x49a; -keysym2uni_ext0[0x49b] = 0x49b; -keysym2uni_ext0[0x49c] = 0x49c; -keysym2uni_ext0[0x49d] = 0x49d; -keysym2uni_ext0[0x4a2] = 0x4a2; -keysym2uni_ext0[0x4a3] = 0x4a3; -keysym2uni_ext0[0x4ae] = 0x4ae; -keysym2uni_ext0[0x4af] = 0x4af; -keysym2uni_ext0[0x4b0] = 0x4b0; -keysym2uni_ext0[0x4b1] = 0x4b1; -keysym2uni_ext0[0x4b2] = 0x4b2; -keysym2uni_ext0[0x4b3] = 0x4b3; -keysym2uni_ext0[0x4b6] = 0x4b6; -keysym2uni_ext0[0x4b7] = 0x4b7; -keysym2uni_ext0[0x4b8] = 0x4b8; -keysym2uni_ext0[0x4b9] = 0x4b9; -keysym2uni_ext0[0x4ba] = 0x4ba; -keysym2uni_ext0[0x4bb] = 0x4bb; -keysym2uni_ext0[0x4d8] = 0x4d8; -keysym2uni_ext0[0x4d9] = 0x4d9; -keysym2uni_ext0[0x4e2] = 0x4e2; -keysym2uni_ext0[0x4e3] = 0x4e3; -keysym2uni_ext0[0x4e8] = 0x4e8; -keysym2uni_ext0[0x4e9] = 0x4e9; -keysym2uni_ext0[0x4ee] = 0x4ee; -keysym2uni_ext0[0x4ef] = 0x4ef; -keysym2uni_ext0[0x587] = 0x587; -keysym2uni_ext0[0x589] = 0x589; -keysym2uni_ext0[0x55d] = 0x55d; -keysym2uni_ext0[0x58a] = 0x58a; -keysym2uni_ext0[0x55c] = 0x55c; -keysym2uni_ext0[0x55b] = 0x55b; -keysym2uni_ext0[0x55e] = 0x55e; -keysym2uni_ext0[0x531] = 0x531; -keysym2uni_ext0[0x561] = 0x561; -keysym2uni_ext0[0x532] = 0x532; -keysym2uni_ext0[0x562] = 0x562; -keysym2uni_ext0[0x533] = 0x533; -keysym2uni_ext0[0x563] = 0x563; -keysym2uni_ext0[0x534] = 0x534; -keysym2uni_ext0[0x564] = 0x564; -keysym2uni_ext0[0x535] = 0x535; -keysym2uni_ext0[0x565] = 0x565; -keysym2uni_ext0[0x536] = 0x536; -keysym2uni_ext0[0x566] = 0x566; -keysym2uni_ext0[0x537] = 0x537; -keysym2uni_ext0[0x567] = 0x567; -keysym2uni_ext0[0x538] = 0x538; -keysym2uni_ext0[0x568] = 0x568; -keysym2uni_ext0[0x539] = 0x539; -keysym2uni_ext0[0x569] = 0x569; -keysym2uni_ext0[0x53a] = 0x53a; -keysym2uni_ext0[0x56a] = 0x56a; -keysym2uni_ext0[0x53b] = 0x53b; -keysym2uni_ext0[0x56b] = 0x56b; -keysym2uni_ext0[0x53c] = 0x53c; -keysym2uni_ext0[0x56c] = 0x56c; -keysym2uni_ext0[0x53d] = 0x53d; -keysym2uni_ext0[0x56d] = 0x56d; -keysym2uni_ext0[0x53e] = 0x53e; -keysym2uni_ext0[0x56e] = 0x56e; -keysym2uni_ext0[0x53f] = 0x53f; -keysym2uni_ext0[0x56f] = 0x56f; -keysym2uni_ext0[0x540] = 0x540; -keysym2uni_ext0[0x570] = 0x570; -keysym2uni_ext0[0x541] = 0x541; -keysym2uni_ext0[0x571] = 0x571; -keysym2uni_ext0[0x542] = 0x542; -keysym2uni_ext0[0x572] = 0x572; -keysym2uni_ext0[0x543] = 0x543; -keysym2uni_ext0[0x573] = 0x573; -keysym2uni_ext0[0x544] = 0x544; -keysym2uni_ext0[0x574] = 0x574; -keysym2uni_ext0[0x545] = 0x545; -keysym2uni_ext0[0x575] = 0x575; -keysym2uni_ext0[0x546] = 0x546; -keysym2uni_ext0[0x576] = 0x576; -keysym2uni_ext0[0x547] = 0x547; -keysym2uni_ext0[0x577] = 0x577; -keysym2uni_ext0[0x548] = 0x548; -keysym2uni_ext0[0x578] = 0x578; -keysym2uni_ext0[0x549] = 0x549; -keysym2uni_ext0[0x579] = 0x579; -keysym2uni_ext0[0x54a] = 0x54a; -keysym2uni_ext0[0x57a] = 0x57a; -keysym2uni_ext0[0x54b] = 0x54b; -keysym2uni_ext0[0x57b] = 0x57b; -keysym2uni_ext0[0x54c] = 0x54c; -keysym2uni_ext0[0x57c] = 0x57c; -keysym2uni_ext0[0x54d] = 0x54d; -keysym2uni_ext0[0x57d] = 0x57d; -keysym2uni_ext0[0x54e] = 0x54e; -keysym2uni_ext0[0x57e] = 0x57e; -keysym2uni_ext0[0x54f] = 0x54f; -keysym2uni_ext0[0x57f] = 0x57f; -keysym2uni_ext0[0x550] = 0x550; -keysym2uni_ext0[0x580] = 0x580; -keysym2uni_ext0[0x551] = 0x551; -keysym2uni_ext0[0x581] = 0x581; -keysym2uni_ext0[0x552] = 0x552; -keysym2uni_ext0[0x582] = 0x582; -keysym2uni_ext0[0x553] = 0x553; -keysym2uni_ext0[0x583] = 0x583; -keysym2uni_ext0[0x554] = 0x554; -keysym2uni_ext0[0x584] = 0x584; -keysym2uni_ext0[0x555] = 0x555; -keysym2uni_ext0[0x585] = 0x585; -keysym2uni_ext0[0x556] = 0x556; -keysym2uni_ext0[0x586] = 0x586; -keysym2uni_ext0[0x55a] = 0x55a; -keysym2uni_ext0[0x1b5] = 0x1b5; -keysym2uni_ext0[0x1e6] = 0x1e6; -keysym2uni_ext0[0x1d2] = 0x1d2; -keysym2uni_ext0[0x19f] = 0x19f; -keysym2uni_ext0[0x12d] = 0x12d; -keysym2uni_ext0[0x1b6] = 0x1b6; -keysym2uni_ext0[0x1e7] = 0x1e7; -keysym2uni_ext0[0x275] = 0x275; -keysym2uni_ext0[0x18f] = 0x18f; -keysym2uni_ext0[0x259] = 0x259; -keysym2uni_ext0[0x1a0] = 0x1a0; -keysym2uni_ext0[0x1a1] = 0x1a1; -keysym2uni_ext0[0x1af] = 0x1af; -keysym2uni_ext0[0x1b0] = 0x1b0; - - -keysym2uni_ext1[0xe02] = 0x1e02; -keysym2uni_ext1[0xe03] = 0x1e03; -keysym2uni_ext1[0xe0a] = 0x1e0a; -keysym2uni_ext1[0xe80] = 0x1e80; -keysym2uni_ext1[0xe82] = 0x1e82; -keysym2uni_ext1[0xe0b] = 0x1e0b; -keysym2uni_ext1[0xef2] = 0x1ef2; -keysym2uni_ext1[0xe1e] = 0x1e1e; -keysym2uni_ext1[0xe1f] = 0x1e1f; -keysym2uni_ext1[0xe40] = 0x1e40; -keysym2uni_ext1[0xe41] = 0x1e41; -keysym2uni_ext1[0xe56] = 0x1e56; -keysym2uni_ext1[0xe81] = 0x1e81; -keysym2uni_ext1[0xe57] = 0x1e57; -keysym2uni_ext1[0xe83] = 0x1e83; -keysym2uni_ext1[0xe60] = 0x1e60; -keysym2uni_ext1[0xef3] = 0x1ef3; -keysym2uni_ext1[0xe84] = 0x1e84; -keysym2uni_ext1[0xe85] = 0x1e85; -keysym2uni_ext1[0xe61] = 0x1e61; -keysym2uni_ext1[0xe6a] = 0x1e6a; -keysym2uni_ext1[0xe6b] = 0x1e6b; -keysym2uni_ext1[0x0d0] = 0x10d0; -keysym2uni_ext1[0x0d1] = 0x10d1; -keysym2uni_ext1[0x0d2] = 0x10d2; -keysym2uni_ext1[0x0d3] = 0x10d3; -keysym2uni_ext1[0x0d4] = 0x10d4; -keysym2uni_ext1[0x0d5] = 0x10d5; -keysym2uni_ext1[0x0d6] = 0x10d6; -keysym2uni_ext1[0x0d7] = 0x10d7; -keysym2uni_ext1[0x0d8] = 0x10d8; -keysym2uni_ext1[0x0d9] = 0x10d9; -keysym2uni_ext1[0x0da] = 0x10da; -keysym2uni_ext1[0x0db] = 0x10db; -keysym2uni_ext1[0x0dc] = 0x10dc; -keysym2uni_ext1[0x0dd] = 0x10dd; -keysym2uni_ext1[0x0de] = 0x10de; -keysym2uni_ext1[0x0df] = 0x10df; -keysym2uni_ext1[0x0e0] = 0x10e0; -keysym2uni_ext1[0x0e1] = 0x10e1; -keysym2uni_ext1[0x0e2] = 0x10e2; -keysym2uni_ext1[0x0e3] = 0x10e3; -keysym2uni_ext1[0x0e4] = 0x10e4; -keysym2uni_ext1[0x0e5] = 0x10e5; -keysym2uni_ext1[0x0e6] = 0x10e6; -keysym2uni_ext1[0x0e7] = 0x10e7; -keysym2uni_ext1[0x0e8] = 0x10e8; -keysym2uni_ext1[0x0e9] = 0x10e9; -keysym2uni_ext1[0x0ea] = 0x10ea; -keysym2uni_ext1[0x0eb] = 0x10eb; -keysym2uni_ext1[0x0ec] = 0x10ec; -keysym2uni_ext1[0x0ed] = 0x10ed; -keysym2uni_ext1[0x0ee] = 0x10ee; -keysym2uni_ext1[0x0ef] = 0x10ef; -keysym2uni_ext1[0x0f0] = 0x10f0; -keysym2uni_ext1[0x0f1] = 0x10f1; -keysym2uni_ext1[0x0f2] = 0x10f2; -keysym2uni_ext1[0x0f3] = 0x10f3; -keysym2uni_ext1[0x0f4] = 0x10f4; -keysym2uni_ext1[0x0f5] = 0x10f5; -keysym2uni_ext1[0x0f6] = 0x10f6; -keysym2uni_ext1[0xe8b] = 0x1e8b; -keysym2uni_ext1[0xe36] = 0x1e36; -keysym2uni_ext1[0xe37] = 0x1e37; -keysym2uni_ext1[0xea0] = 0x1ea0; -keysym2uni_ext1[0xea1] = 0x1ea1; -keysym2uni_ext1[0xea2] = 0x1ea2; -keysym2uni_ext1[0xea3] = 0x1ea3; -keysym2uni_ext1[0xea4] = 0x1ea4; -keysym2uni_ext1[0xea5] = 0x1ea5; -keysym2uni_ext1[0xea6] = 0x1ea6; -keysym2uni_ext1[0xea7] = 0x1ea7; -keysym2uni_ext1[0xea8] = 0x1ea8; -keysym2uni_ext1[0xea9] = 0x1ea9; -keysym2uni_ext1[0xeaa] = 0x1eaa; -keysym2uni_ext1[0xeab] = 0x1eab; -keysym2uni_ext1[0xeac] = 0x1eac; -keysym2uni_ext1[0xead] = 0x1ead; -keysym2uni_ext1[0xeae] = 0x1eae; -keysym2uni_ext1[0xeaf] = 0x1eaf; -keysym2uni_ext1[0xeb0] = 0x1eb0; -keysym2uni_ext1[0xeb1] = 0x1eb1; -keysym2uni_ext1[0xeb2] = 0x1eb2; -keysym2uni_ext1[0xeb3] = 0x1eb3; -keysym2uni_ext1[0xeb4] = 0x1eb4; -keysym2uni_ext1[0xeb5] = 0x1eb5; -keysym2uni_ext1[0xeb6] = 0x1eb6; -keysym2uni_ext1[0xeb7] = 0x1eb7; -keysym2uni_ext1[0xeb8] = 0x1eb8; -keysym2uni_ext1[0xeb9] = 0x1eb9; -keysym2uni_ext1[0xeba] = 0x1eba; -keysym2uni_ext1[0xebb] = 0x1ebb; -keysym2uni_ext1[0xebc] = 0x1ebc; -keysym2uni_ext1[0xebd] = 0x1ebd; -keysym2uni_ext1[0xebe] = 0x1ebe; -keysym2uni_ext1[0xebf] = 0x1ebf; -keysym2uni_ext1[0xec0] = 0x1ec0; -keysym2uni_ext1[0xec1] = 0x1ec1; -keysym2uni_ext1[0xec2] = 0x1ec2; -keysym2uni_ext1[0xec3] = 0x1ec3; -keysym2uni_ext1[0xec4] = 0x1ec4; -keysym2uni_ext1[0xec5] = 0x1ec5; -keysym2uni_ext1[0xec6] = 0x1ec6; -keysym2uni_ext1[0xec7] = 0x1ec7; -keysym2uni_ext1[0xec8] = 0x1ec8; -keysym2uni_ext1[0xec9] = 0x1ec9; -keysym2uni_ext1[0xeca] = 0x1eca; -keysym2uni_ext1[0xecb] = 0x1ecb; -keysym2uni_ext1[0xecc] = 0x1ecc; -keysym2uni_ext1[0xecd] = 0x1ecd; -keysym2uni_ext1[0xece] = 0x1ece; -keysym2uni_ext1[0xecf] = 0x1ecf; -keysym2uni_ext1[0xed0] = 0x1ed0; -keysym2uni_ext1[0xed1] = 0x1ed1; -keysym2uni_ext1[0xed2] = 0x1ed2; -keysym2uni_ext1[0xed3] = 0x1ed3; -keysym2uni_ext1[0xed4] = 0x1ed4; -keysym2uni_ext1[0xed5] = 0x1ed5; -keysym2uni_ext1[0xed6] = 0x1ed6; -keysym2uni_ext1[0xed7] = 0x1ed7; -keysym2uni_ext1[0xed8] = 0x1ed8; -keysym2uni_ext1[0xed9] = 0x1ed9; -keysym2uni_ext1[0xeda] = 0x1eda; -keysym2uni_ext1[0xedb] = 0x1edb; -keysym2uni_ext1[0xedc] = 0x1edc; -keysym2uni_ext1[0xedd] = 0x1edd; -keysym2uni_ext1[0xede] = 0x1ede; -keysym2uni_ext1[0xedf] = 0x1edf; -keysym2uni_ext1[0xee0] = 0x1ee0; -keysym2uni_ext1[0xee1] = 0x1ee1; -keysym2uni_ext1[0xee2] = 0x1ee2; -keysym2uni_ext1[0xee3] = 0x1ee3; -keysym2uni_ext1[0xee4] = 0x1ee4; -keysym2uni_ext1[0xee5] = 0x1ee5; -keysym2uni_ext1[0xee6] = 0x1ee6; -keysym2uni_ext1[0xee7] = 0x1ee7; -keysym2uni_ext1[0xee8] = 0x1ee8; -keysym2uni_ext1[0xee9] = 0x1ee9; -keysym2uni_ext1[0xeea] = 0x1eea; -keysym2uni_ext1[0xeeb] = 0x1eeb; -keysym2uni_ext1[0xeec] = 0x1eec; -keysym2uni_ext1[0xeed] = 0x1eed; -keysym2uni_ext1[0xeee] = 0x1eee; -keysym2uni_ext1[0xeef] = 0x1eef; -keysym2uni_ext1[0xef0] = 0x1ef0; -keysym2uni_ext1[0xef1] = 0x1ef1; -keysym2uni_ext1[0xef4] = 0x1ef4; -keysym2uni_ext1[0xef5] = 0x1ef5; -keysym2uni_ext1[0xef6] = 0x1ef6; -keysym2uni_ext1[0xef7] = 0x1ef7; -keysym2uni_ext1[0xef8] = 0x1ef8; -keysym2uni_ext1[0xef9] = 0x1ef9; - - -keysym2uni_ext2[0x21a] = 0x221a; -keysym2uni_ext2[0x202] = 0x2202; -keysym2uni_ext2[0x0a9] = 0x20a9; -keysym2uni_ext2[0x0a0] = 0x20a0; -keysym2uni_ext2[0x0a1] = 0x20a1; -keysym2uni_ext2[0x0a2] = 0x20a2; -keysym2uni_ext2[0x0a3] = 0x20a3; -keysym2uni_ext2[0x0a4] = 0x20a4; -keysym2uni_ext2[0x0a5] = 0x20a5; -keysym2uni_ext2[0x0a6] = 0x20a6; -keysym2uni_ext2[0x0a7] = 0x20a7; -keysym2uni_ext2[0x0a8] = 0x20a8; -keysym2uni_ext2[0x0aa] = 0x20aa; -keysym2uni_ext2[0x0ab] = 0x20ab; -keysym2uni_ext2[0x070] = 0x2070; -keysym2uni_ext2[0x074] = 0x2074; -keysym2uni_ext2[0x075] = 0x2075; -keysym2uni_ext2[0x076] = 0x2076; -keysym2uni_ext2[0x077] = 0x2077; -keysym2uni_ext2[0x078] = 0x2078; -keysym2uni_ext2[0x079] = 0x2079; -keysym2uni_ext2[0x080] = 0x2080; -keysym2uni_ext2[0x081] = 0x2081; -keysym2uni_ext2[0x082] = 0x2082; -keysym2uni_ext2[0x083] = 0x2083; -keysym2uni_ext2[0x084] = 0x2084; -keysym2uni_ext2[0x085] = 0x2085; -keysym2uni_ext2[0x086] = 0x2086; -keysym2uni_ext2[0x087] = 0x2087; -keysym2uni_ext2[0x088] = 0x2088; -keysym2uni_ext2[0x089] = 0x2089; -keysym2uni_ext2[0x205] = 0x2205; -keysym2uni_ext2[0x208] = 0x2208; -keysym2uni_ext2[0x209] = 0x2209; -keysym2uni_ext2[0x20b] = 0x220b; -keysym2uni_ext2[0x21b] = 0x221b; -keysym2uni_ext2[0x21c] = 0x221c; -keysym2uni_ext2[0x22c] = 0x222c; -keysym2uni_ext2[0x22d] = 0x222d; -keysym2uni_ext2[0x235] = 0x2235; -keysym2uni_ext2[0x248] = 0x2245; -keysym2uni_ext2[0x247] = 0x2247; -keysym2uni_ext2[0x262] = 0x2262; -keysym2uni_ext2[0x263] = 0x2263; -} +void init_unicode_tables(); #endif diff --git a/protocols/rdp/src/guac_handlers.c b/protocols/rdp/src/guac_handlers.c index a605b0c0..30aeae22 100644 --- a/protocols/rdp/src/guac_handlers.c +++ b/protocols/rdp/src/guac_handlers.c @@ -59,6 +59,7 @@ #include "rdp_keymap.h" #include "rdp_cliprdr.h" #include "guac_handlers.h" +#include "unicode_convtable.h" void __guac_rdp_update_keysyms(guac_client* client, const int* keysym_string, int from, int to); int __guac_rdp_send_keysym(guac_client* client, int keysym, int pressed); @@ -344,10 +345,12 @@ int __guac_rdp_send_keysym(guac_client* client, int keysym, int pressed) { /* Send actual key */ rdp_inst->input->KeyboardEvent( - rdp_inst->input, + rdp_inst->input, keysym_desc->flags - | (pressed ? KBD_FLAGS_DOWN : KBD_FLAGS_RELEASE), - keysym_desc->scancode); + | (pressed ? KBD_FLAGS_DOWN : KBD_FLAGS_RELEASE), + keysym_desc->scancode); + + guac_client_log_info(client, "Base flags are %d", keysym_desc->flags); /* If defined, release any keys that were originally released */ if (keysym_desc->set_keysyms != NULL) @@ -357,23 +360,39 @@ int __guac_rdp_send_keysym(guac_client* client, int keysym, int pressed) { if (keysym_desc->clear_keysyms != NULL) __guac_rdp_update_keysyms(client, keysym_desc->clear_keysyms, 1, 1); - } - /* If undefined but has Alt-code, use Alt-Code */ - else if (keysym <= 0xFF) { - /* NOTE: The Alt-codes are conveniently identical to keysyms. */ + /* /\* If undefined but has Alt-code, use Alt-Code *\/ */ + /* else if (keysym <= 0xFF) { */ - /* Only send Alt-code on press */ - if (pressed) - __guac_rdp_send_altcode(client, keysym); + /* /\* NOTE: The Alt-codes are conveniently identical to keysyms. *\/ */ - } + /* /\* Only send Alt-code on press *\/ */ + /* if (pressed) */ + /* __guac_rdp_send_altcode(client, keysym); */ - /* If no defined Alt-code, log warning */ - else - guac_client_log_info(client, "unmapped keysym: 0x%x", keysym); + /* } */ + /* /\* If no defined Alt-code, log warning *\/ */ + /* else */ + /* guac_client_log_info(client, "unmapped keysym: 0x%x", keysym); */ + + } else { + /* Fall back to unicode events */ + int unicode_code = keysym2uni(keysym); + guac_client_log_info(client, "Translated keysym:0x%x to unicode:0x%x (pressed=%d flag=%d)", + keysym, unicode_code, pressed, pressed ? KBD_FLAGS_DOWN : KBD_FLAGS_RELEASE); + + /* LibfreeRDP seems not to take into account the DOWN/RELEASE flags. + * So we send only the key once. + */ + if (pressed) { + rdp_inst->input->UnicodeKeyboardEvent( + rdp_inst->input, + 0,//pressed ? KBD_FLAGS_DOW : KBD_FLAGS_RELEASE, + unicode_code); + } + } } return 0; diff --git a/protocols/rdp/src/unicode_convtable.c b/protocols/rdp/src/unicode_convtable.c index 38d79928..a627c217 100644 --- a/protocols/rdp/src/unicode_convtable.c +++ b/protocols/rdp/src/unicode_convtable.c @@ -54,3 +54,1045 @@ int keysym2uni(int keysym) { return keysym; } } + +void init_unicode_tables() { + // initialize only on first function call. + static int keysym2uni_initialized = 0; + + if (keysym2uni_initialized >0) + return; + else + keysym2uni_initialized = 1; + +/* Filled with script tools/ini2dot_h_unimap.py */ +keysym2uni_base[0x11] = 104; +keysym2uni_base[0x1a1] = 0x104; +keysym2uni_base[0x1a2] = 0x2d8; +keysym2uni_base[0x1a3] = 0x141; +keysym2uni_base[0x1a5] = 0x13d; +keysym2uni_base[0x1a6] = 0x15a; +keysym2uni_base[0x1a9] = 0x160; +keysym2uni_base[0x1aa] = 0x15e; +keysym2uni_base[0x1ab] = 0x164; +keysym2uni_base[0x1ac] = 0x179; +keysym2uni_base[0x1ae] = 0x17d; +keysym2uni_base[0x1af] = 0x17b; +keysym2uni_base[0x1b1] = 0x105; +keysym2uni_base[0x1b2] = 0x2db; +keysym2uni_base[0x1b3] = 0x142; +keysym2uni_base[0x1b5] = 0x13e; +keysym2uni_base[0x1b6] = 0x15b; +keysym2uni_base[0x1b7] = 0x2c7; +keysym2uni_base[0x1b9] = 0x161; +keysym2uni_base[0x1ba] = 0x15f; +keysym2uni_base[0x1bb] = 0x165; +keysym2uni_base[0x1bc] = 0x17a; +keysym2uni_base[0x1bd] = 0x2dd; +keysym2uni_base[0x1be] = 0x17e; +keysym2uni_base[0x1bf] = 0x17c; +keysym2uni_base[0x1c0] = 0x154; +keysym2uni_base[0x1c3] = 0x102; +keysym2uni_base[0x1c5] = 0x139; +keysym2uni_base[0x1c6] = 0x106; +keysym2uni_base[0x1c8] = 0x10c; +keysym2uni_base[0x1ca] = 0x118; +keysym2uni_base[0x1cc] = 0x11a; +keysym2uni_base[0x1cf] = 0x10e; +keysym2uni_base[0x1d0] = 0x110; +keysym2uni_base[0x1d1] = 0x143; +keysym2uni_base[0x1d2] = 0x147; +keysym2uni_base[0x1d5] = 0x150; +keysym2uni_base[0x1d8] = 0x158; +keysym2uni_base[0x1d9] = 0x16e; +keysym2uni_base[0x1db] = 0x170; +keysym2uni_base[0x1de] = 0x162; +keysym2uni_base[0x1e0] = 0x155; +keysym2uni_base[0x1e3] = 0x103; +keysym2uni_base[0x1e5] = 0x13a; +keysym2uni_base[0x1e6] = 0x107; +keysym2uni_base[0x1e8] = 0x10d; +keysym2uni_base[0x1ea] = 0x119; +keysym2uni_base[0x1ec] = 0x11b; +keysym2uni_base[0x1ef] = 0x10f; +keysym2uni_base[0x1f0] = 0x111; +keysym2uni_base[0x1f1] = 0x144; +keysym2uni_base[0x1f2] = 0x148; +keysym2uni_base[0x1f5] = 0x151; +keysym2uni_base[0x1fb] = 0x171; +keysym2uni_base[0x1f8] = 0x159; +keysym2uni_base[0x1f9] = 0x16f; +keysym2uni_base[0x1fe] = 0x163; +keysym2uni_base[0x2a1] = 0x126; +keysym2uni_base[0x2a6] = 0x124; +keysym2uni_base[0x2a9] = 0x130; +keysym2uni_base[0x2ab] = 0x11e; +keysym2uni_base[0x2ac] = 0x134; +keysym2uni_base[0x2b1] = 0x127; +keysym2uni_base[0x2b6] = 0x125; +keysym2uni_base[0x2b9] = 0x131; +keysym2uni_base[0x2bb] = 0x11f; +keysym2uni_base[0x2bc] = 0x135; +keysym2uni_base[0x2c5] = 0x10a; +keysym2uni_base[0x2c6] = 0x108; +keysym2uni_base[0x2d5] = 0x120; +keysym2uni_base[0x2d8] = 0x11c; +keysym2uni_base[0x2dd] = 0x16c; +keysym2uni_base[0x2de] = 0x15c; +keysym2uni_base[0x2e5] = 0x10b; +keysym2uni_base[0x2e6] = 0x109; +keysym2uni_base[0x2f5] = 0x121; +keysym2uni_base[0x2f8] = 0x11d; +keysym2uni_base[0x2fd] = 0x16d; +keysym2uni_base[0x2fe] = 0x15d; +keysym2uni_base[0x3a2] = 0x138; +keysym2uni_base[0x3a3] = 0x156; +keysym2uni_base[0x3a5] = 0x128; +keysym2uni_base[0x3a6] = 0x13b; +keysym2uni_base[0x3aa] = 0x112; +keysym2uni_base[0x3ab] = 0x122; +keysym2uni_base[0x3ac] = 0x166; +keysym2uni_base[0x3b3] = 0x157; +keysym2uni_base[0x3b5] = 0x129; +keysym2uni_base[0x3b6] = 0x13c; +keysym2uni_base[0x3ba] = 0x113; +keysym2uni_base[0x3bb] = 0x123; +keysym2uni_base[0x3bc] = 0x167; +keysym2uni_base[0x3bd] = 0x14a; +keysym2uni_base[0x3bf] = 0x14b; +keysym2uni_base[0x3c0] = 0x100; +keysym2uni_base[0x3c7] = 0x12e; +keysym2uni_base[0x3cc] = 0x116; +keysym2uni_base[0x3cf] = 0x12a; +keysym2uni_base[0x3d1] = 0x145; +keysym2uni_base[0x3d2] = 0x14c; +keysym2uni_base[0x3d3] = 0x136; +keysym2uni_base[0x3d9] = 0x172; +keysym2uni_base[0x3dd] = 0x168; +keysym2uni_base[0x3de] = 0x16a; +keysym2uni_base[0x3e0] = 0x101; +keysym2uni_base[0x3e7] = 0x12f; +keysym2uni_base[0x3ec] = 0x117; +keysym2uni_base[0x3ef] = 0x12b; +keysym2uni_base[0x3f1] = 0x146; +keysym2uni_base[0x3f2] = 0x14d; +keysym2uni_base[0x3f3] = 0x137; +keysym2uni_base[0x3f9] = 0x173; +keysym2uni_base[0x3fd] = 0x169; +keysym2uni_base[0x3fe] = 0x16b; +keysym2uni_base[0x13bc] = 0x152; +keysym2uni_base[0x13bd] = 0x153; +keysym2uni_base[0x13be] = 0x178; +keysym2uni_base[0x47e] = 0x203e; +keysym2uni_base[0x4a1] = 0x3002; +keysym2uni_base[0x4a2] = 0x300c; +keysym2uni_base[0x4a3] = 0x300d; +keysym2uni_base[0x4a4] = 0x3001; +keysym2uni_base[0x4a5] = 0x30fb; +keysym2uni_base[0x4a6] = 0x30f2; +keysym2uni_base[0x4a7] = 0x30a1; +keysym2uni_base[0x4a8] = 0x30a3; +keysym2uni_base[0x4a9] = 0x30a5; +keysym2uni_base[0x4aa] = 0x30a7; +keysym2uni_base[0x4ab] = 0x30a9; +keysym2uni_base[0x4ac] = 0x30e3; +keysym2uni_base[0x4ad] = 0x30e5; +keysym2uni_base[0x4ae] = 0x30e7; +keysym2uni_base[0x4af] = 0x30c3; +keysym2uni_base[0x4b0] = 0x30fc; +keysym2uni_base[0x4b1] = 0x30a2; +keysym2uni_base[0x4b2] = 0x30a4; +keysym2uni_base[0x4b3] = 0x30a6; +keysym2uni_base[0x4b4] = 0x30a8; +keysym2uni_base[0x4b5] = 0x30aa; +keysym2uni_base[0x4b6] = 0x30ab; +keysym2uni_base[0x4b7] = 0x30ad; +keysym2uni_base[0x4b8] = 0x30af; +keysym2uni_base[0x4b9] = 0x30b1; +keysym2uni_base[0x4ba] = 0x30b3; +keysym2uni_base[0x4bb] = 0x30b5; +keysym2uni_base[0x4bc] = 0x30b7; +keysym2uni_base[0x4bd] = 0x30b9; +keysym2uni_base[0x4be] = 0x30bb; +keysym2uni_base[0x4bf] = 0x30bd; +keysym2uni_base[0x4c0] = 0x30bf; +keysym2uni_base[0x4c1] = 0x30c1; +keysym2uni_base[0x4c2] = 0x30c4; +keysym2uni_base[0x4c3] = 0x30c6; +keysym2uni_base[0x4c4] = 0x30c8; +keysym2uni_base[0x4c5] = 0x30ca; +keysym2uni_base[0x4c6] = 0x30cb; +keysym2uni_base[0x4c7] = 0x30cc; +keysym2uni_base[0x4c8] = 0x30cd; +keysym2uni_base[0x4c9] = 0x30ce; +keysym2uni_base[0x4ca] = 0x30cf; +keysym2uni_base[0x4cb] = 0x30d2; +keysym2uni_base[0x4cc] = 0x30d5; +keysym2uni_base[0x4cd] = 0x30d8; +keysym2uni_base[0x4ce] = 0x30db; +keysym2uni_base[0x4cf] = 0x30de; +keysym2uni_base[0x4d0] = 0x30df; +keysym2uni_base[0x4d1] = 0x30e0; +keysym2uni_base[0x4d2] = 0x30e1; +keysym2uni_base[0x4d3] = 0x30e2; +keysym2uni_base[0x4d4] = 0x30e4; +keysym2uni_base[0x4d5] = 0x30e6; +keysym2uni_base[0x4d6] = 0x30e8; +keysym2uni_base[0x4d7] = 0x30e9; +keysym2uni_base[0x4d8] = 0x30ea; +keysym2uni_base[0x4d9] = 0x30eb; +keysym2uni_base[0x4da] = 0x30ec; +keysym2uni_base[0x4db] = 0x30ed; +keysym2uni_base[0x4dc] = 0x30ef; +keysym2uni_base[0x4dd] = 0x30f3; +keysym2uni_base[0x4de] = 0x309b; +keysym2uni_base[0x4df] = 0x309c; +keysym2uni_base[0x5ac] = 0x60c; +keysym2uni_base[0x5bb] = 0x61b; +keysym2uni_base[0x5bf] = 0x61f; +keysym2uni_base[0x5c1] = 0x621; +keysym2uni_base[0x5c2] = 0x622; +keysym2uni_base[0x5c3] = 0x623; +keysym2uni_base[0x5c4] = 0x624; +keysym2uni_base[0x5c5] = 0x625; +keysym2uni_base[0x5c6] = 0x626; +keysym2uni_base[0x5c7] = 0x627; +keysym2uni_base[0x5c8] = 0x628; +keysym2uni_base[0x5c9] = 0x629; +keysym2uni_base[0x5ca] = 0x62a; +keysym2uni_base[0x5cb] = 0x62b; +keysym2uni_base[0x5cc] = 0x62c; +keysym2uni_base[0x5cd] = 0x62d; +keysym2uni_base[0x5ce] = 0x62e; +keysym2uni_base[0x5cf] = 0x62f; +keysym2uni_base[0x5d0] = 0x630; +keysym2uni_base[0x5d1] = 0x631; +keysym2uni_base[0x5d2] = 0x632; +keysym2uni_base[0x5d3] = 0x633; +keysym2uni_base[0x5d4] = 0x634; +keysym2uni_base[0x5d5] = 0x635; +keysym2uni_base[0x5d6] = 0x636; +keysym2uni_base[0x5d7] = 0x637; +keysym2uni_base[0x5d8] = 0x638; +keysym2uni_base[0x5d9] = 0x639; +keysym2uni_base[0x5da] = 0x63a; +keysym2uni_base[0x5e0] = 0x640; +keysym2uni_base[0x5e1] = 0x641; +keysym2uni_base[0x5e2] = 0x642; +keysym2uni_base[0x5e3] = 0x643; +keysym2uni_base[0x5e4] = 0x644; +keysym2uni_base[0x5e5] = 0x645; +keysym2uni_base[0x5e6] = 0x646; +keysym2uni_base[0x5e7] = 0x647; +keysym2uni_base[0x5e8] = 0x648; +keysym2uni_base[0x5e9] = 0x649; +keysym2uni_base[0x5ea] = 0x64a; +keysym2uni_base[0x5eb] = 0x64b; +keysym2uni_base[0x5ec] = 0x64c; +keysym2uni_base[0x5ed] = 0x64d; +keysym2uni_base[0x5ee] = 0x64e; +keysym2uni_base[0x5ef] = 0x64f; +keysym2uni_base[0x5f0] = 0x650; +keysym2uni_base[0x5f1] = 0x651; +keysym2uni_base[0x5f2] = 0x652; +keysym2uni_base[0x6a1] = 0x452; +keysym2uni_base[0x6a2] = 0x453; +keysym2uni_base[0x6a3] = 0x451; +keysym2uni_base[0x6a4] = 0x454; +keysym2uni_base[0x6a5] = 0x455; +keysym2uni_base[0x6a6] = 0x456; +keysym2uni_base[0x6a7] = 0x457; +keysym2uni_base[0x6a8] = 0x458; +keysym2uni_base[0x6a9] = 0x459; +keysym2uni_base[0x6aa] = 0x45a; +keysym2uni_base[0x6ab] = 0x45b; +keysym2uni_base[0x6ac] = 0x45c; +keysym2uni_base[0x6ad] = 0x491; +keysym2uni_base[0x6ae] = 0x45e; +keysym2uni_base[0x6af] = 0x45f; +keysym2uni_base[0x6b0] = 0x2116; +keysym2uni_base[0x6b1] = 0x402; +keysym2uni_base[0x6b2] = 0x403; +keysym2uni_base[0x6b3] = 0x401; +keysym2uni_base[0x6b4] = 0x404; +keysym2uni_base[0x6b5] = 0x405; +keysym2uni_base[0x6b6] = 0x406; +keysym2uni_base[0x6b7] = 0x407; +keysym2uni_base[0x6b8] = 0x408; +keysym2uni_base[0x6b9] = 0x409; +keysym2uni_base[0x6ba] = 0x40a; +keysym2uni_base[0x6bb] = 0x40b; +keysym2uni_base[0x6bc] = 0x40c; +keysym2uni_base[0x6bd] = 0x490; +keysym2uni_base[0x6be] = 0x40e; +keysym2uni_base[0x6bf] = 0x40f; +keysym2uni_base[0x6c0] = 0x44e; +keysym2uni_base[0x6c1] = 0x430; +keysym2uni_base[0x6c2] = 0x431; +keysym2uni_base[0x6c3] = 0x446; +keysym2uni_base[0x6c4] = 0x434; +keysym2uni_base[0x6c5] = 0x435; +keysym2uni_base[0x6c6] = 0x444; +keysym2uni_base[0x6c7] = 0x433; +keysym2uni_base[0x6c8] = 0x445; +keysym2uni_base[0x6c9] = 0x438; +keysym2uni_base[0x6ca] = 0x439; +keysym2uni_base[0x6cb] = 0x43a; +keysym2uni_base[0x6cc] = 0x43b; +keysym2uni_base[0x6cd] = 0x43c; +keysym2uni_base[0x6ce] = 0x43d; +keysym2uni_base[0x6cf] = 0x43e; +keysym2uni_base[0x6d0] = 0x43f; +keysym2uni_base[0x6d1] = 0x44f; +keysym2uni_base[0x6d2] = 0x440; +keysym2uni_base[0x6d3] = 0x441; +keysym2uni_base[0x6d4] = 0x442; +keysym2uni_base[0x6d5] = 0x443; +keysym2uni_base[0x6d6] = 0x436; +keysym2uni_base[0x6d7] = 0x432; +keysym2uni_base[0x6d8] = 0x44c; +keysym2uni_base[0x6d9] = 0x44b; +keysym2uni_base[0x6da] = 0x437; +keysym2uni_base[0x6db] = 0x448; +keysym2uni_base[0x6dc] = 0x44d; +keysym2uni_base[0x6dd] = 0x449; +keysym2uni_base[0x6de] = 0x447; +keysym2uni_base[0x6df] = 0x44a; +keysym2uni_base[0x6e0] = 0x42e; +keysym2uni_base[0x6e1] = 0x410; +keysym2uni_base[0x6e2] = 0x411; +keysym2uni_base[0x6e3] = 0x426; +keysym2uni_base[0x6e4] = 0x414; +keysym2uni_base[0x6e5] = 0x415; +keysym2uni_base[0x6e6] = 0x424; +keysym2uni_base[0x6e7] = 0x413; +keysym2uni_base[0x6e8] = 0x425; +keysym2uni_base[0x6e9] = 0x418; +keysym2uni_base[0x6ea] = 0x419; +keysym2uni_base[0x6eb] = 0x41a; +keysym2uni_base[0x6ec] = 0x41b; +keysym2uni_base[0x6ed] = 0x41c; +keysym2uni_base[0x6ee] = 0x41d; +keysym2uni_base[0x6ef] = 0x41e; +keysym2uni_base[0x6f0] = 0x41f; +keysym2uni_base[0x6f1] = 0x42f; +keysym2uni_base[0x6f2] = 0x420; +keysym2uni_base[0x6f3] = 0x421; +keysym2uni_base[0x6f4] = 0x422; +keysym2uni_base[0x6f5] = 0x423; +keysym2uni_base[0x6f6] = 0x416; +keysym2uni_base[0x6f7] = 0x412; +keysym2uni_base[0x6f8] = 0x42c; +keysym2uni_base[0x6f9] = 0x42b; +keysym2uni_base[0x6fa] = 0x417; +keysym2uni_base[0x6fb] = 0x428; +keysym2uni_base[0x6fc] = 0x42d; +keysym2uni_base[0x6fd] = 0x429; +keysym2uni_base[0x6fe] = 0x427; +keysym2uni_base[0x6ff] = 0x42a; +keysym2uni_base[0x7a1] = 0x386; +keysym2uni_base[0x7a2] = 0x388; +keysym2uni_base[0x7a3] = 0x389; +keysym2uni_base[0x7a4] = 0x38a; +keysym2uni_base[0x7a5] = 0x3aa; +keysym2uni_base[0x7a7] = 0x38c; +keysym2uni_base[0x7a8] = 0x38e; +keysym2uni_base[0x7a9] = 0x3ab; +keysym2uni_base[0x7ab] = 0x38f; +keysym2uni_base[0x7ae] = 0x385; +keysym2uni_base[0x7af] = 0x2015; +keysym2uni_base[0x7b1] = 0x3ac; +keysym2uni_base[0x7b2] = 0x3ad; +keysym2uni_base[0x7b3] = 0x3ae; +keysym2uni_base[0x7b4] = 0x3af; +keysym2uni_base[0x7b5] = 0x3ca; +keysym2uni_base[0x7b6] = 0x390; +keysym2uni_base[0x7b7] = 0x3cc; +keysym2uni_base[0x7b8] = 0x3cd; +keysym2uni_base[0x7b9] = 0x3cb; +keysym2uni_base[0x7ba] = 0x3b0; +keysym2uni_base[0x7bb] = 0x3ce; +keysym2uni_base[0x7c1] = 0x391; +keysym2uni_base[0x7c2] = 0x392; +keysym2uni_base[0x7c3] = 0x393; +keysym2uni_base[0x7c4] = 0x394; +keysym2uni_base[0x7c5] = 0x395; +keysym2uni_base[0x7c6] = 0x396; +keysym2uni_base[0x7c7] = 0x397; +keysym2uni_base[0x7c8] = 0x398; +keysym2uni_base[0x7c9] = 0x399; +keysym2uni_base[0x7ca] = 0x39a; +keysym2uni_base[0x7cb] = 0x39b; +keysym2uni_base[0x7cc] = 0x39c; +keysym2uni_base[0x7cd] = 0x39d; +keysym2uni_base[0x7ce] = 0x39e; +keysym2uni_base[0x7cf] = 0x39f; +keysym2uni_base[0x7d0] = 0x3a0; +keysym2uni_base[0x7d1] = 0x3a1; +keysym2uni_base[0x7d2] = 0x3a3; +keysym2uni_base[0x7d4] = 0x3a4; +keysym2uni_base[0x7d5] = 0x3a5; +keysym2uni_base[0x7d6] = 0x3a6; +keysym2uni_base[0x7d7] = 0x3a7; +keysym2uni_base[0x7d8] = 0x3a8; +keysym2uni_base[0x7d9] = 0x3a9; +keysym2uni_base[0x7e1] = 0x3b1; +keysym2uni_base[0x7e2] = 0x3b2; +keysym2uni_base[0x7e3] = 0x3b3; +keysym2uni_base[0x7e4] = 0x3b4; +keysym2uni_base[0x7e5] = 0x3b5; +keysym2uni_base[0x7e6] = 0x3b6; +keysym2uni_base[0x7e7] = 0x3b7; +keysym2uni_base[0x7e8] = 0x3b8; +keysym2uni_base[0x7e9] = 0x3b9; +keysym2uni_base[0x7ea] = 0x3ba; +keysym2uni_base[0x7eb] = 0x3bb; +keysym2uni_base[0x7ec] = 0x3bc; +keysym2uni_base[0x7ed] = 0x3bd; +keysym2uni_base[0x7ee] = 0x3be; +keysym2uni_base[0x7ef] = 0x3bf; +keysym2uni_base[0x7f0] = 0x3c0; +keysym2uni_base[0x7f1] = 0x3c1; +keysym2uni_base[0x7f2] = 0x3c3; +keysym2uni_base[0x7f3] = 0x3c2; +keysym2uni_base[0x7f4] = 0x3c4; +keysym2uni_base[0x7f5] = 0x3c5; +keysym2uni_base[0x7f6] = 0x3c6; +keysym2uni_base[0x7f7] = 0x3c7; +keysym2uni_base[0x7f8] = 0x3c8; +keysym2uni_base[0x7f9] = 0x3c9; +keysym2uni_base[0x8a1] = 0x23b7; +keysym2uni_base[0x9ec] = 0x250c; +keysym2uni_base[0x9f1] = 0x2500; +keysym2uni_base[0x8a4] = 0x2320; +keysym2uni_base[0x8a5] = 0x2321; +keysym2uni_base[0x9f8] = 0x2502; +keysym2uni_base[0x8a7] = 0x23a1; +keysym2uni_base[0x8a8] = 0x23a3; +keysym2uni_base[0x8a9] = 0x23a4; +keysym2uni_base[0x8aa] = 0x23a6; +keysym2uni_base[0x8ab] = 0x239b; +keysym2uni_base[0x8ac] = 0x239d; +keysym2uni_base[0x8ad] = 0x239e; +keysym2uni_base[0x8ae] = 0x23a0; +keysym2uni_base[0x8af] = 0x23a8; +keysym2uni_base[0x8b0] = 0x23ac; +keysym2uni_base[0x8bc] = 0x2264; +keysym2uni_base[0x8bd] = 0x2260; +keysym2uni_base[0x8be] = 0x2265; +keysym2uni_base[0x8bf] = 0x222b; +keysym2uni_base[0x8c0] = 0x2234; +keysym2uni_base[0x8c1] = 0x221d; +keysym2uni_base[0x8c2] = 0x221e; +keysym2uni_base[0x8c5] = 0x2207; +keysym2uni_base[0x8c8] = 0x223c; +keysym2uni_base[0x8c9] = 0x2243; +keysym2uni_base[0x8cd] = 0x21d4; +keysym2uni_base[0x8ce] = 0x21d2; +keysym2uni_base[0x8cf] = 0x2261; +keysym2uni_base[0xbda] = 0x2282; +keysym2uni_base[0xbd8] = 0x2283; +keysym2uni_base[0xbc3] = 0x2229; +keysym2uni_base[0xbd6] = 0x222a; +keysym2uni_base[0xba9] = 0x2227; +keysym2uni_base[0xba8] = 0x2228; +keysym2uni_base[0x8f6] = 0x192; +keysym2uni_base[0x8fb] = 0x2190; +keysym2uni_base[0x8fc] = 0x2191; +keysym2uni_base[0x8fd] = 0x2192; +keysym2uni_base[0x8fe] = 0x2193; +keysym2uni_base[0x9e0] = 0x25c6; +keysym2uni_base[0x9e1] = 0x2592; +keysym2uni_base[0x9e2] = 0x2409; +keysym2uni_base[0x9e3] = 0x240c; +keysym2uni_base[0x9e4] = 0x240d; +keysym2uni_base[0x9e5] = 0x240a; +keysym2uni_base[0x9e8] = 0x2424; +keysym2uni_base[0x9e9] = 0x240b; +keysym2uni_base[0x9ea] = 0x2518; +keysym2uni_base[0x9eb] = 0x2510; +keysym2uni_base[0x9ed] = 0x2514; +keysym2uni_base[0x9ee] = 0x253c; +keysym2uni_base[0x9ef] = 0x23ba; +keysym2uni_base[0x9f0] = 0x23bb; +keysym2uni_base[0x9f2] = 0x23bc; +keysym2uni_base[0x9f3] = 0x23bd; +keysym2uni_base[0x9f4] = 0x251c; +keysym2uni_base[0x9f5] = 0x2524; +keysym2uni_base[0x9f6] = 0x2534; +keysym2uni_base[0x9f7] = 0x252c; +keysym2uni_base[0xaa1] = 0x2003; +keysym2uni_base[0xaa2] = 0x2002; +keysym2uni_base[0xaa3] = 0x2004; +keysym2uni_base[0xaa4] = 0x2005; +keysym2uni_base[0xaa5] = 0x2007; +keysym2uni_base[0xaa6] = 0x2008; +keysym2uni_base[0xaa7] = 0x2009; +keysym2uni_base[0xaa8] = 0x200a; +keysym2uni_base[0xaa9] = 0x2014; +keysym2uni_base[0xaaa] = 0x2013; +keysym2uni_base[0xaac] = 0x2423; +keysym2uni_base[0xaae] = 0x2026; +keysym2uni_base[0xaaf] = 0x2025; +keysym2uni_base[0xab0] = 0x2153; +keysym2uni_base[0xab1] = 0x2154; +keysym2uni_base[0xab2] = 0x2155; +keysym2uni_base[0xab3] = 0x2156; +keysym2uni_base[0xab4] = 0x2157; +keysym2uni_base[0xab5] = 0x2158; +keysym2uni_base[0xab6] = 0x2159; +keysym2uni_base[0xab7] = 0x215a; +keysym2uni_base[0xab8] = 0x2105; +keysym2uni_base[0xabb] = 0x2012; +keysym2uni_base[0xabc] = 0x27e8; +keysym2uni_base[0xabd] = 0x2e; +keysym2uni_base[0xabe] = 0x27e9; +keysym2uni_base[0xac3] = 0x215b; +keysym2uni_base[0xac4] = 0x215c; +keysym2uni_base[0xac5] = 0x215d; +keysym2uni_base[0xac6] = 0x215e; +keysym2uni_base[0xac9] = 0x2122; +keysym2uni_base[0xaca] = 0x2613; +keysym2uni_base[0xacc] = 0x25c1; +keysym2uni_base[0xacd] = 0x25b7; +keysym2uni_base[0xbcf] = 0x25cb; +keysym2uni_base[0xacf] = 0x25af; +keysym2uni_base[0xad0] = 0x2018; +keysym2uni_base[0xad1] = 0x2019; +keysym2uni_base[0xad2] = 0x201c; +keysym2uni_base[0xad3] = 0x201d; +keysym2uni_base[0xad4] = 0x211e; +keysym2uni_base[0xad6] = 0x2032; +keysym2uni_base[0xad7] = 0x2033; +keysym2uni_base[0xad9] = 0x271d; +keysym2uni_base[0xadb] = 0x25ac; +keysym2uni_base[0xadc] = 0x25c0; +keysym2uni_base[0xadd] = 0x25b6; +keysym2uni_base[0xade] = 0x25cf; +keysym2uni_base[0xadf] = 0x25ae; +keysym2uni_base[0xae0] = 0x25e6; +keysym2uni_base[0xae1] = 0x25ab; +keysym2uni_base[0xae2] = 0x25ad; +keysym2uni_base[0xae3] = 0x25b3; +keysym2uni_base[0xae4] = 0x25bd; +keysym2uni_base[0xae5] = 0x2606; +keysym2uni_base[0xae6] = 0x2022; +keysym2uni_base[0xae7] = 0x25aa; +keysym2uni_base[0xae8] = 0x25b2; +keysym2uni_base[0xae9] = 0x25bc; +keysym2uni_base[0xaea] = 0x261c; +keysym2uni_base[0xaeb] = 0x261e; +keysym2uni_base[0xaec] = 0x2663; +keysym2uni_base[0xaed] = 0x2666; +keysym2uni_base[0xaee] = 0x2665; +keysym2uni_base[0xaf0] = 0x2720; +keysym2uni_base[0xaf1] = 0x2020; +keysym2uni_base[0xaf2] = 0x2021; +keysym2uni_base[0xaf3] = 0x2713; +keysym2uni_base[0xaf4] = 0x2717; +keysym2uni_base[0xaf5] = 0x266f; +keysym2uni_base[0xaf6] = 0x266d; +keysym2uni_base[0xaf7] = 0x2642; +keysym2uni_base[0xaf8] = 0x2640; +keysym2uni_base[0xaf9] = 0x260e; +keysym2uni_base[0xafa] = 0x2315; +keysym2uni_base[0xafb] = 0x2117; +keysym2uni_base[0xafc] = 0x2038; +keysym2uni_base[0xafd] = 0x201a; +keysym2uni_base[0xafe] = 0x201e; +keysym2uni_base[0xba3] = 0x3c; +keysym2uni_base[0xba6] = 0x3e; +keysym2uni_base[0xbc0] = 0xaf; +keysym2uni_base[0xbc2] = 0x22a4; +keysym2uni_base[0xbc4] = 0x230a; +keysym2uni_base[0xbca] = 0x2218; +keysym2uni_base[0xbcc] = 0x2395; +keysym2uni_base[0xbce] = 0x22a5; +keysym2uni_base[0xbd3] = 0x2308; +keysym2uni_base[0xbdc] = 0x22a3; +keysym2uni_base[0xbfc] = 0x22a2; +keysym2uni_base[0xcdf] = 0x2017; +keysym2uni_base[0xce0] = 0x5d0; +keysym2uni_base[0xce1] = 0x5d1; +keysym2uni_base[0xce2] = 0x5d2; +keysym2uni_base[0xce3] = 0x5d3; +keysym2uni_base[0xce4] = 0x5d4; +keysym2uni_base[0xce5] = 0x5d5; +keysym2uni_base[0xce6] = 0x5d6; +keysym2uni_base[0xce7] = 0x5d7; +keysym2uni_base[0xce8] = 0x5d8; +keysym2uni_base[0xce9] = 0x5d9; +keysym2uni_base[0xcea] = 0x5da; +keysym2uni_base[0xceb] = 0x5db; +keysym2uni_base[0xcec] = 0x5dc; +keysym2uni_base[0xced] = 0x5dd; +keysym2uni_base[0xcee] = 0x5de; +keysym2uni_base[0xcef] = 0x5df; +keysym2uni_base[0xcf0] = 0x5e0; +keysym2uni_base[0xcf1] = 0x5e1; +keysym2uni_base[0xcf2] = 0x5e2; +keysym2uni_base[0xcf3] = 0x5e3; +keysym2uni_base[0xcf4] = 0x5e4; +keysym2uni_base[0xcf5] = 0x5e5; +keysym2uni_base[0xcf6] = 0x5e6; +keysym2uni_base[0xcf7] = 0x5e7; +keysym2uni_base[0xcf8] = 0x5e8; +keysym2uni_base[0xcf9] = 0x5e9; +keysym2uni_base[0xcfa] = 0x5ea; +keysym2uni_base[0xda1] = 0xe01; +keysym2uni_base[0xda2] = 0xe02; +keysym2uni_base[0xda3] = 0xe03; +keysym2uni_base[0xda4] = 0xe04; +keysym2uni_base[0xda5] = 0xe05; +keysym2uni_base[0xda6] = 0xe06; +keysym2uni_base[0xda7] = 0xe07; +keysym2uni_base[0xda8] = 0xe08; +keysym2uni_base[0xda9] = 0xe09; +keysym2uni_base[0xdaa] = 0xe0a; +keysym2uni_base[0xdab] = 0xe0b; +keysym2uni_base[0xdac] = 0xe0c; +keysym2uni_base[0xdad] = 0xe0d; +keysym2uni_base[0xdae] = 0xe0e; +keysym2uni_base[0xdaf] = 0xe0f; +keysym2uni_base[0xdb0] = 0xe10; +keysym2uni_base[0xdb1] = 0xe11; +keysym2uni_base[0xdb2] = 0xe12; +keysym2uni_base[0xdb3] = 0xe13; +keysym2uni_base[0xdb4] = 0xe14; +keysym2uni_base[0xdb5] = 0xe15; +keysym2uni_base[0xdb6] = 0xe16; +keysym2uni_base[0xdb7] = 0xe17; +keysym2uni_base[0xdb8] = 0xe18; +keysym2uni_base[0xdb9] = 0xe19; +keysym2uni_base[0xdba] = 0xe1a; +keysym2uni_base[0xdbb] = 0xe1b; +keysym2uni_base[0xdbc] = 0xe1c; +keysym2uni_base[0xdbd] = 0xe1d; +keysym2uni_base[0xdbe] = 0xe1e; +keysym2uni_base[0xdbf] = 0xe1f; +keysym2uni_base[0xdc0] = 0xe20; +keysym2uni_base[0xdc1] = 0xe21; +keysym2uni_base[0xdc2] = 0xe22; +keysym2uni_base[0xdc3] = 0xe23; +keysym2uni_base[0xdc4] = 0xe24; +keysym2uni_base[0xdc5] = 0xe25; +keysym2uni_base[0xdc6] = 0xe26; +keysym2uni_base[0xdc7] = 0xe27; +keysym2uni_base[0xdc8] = 0xe28; +keysym2uni_base[0xdc9] = 0xe29; +keysym2uni_base[0xdca] = 0xe2a; +keysym2uni_base[0xdcb] = 0xe2b; +keysym2uni_base[0xdcc] = 0xe2c; +keysym2uni_base[0xdcd] = 0xe2d; +keysym2uni_base[0xdce] = 0xe2e; +keysym2uni_base[0xdcf] = 0xe2f; +keysym2uni_base[0xdd0] = 0xe30; +keysym2uni_base[0xdd1] = 0xe31; +keysym2uni_base[0xdd2] = 0xe32; +keysym2uni_base[0xdd3] = 0xe33; +keysym2uni_base[0xdd4] = 0xe34; +keysym2uni_base[0xdd5] = 0xe35; +keysym2uni_base[0xdd6] = 0xe36; +keysym2uni_base[0xdd7] = 0xe37; +keysym2uni_base[0xdd8] = 0xe38; +keysym2uni_base[0xdd9] = 0xe39; +keysym2uni_base[0xdda] = 0xe3a; +keysym2uni_base[0xddf] = 0xe3f; +keysym2uni_base[0xde0] = 0xe40; +keysym2uni_base[0xde1] = 0xe41; +keysym2uni_base[0xde2] = 0xe42; +keysym2uni_base[0xde3] = 0xe43; +keysym2uni_base[0xde4] = 0xe44; +keysym2uni_base[0xde5] = 0xe45; +keysym2uni_base[0xde6] = 0xe46; +keysym2uni_base[0xde7] = 0xe47; +keysym2uni_base[0xde8] = 0xe48; +keysym2uni_base[0xde9] = 0xe49; +keysym2uni_base[0xdea] = 0xe4a; +keysym2uni_base[0xdeb] = 0xe4b; +keysym2uni_base[0xdec] = 0xe4c; +keysym2uni_base[0xded] = 0xe4d; +keysym2uni_base[0xdf0] = 0xe50; +keysym2uni_base[0xdf1] = 0xe51; +keysym2uni_base[0xdf2] = 0xe52; +keysym2uni_base[0xdf3] = 0xe53; +keysym2uni_base[0xdf4] = 0xe54; +keysym2uni_base[0xdf5] = 0xe55; +keysym2uni_base[0xdf6] = 0xe56; +keysym2uni_base[0xdf7] = 0xe57; +keysym2uni_base[0xdf8] = 0xe58; +keysym2uni_base[0xdf9] = 0xe59; + + +keysym2uni_ext0[0x174] = 0x174; +keysym2uni_ext0[0x176] = 0x176; +keysym2uni_ext0[0x175] = 0x175; +keysym2uni_ext0[0x177] = 0x177; +keysym2uni_ext0[0x6f0] = 0x6f0; +keysym2uni_ext0[0x6f1] = 0x6f1; +keysym2uni_ext0[0x6f2] = 0x6f2; +keysym2uni_ext0[0x6f3] = 0x6f3; +keysym2uni_ext0[0x6f4] = 0x6f4; +keysym2uni_ext0[0x6f5] = 0x6f5; +keysym2uni_ext0[0x6f6] = 0x6f6; +keysym2uni_ext0[0x6f7] = 0x6f7; +keysym2uni_ext0[0x6f8] = 0x6f8; +keysym2uni_ext0[0x6f9] = 0x6f9; +keysym2uni_ext0[0x66a] = 0x66a; +keysym2uni_ext0[0x670] = 0x670; +keysym2uni_ext0[0x679] = 0x679; +keysym2uni_ext0[0x67e] = 0x67e; +keysym2uni_ext0[0x686] = 0x686; +keysym2uni_ext0[0x688] = 0x688; +keysym2uni_ext0[0x691] = 0x691; +keysym2uni_ext0[0x6d4] = 0x6d4; +keysym2uni_ext0[0x660] = 0x660; +keysym2uni_ext0[0x661] = 0x661; +keysym2uni_ext0[0x662] = 0x662; +keysym2uni_ext0[0x663] = 0x663; +keysym2uni_ext0[0x664] = 0x664; +keysym2uni_ext0[0x665] = 0x665; +keysym2uni_ext0[0x666] = 0x666; +keysym2uni_ext0[0x667] = 0x667; +keysym2uni_ext0[0x668] = 0x668; +keysym2uni_ext0[0x669] = 0x669; +keysym2uni_ext0[0x653] = 0x653; +keysym2uni_ext0[0x654] = 0x654; +keysym2uni_ext0[0x655] = 0x655; +keysym2uni_ext0[0x698] = 0x698; +keysym2uni_ext0[0x6a4] = 0x6a4; +keysym2uni_ext0[0x6a9] = 0x6a9; +keysym2uni_ext0[0x6af] = 0x6af; +keysym2uni_ext0[0x6ba] = 0x6ba; +keysym2uni_ext0[0x6be] = 0x6be; +keysym2uni_ext0[0x6cc] = 0x6cc; +keysym2uni_ext0[0x6d2] = 0x6d2; +keysym2uni_ext0[0x6c1] = 0x6c1; +keysym2uni_ext0[0x492] = 0x492; +keysym2uni_ext0[0x493] = 0x493; +keysym2uni_ext0[0x496] = 0x496; +keysym2uni_ext0[0x497] = 0x497; +keysym2uni_ext0[0x49a] = 0x49a; +keysym2uni_ext0[0x49b] = 0x49b; +keysym2uni_ext0[0x49c] = 0x49c; +keysym2uni_ext0[0x49d] = 0x49d; +keysym2uni_ext0[0x4a2] = 0x4a2; +keysym2uni_ext0[0x4a3] = 0x4a3; +keysym2uni_ext0[0x4ae] = 0x4ae; +keysym2uni_ext0[0x4af] = 0x4af; +keysym2uni_ext0[0x4b0] = 0x4b0; +keysym2uni_ext0[0x4b1] = 0x4b1; +keysym2uni_ext0[0x4b2] = 0x4b2; +keysym2uni_ext0[0x4b3] = 0x4b3; +keysym2uni_ext0[0x4b6] = 0x4b6; +keysym2uni_ext0[0x4b7] = 0x4b7; +keysym2uni_ext0[0x4b8] = 0x4b8; +keysym2uni_ext0[0x4b9] = 0x4b9; +keysym2uni_ext0[0x4ba] = 0x4ba; +keysym2uni_ext0[0x4bb] = 0x4bb; +keysym2uni_ext0[0x4d8] = 0x4d8; +keysym2uni_ext0[0x4d9] = 0x4d9; +keysym2uni_ext0[0x4e2] = 0x4e2; +keysym2uni_ext0[0x4e3] = 0x4e3; +keysym2uni_ext0[0x4e8] = 0x4e8; +keysym2uni_ext0[0x4e9] = 0x4e9; +keysym2uni_ext0[0x4ee] = 0x4ee; +keysym2uni_ext0[0x4ef] = 0x4ef; +keysym2uni_ext0[0x587] = 0x587; +keysym2uni_ext0[0x589] = 0x589; +keysym2uni_ext0[0x55d] = 0x55d; +keysym2uni_ext0[0x58a] = 0x58a; +keysym2uni_ext0[0x55c] = 0x55c; +keysym2uni_ext0[0x55b] = 0x55b; +keysym2uni_ext0[0x55e] = 0x55e; +keysym2uni_ext0[0x531] = 0x531; +keysym2uni_ext0[0x561] = 0x561; +keysym2uni_ext0[0x532] = 0x532; +keysym2uni_ext0[0x562] = 0x562; +keysym2uni_ext0[0x533] = 0x533; +keysym2uni_ext0[0x563] = 0x563; +keysym2uni_ext0[0x534] = 0x534; +keysym2uni_ext0[0x564] = 0x564; +keysym2uni_ext0[0x535] = 0x535; +keysym2uni_ext0[0x565] = 0x565; +keysym2uni_ext0[0x536] = 0x536; +keysym2uni_ext0[0x566] = 0x566; +keysym2uni_ext0[0x537] = 0x537; +keysym2uni_ext0[0x567] = 0x567; +keysym2uni_ext0[0x538] = 0x538; +keysym2uni_ext0[0x568] = 0x568; +keysym2uni_ext0[0x539] = 0x539; +keysym2uni_ext0[0x569] = 0x569; +keysym2uni_ext0[0x53a] = 0x53a; +keysym2uni_ext0[0x56a] = 0x56a; +keysym2uni_ext0[0x53b] = 0x53b; +keysym2uni_ext0[0x56b] = 0x56b; +keysym2uni_ext0[0x53c] = 0x53c; +keysym2uni_ext0[0x56c] = 0x56c; +keysym2uni_ext0[0x53d] = 0x53d; +keysym2uni_ext0[0x56d] = 0x56d; +keysym2uni_ext0[0x53e] = 0x53e; +keysym2uni_ext0[0x56e] = 0x56e; +keysym2uni_ext0[0x53f] = 0x53f; +keysym2uni_ext0[0x56f] = 0x56f; +keysym2uni_ext0[0x540] = 0x540; +keysym2uni_ext0[0x570] = 0x570; +keysym2uni_ext0[0x541] = 0x541; +keysym2uni_ext0[0x571] = 0x571; +keysym2uni_ext0[0x542] = 0x542; +keysym2uni_ext0[0x572] = 0x572; +keysym2uni_ext0[0x543] = 0x543; +keysym2uni_ext0[0x573] = 0x573; +keysym2uni_ext0[0x544] = 0x544; +keysym2uni_ext0[0x574] = 0x574; +keysym2uni_ext0[0x545] = 0x545; +keysym2uni_ext0[0x575] = 0x575; +keysym2uni_ext0[0x546] = 0x546; +keysym2uni_ext0[0x576] = 0x576; +keysym2uni_ext0[0x547] = 0x547; +keysym2uni_ext0[0x577] = 0x577; +keysym2uni_ext0[0x548] = 0x548; +keysym2uni_ext0[0x578] = 0x578; +keysym2uni_ext0[0x549] = 0x549; +keysym2uni_ext0[0x579] = 0x579; +keysym2uni_ext0[0x54a] = 0x54a; +keysym2uni_ext0[0x57a] = 0x57a; +keysym2uni_ext0[0x54b] = 0x54b; +keysym2uni_ext0[0x57b] = 0x57b; +keysym2uni_ext0[0x54c] = 0x54c; +keysym2uni_ext0[0x57c] = 0x57c; +keysym2uni_ext0[0x54d] = 0x54d; +keysym2uni_ext0[0x57d] = 0x57d; +keysym2uni_ext0[0x54e] = 0x54e; +keysym2uni_ext0[0x57e] = 0x57e; +keysym2uni_ext0[0x54f] = 0x54f; +keysym2uni_ext0[0x57f] = 0x57f; +keysym2uni_ext0[0x550] = 0x550; +keysym2uni_ext0[0x580] = 0x580; +keysym2uni_ext0[0x551] = 0x551; +keysym2uni_ext0[0x581] = 0x581; +keysym2uni_ext0[0x552] = 0x552; +keysym2uni_ext0[0x582] = 0x582; +keysym2uni_ext0[0x553] = 0x553; +keysym2uni_ext0[0x583] = 0x583; +keysym2uni_ext0[0x554] = 0x554; +keysym2uni_ext0[0x584] = 0x584; +keysym2uni_ext0[0x555] = 0x555; +keysym2uni_ext0[0x585] = 0x585; +keysym2uni_ext0[0x556] = 0x556; +keysym2uni_ext0[0x586] = 0x586; +keysym2uni_ext0[0x55a] = 0x55a; +keysym2uni_ext0[0x1b5] = 0x1b5; +keysym2uni_ext0[0x1e6] = 0x1e6; +keysym2uni_ext0[0x1d2] = 0x1d2; +keysym2uni_ext0[0x19f] = 0x19f; +keysym2uni_ext0[0x12d] = 0x12d; +keysym2uni_ext0[0x1b6] = 0x1b6; +keysym2uni_ext0[0x1e7] = 0x1e7; +keysym2uni_ext0[0x275] = 0x275; +keysym2uni_ext0[0x18f] = 0x18f; +keysym2uni_ext0[0x259] = 0x259; +keysym2uni_ext0[0x1a0] = 0x1a0; +keysym2uni_ext0[0x1a1] = 0x1a1; +keysym2uni_ext0[0x1af] = 0x1af; +keysym2uni_ext0[0x1b0] = 0x1b0; + + +keysym2uni_ext1[0xe02] = 0x1e02; +keysym2uni_ext1[0xe03] = 0x1e03; +keysym2uni_ext1[0xe0a] = 0x1e0a; +keysym2uni_ext1[0xe80] = 0x1e80; +keysym2uni_ext1[0xe82] = 0x1e82; +keysym2uni_ext1[0xe0b] = 0x1e0b; +keysym2uni_ext1[0xef2] = 0x1ef2; +keysym2uni_ext1[0xe1e] = 0x1e1e; +keysym2uni_ext1[0xe1f] = 0x1e1f; +keysym2uni_ext1[0xe40] = 0x1e40; +keysym2uni_ext1[0xe41] = 0x1e41; +keysym2uni_ext1[0xe56] = 0x1e56; +keysym2uni_ext1[0xe81] = 0x1e81; +keysym2uni_ext1[0xe57] = 0x1e57; +keysym2uni_ext1[0xe83] = 0x1e83; +keysym2uni_ext1[0xe60] = 0x1e60; +keysym2uni_ext1[0xef3] = 0x1ef3; +keysym2uni_ext1[0xe84] = 0x1e84; +keysym2uni_ext1[0xe85] = 0x1e85; +keysym2uni_ext1[0xe61] = 0x1e61; +keysym2uni_ext1[0xe6a] = 0x1e6a; +keysym2uni_ext1[0xe6b] = 0x1e6b; +keysym2uni_ext1[0x0d0] = 0x10d0; +keysym2uni_ext1[0x0d1] = 0x10d1; +keysym2uni_ext1[0x0d2] = 0x10d2; +keysym2uni_ext1[0x0d3] = 0x10d3; +keysym2uni_ext1[0x0d4] = 0x10d4; +keysym2uni_ext1[0x0d5] = 0x10d5; +keysym2uni_ext1[0x0d6] = 0x10d6; +keysym2uni_ext1[0x0d7] = 0x10d7; +keysym2uni_ext1[0x0d8] = 0x10d8; +keysym2uni_ext1[0x0d9] = 0x10d9; +keysym2uni_ext1[0x0da] = 0x10da; +keysym2uni_ext1[0x0db] = 0x10db; +keysym2uni_ext1[0x0dc] = 0x10dc; +keysym2uni_ext1[0x0dd] = 0x10dd; +keysym2uni_ext1[0x0de] = 0x10de; +keysym2uni_ext1[0x0df] = 0x10df; +keysym2uni_ext1[0x0e0] = 0x10e0; +keysym2uni_ext1[0x0e1] = 0x10e1; +keysym2uni_ext1[0x0e2] = 0x10e2; +keysym2uni_ext1[0x0e3] = 0x10e3; +keysym2uni_ext1[0x0e4] = 0x10e4; +keysym2uni_ext1[0x0e5] = 0x10e5; +keysym2uni_ext1[0x0e6] = 0x10e6; +keysym2uni_ext1[0x0e7] = 0x10e7; +keysym2uni_ext1[0x0e8] = 0x10e8; +keysym2uni_ext1[0x0e9] = 0x10e9; +keysym2uni_ext1[0x0ea] = 0x10ea; +keysym2uni_ext1[0x0eb] = 0x10eb; +keysym2uni_ext1[0x0ec] = 0x10ec; +keysym2uni_ext1[0x0ed] = 0x10ed; +keysym2uni_ext1[0x0ee] = 0x10ee; +keysym2uni_ext1[0x0ef] = 0x10ef; +keysym2uni_ext1[0x0f0] = 0x10f0; +keysym2uni_ext1[0x0f1] = 0x10f1; +keysym2uni_ext1[0x0f2] = 0x10f2; +keysym2uni_ext1[0x0f3] = 0x10f3; +keysym2uni_ext1[0x0f4] = 0x10f4; +keysym2uni_ext1[0x0f5] = 0x10f5; +keysym2uni_ext1[0x0f6] = 0x10f6; +keysym2uni_ext1[0xe8b] = 0x1e8b; +keysym2uni_ext1[0xe36] = 0x1e36; +keysym2uni_ext1[0xe37] = 0x1e37; +keysym2uni_ext1[0xea0] = 0x1ea0; +keysym2uni_ext1[0xea1] = 0x1ea1; +keysym2uni_ext1[0xea2] = 0x1ea2; +keysym2uni_ext1[0xea3] = 0x1ea3; +keysym2uni_ext1[0xea4] = 0x1ea4; +keysym2uni_ext1[0xea5] = 0x1ea5; +keysym2uni_ext1[0xea6] = 0x1ea6; +keysym2uni_ext1[0xea7] = 0x1ea7; +keysym2uni_ext1[0xea8] = 0x1ea8; +keysym2uni_ext1[0xea9] = 0x1ea9; +keysym2uni_ext1[0xeaa] = 0x1eaa; +keysym2uni_ext1[0xeab] = 0x1eab; +keysym2uni_ext1[0xeac] = 0x1eac; +keysym2uni_ext1[0xead] = 0x1ead; +keysym2uni_ext1[0xeae] = 0x1eae; +keysym2uni_ext1[0xeaf] = 0x1eaf; +keysym2uni_ext1[0xeb0] = 0x1eb0; +keysym2uni_ext1[0xeb1] = 0x1eb1; +keysym2uni_ext1[0xeb2] = 0x1eb2; +keysym2uni_ext1[0xeb3] = 0x1eb3; +keysym2uni_ext1[0xeb4] = 0x1eb4; +keysym2uni_ext1[0xeb5] = 0x1eb5; +keysym2uni_ext1[0xeb6] = 0x1eb6; +keysym2uni_ext1[0xeb7] = 0x1eb7; +keysym2uni_ext1[0xeb8] = 0x1eb8; +keysym2uni_ext1[0xeb9] = 0x1eb9; +keysym2uni_ext1[0xeba] = 0x1eba; +keysym2uni_ext1[0xebb] = 0x1ebb; +keysym2uni_ext1[0xebc] = 0x1ebc; +keysym2uni_ext1[0xebd] = 0x1ebd; +keysym2uni_ext1[0xebe] = 0x1ebe; +keysym2uni_ext1[0xebf] = 0x1ebf; +keysym2uni_ext1[0xec0] = 0x1ec0; +keysym2uni_ext1[0xec1] = 0x1ec1; +keysym2uni_ext1[0xec2] = 0x1ec2; +keysym2uni_ext1[0xec3] = 0x1ec3; +keysym2uni_ext1[0xec4] = 0x1ec4; +keysym2uni_ext1[0xec5] = 0x1ec5; +keysym2uni_ext1[0xec6] = 0x1ec6; +keysym2uni_ext1[0xec7] = 0x1ec7; +keysym2uni_ext1[0xec8] = 0x1ec8; +keysym2uni_ext1[0xec9] = 0x1ec9; +keysym2uni_ext1[0xeca] = 0x1eca; +keysym2uni_ext1[0xecb] = 0x1ecb; +keysym2uni_ext1[0xecc] = 0x1ecc; +keysym2uni_ext1[0xecd] = 0x1ecd; +keysym2uni_ext1[0xece] = 0x1ece; +keysym2uni_ext1[0xecf] = 0x1ecf; +keysym2uni_ext1[0xed0] = 0x1ed0; +keysym2uni_ext1[0xed1] = 0x1ed1; +keysym2uni_ext1[0xed2] = 0x1ed2; +keysym2uni_ext1[0xed3] = 0x1ed3; +keysym2uni_ext1[0xed4] = 0x1ed4; +keysym2uni_ext1[0xed5] = 0x1ed5; +keysym2uni_ext1[0xed6] = 0x1ed6; +keysym2uni_ext1[0xed7] = 0x1ed7; +keysym2uni_ext1[0xed8] = 0x1ed8; +keysym2uni_ext1[0xed9] = 0x1ed9; +keysym2uni_ext1[0xeda] = 0x1eda; +keysym2uni_ext1[0xedb] = 0x1edb; +keysym2uni_ext1[0xedc] = 0x1edc; +keysym2uni_ext1[0xedd] = 0x1edd; +keysym2uni_ext1[0xede] = 0x1ede; +keysym2uni_ext1[0xedf] = 0x1edf; +keysym2uni_ext1[0xee0] = 0x1ee0; +keysym2uni_ext1[0xee1] = 0x1ee1; +keysym2uni_ext1[0xee2] = 0x1ee2; +keysym2uni_ext1[0xee3] = 0x1ee3; +keysym2uni_ext1[0xee4] = 0x1ee4; +keysym2uni_ext1[0xee5] = 0x1ee5; +keysym2uni_ext1[0xee6] = 0x1ee6; +keysym2uni_ext1[0xee7] = 0x1ee7; +keysym2uni_ext1[0xee8] = 0x1ee8; +keysym2uni_ext1[0xee9] = 0x1ee9; +keysym2uni_ext1[0xeea] = 0x1eea; +keysym2uni_ext1[0xeeb] = 0x1eeb; +keysym2uni_ext1[0xeec] = 0x1eec; +keysym2uni_ext1[0xeed] = 0x1eed; +keysym2uni_ext1[0xeee] = 0x1eee; +keysym2uni_ext1[0xeef] = 0x1eef; +keysym2uni_ext1[0xef0] = 0x1ef0; +keysym2uni_ext1[0xef1] = 0x1ef1; +keysym2uni_ext1[0xef4] = 0x1ef4; +keysym2uni_ext1[0xef5] = 0x1ef5; +keysym2uni_ext1[0xef6] = 0x1ef6; +keysym2uni_ext1[0xef7] = 0x1ef7; +keysym2uni_ext1[0xef8] = 0x1ef8; +keysym2uni_ext1[0xef9] = 0x1ef9; + + +keysym2uni_ext2[0x21a] = 0x221a; +keysym2uni_ext2[0x202] = 0x2202; +keysym2uni_ext2[0x0a9] = 0x20a9; +keysym2uni_ext2[0x0a0] = 0x20a0; +keysym2uni_ext2[0x0a1] = 0x20a1; +keysym2uni_ext2[0x0a2] = 0x20a2; +keysym2uni_ext2[0x0a3] = 0x20a3; +keysym2uni_ext2[0x0a4] = 0x20a4; +keysym2uni_ext2[0x0a5] = 0x20a5; +keysym2uni_ext2[0x0a6] = 0x20a6; +keysym2uni_ext2[0x0a7] = 0x20a7; +keysym2uni_ext2[0x0a8] = 0x20a8; +keysym2uni_ext2[0x0aa] = 0x20aa; +keysym2uni_ext2[0x0ab] = 0x20ab; +keysym2uni_ext2[0x070] = 0x2070; +keysym2uni_ext2[0x074] = 0x2074; +keysym2uni_ext2[0x075] = 0x2075; +keysym2uni_ext2[0x076] = 0x2076; +keysym2uni_ext2[0x077] = 0x2077; +keysym2uni_ext2[0x078] = 0x2078; +keysym2uni_ext2[0x079] = 0x2079; +keysym2uni_ext2[0x080] = 0x2080; +keysym2uni_ext2[0x081] = 0x2081; +keysym2uni_ext2[0x082] = 0x2082; +keysym2uni_ext2[0x083] = 0x2083; +keysym2uni_ext2[0x084] = 0x2084; +keysym2uni_ext2[0x085] = 0x2085; +keysym2uni_ext2[0x086] = 0x2086; +keysym2uni_ext2[0x087] = 0x2087; +keysym2uni_ext2[0x088] = 0x2088; +keysym2uni_ext2[0x089] = 0x2089; +keysym2uni_ext2[0x205] = 0x2205; +keysym2uni_ext2[0x208] = 0x2208; +keysym2uni_ext2[0x209] = 0x2209; +keysym2uni_ext2[0x20b] = 0x220b; +keysym2uni_ext2[0x21b] = 0x221b; +keysym2uni_ext2[0x21c] = 0x221c; +keysym2uni_ext2[0x22c] = 0x222c; +keysym2uni_ext2[0x22d] = 0x222d; +keysym2uni_ext2[0x235] = 0x2235; +keysym2uni_ext2[0x248] = 0x2245; +keysym2uni_ext2[0x247] = 0x2247; +keysym2uni_ext2[0x262] = 0x2262; +keysym2uni_ext2[0x263] = 0x2263; +} From 7736e8f7aa1f1cd2261dea209838b4fa0cbcf98a Mon Sep 17 00:00:00 2001 From: Jocelyn DELALANDE Date: Mon, 7 May 2012 16:38:46 +0200 Subject: [PATCH 156/253] Added support for all keysyms, even over 0xFFFF Signed-off-by: Michael Jumper --- protocols/rdp/src/guac_handlers.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/protocols/rdp/src/guac_handlers.c b/protocols/rdp/src/guac_handlers.c index 30aeae22..f8c161db 100644 --- a/protocols/rdp/src/guac_handlers.c +++ b/protocols/rdp/src/guac_handlers.c @@ -326,7 +326,7 @@ int __guac_rdp_send_keysym(guac_client* client, int keysym, int pressed) { freerdp* rdp_inst = guac_client_data->rdp_inst; /* If keysym can be in lookup table */ - if (keysym <= 0xFFFF) { + //if (keysym <= 0xFFFF) { /* Look up scancode mapping */ const guac_rdp_keysym_desc* keysym_desc = @@ -391,9 +391,12 @@ int __guac_rdp_send_keysym(guac_client* client, int keysym, int pressed) { rdp_inst->input, 0,//pressed ? KBD_FLAGS_DOW : KBD_FLAGS_RELEASE, unicode_code); + } else { + + guac_client_log_info(client, "Ignoring release"); } } - } + //} return 0; } From 897818131640e80ee2953ebd169d8106dd4468c1 Mon Sep 17 00:00:00 2001 From: Jocelyn DELALANDE Date: Mon, 14 May 2012 12:30:50 +0200 Subject: [PATCH 157/253] fixed include path for freerdp >= 1.0 Signed-off-by: Michael Jumper --- protocols/rdp/include/rdp_keymap.h | 3 ++- protocols/rdp/src/rdp_keymap_en_us.c | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/protocols/rdp/include/rdp_keymap.h b/protocols/rdp/include/rdp_keymap.h index 5316b520..eec3a611 100644 --- a/protocols/rdp/include/rdp_keymap.h +++ b/protocols/rdp/include/rdp_keymap.h @@ -38,7 +38,8 @@ #ifndef _GUAC_RDP_RDP_KEYMAP_H #define _GUAC_RDP_RDP_KEYMAP_H -#include +#include + /** * Represents a keysym-to-scancode mapping for RDP, with extra information diff --git a/protocols/rdp/src/rdp_keymap_en_us.c b/protocols/rdp/src/rdp_keymap_en_us.c index 7be64224..22f61422 100644 --- a/protocols/rdp/src/rdp_keymap_en_us.c +++ b/protocols/rdp/src/rdp_keymap_en_us.c @@ -37,7 +37,8 @@ * ***** END LICENSE BLOCK ***** */ #include -#include + +#include #include "rdp_keymap.h" From bf15e05cb85bf4bce231a6090d72e18a6cbfcebf Mon Sep 17 00:00:00 2001 From: Jocelyn DELALANDE Date: Tue, 15 May 2012 12:02:28 +0200 Subject: [PATCH 158/253] cosmetic and comments for guacamole integration Signed-off-by: Michael Jumper --- protocols/rdp/include/rdp_keymap.h | 1 - protocols/rdp/include/unicode_convtable.h | 11 +++----- protocols/rdp/src/guac_handlers.c | 32 +++++++---------------- protocols/rdp/src/rdp_keymap_en_us.c | 1 - protocols/rdp/tools/ini2dot_h_unimap.py | 6 ++++- 5 files changed, 18 insertions(+), 33 deletions(-) diff --git a/protocols/rdp/include/rdp_keymap.h b/protocols/rdp/include/rdp_keymap.h index eec3a611..63460e17 100644 --- a/protocols/rdp/include/rdp_keymap.h +++ b/protocols/rdp/include/rdp_keymap.h @@ -40,7 +40,6 @@ #include - /** * Represents a keysym-to-scancode mapping for RDP, with extra information * about the state of prerequisite keysyms. diff --git a/protocols/rdp/include/unicode_convtable.h b/protocols/rdp/include/unicode_convtable.h index 46b42299..d74b55b5 100644 --- a/protocols/rdp/include/unicode_convtable.h +++ b/protocols/rdp/include/unicode_convtable.h @@ -1,16 +1,13 @@ - #ifndef _GUAC_UNICODE_CONVTABLE_H #define _GUAC_UNICODE_CONVTABLE_H int keysym2uni(int keysym); /* Keysym->unicode Exceptions tables */ -int keysym2uni_base[65536];// = { 0x0 }; -int keysym2uni_ext0[4096];// = { 0x0 }; -int keysym2uni_ext1[4096];// = { 0x0 }; -int keysym2uni_ext2[4096];// = { 0x0 }; - - +int keysym2uni_base[65536]; +int keysym2uni_ext0[4096]; +int keysym2uni_ext1[4096]; +int keysym2uni_ext2[4096]; /* Fill global tables, if needed (only on first call) */ void init_unicode_tables(); diff --git a/protocols/rdp/src/guac_handlers.c b/protocols/rdp/src/guac_handlers.c index f8c161db..ebc33079 100644 --- a/protocols/rdp/src/guac_handlers.c +++ b/protocols/rdp/src/guac_handlers.c @@ -345,12 +345,12 @@ int __guac_rdp_send_keysym(guac_client* client, int keysym, int pressed) { /* Send actual key */ rdp_inst->input->KeyboardEvent( - rdp_inst->input, + rdp_inst->input, keysym_desc->flags - | (pressed ? KBD_FLAGS_DOWN : KBD_FLAGS_RELEASE), - keysym_desc->scancode); + | (pressed ? KBD_FLAGS_DOWN : KBD_FLAGS_RELEASE), + keysym_desc->scancode); - guac_client_log_info(client, "Base flags are %d", keysym_desc->flags); + guac_client_log_info(client, "Base flags are %d", keysym_desc->flags); /* If defined, release any keys that were originally released */ if (keysym_desc->set_keysyms != NULL) @@ -361,35 +361,21 @@ int __guac_rdp_send_keysym(guac_client* client, int keysym, int pressed) { __guac_rdp_update_keysyms(client, keysym_desc->clear_keysyms, 1, 1); - - /* /\* If undefined but has Alt-code, use Alt-Code *\/ */ - /* else if (keysym <= 0xFF) { */ - - /* /\* NOTE: The Alt-codes are conveniently identical to keysyms. *\/ */ - - /* /\* Only send Alt-code on press *\/ */ - /* if (pressed) */ - /* __guac_rdp_send_altcode(client, keysym); */ - - /* } */ - - /* /\* If no defined Alt-code, log warning *\/ */ - /* else */ - /* guac_client_log_info(client, "unmapped keysym: 0x%x", keysym); */ - } else { - /* Fall back to unicode events */ + /* Fall back to unicode events if undefined inside current keymap */ int unicode_code = keysym2uni(keysym); guac_client_log_info(client, "Translated keysym:0x%x to unicode:0x%x (pressed=%d flag=%d)", keysym, unicode_code, pressed, pressed ? KBD_FLAGS_DOWN : KBD_FLAGS_RELEASE); /* LibfreeRDP seems not to take into account the DOWN/RELEASE flags. - * So we send only the key once. + * So we send only on of the two key events. */ if (pressed) { rdp_inst->input->UnicodeKeyboardEvent( rdp_inst->input, - 0,//pressed ? KBD_FLAGS_DOW : KBD_FLAGS_RELEASE, + //pressed ? KBD_FLAGS_DOW : KBD_FLAGS_RELEASE, <- not + // taken into account + 0, unicode_code); } else { diff --git a/protocols/rdp/src/rdp_keymap_en_us.c b/protocols/rdp/src/rdp_keymap_en_us.c index 22f61422..a8ffef79 100644 --- a/protocols/rdp/src/rdp_keymap_en_us.c +++ b/protocols/rdp/src/rdp_keymap_en_us.c @@ -37,7 +37,6 @@ * ***** END LICENSE BLOCK ***** */ #include - #include #include "rdp_keymap.h" diff --git a/protocols/rdp/tools/ini2dot_h_unimap.py b/protocols/rdp/tools/ini2dot_h_unimap.py index 68a523fb..8de63409 100644 --- a/protocols/rdp/tools/ini2dot_h_unimap.py +++ b/protocols/rdp/tools/ini2dot_h_unimap.py @@ -1,5 +1,5 @@ #!/usr/bin/env python - +# # Copyright (C) 2012 Ulteo SAS # http://www.ulteo.com # Author Jocelyn DELALANDE 2012 @@ -9,6 +9,10 @@ # # Used to extract the keysym<->unicode mapping exceptions from # unicode_exception.ini (can be found in Ulteo patched version of xrdp) +# +# Such an ini file can be found at +# http://www.ulteo.com/home/en/download/sourcecode (xrdp folder) +# import sys import ConfigParser From 156422c473611920f65930e021fd74ac13b276eb Mon Sep 17 00:00:00 2001 From: Jocelyn DELALANDE Date: Tue, 15 May 2012 12:28:45 +0200 Subject: [PATCH 159/253] licensing fix Signed-off-by: Michael Jumper --- protocols/rdp/AUTHORS | 2 + protocols/rdp/include/unicode_convtable.h | 37 ++++++++++++++++ protocols/rdp/src/guac_handlers.c | 3 ++ protocols/rdp/src/unicode_convtable.c | 51 ++++++++++++++++------- protocols/rdp/tools/ini2dot_h_unimap.py | 38 +++++++++++++++-- 5 files changed, 112 insertions(+), 19 deletions(-) diff --git a/protocols/rdp/AUTHORS b/protocols/rdp/AUTHORS index c5009773..dc7ab73c 100644 --- a/protocols/rdp/AUTHORS +++ b/protocols/rdp/AUTHORS @@ -1,2 +1,4 @@ Michael Jumper Matt Hortman +Jocelyn Delalande +David Lechevalier \ No newline at end of file diff --git a/protocols/rdp/include/unicode_convtable.h b/protocols/rdp/include/unicode_convtable.h index d74b55b5..30e9fb30 100644 --- a/protocols/rdp/include/unicode_convtable.h +++ b/protocols/rdp/include/unicode_convtable.h @@ -1,3 +1,40 @@ + +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is libguac-client-rdp. + * + * The Initial Developer of the Original Code is + * Jocelyn DELALANDE Ulteo SAS - http://www.ulteo.com + * + * Portions created by the Initial Developer are Copyright (C) 2012 Ulteo SAS. + * + * Contributor(s): + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + #ifndef _GUAC_UNICODE_CONVTABLE_H #define _GUAC_UNICODE_CONVTABLE_H diff --git a/protocols/rdp/src/guac_handlers.c b/protocols/rdp/src/guac_handlers.c index ebc33079..5cb216c5 100644 --- a/protocols/rdp/src/guac_handlers.c +++ b/protocols/rdp/src/guac_handlers.c @@ -21,6 +21,9 @@ * * Contributor(s): * Matt Hortman + * Jocelyn DELALANDE Ulteo SAS - http://www.ulteo.com + * + * Portions created by Ulteo SAS employees are Copyright (C) 2012 Ulteo SAS * * Alternatively, the contents of this file may be used under the terms of * either the GNU General Public License Version 2 or later (the "GPL"), or diff --git a/protocols/rdp/src/unicode_convtable.c b/protocols/rdp/src/unicode_convtable.c index a627c217..e022e965 100644 --- a/protocols/rdp/src/unicode_convtable.c +++ b/protocols/rdp/src/unicode_convtable.c @@ -1,22 +1,41 @@ -/** - * Copyright (C) 2012 Ulteo SAS - * http://www.ulteo.com - * Author Jocelyn DELALANDE 2012 + +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; version 2 - * of the License. + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - **/ + * The Original Code is libguac-client-rdp. + * + * The Initial Developer of the Original Code is + * Jocelyn DELALANDE Ulteo SAS - http://www.ulteo.com + * + * Portions created by the Initial Developer are Copyright (C) 2012 Ulteo SAS. + * + * Contributor(s): David LECHEVALIER 2011 + * + * Portions created by Ulteo Employees are Copyright (C) 2011-2012 Ulteo SAS. + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ #include "unicode_convtable.h" diff --git a/protocols/rdp/tools/ini2dot_h_unimap.py b/protocols/rdp/tools/ini2dot_h_unimap.py index 8de63409..16573edb 100644 --- a/protocols/rdp/tools/ini2dot_h_unimap.py +++ b/protocols/rdp/tools/ini2dot_h_unimap.py @@ -1,9 +1,41 @@ #!/usr/bin/env python + +# ***** BEGIN LICENSE BLOCK ***** +# Version: MPL 1.1/GPL 2.0/LGPL 2.1 # -# Copyright (C) 2012 Ulteo SAS -# http://www.ulteo.com -# Author Jocelyn DELALANDE 2012 +# The contents of this file are subject to the Mozilla Public License Version +# 1.1 (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# http://www.mozilla.org/MPL/ # +# Software distributed under the License is distributed on an "AS IS" basis, +# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +# for the specific language governing rights and limitations under the +# License. +# +# The Original Code is libguac-client-rdp. +# +# The Initial Developer of the Original Code is +# Jocelyn DELALANDE Ulteo SAS - http://www.ulteo.com +# +# Portions created by the Initial Developer are Copyright (C) 2012 Ulteo SAS. +# +# Contributor(s): +# +# Alternatively, the contents of this file may be used under the terms of +# either the GNU General Public License Version 2 or later (the "GPL"), or +# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), +# in which case the provisions of the GPL or the LGPL are applicable instead +# of those above. If you wish to allow use of your version of this file only +# under the terms of either the GPL or the LGPL, and not to allow others to +# use your version of this file under the terms of the MPL, indicate your +# decision by deleting the provisions above and replace them with the notice +# and other provisions required by the GPL or the LGPL. If you do not delete +# the provisions above, a recipient may use your version of this file under +# the terms of any one of the MPL, the GPL or the LGPL. +# +# ***** END LICENSE BLOCK ***** + # Converts a .ini file defining unicode exceptions to a dot_h file # The dot_h file defines an array of keysim->unicode # From 8a8924dc7da4e3037ecaf66f23491317680631e8 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Wed, 16 May 2012 00:40:07 -0700 Subject: [PATCH 160/253] Check for freerdp/locale/keyboard.h before using it, default to old freerdp/kbd/layouts.h if missing. --- protocols/rdp/configure.in | 2 +- protocols/rdp/include/rdp_keymap.h | 4 ++++ protocols/rdp/src/rdp_keymap_en_us.c | 5 +++++ 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/protocols/rdp/configure.in b/protocols/rdp/configure.in index 5428b885..881a0f98 100644 --- a/protocols/rdp/configure.in +++ b/protocols/rdp/configure.in @@ -53,7 +53,7 @@ AC_CHECK_LIB([freerdp-utils], [xzalloc],, AC_MSG_ERROR("libfreerdp-utils is requ AC_CHECK_LIB([freerdp-codec], [freerdp_image_convert],, AC_MSG_ERROR("libfreerdp-codec is required (part of FreeRDP)")) # Checks for header files. -AC_CHECK_HEADERS([guacamole/client.h guacamole/guacio.h guacamole/protocol.h]) +AC_CHECK_HEADERS([guacamole/client.h guacamole/guacio.h guacamole/protocol.h freerdp/locale/keyboard.h freerdp/kbd/layouts.h]) # Checks for library functions. AC_FUNC_MALLOC diff --git a/protocols/rdp/include/rdp_keymap.h b/protocols/rdp/include/rdp_keymap.h index 63460e17..8de2de54 100644 --- a/protocols/rdp/include/rdp_keymap.h +++ b/protocols/rdp/include/rdp_keymap.h @@ -38,7 +38,11 @@ #ifndef _GUAC_RDP_RDP_KEYMAP_H #define _GUAC_RDP_RDP_KEYMAP_H +#ifdef HAVE_FREERDP_LOCALE_KEYBOARD_H #include +#else +#include +#endif /** * Represents a keysym-to-scancode mapping for RDP, with extra information diff --git a/protocols/rdp/src/rdp_keymap_en_us.c b/protocols/rdp/src/rdp_keymap_en_us.c index a8ffef79..2e6dc6f6 100644 --- a/protocols/rdp/src/rdp_keymap_en_us.c +++ b/protocols/rdp/src/rdp_keymap_en_us.c @@ -37,7 +37,12 @@ * ***** END LICENSE BLOCK ***** */ #include + +#ifdef HAVE_FREERDP_LOCALE_KEYBOARD_H #include +#else +#include +#endif #include "rdp_keymap.h" From 6da3c296066e300bac4036c49e9c5d7ac4b0d68d Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Wed, 16 May 2012 01:26:09 -0700 Subject: [PATCH 161/253] Use direct translation between keysym and Unicode, rather than table (see http://www.x.org/wiki/KeySyms, same translation used from Unicode to keysym by the Guacmole JS client). Remove related files. --- protocols/rdp/Makefile.am | 1 - protocols/rdp/include/unicode_convtable.h | 52 - protocols/rdp/src/guac_handlers.c | 49 +- protocols/rdp/src/unicode_convtable.c | 1117 --------------------- protocols/rdp/tools/ini2dot_h_unimap.py | 129 --- 5 files changed, 26 insertions(+), 1322 deletions(-) delete mode 100644 protocols/rdp/include/unicode_convtable.h delete mode 100644 protocols/rdp/src/unicode_convtable.c delete mode 100644 protocols/rdp/tools/ini2dot_h_unimap.py diff --git a/protocols/rdp/Makefile.am b/protocols/rdp/Makefile.am index be4b4161..c7069eec 100644 --- a/protocols/rdp/Makefile.am +++ b/protocols/rdp/Makefile.am @@ -42,7 +42,6 @@ AM_CFLAGS = -Werror -Wall -pedantic -Iinclude lib_LTLIBRARIES = libguac-client-rdp.la libguac_client_rdp_la_SOURCES = src/client.c src/rdp_bitmap.c src/rdp_glyph.c src/rdp_pointer.c src/rdp_gdi.c src/guac_handlers.c src/rdp_cliprdr.c \ - src/unicode_convtable.c\ src/rdp_keymap.c \ src/rdp_keymap_base.c \ src/rdp_keymap_en_us.c diff --git a/protocols/rdp/include/unicode_convtable.h b/protocols/rdp/include/unicode_convtable.h deleted file mode 100644 index 30e9fb30..00000000 --- a/protocols/rdp/include/unicode_convtable.h +++ /dev/null @@ -1,52 +0,0 @@ - -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is libguac-client-rdp. - * - * The Initial Developer of the Original Code is - * Jocelyn DELALANDE Ulteo SAS - http://www.ulteo.com - * - * Portions created by the Initial Developer are Copyright (C) 2012 Ulteo SAS. - * - * Contributor(s): - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ - -#ifndef _GUAC_UNICODE_CONVTABLE_H -#define _GUAC_UNICODE_CONVTABLE_H - -int keysym2uni(int keysym); - -/* Keysym->unicode Exceptions tables */ -int keysym2uni_base[65536]; -int keysym2uni_ext0[4096]; -int keysym2uni_ext1[4096]; -int keysym2uni_ext2[4096]; - -/* Fill global tables, if needed (only on first call) */ -void init_unicode_tables(); - -#endif diff --git a/protocols/rdp/src/guac_handlers.c b/protocols/rdp/src/guac_handlers.c index 5cb216c5..a712e568 100644 --- a/protocols/rdp/src/guac_handlers.c +++ b/protocols/rdp/src/guac_handlers.c @@ -62,7 +62,6 @@ #include "rdp_keymap.h" #include "rdp_cliprdr.h" #include "guac_handlers.h" -#include "unicode_convtable.h" void __guac_rdp_update_keysyms(guac_client* client, const int* keysym_string, int from, int to); int __guac_rdp_send_keysym(guac_client* client, int keysym, int pressed); @@ -329,7 +328,7 @@ int __guac_rdp_send_keysym(guac_client* client, int keysym, int pressed) { freerdp* rdp_inst = guac_client_data->rdp_inst; /* If keysym can be in lookup table */ - //if (keysym <= 0xFFFF) { + if (keysym <= 0xFFFF) { /* Look up scancode mapping */ const guac_rdp_keysym_desc* keysym_desc = @@ -363,29 +362,33 @@ int __guac_rdp_send_keysym(guac_client* client, int keysym, int pressed) { if (keysym_desc->clear_keysyms != NULL) __guac_rdp_update_keysyms(client, keysym_desc->clear_keysyms, 1, 1); + return 0; - } else { - /* Fall back to unicode events if undefined inside current keymap */ - int unicode_code = keysym2uni(keysym); - guac_client_log_info(client, "Translated keysym:0x%x to unicode:0x%x (pressed=%d flag=%d)", - keysym, unicode_code, pressed, pressed ? KBD_FLAGS_DOWN : KBD_FLAGS_RELEASE); + } + } - /* LibfreeRDP seems not to take into account the DOWN/RELEASE flags. - * So we send only on of the two key events. - */ - if (pressed) { - rdp_inst->input->UnicodeKeyboardEvent( - rdp_inst->input, - //pressed ? KBD_FLAGS_DOW : KBD_FLAGS_RELEASE, <- not - // taken into account - 0, - unicode_code); - } else { - - guac_client_log_info(client, "Ignoring release"); - } - } - //} + /* Fall back to unicode events if undefined inside current keymap */ + + /* Only send when key pressed - Unicode events do not have DOWN/RELEASE flags */ + if (pressed) { + + /* Translate keysym into codepoint */ + int codepoint; + if (keysym <= 0xFF) + codepoint = keysym; + else + codepoint = keysym & 0xFFFFFF; + + guac_client_log_info(client, "Translated keysym 0x%x to U+%04X", keysym, codepoint); + + /* Send Unicode event */ + rdp_inst->input->UnicodeKeyboardEvent( + rdp_inst->input, + 0, codepoint); + } + + else + guac_client_log_info(client, "Ignoring key release (Unicode event)"); return 0; } diff --git a/protocols/rdp/src/unicode_convtable.c b/protocols/rdp/src/unicode_convtable.c deleted file mode 100644 index e022e965..00000000 --- a/protocols/rdp/src/unicode_convtable.c +++ /dev/null @@ -1,1117 +0,0 @@ - -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is libguac-client-rdp. - * - * The Initial Developer of the Original Code is - * Jocelyn DELALANDE Ulteo SAS - http://www.ulteo.com - * - * Portions created by the Initial Developer are Copyright (C) 2012 Ulteo SAS. - * - * Contributor(s): David LECHEVALIER 2011 - * - * Portions created by Ulteo Employees are Copyright (C) 2011-2012 Ulteo SAS. - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ - - -#include "unicode_convtable.h" - -int keysym2uni(int keysym) { - init_unicode_tables(); - /* Default: no exception */ - int exception = 0; - - if (keysym < 0x100000) { - // Look for a 4-digits-form exception - exception = keysym2uni_base[keysym]; - } else { - // Look for a 7-digits-form exception - /* Switch to look for 0x1001XXX 0x1002XXX or 0x1002XXX - the tables only indexes on XXX - */ - switch(keysym & 0xFFFF000) { - case 0x1000000: - exception = keysym2uni_ext0[keysym & 0x0000FFF]; - break; - case 0x1001000: - exception = keysym2uni_ext1[keysym & 0x0000FFF]; - break; - case 0x1002000: - exception = keysym2uni_ext2[keysym & 0x0000FFF]; - break; - } - - /* If the keysym is not within exceptions, keysym = unicode */ - } - if (exception != 0) { - return exception; - } else { - return keysym; - } -} - -void init_unicode_tables() { - // initialize only on first function call. - static int keysym2uni_initialized = 0; - - if (keysym2uni_initialized >0) - return; - else - keysym2uni_initialized = 1; - -/* Filled with script tools/ini2dot_h_unimap.py */ -keysym2uni_base[0x11] = 104; -keysym2uni_base[0x1a1] = 0x104; -keysym2uni_base[0x1a2] = 0x2d8; -keysym2uni_base[0x1a3] = 0x141; -keysym2uni_base[0x1a5] = 0x13d; -keysym2uni_base[0x1a6] = 0x15a; -keysym2uni_base[0x1a9] = 0x160; -keysym2uni_base[0x1aa] = 0x15e; -keysym2uni_base[0x1ab] = 0x164; -keysym2uni_base[0x1ac] = 0x179; -keysym2uni_base[0x1ae] = 0x17d; -keysym2uni_base[0x1af] = 0x17b; -keysym2uni_base[0x1b1] = 0x105; -keysym2uni_base[0x1b2] = 0x2db; -keysym2uni_base[0x1b3] = 0x142; -keysym2uni_base[0x1b5] = 0x13e; -keysym2uni_base[0x1b6] = 0x15b; -keysym2uni_base[0x1b7] = 0x2c7; -keysym2uni_base[0x1b9] = 0x161; -keysym2uni_base[0x1ba] = 0x15f; -keysym2uni_base[0x1bb] = 0x165; -keysym2uni_base[0x1bc] = 0x17a; -keysym2uni_base[0x1bd] = 0x2dd; -keysym2uni_base[0x1be] = 0x17e; -keysym2uni_base[0x1bf] = 0x17c; -keysym2uni_base[0x1c0] = 0x154; -keysym2uni_base[0x1c3] = 0x102; -keysym2uni_base[0x1c5] = 0x139; -keysym2uni_base[0x1c6] = 0x106; -keysym2uni_base[0x1c8] = 0x10c; -keysym2uni_base[0x1ca] = 0x118; -keysym2uni_base[0x1cc] = 0x11a; -keysym2uni_base[0x1cf] = 0x10e; -keysym2uni_base[0x1d0] = 0x110; -keysym2uni_base[0x1d1] = 0x143; -keysym2uni_base[0x1d2] = 0x147; -keysym2uni_base[0x1d5] = 0x150; -keysym2uni_base[0x1d8] = 0x158; -keysym2uni_base[0x1d9] = 0x16e; -keysym2uni_base[0x1db] = 0x170; -keysym2uni_base[0x1de] = 0x162; -keysym2uni_base[0x1e0] = 0x155; -keysym2uni_base[0x1e3] = 0x103; -keysym2uni_base[0x1e5] = 0x13a; -keysym2uni_base[0x1e6] = 0x107; -keysym2uni_base[0x1e8] = 0x10d; -keysym2uni_base[0x1ea] = 0x119; -keysym2uni_base[0x1ec] = 0x11b; -keysym2uni_base[0x1ef] = 0x10f; -keysym2uni_base[0x1f0] = 0x111; -keysym2uni_base[0x1f1] = 0x144; -keysym2uni_base[0x1f2] = 0x148; -keysym2uni_base[0x1f5] = 0x151; -keysym2uni_base[0x1fb] = 0x171; -keysym2uni_base[0x1f8] = 0x159; -keysym2uni_base[0x1f9] = 0x16f; -keysym2uni_base[0x1fe] = 0x163; -keysym2uni_base[0x2a1] = 0x126; -keysym2uni_base[0x2a6] = 0x124; -keysym2uni_base[0x2a9] = 0x130; -keysym2uni_base[0x2ab] = 0x11e; -keysym2uni_base[0x2ac] = 0x134; -keysym2uni_base[0x2b1] = 0x127; -keysym2uni_base[0x2b6] = 0x125; -keysym2uni_base[0x2b9] = 0x131; -keysym2uni_base[0x2bb] = 0x11f; -keysym2uni_base[0x2bc] = 0x135; -keysym2uni_base[0x2c5] = 0x10a; -keysym2uni_base[0x2c6] = 0x108; -keysym2uni_base[0x2d5] = 0x120; -keysym2uni_base[0x2d8] = 0x11c; -keysym2uni_base[0x2dd] = 0x16c; -keysym2uni_base[0x2de] = 0x15c; -keysym2uni_base[0x2e5] = 0x10b; -keysym2uni_base[0x2e6] = 0x109; -keysym2uni_base[0x2f5] = 0x121; -keysym2uni_base[0x2f8] = 0x11d; -keysym2uni_base[0x2fd] = 0x16d; -keysym2uni_base[0x2fe] = 0x15d; -keysym2uni_base[0x3a2] = 0x138; -keysym2uni_base[0x3a3] = 0x156; -keysym2uni_base[0x3a5] = 0x128; -keysym2uni_base[0x3a6] = 0x13b; -keysym2uni_base[0x3aa] = 0x112; -keysym2uni_base[0x3ab] = 0x122; -keysym2uni_base[0x3ac] = 0x166; -keysym2uni_base[0x3b3] = 0x157; -keysym2uni_base[0x3b5] = 0x129; -keysym2uni_base[0x3b6] = 0x13c; -keysym2uni_base[0x3ba] = 0x113; -keysym2uni_base[0x3bb] = 0x123; -keysym2uni_base[0x3bc] = 0x167; -keysym2uni_base[0x3bd] = 0x14a; -keysym2uni_base[0x3bf] = 0x14b; -keysym2uni_base[0x3c0] = 0x100; -keysym2uni_base[0x3c7] = 0x12e; -keysym2uni_base[0x3cc] = 0x116; -keysym2uni_base[0x3cf] = 0x12a; -keysym2uni_base[0x3d1] = 0x145; -keysym2uni_base[0x3d2] = 0x14c; -keysym2uni_base[0x3d3] = 0x136; -keysym2uni_base[0x3d9] = 0x172; -keysym2uni_base[0x3dd] = 0x168; -keysym2uni_base[0x3de] = 0x16a; -keysym2uni_base[0x3e0] = 0x101; -keysym2uni_base[0x3e7] = 0x12f; -keysym2uni_base[0x3ec] = 0x117; -keysym2uni_base[0x3ef] = 0x12b; -keysym2uni_base[0x3f1] = 0x146; -keysym2uni_base[0x3f2] = 0x14d; -keysym2uni_base[0x3f3] = 0x137; -keysym2uni_base[0x3f9] = 0x173; -keysym2uni_base[0x3fd] = 0x169; -keysym2uni_base[0x3fe] = 0x16b; -keysym2uni_base[0x13bc] = 0x152; -keysym2uni_base[0x13bd] = 0x153; -keysym2uni_base[0x13be] = 0x178; -keysym2uni_base[0x47e] = 0x203e; -keysym2uni_base[0x4a1] = 0x3002; -keysym2uni_base[0x4a2] = 0x300c; -keysym2uni_base[0x4a3] = 0x300d; -keysym2uni_base[0x4a4] = 0x3001; -keysym2uni_base[0x4a5] = 0x30fb; -keysym2uni_base[0x4a6] = 0x30f2; -keysym2uni_base[0x4a7] = 0x30a1; -keysym2uni_base[0x4a8] = 0x30a3; -keysym2uni_base[0x4a9] = 0x30a5; -keysym2uni_base[0x4aa] = 0x30a7; -keysym2uni_base[0x4ab] = 0x30a9; -keysym2uni_base[0x4ac] = 0x30e3; -keysym2uni_base[0x4ad] = 0x30e5; -keysym2uni_base[0x4ae] = 0x30e7; -keysym2uni_base[0x4af] = 0x30c3; -keysym2uni_base[0x4b0] = 0x30fc; -keysym2uni_base[0x4b1] = 0x30a2; -keysym2uni_base[0x4b2] = 0x30a4; -keysym2uni_base[0x4b3] = 0x30a6; -keysym2uni_base[0x4b4] = 0x30a8; -keysym2uni_base[0x4b5] = 0x30aa; -keysym2uni_base[0x4b6] = 0x30ab; -keysym2uni_base[0x4b7] = 0x30ad; -keysym2uni_base[0x4b8] = 0x30af; -keysym2uni_base[0x4b9] = 0x30b1; -keysym2uni_base[0x4ba] = 0x30b3; -keysym2uni_base[0x4bb] = 0x30b5; -keysym2uni_base[0x4bc] = 0x30b7; -keysym2uni_base[0x4bd] = 0x30b9; -keysym2uni_base[0x4be] = 0x30bb; -keysym2uni_base[0x4bf] = 0x30bd; -keysym2uni_base[0x4c0] = 0x30bf; -keysym2uni_base[0x4c1] = 0x30c1; -keysym2uni_base[0x4c2] = 0x30c4; -keysym2uni_base[0x4c3] = 0x30c6; -keysym2uni_base[0x4c4] = 0x30c8; -keysym2uni_base[0x4c5] = 0x30ca; -keysym2uni_base[0x4c6] = 0x30cb; -keysym2uni_base[0x4c7] = 0x30cc; -keysym2uni_base[0x4c8] = 0x30cd; -keysym2uni_base[0x4c9] = 0x30ce; -keysym2uni_base[0x4ca] = 0x30cf; -keysym2uni_base[0x4cb] = 0x30d2; -keysym2uni_base[0x4cc] = 0x30d5; -keysym2uni_base[0x4cd] = 0x30d8; -keysym2uni_base[0x4ce] = 0x30db; -keysym2uni_base[0x4cf] = 0x30de; -keysym2uni_base[0x4d0] = 0x30df; -keysym2uni_base[0x4d1] = 0x30e0; -keysym2uni_base[0x4d2] = 0x30e1; -keysym2uni_base[0x4d3] = 0x30e2; -keysym2uni_base[0x4d4] = 0x30e4; -keysym2uni_base[0x4d5] = 0x30e6; -keysym2uni_base[0x4d6] = 0x30e8; -keysym2uni_base[0x4d7] = 0x30e9; -keysym2uni_base[0x4d8] = 0x30ea; -keysym2uni_base[0x4d9] = 0x30eb; -keysym2uni_base[0x4da] = 0x30ec; -keysym2uni_base[0x4db] = 0x30ed; -keysym2uni_base[0x4dc] = 0x30ef; -keysym2uni_base[0x4dd] = 0x30f3; -keysym2uni_base[0x4de] = 0x309b; -keysym2uni_base[0x4df] = 0x309c; -keysym2uni_base[0x5ac] = 0x60c; -keysym2uni_base[0x5bb] = 0x61b; -keysym2uni_base[0x5bf] = 0x61f; -keysym2uni_base[0x5c1] = 0x621; -keysym2uni_base[0x5c2] = 0x622; -keysym2uni_base[0x5c3] = 0x623; -keysym2uni_base[0x5c4] = 0x624; -keysym2uni_base[0x5c5] = 0x625; -keysym2uni_base[0x5c6] = 0x626; -keysym2uni_base[0x5c7] = 0x627; -keysym2uni_base[0x5c8] = 0x628; -keysym2uni_base[0x5c9] = 0x629; -keysym2uni_base[0x5ca] = 0x62a; -keysym2uni_base[0x5cb] = 0x62b; -keysym2uni_base[0x5cc] = 0x62c; -keysym2uni_base[0x5cd] = 0x62d; -keysym2uni_base[0x5ce] = 0x62e; -keysym2uni_base[0x5cf] = 0x62f; -keysym2uni_base[0x5d0] = 0x630; -keysym2uni_base[0x5d1] = 0x631; -keysym2uni_base[0x5d2] = 0x632; -keysym2uni_base[0x5d3] = 0x633; -keysym2uni_base[0x5d4] = 0x634; -keysym2uni_base[0x5d5] = 0x635; -keysym2uni_base[0x5d6] = 0x636; -keysym2uni_base[0x5d7] = 0x637; -keysym2uni_base[0x5d8] = 0x638; -keysym2uni_base[0x5d9] = 0x639; -keysym2uni_base[0x5da] = 0x63a; -keysym2uni_base[0x5e0] = 0x640; -keysym2uni_base[0x5e1] = 0x641; -keysym2uni_base[0x5e2] = 0x642; -keysym2uni_base[0x5e3] = 0x643; -keysym2uni_base[0x5e4] = 0x644; -keysym2uni_base[0x5e5] = 0x645; -keysym2uni_base[0x5e6] = 0x646; -keysym2uni_base[0x5e7] = 0x647; -keysym2uni_base[0x5e8] = 0x648; -keysym2uni_base[0x5e9] = 0x649; -keysym2uni_base[0x5ea] = 0x64a; -keysym2uni_base[0x5eb] = 0x64b; -keysym2uni_base[0x5ec] = 0x64c; -keysym2uni_base[0x5ed] = 0x64d; -keysym2uni_base[0x5ee] = 0x64e; -keysym2uni_base[0x5ef] = 0x64f; -keysym2uni_base[0x5f0] = 0x650; -keysym2uni_base[0x5f1] = 0x651; -keysym2uni_base[0x5f2] = 0x652; -keysym2uni_base[0x6a1] = 0x452; -keysym2uni_base[0x6a2] = 0x453; -keysym2uni_base[0x6a3] = 0x451; -keysym2uni_base[0x6a4] = 0x454; -keysym2uni_base[0x6a5] = 0x455; -keysym2uni_base[0x6a6] = 0x456; -keysym2uni_base[0x6a7] = 0x457; -keysym2uni_base[0x6a8] = 0x458; -keysym2uni_base[0x6a9] = 0x459; -keysym2uni_base[0x6aa] = 0x45a; -keysym2uni_base[0x6ab] = 0x45b; -keysym2uni_base[0x6ac] = 0x45c; -keysym2uni_base[0x6ad] = 0x491; -keysym2uni_base[0x6ae] = 0x45e; -keysym2uni_base[0x6af] = 0x45f; -keysym2uni_base[0x6b0] = 0x2116; -keysym2uni_base[0x6b1] = 0x402; -keysym2uni_base[0x6b2] = 0x403; -keysym2uni_base[0x6b3] = 0x401; -keysym2uni_base[0x6b4] = 0x404; -keysym2uni_base[0x6b5] = 0x405; -keysym2uni_base[0x6b6] = 0x406; -keysym2uni_base[0x6b7] = 0x407; -keysym2uni_base[0x6b8] = 0x408; -keysym2uni_base[0x6b9] = 0x409; -keysym2uni_base[0x6ba] = 0x40a; -keysym2uni_base[0x6bb] = 0x40b; -keysym2uni_base[0x6bc] = 0x40c; -keysym2uni_base[0x6bd] = 0x490; -keysym2uni_base[0x6be] = 0x40e; -keysym2uni_base[0x6bf] = 0x40f; -keysym2uni_base[0x6c0] = 0x44e; -keysym2uni_base[0x6c1] = 0x430; -keysym2uni_base[0x6c2] = 0x431; -keysym2uni_base[0x6c3] = 0x446; -keysym2uni_base[0x6c4] = 0x434; -keysym2uni_base[0x6c5] = 0x435; -keysym2uni_base[0x6c6] = 0x444; -keysym2uni_base[0x6c7] = 0x433; -keysym2uni_base[0x6c8] = 0x445; -keysym2uni_base[0x6c9] = 0x438; -keysym2uni_base[0x6ca] = 0x439; -keysym2uni_base[0x6cb] = 0x43a; -keysym2uni_base[0x6cc] = 0x43b; -keysym2uni_base[0x6cd] = 0x43c; -keysym2uni_base[0x6ce] = 0x43d; -keysym2uni_base[0x6cf] = 0x43e; -keysym2uni_base[0x6d0] = 0x43f; -keysym2uni_base[0x6d1] = 0x44f; -keysym2uni_base[0x6d2] = 0x440; -keysym2uni_base[0x6d3] = 0x441; -keysym2uni_base[0x6d4] = 0x442; -keysym2uni_base[0x6d5] = 0x443; -keysym2uni_base[0x6d6] = 0x436; -keysym2uni_base[0x6d7] = 0x432; -keysym2uni_base[0x6d8] = 0x44c; -keysym2uni_base[0x6d9] = 0x44b; -keysym2uni_base[0x6da] = 0x437; -keysym2uni_base[0x6db] = 0x448; -keysym2uni_base[0x6dc] = 0x44d; -keysym2uni_base[0x6dd] = 0x449; -keysym2uni_base[0x6de] = 0x447; -keysym2uni_base[0x6df] = 0x44a; -keysym2uni_base[0x6e0] = 0x42e; -keysym2uni_base[0x6e1] = 0x410; -keysym2uni_base[0x6e2] = 0x411; -keysym2uni_base[0x6e3] = 0x426; -keysym2uni_base[0x6e4] = 0x414; -keysym2uni_base[0x6e5] = 0x415; -keysym2uni_base[0x6e6] = 0x424; -keysym2uni_base[0x6e7] = 0x413; -keysym2uni_base[0x6e8] = 0x425; -keysym2uni_base[0x6e9] = 0x418; -keysym2uni_base[0x6ea] = 0x419; -keysym2uni_base[0x6eb] = 0x41a; -keysym2uni_base[0x6ec] = 0x41b; -keysym2uni_base[0x6ed] = 0x41c; -keysym2uni_base[0x6ee] = 0x41d; -keysym2uni_base[0x6ef] = 0x41e; -keysym2uni_base[0x6f0] = 0x41f; -keysym2uni_base[0x6f1] = 0x42f; -keysym2uni_base[0x6f2] = 0x420; -keysym2uni_base[0x6f3] = 0x421; -keysym2uni_base[0x6f4] = 0x422; -keysym2uni_base[0x6f5] = 0x423; -keysym2uni_base[0x6f6] = 0x416; -keysym2uni_base[0x6f7] = 0x412; -keysym2uni_base[0x6f8] = 0x42c; -keysym2uni_base[0x6f9] = 0x42b; -keysym2uni_base[0x6fa] = 0x417; -keysym2uni_base[0x6fb] = 0x428; -keysym2uni_base[0x6fc] = 0x42d; -keysym2uni_base[0x6fd] = 0x429; -keysym2uni_base[0x6fe] = 0x427; -keysym2uni_base[0x6ff] = 0x42a; -keysym2uni_base[0x7a1] = 0x386; -keysym2uni_base[0x7a2] = 0x388; -keysym2uni_base[0x7a3] = 0x389; -keysym2uni_base[0x7a4] = 0x38a; -keysym2uni_base[0x7a5] = 0x3aa; -keysym2uni_base[0x7a7] = 0x38c; -keysym2uni_base[0x7a8] = 0x38e; -keysym2uni_base[0x7a9] = 0x3ab; -keysym2uni_base[0x7ab] = 0x38f; -keysym2uni_base[0x7ae] = 0x385; -keysym2uni_base[0x7af] = 0x2015; -keysym2uni_base[0x7b1] = 0x3ac; -keysym2uni_base[0x7b2] = 0x3ad; -keysym2uni_base[0x7b3] = 0x3ae; -keysym2uni_base[0x7b4] = 0x3af; -keysym2uni_base[0x7b5] = 0x3ca; -keysym2uni_base[0x7b6] = 0x390; -keysym2uni_base[0x7b7] = 0x3cc; -keysym2uni_base[0x7b8] = 0x3cd; -keysym2uni_base[0x7b9] = 0x3cb; -keysym2uni_base[0x7ba] = 0x3b0; -keysym2uni_base[0x7bb] = 0x3ce; -keysym2uni_base[0x7c1] = 0x391; -keysym2uni_base[0x7c2] = 0x392; -keysym2uni_base[0x7c3] = 0x393; -keysym2uni_base[0x7c4] = 0x394; -keysym2uni_base[0x7c5] = 0x395; -keysym2uni_base[0x7c6] = 0x396; -keysym2uni_base[0x7c7] = 0x397; -keysym2uni_base[0x7c8] = 0x398; -keysym2uni_base[0x7c9] = 0x399; -keysym2uni_base[0x7ca] = 0x39a; -keysym2uni_base[0x7cb] = 0x39b; -keysym2uni_base[0x7cc] = 0x39c; -keysym2uni_base[0x7cd] = 0x39d; -keysym2uni_base[0x7ce] = 0x39e; -keysym2uni_base[0x7cf] = 0x39f; -keysym2uni_base[0x7d0] = 0x3a0; -keysym2uni_base[0x7d1] = 0x3a1; -keysym2uni_base[0x7d2] = 0x3a3; -keysym2uni_base[0x7d4] = 0x3a4; -keysym2uni_base[0x7d5] = 0x3a5; -keysym2uni_base[0x7d6] = 0x3a6; -keysym2uni_base[0x7d7] = 0x3a7; -keysym2uni_base[0x7d8] = 0x3a8; -keysym2uni_base[0x7d9] = 0x3a9; -keysym2uni_base[0x7e1] = 0x3b1; -keysym2uni_base[0x7e2] = 0x3b2; -keysym2uni_base[0x7e3] = 0x3b3; -keysym2uni_base[0x7e4] = 0x3b4; -keysym2uni_base[0x7e5] = 0x3b5; -keysym2uni_base[0x7e6] = 0x3b6; -keysym2uni_base[0x7e7] = 0x3b7; -keysym2uni_base[0x7e8] = 0x3b8; -keysym2uni_base[0x7e9] = 0x3b9; -keysym2uni_base[0x7ea] = 0x3ba; -keysym2uni_base[0x7eb] = 0x3bb; -keysym2uni_base[0x7ec] = 0x3bc; -keysym2uni_base[0x7ed] = 0x3bd; -keysym2uni_base[0x7ee] = 0x3be; -keysym2uni_base[0x7ef] = 0x3bf; -keysym2uni_base[0x7f0] = 0x3c0; -keysym2uni_base[0x7f1] = 0x3c1; -keysym2uni_base[0x7f2] = 0x3c3; -keysym2uni_base[0x7f3] = 0x3c2; -keysym2uni_base[0x7f4] = 0x3c4; -keysym2uni_base[0x7f5] = 0x3c5; -keysym2uni_base[0x7f6] = 0x3c6; -keysym2uni_base[0x7f7] = 0x3c7; -keysym2uni_base[0x7f8] = 0x3c8; -keysym2uni_base[0x7f9] = 0x3c9; -keysym2uni_base[0x8a1] = 0x23b7; -keysym2uni_base[0x9ec] = 0x250c; -keysym2uni_base[0x9f1] = 0x2500; -keysym2uni_base[0x8a4] = 0x2320; -keysym2uni_base[0x8a5] = 0x2321; -keysym2uni_base[0x9f8] = 0x2502; -keysym2uni_base[0x8a7] = 0x23a1; -keysym2uni_base[0x8a8] = 0x23a3; -keysym2uni_base[0x8a9] = 0x23a4; -keysym2uni_base[0x8aa] = 0x23a6; -keysym2uni_base[0x8ab] = 0x239b; -keysym2uni_base[0x8ac] = 0x239d; -keysym2uni_base[0x8ad] = 0x239e; -keysym2uni_base[0x8ae] = 0x23a0; -keysym2uni_base[0x8af] = 0x23a8; -keysym2uni_base[0x8b0] = 0x23ac; -keysym2uni_base[0x8bc] = 0x2264; -keysym2uni_base[0x8bd] = 0x2260; -keysym2uni_base[0x8be] = 0x2265; -keysym2uni_base[0x8bf] = 0x222b; -keysym2uni_base[0x8c0] = 0x2234; -keysym2uni_base[0x8c1] = 0x221d; -keysym2uni_base[0x8c2] = 0x221e; -keysym2uni_base[0x8c5] = 0x2207; -keysym2uni_base[0x8c8] = 0x223c; -keysym2uni_base[0x8c9] = 0x2243; -keysym2uni_base[0x8cd] = 0x21d4; -keysym2uni_base[0x8ce] = 0x21d2; -keysym2uni_base[0x8cf] = 0x2261; -keysym2uni_base[0xbda] = 0x2282; -keysym2uni_base[0xbd8] = 0x2283; -keysym2uni_base[0xbc3] = 0x2229; -keysym2uni_base[0xbd6] = 0x222a; -keysym2uni_base[0xba9] = 0x2227; -keysym2uni_base[0xba8] = 0x2228; -keysym2uni_base[0x8f6] = 0x192; -keysym2uni_base[0x8fb] = 0x2190; -keysym2uni_base[0x8fc] = 0x2191; -keysym2uni_base[0x8fd] = 0x2192; -keysym2uni_base[0x8fe] = 0x2193; -keysym2uni_base[0x9e0] = 0x25c6; -keysym2uni_base[0x9e1] = 0x2592; -keysym2uni_base[0x9e2] = 0x2409; -keysym2uni_base[0x9e3] = 0x240c; -keysym2uni_base[0x9e4] = 0x240d; -keysym2uni_base[0x9e5] = 0x240a; -keysym2uni_base[0x9e8] = 0x2424; -keysym2uni_base[0x9e9] = 0x240b; -keysym2uni_base[0x9ea] = 0x2518; -keysym2uni_base[0x9eb] = 0x2510; -keysym2uni_base[0x9ed] = 0x2514; -keysym2uni_base[0x9ee] = 0x253c; -keysym2uni_base[0x9ef] = 0x23ba; -keysym2uni_base[0x9f0] = 0x23bb; -keysym2uni_base[0x9f2] = 0x23bc; -keysym2uni_base[0x9f3] = 0x23bd; -keysym2uni_base[0x9f4] = 0x251c; -keysym2uni_base[0x9f5] = 0x2524; -keysym2uni_base[0x9f6] = 0x2534; -keysym2uni_base[0x9f7] = 0x252c; -keysym2uni_base[0xaa1] = 0x2003; -keysym2uni_base[0xaa2] = 0x2002; -keysym2uni_base[0xaa3] = 0x2004; -keysym2uni_base[0xaa4] = 0x2005; -keysym2uni_base[0xaa5] = 0x2007; -keysym2uni_base[0xaa6] = 0x2008; -keysym2uni_base[0xaa7] = 0x2009; -keysym2uni_base[0xaa8] = 0x200a; -keysym2uni_base[0xaa9] = 0x2014; -keysym2uni_base[0xaaa] = 0x2013; -keysym2uni_base[0xaac] = 0x2423; -keysym2uni_base[0xaae] = 0x2026; -keysym2uni_base[0xaaf] = 0x2025; -keysym2uni_base[0xab0] = 0x2153; -keysym2uni_base[0xab1] = 0x2154; -keysym2uni_base[0xab2] = 0x2155; -keysym2uni_base[0xab3] = 0x2156; -keysym2uni_base[0xab4] = 0x2157; -keysym2uni_base[0xab5] = 0x2158; -keysym2uni_base[0xab6] = 0x2159; -keysym2uni_base[0xab7] = 0x215a; -keysym2uni_base[0xab8] = 0x2105; -keysym2uni_base[0xabb] = 0x2012; -keysym2uni_base[0xabc] = 0x27e8; -keysym2uni_base[0xabd] = 0x2e; -keysym2uni_base[0xabe] = 0x27e9; -keysym2uni_base[0xac3] = 0x215b; -keysym2uni_base[0xac4] = 0x215c; -keysym2uni_base[0xac5] = 0x215d; -keysym2uni_base[0xac6] = 0x215e; -keysym2uni_base[0xac9] = 0x2122; -keysym2uni_base[0xaca] = 0x2613; -keysym2uni_base[0xacc] = 0x25c1; -keysym2uni_base[0xacd] = 0x25b7; -keysym2uni_base[0xbcf] = 0x25cb; -keysym2uni_base[0xacf] = 0x25af; -keysym2uni_base[0xad0] = 0x2018; -keysym2uni_base[0xad1] = 0x2019; -keysym2uni_base[0xad2] = 0x201c; -keysym2uni_base[0xad3] = 0x201d; -keysym2uni_base[0xad4] = 0x211e; -keysym2uni_base[0xad6] = 0x2032; -keysym2uni_base[0xad7] = 0x2033; -keysym2uni_base[0xad9] = 0x271d; -keysym2uni_base[0xadb] = 0x25ac; -keysym2uni_base[0xadc] = 0x25c0; -keysym2uni_base[0xadd] = 0x25b6; -keysym2uni_base[0xade] = 0x25cf; -keysym2uni_base[0xadf] = 0x25ae; -keysym2uni_base[0xae0] = 0x25e6; -keysym2uni_base[0xae1] = 0x25ab; -keysym2uni_base[0xae2] = 0x25ad; -keysym2uni_base[0xae3] = 0x25b3; -keysym2uni_base[0xae4] = 0x25bd; -keysym2uni_base[0xae5] = 0x2606; -keysym2uni_base[0xae6] = 0x2022; -keysym2uni_base[0xae7] = 0x25aa; -keysym2uni_base[0xae8] = 0x25b2; -keysym2uni_base[0xae9] = 0x25bc; -keysym2uni_base[0xaea] = 0x261c; -keysym2uni_base[0xaeb] = 0x261e; -keysym2uni_base[0xaec] = 0x2663; -keysym2uni_base[0xaed] = 0x2666; -keysym2uni_base[0xaee] = 0x2665; -keysym2uni_base[0xaf0] = 0x2720; -keysym2uni_base[0xaf1] = 0x2020; -keysym2uni_base[0xaf2] = 0x2021; -keysym2uni_base[0xaf3] = 0x2713; -keysym2uni_base[0xaf4] = 0x2717; -keysym2uni_base[0xaf5] = 0x266f; -keysym2uni_base[0xaf6] = 0x266d; -keysym2uni_base[0xaf7] = 0x2642; -keysym2uni_base[0xaf8] = 0x2640; -keysym2uni_base[0xaf9] = 0x260e; -keysym2uni_base[0xafa] = 0x2315; -keysym2uni_base[0xafb] = 0x2117; -keysym2uni_base[0xafc] = 0x2038; -keysym2uni_base[0xafd] = 0x201a; -keysym2uni_base[0xafe] = 0x201e; -keysym2uni_base[0xba3] = 0x3c; -keysym2uni_base[0xba6] = 0x3e; -keysym2uni_base[0xbc0] = 0xaf; -keysym2uni_base[0xbc2] = 0x22a4; -keysym2uni_base[0xbc4] = 0x230a; -keysym2uni_base[0xbca] = 0x2218; -keysym2uni_base[0xbcc] = 0x2395; -keysym2uni_base[0xbce] = 0x22a5; -keysym2uni_base[0xbd3] = 0x2308; -keysym2uni_base[0xbdc] = 0x22a3; -keysym2uni_base[0xbfc] = 0x22a2; -keysym2uni_base[0xcdf] = 0x2017; -keysym2uni_base[0xce0] = 0x5d0; -keysym2uni_base[0xce1] = 0x5d1; -keysym2uni_base[0xce2] = 0x5d2; -keysym2uni_base[0xce3] = 0x5d3; -keysym2uni_base[0xce4] = 0x5d4; -keysym2uni_base[0xce5] = 0x5d5; -keysym2uni_base[0xce6] = 0x5d6; -keysym2uni_base[0xce7] = 0x5d7; -keysym2uni_base[0xce8] = 0x5d8; -keysym2uni_base[0xce9] = 0x5d9; -keysym2uni_base[0xcea] = 0x5da; -keysym2uni_base[0xceb] = 0x5db; -keysym2uni_base[0xcec] = 0x5dc; -keysym2uni_base[0xced] = 0x5dd; -keysym2uni_base[0xcee] = 0x5de; -keysym2uni_base[0xcef] = 0x5df; -keysym2uni_base[0xcf0] = 0x5e0; -keysym2uni_base[0xcf1] = 0x5e1; -keysym2uni_base[0xcf2] = 0x5e2; -keysym2uni_base[0xcf3] = 0x5e3; -keysym2uni_base[0xcf4] = 0x5e4; -keysym2uni_base[0xcf5] = 0x5e5; -keysym2uni_base[0xcf6] = 0x5e6; -keysym2uni_base[0xcf7] = 0x5e7; -keysym2uni_base[0xcf8] = 0x5e8; -keysym2uni_base[0xcf9] = 0x5e9; -keysym2uni_base[0xcfa] = 0x5ea; -keysym2uni_base[0xda1] = 0xe01; -keysym2uni_base[0xda2] = 0xe02; -keysym2uni_base[0xda3] = 0xe03; -keysym2uni_base[0xda4] = 0xe04; -keysym2uni_base[0xda5] = 0xe05; -keysym2uni_base[0xda6] = 0xe06; -keysym2uni_base[0xda7] = 0xe07; -keysym2uni_base[0xda8] = 0xe08; -keysym2uni_base[0xda9] = 0xe09; -keysym2uni_base[0xdaa] = 0xe0a; -keysym2uni_base[0xdab] = 0xe0b; -keysym2uni_base[0xdac] = 0xe0c; -keysym2uni_base[0xdad] = 0xe0d; -keysym2uni_base[0xdae] = 0xe0e; -keysym2uni_base[0xdaf] = 0xe0f; -keysym2uni_base[0xdb0] = 0xe10; -keysym2uni_base[0xdb1] = 0xe11; -keysym2uni_base[0xdb2] = 0xe12; -keysym2uni_base[0xdb3] = 0xe13; -keysym2uni_base[0xdb4] = 0xe14; -keysym2uni_base[0xdb5] = 0xe15; -keysym2uni_base[0xdb6] = 0xe16; -keysym2uni_base[0xdb7] = 0xe17; -keysym2uni_base[0xdb8] = 0xe18; -keysym2uni_base[0xdb9] = 0xe19; -keysym2uni_base[0xdba] = 0xe1a; -keysym2uni_base[0xdbb] = 0xe1b; -keysym2uni_base[0xdbc] = 0xe1c; -keysym2uni_base[0xdbd] = 0xe1d; -keysym2uni_base[0xdbe] = 0xe1e; -keysym2uni_base[0xdbf] = 0xe1f; -keysym2uni_base[0xdc0] = 0xe20; -keysym2uni_base[0xdc1] = 0xe21; -keysym2uni_base[0xdc2] = 0xe22; -keysym2uni_base[0xdc3] = 0xe23; -keysym2uni_base[0xdc4] = 0xe24; -keysym2uni_base[0xdc5] = 0xe25; -keysym2uni_base[0xdc6] = 0xe26; -keysym2uni_base[0xdc7] = 0xe27; -keysym2uni_base[0xdc8] = 0xe28; -keysym2uni_base[0xdc9] = 0xe29; -keysym2uni_base[0xdca] = 0xe2a; -keysym2uni_base[0xdcb] = 0xe2b; -keysym2uni_base[0xdcc] = 0xe2c; -keysym2uni_base[0xdcd] = 0xe2d; -keysym2uni_base[0xdce] = 0xe2e; -keysym2uni_base[0xdcf] = 0xe2f; -keysym2uni_base[0xdd0] = 0xe30; -keysym2uni_base[0xdd1] = 0xe31; -keysym2uni_base[0xdd2] = 0xe32; -keysym2uni_base[0xdd3] = 0xe33; -keysym2uni_base[0xdd4] = 0xe34; -keysym2uni_base[0xdd5] = 0xe35; -keysym2uni_base[0xdd6] = 0xe36; -keysym2uni_base[0xdd7] = 0xe37; -keysym2uni_base[0xdd8] = 0xe38; -keysym2uni_base[0xdd9] = 0xe39; -keysym2uni_base[0xdda] = 0xe3a; -keysym2uni_base[0xddf] = 0xe3f; -keysym2uni_base[0xde0] = 0xe40; -keysym2uni_base[0xde1] = 0xe41; -keysym2uni_base[0xde2] = 0xe42; -keysym2uni_base[0xde3] = 0xe43; -keysym2uni_base[0xde4] = 0xe44; -keysym2uni_base[0xde5] = 0xe45; -keysym2uni_base[0xde6] = 0xe46; -keysym2uni_base[0xde7] = 0xe47; -keysym2uni_base[0xde8] = 0xe48; -keysym2uni_base[0xde9] = 0xe49; -keysym2uni_base[0xdea] = 0xe4a; -keysym2uni_base[0xdeb] = 0xe4b; -keysym2uni_base[0xdec] = 0xe4c; -keysym2uni_base[0xded] = 0xe4d; -keysym2uni_base[0xdf0] = 0xe50; -keysym2uni_base[0xdf1] = 0xe51; -keysym2uni_base[0xdf2] = 0xe52; -keysym2uni_base[0xdf3] = 0xe53; -keysym2uni_base[0xdf4] = 0xe54; -keysym2uni_base[0xdf5] = 0xe55; -keysym2uni_base[0xdf6] = 0xe56; -keysym2uni_base[0xdf7] = 0xe57; -keysym2uni_base[0xdf8] = 0xe58; -keysym2uni_base[0xdf9] = 0xe59; - - -keysym2uni_ext0[0x174] = 0x174; -keysym2uni_ext0[0x176] = 0x176; -keysym2uni_ext0[0x175] = 0x175; -keysym2uni_ext0[0x177] = 0x177; -keysym2uni_ext0[0x6f0] = 0x6f0; -keysym2uni_ext0[0x6f1] = 0x6f1; -keysym2uni_ext0[0x6f2] = 0x6f2; -keysym2uni_ext0[0x6f3] = 0x6f3; -keysym2uni_ext0[0x6f4] = 0x6f4; -keysym2uni_ext0[0x6f5] = 0x6f5; -keysym2uni_ext0[0x6f6] = 0x6f6; -keysym2uni_ext0[0x6f7] = 0x6f7; -keysym2uni_ext0[0x6f8] = 0x6f8; -keysym2uni_ext0[0x6f9] = 0x6f9; -keysym2uni_ext0[0x66a] = 0x66a; -keysym2uni_ext0[0x670] = 0x670; -keysym2uni_ext0[0x679] = 0x679; -keysym2uni_ext0[0x67e] = 0x67e; -keysym2uni_ext0[0x686] = 0x686; -keysym2uni_ext0[0x688] = 0x688; -keysym2uni_ext0[0x691] = 0x691; -keysym2uni_ext0[0x6d4] = 0x6d4; -keysym2uni_ext0[0x660] = 0x660; -keysym2uni_ext0[0x661] = 0x661; -keysym2uni_ext0[0x662] = 0x662; -keysym2uni_ext0[0x663] = 0x663; -keysym2uni_ext0[0x664] = 0x664; -keysym2uni_ext0[0x665] = 0x665; -keysym2uni_ext0[0x666] = 0x666; -keysym2uni_ext0[0x667] = 0x667; -keysym2uni_ext0[0x668] = 0x668; -keysym2uni_ext0[0x669] = 0x669; -keysym2uni_ext0[0x653] = 0x653; -keysym2uni_ext0[0x654] = 0x654; -keysym2uni_ext0[0x655] = 0x655; -keysym2uni_ext0[0x698] = 0x698; -keysym2uni_ext0[0x6a4] = 0x6a4; -keysym2uni_ext0[0x6a9] = 0x6a9; -keysym2uni_ext0[0x6af] = 0x6af; -keysym2uni_ext0[0x6ba] = 0x6ba; -keysym2uni_ext0[0x6be] = 0x6be; -keysym2uni_ext0[0x6cc] = 0x6cc; -keysym2uni_ext0[0x6d2] = 0x6d2; -keysym2uni_ext0[0x6c1] = 0x6c1; -keysym2uni_ext0[0x492] = 0x492; -keysym2uni_ext0[0x493] = 0x493; -keysym2uni_ext0[0x496] = 0x496; -keysym2uni_ext0[0x497] = 0x497; -keysym2uni_ext0[0x49a] = 0x49a; -keysym2uni_ext0[0x49b] = 0x49b; -keysym2uni_ext0[0x49c] = 0x49c; -keysym2uni_ext0[0x49d] = 0x49d; -keysym2uni_ext0[0x4a2] = 0x4a2; -keysym2uni_ext0[0x4a3] = 0x4a3; -keysym2uni_ext0[0x4ae] = 0x4ae; -keysym2uni_ext0[0x4af] = 0x4af; -keysym2uni_ext0[0x4b0] = 0x4b0; -keysym2uni_ext0[0x4b1] = 0x4b1; -keysym2uni_ext0[0x4b2] = 0x4b2; -keysym2uni_ext0[0x4b3] = 0x4b3; -keysym2uni_ext0[0x4b6] = 0x4b6; -keysym2uni_ext0[0x4b7] = 0x4b7; -keysym2uni_ext0[0x4b8] = 0x4b8; -keysym2uni_ext0[0x4b9] = 0x4b9; -keysym2uni_ext0[0x4ba] = 0x4ba; -keysym2uni_ext0[0x4bb] = 0x4bb; -keysym2uni_ext0[0x4d8] = 0x4d8; -keysym2uni_ext0[0x4d9] = 0x4d9; -keysym2uni_ext0[0x4e2] = 0x4e2; -keysym2uni_ext0[0x4e3] = 0x4e3; -keysym2uni_ext0[0x4e8] = 0x4e8; -keysym2uni_ext0[0x4e9] = 0x4e9; -keysym2uni_ext0[0x4ee] = 0x4ee; -keysym2uni_ext0[0x4ef] = 0x4ef; -keysym2uni_ext0[0x587] = 0x587; -keysym2uni_ext0[0x589] = 0x589; -keysym2uni_ext0[0x55d] = 0x55d; -keysym2uni_ext0[0x58a] = 0x58a; -keysym2uni_ext0[0x55c] = 0x55c; -keysym2uni_ext0[0x55b] = 0x55b; -keysym2uni_ext0[0x55e] = 0x55e; -keysym2uni_ext0[0x531] = 0x531; -keysym2uni_ext0[0x561] = 0x561; -keysym2uni_ext0[0x532] = 0x532; -keysym2uni_ext0[0x562] = 0x562; -keysym2uni_ext0[0x533] = 0x533; -keysym2uni_ext0[0x563] = 0x563; -keysym2uni_ext0[0x534] = 0x534; -keysym2uni_ext0[0x564] = 0x564; -keysym2uni_ext0[0x535] = 0x535; -keysym2uni_ext0[0x565] = 0x565; -keysym2uni_ext0[0x536] = 0x536; -keysym2uni_ext0[0x566] = 0x566; -keysym2uni_ext0[0x537] = 0x537; -keysym2uni_ext0[0x567] = 0x567; -keysym2uni_ext0[0x538] = 0x538; -keysym2uni_ext0[0x568] = 0x568; -keysym2uni_ext0[0x539] = 0x539; -keysym2uni_ext0[0x569] = 0x569; -keysym2uni_ext0[0x53a] = 0x53a; -keysym2uni_ext0[0x56a] = 0x56a; -keysym2uni_ext0[0x53b] = 0x53b; -keysym2uni_ext0[0x56b] = 0x56b; -keysym2uni_ext0[0x53c] = 0x53c; -keysym2uni_ext0[0x56c] = 0x56c; -keysym2uni_ext0[0x53d] = 0x53d; -keysym2uni_ext0[0x56d] = 0x56d; -keysym2uni_ext0[0x53e] = 0x53e; -keysym2uni_ext0[0x56e] = 0x56e; -keysym2uni_ext0[0x53f] = 0x53f; -keysym2uni_ext0[0x56f] = 0x56f; -keysym2uni_ext0[0x540] = 0x540; -keysym2uni_ext0[0x570] = 0x570; -keysym2uni_ext0[0x541] = 0x541; -keysym2uni_ext0[0x571] = 0x571; -keysym2uni_ext0[0x542] = 0x542; -keysym2uni_ext0[0x572] = 0x572; -keysym2uni_ext0[0x543] = 0x543; -keysym2uni_ext0[0x573] = 0x573; -keysym2uni_ext0[0x544] = 0x544; -keysym2uni_ext0[0x574] = 0x574; -keysym2uni_ext0[0x545] = 0x545; -keysym2uni_ext0[0x575] = 0x575; -keysym2uni_ext0[0x546] = 0x546; -keysym2uni_ext0[0x576] = 0x576; -keysym2uni_ext0[0x547] = 0x547; -keysym2uni_ext0[0x577] = 0x577; -keysym2uni_ext0[0x548] = 0x548; -keysym2uni_ext0[0x578] = 0x578; -keysym2uni_ext0[0x549] = 0x549; -keysym2uni_ext0[0x579] = 0x579; -keysym2uni_ext0[0x54a] = 0x54a; -keysym2uni_ext0[0x57a] = 0x57a; -keysym2uni_ext0[0x54b] = 0x54b; -keysym2uni_ext0[0x57b] = 0x57b; -keysym2uni_ext0[0x54c] = 0x54c; -keysym2uni_ext0[0x57c] = 0x57c; -keysym2uni_ext0[0x54d] = 0x54d; -keysym2uni_ext0[0x57d] = 0x57d; -keysym2uni_ext0[0x54e] = 0x54e; -keysym2uni_ext0[0x57e] = 0x57e; -keysym2uni_ext0[0x54f] = 0x54f; -keysym2uni_ext0[0x57f] = 0x57f; -keysym2uni_ext0[0x550] = 0x550; -keysym2uni_ext0[0x580] = 0x580; -keysym2uni_ext0[0x551] = 0x551; -keysym2uni_ext0[0x581] = 0x581; -keysym2uni_ext0[0x552] = 0x552; -keysym2uni_ext0[0x582] = 0x582; -keysym2uni_ext0[0x553] = 0x553; -keysym2uni_ext0[0x583] = 0x583; -keysym2uni_ext0[0x554] = 0x554; -keysym2uni_ext0[0x584] = 0x584; -keysym2uni_ext0[0x555] = 0x555; -keysym2uni_ext0[0x585] = 0x585; -keysym2uni_ext0[0x556] = 0x556; -keysym2uni_ext0[0x586] = 0x586; -keysym2uni_ext0[0x55a] = 0x55a; -keysym2uni_ext0[0x1b5] = 0x1b5; -keysym2uni_ext0[0x1e6] = 0x1e6; -keysym2uni_ext0[0x1d2] = 0x1d2; -keysym2uni_ext0[0x19f] = 0x19f; -keysym2uni_ext0[0x12d] = 0x12d; -keysym2uni_ext0[0x1b6] = 0x1b6; -keysym2uni_ext0[0x1e7] = 0x1e7; -keysym2uni_ext0[0x275] = 0x275; -keysym2uni_ext0[0x18f] = 0x18f; -keysym2uni_ext0[0x259] = 0x259; -keysym2uni_ext0[0x1a0] = 0x1a0; -keysym2uni_ext0[0x1a1] = 0x1a1; -keysym2uni_ext0[0x1af] = 0x1af; -keysym2uni_ext0[0x1b0] = 0x1b0; - - -keysym2uni_ext1[0xe02] = 0x1e02; -keysym2uni_ext1[0xe03] = 0x1e03; -keysym2uni_ext1[0xe0a] = 0x1e0a; -keysym2uni_ext1[0xe80] = 0x1e80; -keysym2uni_ext1[0xe82] = 0x1e82; -keysym2uni_ext1[0xe0b] = 0x1e0b; -keysym2uni_ext1[0xef2] = 0x1ef2; -keysym2uni_ext1[0xe1e] = 0x1e1e; -keysym2uni_ext1[0xe1f] = 0x1e1f; -keysym2uni_ext1[0xe40] = 0x1e40; -keysym2uni_ext1[0xe41] = 0x1e41; -keysym2uni_ext1[0xe56] = 0x1e56; -keysym2uni_ext1[0xe81] = 0x1e81; -keysym2uni_ext1[0xe57] = 0x1e57; -keysym2uni_ext1[0xe83] = 0x1e83; -keysym2uni_ext1[0xe60] = 0x1e60; -keysym2uni_ext1[0xef3] = 0x1ef3; -keysym2uni_ext1[0xe84] = 0x1e84; -keysym2uni_ext1[0xe85] = 0x1e85; -keysym2uni_ext1[0xe61] = 0x1e61; -keysym2uni_ext1[0xe6a] = 0x1e6a; -keysym2uni_ext1[0xe6b] = 0x1e6b; -keysym2uni_ext1[0x0d0] = 0x10d0; -keysym2uni_ext1[0x0d1] = 0x10d1; -keysym2uni_ext1[0x0d2] = 0x10d2; -keysym2uni_ext1[0x0d3] = 0x10d3; -keysym2uni_ext1[0x0d4] = 0x10d4; -keysym2uni_ext1[0x0d5] = 0x10d5; -keysym2uni_ext1[0x0d6] = 0x10d6; -keysym2uni_ext1[0x0d7] = 0x10d7; -keysym2uni_ext1[0x0d8] = 0x10d8; -keysym2uni_ext1[0x0d9] = 0x10d9; -keysym2uni_ext1[0x0da] = 0x10da; -keysym2uni_ext1[0x0db] = 0x10db; -keysym2uni_ext1[0x0dc] = 0x10dc; -keysym2uni_ext1[0x0dd] = 0x10dd; -keysym2uni_ext1[0x0de] = 0x10de; -keysym2uni_ext1[0x0df] = 0x10df; -keysym2uni_ext1[0x0e0] = 0x10e0; -keysym2uni_ext1[0x0e1] = 0x10e1; -keysym2uni_ext1[0x0e2] = 0x10e2; -keysym2uni_ext1[0x0e3] = 0x10e3; -keysym2uni_ext1[0x0e4] = 0x10e4; -keysym2uni_ext1[0x0e5] = 0x10e5; -keysym2uni_ext1[0x0e6] = 0x10e6; -keysym2uni_ext1[0x0e7] = 0x10e7; -keysym2uni_ext1[0x0e8] = 0x10e8; -keysym2uni_ext1[0x0e9] = 0x10e9; -keysym2uni_ext1[0x0ea] = 0x10ea; -keysym2uni_ext1[0x0eb] = 0x10eb; -keysym2uni_ext1[0x0ec] = 0x10ec; -keysym2uni_ext1[0x0ed] = 0x10ed; -keysym2uni_ext1[0x0ee] = 0x10ee; -keysym2uni_ext1[0x0ef] = 0x10ef; -keysym2uni_ext1[0x0f0] = 0x10f0; -keysym2uni_ext1[0x0f1] = 0x10f1; -keysym2uni_ext1[0x0f2] = 0x10f2; -keysym2uni_ext1[0x0f3] = 0x10f3; -keysym2uni_ext1[0x0f4] = 0x10f4; -keysym2uni_ext1[0x0f5] = 0x10f5; -keysym2uni_ext1[0x0f6] = 0x10f6; -keysym2uni_ext1[0xe8b] = 0x1e8b; -keysym2uni_ext1[0xe36] = 0x1e36; -keysym2uni_ext1[0xe37] = 0x1e37; -keysym2uni_ext1[0xea0] = 0x1ea0; -keysym2uni_ext1[0xea1] = 0x1ea1; -keysym2uni_ext1[0xea2] = 0x1ea2; -keysym2uni_ext1[0xea3] = 0x1ea3; -keysym2uni_ext1[0xea4] = 0x1ea4; -keysym2uni_ext1[0xea5] = 0x1ea5; -keysym2uni_ext1[0xea6] = 0x1ea6; -keysym2uni_ext1[0xea7] = 0x1ea7; -keysym2uni_ext1[0xea8] = 0x1ea8; -keysym2uni_ext1[0xea9] = 0x1ea9; -keysym2uni_ext1[0xeaa] = 0x1eaa; -keysym2uni_ext1[0xeab] = 0x1eab; -keysym2uni_ext1[0xeac] = 0x1eac; -keysym2uni_ext1[0xead] = 0x1ead; -keysym2uni_ext1[0xeae] = 0x1eae; -keysym2uni_ext1[0xeaf] = 0x1eaf; -keysym2uni_ext1[0xeb0] = 0x1eb0; -keysym2uni_ext1[0xeb1] = 0x1eb1; -keysym2uni_ext1[0xeb2] = 0x1eb2; -keysym2uni_ext1[0xeb3] = 0x1eb3; -keysym2uni_ext1[0xeb4] = 0x1eb4; -keysym2uni_ext1[0xeb5] = 0x1eb5; -keysym2uni_ext1[0xeb6] = 0x1eb6; -keysym2uni_ext1[0xeb7] = 0x1eb7; -keysym2uni_ext1[0xeb8] = 0x1eb8; -keysym2uni_ext1[0xeb9] = 0x1eb9; -keysym2uni_ext1[0xeba] = 0x1eba; -keysym2uni_ext1[0xebb] = 0x1ebb; -keysym2uni_ext1[0xebc] = 0x1ebc; -keysym2uni_ext1[0xebd] = 0x1ebd; -keysym2uni_ext1[0xebe] = 0x1ebe; -keysym2uni_ext1[0xebf] = 0x1ebf; -keysym2uni_ext1[0xec0] = 0x1ec0; -keysym2uni_ext1[0xec1] = 0x1ec1; -keysym2uni_ext1[0xec2] = 0x1ec2; -keysym2uni_ext1[0xec3] = 0x1ec3; -keysym2uni_ext1[0xec4] = 0x1ec4; -keysym2uni_ext1[0xec5] = 0x1ec5; -keysym2uni_ext1[0xec6] = 0x1ec6; -keysym2uni_ext1[0xec7] = 0x1ec7; -keysym2uni_ext1[0xec8] = 0x1ec8; -keysym2uni_ext1[0xec9] = 0x1ec9; -keysym2uni_ext1[0xeca] = 0x1eca; -keysym2uni_ext1[0xecb] = 0x1ecb; -keysym2uni_ext1[0xecc] = 0x1ecc; -keysym2uni_ext1[0xecd] = 0x1ecd; -keysym2uni_ext1[0xece] = 0x1ece; -keysym2uni_ext1[0xecf] = 0x1ecf; -keysym2uni_ext1[0xed0] = 0x1ed0; -keysym2uni_ext1[0xed1] = 0x1ed1; -keysym2uni_ext1[0xed2] = 0x1ed2; -keysym2uni_ext1[0xed3] = 0x1ed3; -keysym2uni_ext1[0xed4] = 0x1ed4; -keysym2uni_ext1[0xed5] = 0x1ed5; -keysym2uni_ext1[0xed6] = 0x1ed6; -keysym2uni_ext1[0xed7] = 0x1ed7; -keysym2uni_ext1[0xed8] = 0x1ed8; -keysym2uni_ext1[0xed9] = 0x1ed9; -keysym2uni_ext1[0xeda] = 0x1eda; -keysym2uni_ext1[0xedb] = 0x1edb; -keysym2uni_ext1[0xedc] = 0x1edc; -keysym2uni_ext1[0xedd] = 0x1edd; -keysym2uni_ext1[0xede] = 0x1ede; -keysym2uni_ext1[0xedf] = 0x1edf; -keysym2uni_ext1[0xee0] = 0x1ee0; -keysym2uni_ext1[0xee1] = 0x1ee1; -keysym2uni_ext1[0xee2] = 0x1ee2; -keysym2uni_ext1[0xee3] = 0x1ee3; -keysym2uni_ext1[0xee4] = 0x1ee4; -keysym2uni_ext1[0xee5] = 0x1ee5; -keysym2uni_ext1[0xee6] = 0x1ee6; -keysym2uni_ext1[0xee7] = 0x1ee7; -keysym2uni_ext1[0xee8] = 0x1ee8; -keysym2uni_ext1[0xee9] = 0x1ee9; -keysym2uni_ext1[0xeea] = 0x1eea; -keysym2uni_ext1[0xeeb] = 0x1eeb; -keysym2uni_ext1[0xeec] = 0x1eec; -keysym2uni_ext1[0xeed] = 0x1eed; -keysym2uni_ext1[0xeee] = 0x1eee; -keysym2uni_ext1[0xeef] = 0x1eef; -keysym2uni_ext1[0xef0] = 0x1ef0; -keysym2uni_ext1[0xef1] = 0x1ef1; -keysym2uni_ext1[0xef4] = 0x1ef4; -keysym2uni_ext1[0xef5] = 0x1ef5; -keysym2uni_ext1[0xef6] = 0x1ef6; -keysym2uni_ext1[0xef7] = 0x1ef7; -keysym2uni_ext1[0xef8] = 0x1ef8; -keysym2uni_ext1[0xef9] = 0x1ef9; - - -keysym2uni_ext2[0x21a] = 0x221a; -keysym2uni_ext2[0x202] = 0x2202; -keysym2uni_ext2[0x0a9] = 0x20a9; -keysym2uni_ext2[0x0a0] = 0x20a0; -keysym2uni_ext2[0x0a1] = 0x20a1; -keysym2uni_ext2[0x0a2] = 0x20a2; -keysym2uni_ext2[0x0a3] = 0x20a3; -keysym2uni_ext2[0x0a4] = 0x20a4; -keysym2uni_ext2[0x0a5] = 0x20a5; -keysym2uni_ext2[0x0a6] = 0x20a6; -keysym2uni_ext2[0x0a7] = 0x20a7; -keysym2uni_ext2[0x0a8] = 0x20a8; -keysym2uni_ext2[0x0aa] = 0x20aa; -keysym2uni_ext2[0x0ab] = 0x20ab; -keysym2uni_ext2[0x070] = 0x2070; -keysym2uni_ext2[0x074] = 0x2074; -keysym2uni_ext2[0x075] = 0x2075; -keysym2uni_ext2[0x076] = 0x2076; -keysym2uni_ext2[0x077] = 0x2077; -keysym2uni_ext2[0x078] = 0x2078; -keysym2uni_ext2[0x079] = 0x2079; -keysym2uni_ext2[0x080] = 0x2080; -keysym2uni_ext2[0x081] = 0x2081; -keysym2uni_ext2[0x082] = 0x2082; -keysym2uni_ext2[0x083] = 0x2083; -keysym2uni_ext2[0x084] = 0x2084; -keysym2uni_ext2[0x085] = 0x2085; -keysym2uni_ext2[0x086] = 0x2086; -keysym2uni_ext2[0x087] = 0x2087; -keysym2uni_ext2[0x088] = 0x2088; -keysym2uni_ext2[0x089] = 0x2089; -keysym2uni_ext2[0x205] = 0x2205; -keysym2uni_ext2[0x208] = 0x2208; -keysym2uni_ext2[0x209] = 0x2209; -keysym2uni_ext2[0x20b] = 0x220b; -keysym2uni_ext2[0x21b] = 0x221b; -keysym2uni_ext2[0x21c] = 0x221c; -keysym2uni_ext2[0x22c] = 0x222c; -keysym2uni_ext2[0x22d] = 0x222d; -keysym2uni_ext2[0x235] = 0x2235; -keysym2uni_ext2[0x248] = 0x2245; -keysym2uni_ext2[0x247] = 0x2247; -keysym2uni_ext2[0x262] = 0x2262; -keysym2uni_ext2[0x263] = 0x2263; -} diff --git a/protocols/rdp/tools/ini2dot_h_unimap.py b/protocols/rdp/tools/ini2dot_h_unimap.py deleted file mode 100644 index 16573edb..00000000 --- a/protocols/rdp/tools/ini2dot_h_unimap.py +++ /dev/null @@ -1,129 +0,0 @@ -#!/usr/bin/env python - -# ***** BEGIN LICENSE BLOCK ***** -# Version: MPL 1.1/GPL 2.0/LGPL 2.1 -# -# The contents of this file are subject to the Mozilla Public License Version -# 1.1 (the "License"); you may not use this file except in compliance with -# the License. You may obtain a copy of the License at -# http://www.mozilla.org/MPL/ -# -# Software distributed under the License is distributed on an "AS IS" basis, -# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License -# for the specific language governing rights and limitations under the -# License. -# -# The Original Code is libguac-client-rdp. -# -# The Initial Developer of the Original Code is -# Jocelyn DELALANDE Ulteo SAS - http://www.ulteo.com -# -# Portions created by the Initial Developer are Copyright (C) 2012 Ulteo SAS. -# -# Contributor(s): -# -# Alternatively, the contents of this file may be used under the terms of -# either the GNU General Public License Version 2 or later (the "GPL"), or -# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), -# in which case the provisions of the GPL or the LGPL are applicable instead -# of those above. If you wish to allow use of your version of this file only -# under the terms of either the GPL or the LGPL, and not to allow others to -# use your version of this file under the terms of the MPL, indicate your -# decision by deleting the provisions above and replace them with the notice -# and other provisions required by the GPL or the LGPL. If you do not delete -# the provisions above, a recipient may use your version of this file under -# the terms of any one of the MPL, the GPL or the LGPL. -# -# ***** END LICENSE BLOCK ***** - -# Converts a .ini file defining unicode exceptions to a dot_h file -# The dot_h file defines an array of keysim->unicode -# -# Used to extract the keysym<->unicode mapping exceptions from -# unicode_exception.ini (can be found in Ulteo patched version of xrdp) -# -# Such an ini file can be found at -# http://www.ulteo.com/home/en/download/sourcecode (xrdp folder) -# - -import sys -import ConfigParser - - -class KeysymMaps: - def __init__(self): - # 4 digits keysyms - self.base = [] - # Extented keysym starting with 0x1000 - self.ext0 = [] - # Extented keysym starting with 0x1001 - self.ext1 = [] - # Extented keysym starting with 0x1002 - self.ext2 = [] - - def insert(self, keysym, uni): - # Main keysym table is 4-digit hexa keysyms - # (most of 'em are 3-digits but they lack the leading zero) - if len(keysym) <= 6: - self.base.append((keysym[2:], uni)) - - elif keysym.startswith('0x100'): - if keysym[:6] == '0x1000': - self.ext0.append((keysym[6:], uni)) - elif keysym[:6] == '0x1001': - self.ext1.append((keysym[6:], uni)) - elif keysym[:6] == '0x1002': - self.ext2.append((keysym[6:], uni)) - - else: - raise ValueError("Unexpected keysym : %s" % keysym) - - else: - raise ValueError("Unexpected keysym : %s" % keysym) - - def get_h_content(self, base_name, ext0_name, ext1_name, ext2_name): - out = '' - maps = ((base_name, self.base), - (ext0_name, self.ext0), - (ext1_name, self.ext1), - (ext2_name, self.ext2)) - - for var_name, kmap in maps: - for keysym, uni in kmap: - out += '%s[0x%s] = %s;\n' %(var_name, keysym, uni) - out += '\n\n' - return out - - -if __name__ == '__main__': - if len(sys.argv) < 2: - print "ini2dot_h_unimap.py " - exit(2) - - inifile = sys.argv[1] - - print "uni2keysym_map[]" - - ini = ConfigParser.ConfigParser() - ini.read([inifile]) - mapping = ini.items('unicode_exception') - - maps = KeysymMaps() - - - for uni, keysym in mapping: - maps.insert(keysym, uni) - - dot_h_content = \ -""" -int keysm2uni_base[4096]; -int keysm2uni_ext0[4096]; -int keysm2uni_ext1[4096]; -int keysm2uni_ext2[4096]; - - -""" - dot_h_content += maps.get_h_content('keysm2uni_base', 'keysm2uni_ext0', - 'keysm2uni_ext1', 'keysm2uni_ext2'); - - print dot_h_content From 13415ebcdb55eca67f2aeb419348a95246ff8a10 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Wed, 16 May 2012 01:33:34 -0700 Subject: [PATCH 162/253] Remove now unused altcode function. --- protocols/rdp/include/rdp_keymap.h | 3 ++- protocols/rdp/src/guac_handlers.c | 43 ------------------------------ 2 files changed, 2 insertions(+), 44 deletions(-) diff --git a/protocols/rdp/include/rdp_keymap.h b/protocols/rdp/include/rdp_keymap.h index 8de2de54..05b0b018 100644 --- a/protocols/rdp/include/rdp_keymap.h +++ b/protocols/rdp/include/rdp_keymap.h @@ -132,7 +132,8 @@ extern const guac_rdp_keymap guac_rdp_keymap_en_us; extern const guac_rdp_keymap guac_rdp_keymap_base; /** - * Simple macro for referencing the mapped value of an altcode or scancode for a given keysym. + * Simple macro for referencing the mapped value of a scancode for a given + * keysym. */ #define GUAC_RDP_KEYSYM_LOOKUP(keysym_mapping, keysym) ((keysym_mapping)[((keysym) & 0xFF00) >> 8][(keysym) & 0xFF]) diff --git a/protocols/rdp/src/guac_handlers.c b/protocols/rdp/src/guac_handlers.c index a712e568..4c1bf1f2 100644 --- a/protocols/rdp/src/guac_handlers.c +++ b/protocols/rdp/src/guac_handlers.c @@ -65,7 +65,6 @@ void __guac_rdp_update_keysyms(guac_client* client, const int* keysym_string, int from, int to); int __guac_rdp_send_keysym(guac_client* client, int keysym, int pressed); -void __guac_rdp_send_altcode(guac_client* client, int altcode); int rdp_guac_client_free_handler(guac_client* client) { @@ -279,48 +278,6 @@ int rdp_guac_client_mouse_handler(guac_client* client, int x, int y, int mask) { return 0; } -void __guac_rdp_send_altcode(guac_client* client, int altcode) { - - rdp_guac_client_data* guac_client_data = (rdp_guac_client_data*) client->data; - freerdp* rdp_inst = guac_client_data->rdp_inst; - int i; - - /* Lookup scancode for Alt */ - int alt = GUAC_RDP_KEYSYM_LOOKUP( - guac_client_data->keymap, - 0xFFE9 /* Alt_L */).scancode; - - /* Release all pressed modifiers */ - __guac_rdp_update_keysyms(client, GUAC_KEYSYMS_ALL_MODIFIERS, 1, 0); - - /* Press Alt */ - rdp_inst->input->KeyboardEvent(rdp_inst->input, KBD_FLAGS_DOWN, alt); - - /* For each character in four-digit Alt-code ... */ - for (i=0; i<4; i++) { - - /* Get scancode of keypad digit */ - int scancode = GUAC_RDP_KEYSYM_LOOKUP( - guac_client_data->keymap, - 0xFFB0 + (altcode / 1000) - ).scancode; - - /* Press and release digit */ - rdp_inst->input->KeyboardEvent(rdp_inst->input, KBD_FLAGS_DOWN, scancode); - rdp_inst->input->KeyboardEvent(rdp_inst->input, KBD_FLAGS_RELEASE, scancode); - - /* Shift digits left by one place */ - altcode = (altcode * 10) % 10000; - - } - - /* Release Alt */ - rdp_inst->input->KeyboardEvent(rdp_inst->input, KBD_FLAGS_RELEASE, alt); - - /* Press all originally pressed modifiers */ - __guac_rdp_update_keysyms(client, GUAC_KEYSYMS_ALL_MODIFIERS, 1, 1); - -} int __guac_rdp_send_keysym(guac_client* client, int keysym, int pressed) { From 2056ab9619f29bc2da6d2ade70de6d070508bfa0 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Wed, 16 May 2012 10:29:43 -0700 Subject: [PATCH 163/253] Log when no equivalence between keysym and Unicode. Remove debug log. --- protocols/rdp/src/guac_handlers.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/protocols/rdp/src/guac_handlers.c b/protocols/rdp/src/guac_handlers.c index 4c1bf1f2..f0b6e888 100644 --- a/protocols/rdp/src/guac_handlers.c +++ b/protocols/rdp/src/guac_handlers.c @@ -309,8 +309,6 @@ int __guac_rdp_send_keysym(guac_client* client, int keysym, int pressed) { | (pressed ? KBD_FLAGS_DOWN : KBD_FLAGS_RELEASE), keysym_desc->scancode); - guac_client_log_info(client, "Base flags are %d", keysym_desc->flags); - /* If defined, release any keys that were originally released */ if (keysym_desc->set_keysyms != NULL) __guac_rdp_update_keysyms(client, keysym_desc->set_keysyms, 0, 0); @@ -326,17 +324,25 @@ int __guac_rdp_send_keysym(guac_client* client, int keysym, int pressed) { /* Fall back to unicode events if undefined inside current keymap */ - /* Only send when key pressed - Unicode events do not have DOWN/RELEASE flags */ + /* Only send when key pressed - Unicode events do not have + * DOWN/RELEASE flags */ if (pressed) { /* Translate keysym into codepoint */ int codepoint; if (keysym <= 0xFF) codepoint = keysym; - else + else if (keysym >= 0x1000000) codepoint = keysym & 0xFFFFFF; + else { + guac_client_log_info(client, + "Unmapped keysym has no equivalent unicode " + "value: 0x%x", keysym); + return 0; + } - guac_client_log_info(client, "Translated keysym 0x%x to U+%04X", keysym, codepoint); + guac_client_log_info(client, "Translated keysym 0x%x to U+%04X", + keysym, codepoint); /* Send Unicode event */ rdp_inst->input->UnicodeKeyboardEvent( From d7c5ec5ed0a52a88e65db37c8d568b45c16953b6 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Wed, 16 May 2012 19:52:43 -0700 Subject: [PATCH 164/253] Implement default pointer (currently drawn with draw instructions - not an embedded bitmap). --- protocols/rdp/include/rdp_pointer.h | 1 + protocols/rdp/src/client.c | 3 +++ protocols/rdp/src/rdp_pointer.c | 35 +++++++++++++++++++++++++++++ 3 files changed, 39 insertions(+) diff --git a/protocols/rdp/include/rdp_pointer.h b/protocols/rdp/include/rdp_pointer.h index ff870913..516f36ac 100644 --- a/protocols/rdp/include/rdp_pointer.h +++ b/protocols/rdp/include/rdp_pointer.h @@ -59,5 +59,6 @@ typedef struct guac_rdp_pointer { void guac_rdp_pointer_new(rdpContext* context, rdpPointer* pointer); void guac_rdp_pointer_set(rdpContext* context, rdpPointer* pointer); void guac_rdp_pointer_free(rdpContext* context, rdpPointer* pointer); +void guac_rdp_pointer_set_default(guac_client* client); #endif diff --git a/protocols/rdp/src/client.c b/protocols/rdp/src/client.c index 3a7c5f61..690427c7 100644 --- a/protocols/rdp/src/client.c +++ b/protocols/rdp/src/client.c @@ -429,6 +429,9 @@ int guac_client_init(guac_client* client, int argc, char** argv) { guac_client_data->trans_glyph_surface = cairo_image_surface_create( CAIRO_FORMAT_ARGB32, settings->width, settings->height); + /* Set default pointer */ + guac_rdp_pointer_set_default(client); + /* Success */ return 0; diff --git a/protocols/rdp/src/rdp_pointer.c b/protocols/rdp/src/rdp_pointer.c index 00ea93fe..b8b1f118 100644 --- a/protocols/rdp/src/rdp_pointer.c +++ b/protocols/rdp/src/rdp_pointer.c @@ -100,3 +100,38 @@ void guac_rdp_pointer_free(rdpContext* context, rdpPointer* pointer) { } +void guac_rdp_pointer_set_default(guac_client* client) { + + guac_socket* socket = client->socket; + + /* Draw to buffer */ + guac_layer* cursor = guac_client_alloc_buffer(client); + guac_protocol_send_size(socket, cursor, 110, 160); + + /* Draw cursor */ + guac_protocol_send_start(socket, cursor, 0, 0); + guac_protocol_send_line(socket, cursor, 10, 10); + guac_protocol_send_line(socket, cursor, 6, 10); + guac_protocol_send_line(socket, cursor, 8, 15); + guac_protocol_send_line(socket, cursor, 5, 15); + guac_protocol_send_line(socket, cursor, 3, 11); + guac_protocol_send_line(socket, cursor, 0, 14); + guac_protocol_send_close(socket, cursor); + + /* Fill */ + guac_protocol_send_cfill(socket, GUAC_COMP_OVER, cursor, + 0x00, 0x00, 0x00, 0xFF); + + /* Stroke */ + guac_protocol_send_cstroke(socket, GUAC_COMP_OVER, cursor, + GUAC_LINE_CAP_SQUARE, GUAC_LINE_JOIN_BEVEL, 1, + 0xFF, 0xFF, 0xFF, 0xFF); + + /* Set cursor */ + guac_protocol_send_cursor(socket, 0, 0, cursor, 0, 0, 11, 16); + + /* Free buffer */ + guac_client_free_buffer(client, cursor); + +} + From 2807b6dea9417341cea8ee7bdee1e6639890817f Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Thu, 17 May 2012 00:48:05 -0700 Subject: [PATCH 165/253] Using embedded bitmap rather than raster-drawn cursor. --- protocols/rdp/Makefile.am | 20 +++---- protocols/rdp/include/default_pointer.h | 46 +++++++++++++++++ protocols/rdp/src/default_pointer.c | 69 +++++++++++++++++++++++++ protocols/rdp/src/rdp_pointer.c | 25 +++------ 4 files changed, 133 insertions(+), 27 deletions(-) create mode 100644 protocols/rdp/include/default_pointer.h create mode 100644 protocols/rdp/src/default_pointer.c diff --git a/protocols/rdp/Makefile.am b/protocols/rdp/Makefile.am index c7069eec..c87f6faa 100644 --- a/protocols/rdp/Makefile.am +++ b/protocols/rdp/Makefile.am @@ -44,16 +44,18 @@ lib_LTLIBRARIES = libguac-client-rdp.la libguac_client_rdp_la_SOURCES = src/client.c src/rdp_bitmap.c src/rdp_glyph.c src/rdp_pointer.c src/rdp_gdi.c src/guac_handlers.c src/rdp_cliprdr.c \ src/rdp_keymap.c \ src/rdp_keymap_base.c \ - src/rdp_keymap_en_us.c + src/rdp_keymap_en_us.c \ + src/default_pointer.c -noinst_HEADERS = \ - include/client.h \ - include/guac_handlers.h \ - include/rdp_bitmap.h \ - include/rdp_cliprdr.h \ - include/rdp_gdi.h \ - include/rdp_glyph.h \ - include/rdp_keymap.h \ +noinst_HEADERS = \ + include/client.h \ + include/default_pointer.h \ + include/guac_handlers.h \ + include/rdp_bitmap.h \ + include/rdp_cliprdr.h \ + include/rdp_gdi.h \ + include/rdp_glyph.h \ + include/rdp_keymap.h \ include/rdp_pointer.h libguac_client_rdp_la_LDFLAGS = -version-info 0:0:0 diff --git a/protocols/rdp/include/default_pointer.h b/protocols/rdp/include/default_pointer.h new file mode 100644 index 00000000..68e02340 --- /dev/null +++ b/protocols/rdp/include/default_pointer.h @@ -0,0 +1,46 @@ + +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is libguac-client-rdp. + * + * The Initial Developer of the Original Code is + * Michael Jumper. + * Portions created by the Initial Developer are Copyright (C) 2011 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#ifndef _GUAC_RDP_DEFAULT_POINTER_H +#define _GUAC_RDP_DEFAULT_POINTER_H + +/** + * Embedded 11x16 24-bit RGBA cursor graphic. + */ +extern unsigned char guac_rdp_default_pointer[]; + +#endif diff --git a/protocols/rdp/src/default_pointer.c b/protocols/rdp/src/default_pointer.c new file mode 100644 index 00000000..af5a6009 --- /dev/null +++ b/protocols/rdp/src/default_pointer.c @@ -0,0 +1,69 @@ + +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is libguac-client-rdp. + * + * The Initial Developer of the Original Code is + * Michael Jumper. + * Portions created by the Initial Developer are Copyright (C) 2011 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +/* Macros for prettying up the embedded image. */ +#define X 0x00,0x00,0x00,0xFF +#define O 0xFF,0xFF,0xFF,0xFF +#define _ 0x00,0x00,0x00,0x00 + +/* Embedded pointer graphic */ +unsigned char guac_rdp_default_pointer[] = { + + O,_,_,_,_,_,_,_,_,_,_, + O,O,_,_,_,_,_,_,_,_,_, + O,X,O,_,_,_,_,_,_,_,_, + O,X,X,O,_,_,_,_,_,_,_, + O,X,X,X,O,_,_,_,_,_,_, + O,X,X,X,X,O,_,_,_,_,_, + O,X,X,X,X,X,O,_,_,_,_, + O,X,X,X,X,X,X,O,_,_,_, + O,X,X,X,X,X,X,X,O,_,_, + O,X,X,X,X,X,X,X,X,O,_, + O,X,X,X,X,X,O,O,O,O,O, + O,X,X,O,X,X,O,_,_,_,_, + O,X,O,_,O,X,X,O,_,_,_, + O,O,_,_,O,X,X,O,_,_,_, + O,_,_,_,_,O,X,X,O,_,_, + _,_,_,_,_,O,O,O,O,_,_ + +}; + +/* Undefine image-specific macros */ +#undef X +#undef O +#undef _ + diff --git a/protocols/rdp/src/rdp_pointer.c b/protocols/rdp/src/rdp_pointer.c index b8b1f118..be2d5ea1 100644 --- a/protocols/rdp/src/rdp_pointer.c +++ b/protocols/rdp/src/rdp_pointer.c @@ -42,6 +42,7 @@ #include "client.h" #include "rdp_pointer.h" +#include "default_pointer.h" void guac_rdp_pointer_new(rdpContext* context, rdpPointer* pointer) { @@ -106,26 +107,14 @@ void guac_rdp_pointer_set_default(guac_client* client) { /* Draw to buffer */ guac_layer* cursor = guac_client_alloc_buffer(client); - guac_protocol_send_size(socket, cursor, 110, 160); - /* Draw cursor */ - guac_protocol_send_start(socket, cursor, 0, 0); - guac_protocol_send_line(socket, cursor, 10, 10); - guac_protocol_send_line(socket, cursor, 6, 10); - guac_protocol_send_line(socket, cursor, 8, 15); - guac_protocol_send_line(socket, cursor, 5, 15); - guac_protocol_send_line(socket, cursor, 3, 11); - guac_protocol_send_line(socket, cursor, 0, 14); - guac_protocol_send_close(socket, cursor); + cairo_surface_t* graphic = cairo_image_surface_create_for_data( + guac_rdp_default_pointer, + CAIRO_FORMAT_ARGB32, + 11, 16, 11*4); - /* Fill */ - guac_protocol_send_cfill(socket, GUAC_COMP_OVER, cursor, - 0x00, 0x00, 0x00, 0xFF); - - /* Stroke */ - guac_protocol_send_cstroke(socket, GUAC_COMP_OVER, cursor, - GUAC_LINE_CAP_SQUARE, GUAC_LINE_JOIN_BEVEL, 1, - 0xFF, 0xFF, 0xFF, 0xFF); + guac_protocol_send_png(socket, GUAC_COMP_OVER, cursor, 0, 0, graphic); + cairo_surface_destroy(graphic); /* Set cursor */ guac_protocol_send_cursor(socket, 0, 0, cursor, 0, 0, 11, 16); From bb5f4d61d9f153b762d87772eb46cec4c53a2b7a Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Thu, 17 May 2012 11:57:54 -0700 Subject: [PATCH 166/253] Undef not needed as define is within .c, not header. --- protocols/rdp/src/default_pointer.c | 5 ----- 1 file changed, 5 deletions(-) diff --git a/protocols/rdp/src/default_pointer.c b/protocols/rdp/src/default_pointer.c index af5a6009..c63c149a 100644 --- a/protocols/rdp/src/default_pointer.c +++ b/protocols/rdp/src/default_pointer.c @@ -62,8 +62,3 @@ unsigned char guac_rdp_default_pointer[] = { }; -/* Undefine image-specific macros */ -#undef X -#undef O -#undef _ - From 7328ee303f72c67df38df67ed973bcab01a8afe9 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Thu, 17 May 2012 13:04:38 -0700 Subject: [PATCH 167/253] Embed format information along with default cursor image data. Refactor default cursor set function out of rdp_pointer.h and into default_pointer.h. Add documentation. --- protocols/rdp/include/default_pointer.h | 32 ++++++++++++++++++- protocols/rdp/include/rdp_pointer.h | 1 - protocols/rdp/src/client.c | 1 + protocols/rdp/src/default_pointer.c | 42 +++++++++++++++++++++++++ protocols/rdp/src/rdp_pointer.c | 23 -------------- 5 files changed, 74 insertions(+), 25 deletions(-) diff --git a/protocols/rdp/include/default_pointer.h b/protocols/rdp/include/default_pointer.h index 68e02340..a45f3dee 100644 --- a/protocols/rdp/include/default_pointer.h +++ b/protocols/rdp/include/default_pointer.h @@ -38,9 +38,39 @@ #ifndef _GUAC_RDP_DEFAULT_POINTER_H #define _GUAC_RDP_DEFAULT_POINTER_H +#include +#include + /** - * Embedded 11x16 24-bit RGBA cursor graphic. + * Width of the embedded mouse cursor graphic. + */ +extern const int guac_rdp_default_pointer_width; + +/** + * Height of the embedded mouse cursor graphic. + */ +extern const int guac_rdp_default_pointer_height; + +/** + * Number of bytes in each row of the embedded mouse cursor graphic. + */ +extern const int guac_rdp_default_pointer_stride; + +/** + * The Cairo grapic format of the mouse cursor graphic. + */ +extern const cairo_format_t guac_rdp_default_pointer_format; + +/** + * Embedded mouse cursor graphic. */ extern unsigned char guac_rdp_default_pointer[]; +/** + * Set the cursor of the remote display to the embedded cursor graphic. + * + * @param client The guac_client to send the cursor to. + */ +void guac_rdp_pointer_set_default(guac_client* client); + #endif diff --git a/protocols/rdp/include/rdp_pointer.h b/protocols/rdp/include/rdp_pointer.h index 516f36ac..ff870913 100644 --- a/protocols/rdp/include/rdp_pointer.h +++ b/protocols/rdp/include/rdp_pointer.h @@ -59,6 +59,5 @@ typedef struct guac_rdp_pointer { void guac_rdp_pointer_new(rdpContext* context, rdpPointer* pointer); void guac_rdp_pointer_set(rdpContext* context, rdpPointer* pointer); void guac_rdp_pointer_free(rdpContext* context, rdpPointer* pointer); -void guac_rdp_pointer_set_default(guac_client* client); #endif diff --git a/protocols/rdp/src/client.c b/protocols/rdp/src/client.c index 690427c7..f82e75a8 100644 --- a/protocols/rdp/src/client.c +++ b/protocols/rdp/src/client.c @@ -66,6 +66,7 @@ #include "rdp_glyph.h" #include "rdp_pointer.h" #include "rdp_gdi.h" +#include "default_pointer.h" /* Client plugin arguments */ const char* GUAC_CLIENT_ARGS[] = { diff --git a/protocols/rdp/src/default_pointer.c b/protocols/rdp/src/default_pointer.c index c63c149a..b41ef2ac 100644 --- a/protocols/rdp/src/default_pointer.c +++ b/protocols/rdp/src/default_pointer.c @@ -35,11 +35,24 @@ * * ***** END LICENSE BLOCK ***** */ +#include +#include +#include +#include + /* Macros for prettying up the embedded image. */ #define X 0x00,0x00,0x00,0xFF #define O 0xFF,0xFF,0xFF,0xFF #define _ 0x00,0x00,0x00,0x00 +/* Dimensions */ +const int guac_rdp_default_pointer_width = 11; +const int guac_rdp_default_pointer_height = 16; + +/* Format */ +const cairo_format_t guac_rdp_default_pointer_format = CAIRO_FORMAT_ARGB32; +const int guac_rdp_default_pointer_stride = 44; + /* Embedded pointer graphic */ unsigned char guac_rdp_default_pointer[] = { @@ -62,3 +75,32 @@ unsigned char guac_rdp_default_pointer[] = { }; + +void guac_rdp_pointer_set_default(guac_client* client) { + + guac_socket* socket = client->socket; + + /* Draw to buffer */ + guac_layer* cursor = guac_client_alloc_buffer(client); + + cairo_surface_t* graphic = cairo_image_surface_create_for_data( + guac_rdp_default_pointer, + guac_rdp_default_pointer_format, + guac_rdp_default_pointer_width, + guac_rdp_default_pointer_height, + guac_rdp_default_pointer_stride); + + guac_protocol_send_png(socket, GUAC_COMP_SRC, cursor, 0, 0, graphic); + cairo_surface_destroy(graphic); + + /* Set cursor */ + guac_protocol_send_cursor(socket, 0, 0, cursor, + 0, 0, + guac_rdp_default_pointer_width, + guac_rdp_default_pointer_height); + + /* Free buffer */ + guac_client_free_buffer(client, cursor); + +} + diff --git a/protocols/rdp/src/rdp_pointer.c b/protocols/rdp/src/rdp_pointer.c index be2d5ea1..ac46aac9 100644 --- a/protocols/rdp/src/rdp_pointer.c +++ b/protocols/rdp/src/rdp_pointer.c @@ -101,26 +101,3 @@ void guac_rdp_pointer_free(rdpContext* context, rdpPointer* pointer) { } -void guac_rdp_pointer_set_default(guac_client* client) { - - guac_socket* socket = client->socket; - - /* Draw to buffer */ - guac_layer* cursor = guac_client_alloc_buffer(client); - - cairo_surface_t* graphic = cairo_image_surface_create_for_data( - guac_rdp_default_pointer, - CAIRO_FORMAT_ARGB32, - 11, 16, 11*4); - - guac_protocol_send_png(socket, GUAC_COMP_OVER, cursor, 0, 0, graphic); - cairo_surface_destroy(graphic); - - /* Set cursor */ - guac_protocol_send_cursor(socket, 0, 0, cursor, 0, 0, 11, 16); - - /* Free buffer */ - guac_client_free_buffer(client, cursor); - -} - From 9549a19ab5b1288f004744345650a70a380bb71d Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Thu, 17 May 2012 22:51:57 -0700 Subject: [PATCH 168/253] Do not init username with default static string - cannot be free'd later (see ticket #137) --- protocols/rdp/src/client.c | 1 - 1 file changed, 1 deletion(-) diff --git a/protocols/rdp/src/client.c b/protocols/rdp/src/client.c index f82e75a8..d6110184 100644 --- a/protocols/rdp/src/client.c +++ b/protocols/rdp/src/client.c @@ -338,7 +338,6 @@ int guac_client_init(guac_client* client, int argc, char** argv) { settings->domain = strdup(argv[IDX_DOMAIN]); /* Username */ - settings->username = "guest"; if (argv[IDX_USERNAME][0] != '\0') settings->username = strdup(argv[IDX_USERNAME]); From 4239a4e690535b5e2de773f75404894a40a94bad Mon Sep 17 00:00:00 2001 From: David PHAM-VAN Date: Wed, 23 May 2012 12:11:39 +0200 Subject: [PATCH 169/253] Add SetNull and SetDefault functions to pointer managment to avoyd segfault with windows 2008r2 Signed-off-by: Michael Jumper --- protocols/rdp/include/rdp_pointer.h | 3 +++ protocols/rdp/src/client.c | 2 ++ protocols/rdp/src/rdp_pointer.c | 7 +++++++ 3 files changed, 12 insertions(+) diff --git a/protocols/rdp/include/rdp_pointer.h b/protocols/rdp/include/rdp_pointer.h index ff870913..641eb660 100644 --- a/protocols/rdp/include/rdp_pointer.h +++ b/protocols/rdp/include/rdp_pointer.h @@ -20,6 +20,7 @@ * the Initial Developer. All Rights Reserved. * * Contributor(s): + * David PHAM-VAN Ulteo SAS - http://www.ulteo.com * * Alternatively, the contents of this file may be used under the terms of * either the GNU General Public License Version 2 or later (the "GPL"), or @@ -59,5 +60,7 @@ typedef struct guac_rdp_pointer { void guac_rdp_pointer_new(rdpContext* context, rdpPointer* pointer); void guac_rdp_pointer_set(rdpContext* context, rdpPointer* pointer); void guac_rdp_pointer_free(rdpContext* context, rdpPointer* pointer); +void guac_rdp_pointer_set_null(rdpContext* context); +void guac_rdp_pointer_set_default(rdpContext* context); #endif diff --git a/protocols/rdp/src/client.c b/protocols/rdp/src/client.c index d6110184..e7d4b0a3 100644 --- a/protocols/rdp/src/client.c +++ b/protocols/rdp/src/client.c @@ -151,6 +151,8 @@ boolean rdp_freerdp_pre_connect(freerdp* instance) { pointer->New = guac_rdp_pointer_new; pointer->Free = guac_rdp_pointer_free; pointer->Set = guac_rdp_pointer_set; + pointer->SetNull = guac_rdp_pointer_set_null; + pointer->SetDefault = guac_rdp_pointer_set_default; graphics_register_pointer(context->graphics, pointer); xfree(pointer); diff --git a/protocols/rdp/src/rdp_pointer.c b/protocols/rdp/src/rdp_pointer.c index ac46aac9..4ef2ecb3 100644 --- a/protocols/rdp/src/rdp_pointer.c +++ b/protocols/rdp/src/rdp_pointer.c @@ -20,6 +20,7 @@ * the Initial Developer. All Rights Reserved. * * Contributor(s): + * David PHAM-VAN Ulteo SAS - http://www.ulteo.com * * Alternatively, the contents of this file may be used under the terms of * either the GNU General Public License Version 2 or later (the "GPL"), or @@ -101,3 +102,9 @@ void guac_rdp_pointer_free(rdpContext* context, rdpPointer* pointer) { } +void guac_rdp_pointer_set_null(rdpContext* context) { +} + +void guac_rdp_pointer_set_default(rdpContext* context) { +} + From e710287196cb548e6735a1368c198fe775fe087b Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Fri, 25 May 2012 00:02:35 -0700 Subject: [PATCH 170/253] Fixed license list of contributors. --- protocols/rdp/include/rdp_pointer.h | 2 +- protocols/rdp/src/client.c | 1 + protocols/rdp/src/rdp_pointer.c | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/protocols/rdp/include/rdp_pointer.h b/protocols/rdp/include/rdp_pointer.h index 641eb660..77316284 100644 --- a/protocols/rdp/include/rdp_pointer.h +++ b/protocols/rdp/include/rdp_pointer.h @@ -20,7 +20,7 @@ * the Initial Developer. All Rights Reserved. * * Contributor(s): - * David PHAM-VAN Ulteo SAS - http://www.ulteo.com + * David PHAM-VAN Ulteo SAS - http://www.ulteo.com * * Alternatively, the contents of this file may be used under the terms of * either the GNU General Public License Version 2 or later (the "GPL"), or diff --git a/protocols/rdp/src/client.c b/protocols/rdp/src/client.c index e7d4b0a3..e873d9d8 100644 --- a/protocols/rdp/src/client.c +++ b/protocols/rdp/src/client.c @@ -21,6 +21,7 @@ * * Contributor(s): * Matt Hortman + * David PHAM-VAN Ulteo SAS - http://www.ulteo.com * * Alternatively, the contents of this file may be used under the terms of * either the GNU General Public License Version 2 or later (the "GPL"), or diff --git a/protocols/rdp/src/rdp_pointer.c b/protocols/rdp/src/rdp_pointer.c index 4ef2ecb3..3d56a78d 100644 --- a/protocols/rdp/src/rdp_pointer.c +++ b/protocols/rdp/src/rdp_pointer.c @@ -20,7 +20,7 @@ * the Initial Developer. All Rights Reserved. * * Contributor(s): - * David PHAM-VAN Ulteo SAS - http://www.ulteo.com + * David PHAM-VAN Ulteo SAS - http://www.ulteo.com * * Alternatively, the contents of this file may be used under the terms of * either the GNU General Public License Version 2 or later (the "GPL"), or From 36def67dfd33a2b1cd445d9a3af0ca652fc11c7d Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Fri, 25 May 2012 00:21:00 -0700 Subject: [PATCH 171/253] Test for SetDefault and SetNull before using them (not present in FreeRDP 1.0.1), fix naming conflict with default pointer setting functions. --- protocols/rdp/configure.in | 5 +++++ protocols/rdp/include/default_pointer.h | 2 +- protocols/rdp/src/client.c | 6 +++++- protocols/rdp/src/default_pointer.c | 2 +- 4 files changed, 12 insertions(+), 3 deletions(-) diff --git a/protocols/rdp/configure.in b/protocols/rdp/configure.in index 881a0f98..97b0b288 100644 --- a/protocols/rdp/configure.in +++ b/protocols/rdp/configure.in @@ -55,6 +55,11 @@ AC_CHECK_LIB([freerdp-codec], [freerdp_image_convert],, AC_MSG_ERROR("libfreerdp # Checks for header files. AC_CHECK_HEADERS([guacamole/client.h guacamole/guacio.h guacamole/protocol.h freerdp/locale/keyboard.h freerdp/kbd/layouts.h]) +# Check for FreeRDP version-specific features +AC_CHECK_MEMBERS([rdpPointer.SetDefault, rdpPointer.SetNull], + [], [], + [[#include ]]) + # Checks for library functions. AC_FUNC_MALLOC diff --git a/protocols/rdp/include/default_pointer.h b/protocols/rdp/include/default_pointer.h index a45f3dee..b13ff488 100644 --- a/protocols/rdp/include/default_pointer.h +++ b/protocols/rdp/include/default_pointer.h @@ -71,6 +71,6 @@ extern unsigned char guac_rdp_default_pointer[]; * * @param client The guac_client to send the cursor to. */ -void guac_rdp_pointer_set_default(guac_client* client); +void guac_rdp_set_default_pointer(guac_client* client); #endif diff --git a/protocols/rdp/src/client.c b/protocols/rdp/src/client.c index e873d9d8..aa0dfe78 100644 --- a/protocols/rdp/src/client.c +++ b/protocols/rdp/src/client.c @@ -152,8 +152,12 @@ boolean rdp_freerdp_pre_connect(freerdp* instance) { pointer->New = guac_rdp_pointer_new; pointer->Free = guac_rdp_pointer_free; pointer->Set = guac_rdp_pointer_set; +#ifdef HAVE_RDPPOINTER_SETNULL pointer->SetNull = guac_rdp_pointer_set_null; +#endif +#ifdef HAVE_RDPPOINTER_SETDEFAULT pointer->SetDefault = guac_rdp_pointer_set_default; +#endif graphics_register_pointer(context->graphics, pointer); xfree(pointer); @@ -433,7 +437,7 @@ int guac_client_init(guac_client* client, int argc, char** argv) { CAIRO_FORMAT_ARGB32, settings->width, settings->height); /* Set default pointer */ - guac_rdp_pointer_set_default(client); + guac_rdp_set_default_pointer(client); /* Success */ return 0; diff --git a/protocols/rdp/src/default_pointer.c b/protocols/rdp/src/default_pointer.c index b41ef2ac..e38d7676 100644 --- a/protocols/rdp/src/default_pointer.c +++ b/protocols/rdp/src/default_pointer.c @@ -76,7 +76,7 @@ unsigned char guac_rdp_default_pointer[] = { }; -void guac_rdp_pointer_set_default(guac_client* client) { +void guac_rdp_set_default_pointer(guac_client* client) { guac_socket* socket = client->socket; From 31a5c8b486415eb51c38b342648b6e7cedb8b4f8 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Sat, 9 Jun 2012 20:36:34 -0700 Subject: [PATCH 172/253] Marking default/null handlers as stubs. --- protocols/rdp/src/rdp_pointer.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/protocols/rdp/src/rdp_pointer.c b/protocols/rdp/src/rdp_pointer.c index 3d56a78d..fa9eb2a3 100644 --- a/protocols/rdp/src/rdp_pointer.c +++ b/protocols/rdp/src/rdp_pointer.c @@ -103,8 +103,10 @@ void guac_rdp_pointer_free(rdpContext* context, rdpPointer* pointer) { } void guac_rdp_pointer_set_null(rdpContext* context) { + /* STUB */ } void guac_rdp_pointer_set_default(rdpContext* context) { + /* STUB */ } From a775ab8d7786a96472e07f81e0cb4d37752a6ed4 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Sat, 9 Jun 2012 20:37:49 -0700 Subject: [PATCH 173/253] Bumping version to 0.6.1 --- protocols/rdp/configure.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/protocols/rdp/configure.in b/protocols/rdp/configure.in index 97b0b288..6c76763f 100644 --- a/protocols/rdp/configure.in +++ b/protocols/rdp/configure.in @@ -35,7 +35,7 @@ # ***** END LICENSE BLOCK ***** AC_INIT(src/client.c) -AM_INIT_AUTOMAKE([libguac-client-rdp], 0.6.0) +AM_INIT_AUTOMAKE([libguac-client-rdp], 0.6.1) AC_CONFIG_MACRO_DIR([m4]) # Checks for programs. From 5128165cd1735bbe08cc7866b757f1a008b5b8e8 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Sat, 9 Jun 2012 21:16:30 -0700 Subject: [PATCH 174/253] Updated changelog. --- protocols/rdp/ChangeLog | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/protocols/rdp/ChangeLog b/protocols/rdp/ChangeLog index 06624834..fff0a92b 100644 --- a/protocols/rdp/ChangeLog +++ b/protocols/rdp/ChangeLog @@ -1,3 +1,16 @@ +2012-05-23 David Pham-Van + + * Add SetNull and SetDefault handlers (fixes #148) + +2012-05-04 Michael Jumper + + * Removed Alt-code fallback mode + * Added embedded default mouse pointer + +2012-05-15 Jocelyn Delalande + + * Unicode keyboard events + 2012-05-04 Michael Jumper * Initial release From 734cfb4217a4beeb7acd1fc2503115b1632cf58f Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Sat, 11 Aug 2012 13:25:32 -0700 Subject: [PATCH 175/253] Ensure m4/ directory exists, while automatically-added files are not included in commits. --- protocols/rdp/.gitignore | 3 ++- protocols/rdp/m4/README | 12 ++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 protocols/rdp/m4/README diff --git a/protocols/rdp/.gitignore b/protocols/rdp/.gitignore index e37f9166..3f725332 100644 --- a/protocols/rdp/.gitignore +++ b/protocols/rdp/.gitignore @@ -21,7 +21,8 @@ Makefile Makefile.in aclocal.m4 autom4te.cache/ -m4/ +m4/* +!README config.guess config.log config.status diff --git a/protocols/rdp/m4/README b/protocols/rdp/m4/README new file mode 100644 index 00000000..c9c9cbc4 --- /dev/null +++ b/protocols/rdp/m4/README @@ -0,0 +1,12 @@ +This file exists such that the m4/ directory will be created when cloning the +git repository. + +The m4/ directory is not directly used by this project, but libtoolize +populates this directory with files, recommending that the directory be +included in the macro search path for aclocal. + +Because autoreconf runs aclocal before libtoolize, this directory will not +exist when autoreconf is run, triggering an error from aclocal. + +Creating this directory (and keeping this file in it as a placeholder) +prevents this error. From c45ff69dcad99d2f81088e0c9557431243c3cbea Mon Sep 17 00:00:00 2001 From: Laurent Meunier Date: Fri, 31 Aug 2012 13:07:05 +0200 Subject: [PATCH 176/253] Use the configured color-depth The 'color-depth' parameter is now used to define the color depth for the RDP session. --- protocols/rdp/src/client.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/protocols/rdp/src/client.c b/protocols/rdp/src/client.c index aa0dfe78..2b75a1ad 100644 --- a/protocols/rdp/src/client.c +++ b/protocols/rdp/src/client.c @@ -358,6 +358,13 @@ int guac_client_init(guac_client* client, int argc, char** argv) { if (argv[IDX_INITIAL_PROGRAM][0] != '\0') settings->shell = strdup(argv[IDX_INITIAL_PROGRAM]); + /* session color depth */ + settings->color_depth = 16; + if (argv[IDX_COLOR_DEPTH][0] != '\0') + settings->color_depth = atoi(argv[IDX_COLOR_DEPTH]); + if (settings->color_depth == 0) + settings->color_depth = 16; + /* Order support */ bitmap_cache = settings->bitmap_cache; settings->os_major_type = OSMAJORTYPE_UNSPECIFIED; From 99ec71dcde441ecd4d5b8f58b0f289d9e34c7fbc Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Thu, 27 Sep 2012 22:04:33 -0700 Subject: [PATCH 177/253] Fix comment formatting. --- protocols/rdp/src/client.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/protocols/rdp/src/client.c b/protocols/rdp/src/client.c index 2b75a1ad..5f56016f 100644 --- a/protocols/rdp/src/client.c +++ b/protocols/rdp/src/client.c @@ -321,14 +321,14 @@ int guac_client_init(guac_client* client, int argc, char** argv) { settings->encryption_method = ENCRYPTION_METHOD_40BIT | ENCRYPTION_METHOD_128BIT | ENCRYPTION_METHOD_FIPS; settings->encryption_level = ENCRYPTION_LEVEL_CLIENT_COMPATIBLE; - /* session width */ + /* Session width */ settings->width = 1024; if (argv[IDX_WIDTH][0] != '\0') settings->width = atoi(argv[IDX_WIDTH]); if (settings->width == 0) settings->width = 1024; - /* session height */ + /* Session height */ settings->height = 768; if (argv[IDX_HEIGHT][0] != '\0') settings->height = atoi(argv[IDX_HEIGHT]); @@ -358,7 +358,7 @@ int guac_client_init(guac_client* client, int argc, char** argv) { if (argv[IDX_INITIAL_PROGRAM][0] != '\0') settings->shell = strdup(argv[IDX_INITIAL_PROGRAM]); - /* session color depth */ + /* Session color depth */ settings->color_depth = 16; if (argv[IDX_COLOR_DEPTH][0] != '\0') settings->color_depth = atoi(argv[IDX_COLOR_DEPTH]); From 3fd9323a942025dea7612b16dc4489c8fa0e1058 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Tue, 2 Oct 2012 14:09:57 -0700 Subject: [PATCH 178/253] Add macros for constants, clean up validation. --- protocols/rdp/include/client.h | 15 ++++++++++++++ protocols/rdp/src/client.c | 36 +++++++++++++++++++++++++--------- 2 files changed, 42 insertions(+), 9 deletions(-) diff --git a/protocols/rdp/include/client.h b/protocols/rdp/include/client.h index ad2d1fa3..6e6a299c 100644 --- a/protocols/rdp/include/client.h +++ b/protocols/rdp/include/client.h @@ -50,6 +50,21 @@ */ #define RDP_DEFAULT_PORT 3389 +/** + * Default screen width, in pixels. + */ +#define RDP_DEFAULT_WIDTH 1024 + +/** + * Default screen height, in pixels. + */ +#define RDP_DEFAULT_HEIGHT 768 + +/** + * Default color depth, in bits. + */ +#define RDP_DEFAULT_DEPTH 16 + /** * Client data that will remain accessible through the guac_client. * This should generally include data commonly used by Guacamole handlers. diff --git a/protocols/rdp/src/client.c b/protocols/rdp/src/client.c index 5f56016f..2c26531c 100644 --- a/protocols/rdp/src/client.c +++ b/protocols/rdp/src/client.c @@ -322,18 +322,30 @@ int guac_client_init(guac_client* client, int argc, char** argv) { settings->encryption_level = ENCRYPTION_LEVEL_CLIENT_COMPATIBLE; /* Session width */ - settings->width = 1024; + settings->width = RDP_DEFAULT_WIDTH; if (argv[IDX_WIDTH][0] != '\0') settings->width = atoi(argv[IDX_WIDTH]); - if (settings->width == 0) - settings->width = 1024; + + /* Use default width if given width is invalid. */ + if (settings->width == 0) { + settings->width = RDP_DEFAULT_WIDTH; + guac_client_log_error(client, + "Invalid width: \"%s\". Using default of %i.", + argv[IDX_WIDTH], settings->width); + } /* Session height */ - settings->height = 768; + settings->height = RDP_DEFAULT_HEIGHT; if (argv[IDX_HEIGHT][0] != '\0') settings->height = atoi(argv[IDX_HEIGHT]); - if (settings->height == 0) - settings->height = 768; + + /* Use default height if given height is invalid. */ + if (settings->height == 0) { + settings->height = RDP_DEFAULT_HEIGHT; + guac_client_log_error(client, + "Invalid height: \"%s\". Using default of %i.", + argv[IDX_WIDTH], settings->height); + } /* Set hostname */ settings->hostname = strdup(hostname); @@ -359,11 +371,17 @@ int guac_client_init(guac_client* client, int argc, char** argv) { settings->shell = strdup(argv[IDX_INITIAL_PROGRAM]); /* Session color depth */ - settings->color_depth = 16; + settings->color_depth = RDP_DEFAULT_DEPTH; if (argv[IDX_COLOR_DEPTH][0] != '\0') settings->color_depth = atoi(argv[IDX_COLOR_DEPTH]); - if (settings->color_depth == 0) - settings->color_depth = 16; + + /* Use default depth if given depth is invalid. */ + if (settings->color_depth == 0) { + settings->color_depth = RDP_DEFAULT_DEPTH; + guac_client_log_error(client, + "Invalid color-depth: \"%s\". Using default of %i.", + argv[IDX_WIDTH], settings->color_depth); + } /* Order support */ bitmap_cache = settings->bitmap_cache; From 94c8076f5c35b61cdf94d9581ed9234936266491 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Tue, 2 Oct 2012 14:11:39 -0700 Subject: [PATCH 179/253] Add Laurent Meunier as contributor. --- protocols/rdp/src/client.c | 1 + 1 file changed, 1 insertion(+) diff --git a/protocols/rdp/src/client.c b/protocols/rdp/src/client.c index 2c26531c..11d38937 100644 --- a/protocols/rdp/src/client.c +++ b/protocols/rdp/src/client.c @@ -22,6 +22,7 @@ * Contributor(s): * Matt Hortman * David PHAM-VAN Ulteo SAS - http://www.ulteo.com + * Laurent Meunier * * Alternatively, the contents of this file may be used under the terms of * either the GNU General Public License Version 2 or later (the "GPL"), or From db373e876b0d04e4df0d7917218fc0d25a49f221 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Mon, 15 Oct 2012 10:33:50 -0700 Subject: [PATCH 180/253] Update ChangeLog, bump version. --- protocols/rdp/ChangeLog | 8 ++++++++ protocols/rdp/configure.in | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/protocols/rdp/ChangeLog b/protocols/rdp/ChangeLog index fff0a92b..73d3681f 100644 --- a/protocols/rdp/ChangeLog +++ b/protocols/rdp/ChangeLog @@ -1,3 +1,11 @@ +2012-08-31 Laurent Meunier + + * Use configured color depth + +2012-08-11 Michael Jumper + + * Fix m4/ autoreconf error + 2012-05-23 David Pham-Van * Add SetNull and SetDefault handlers (fixes #148) diff --git a/protocols/rdp/configure.in b/protocols/rdp/configure.in index 6c76763f..6c69ac4e 100644 --- a/protocols/rdp/configure.in +++ b/protocols/rdp/configure.in @@ -35,7 +35,7 @@ # ***** END LICENSE BLOCK ***** AC_INIT(src/client.c) -AM_INIT_AUTOMAKE([libguac-client-rdp], 0.6.1) +AM_INIT_AUTOMAKE([libguac-client-rdp], 0.6.2) AC_CONFIG_MACRO_DIR([m4]) # Checks for programs. From 7c96d13d0dc15981d7509656b336090ab07ae260 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Sat, 20 Oct 2012 21:05:36 -0700 Subject: [PATCH 181/253] Fix includes. --- protocols/rdp/include/client.h | 2 ++ protocols/rdp/src/rdp_cliprdr.c | 1 + 2 files changed, 3 insertions(+) diff --git a/protocols/rdp/include/client.h b/protocols/rdp/include/client.h index 6e6a299c..0c28d8fe 100644 --- a/protocols/rdp/include/client.h +++ b/protocols/rdp/include/client.h @@ -38,6 +38,8 @@ #ifndef _GUAC_RDP_CLIENT_H #define _GUAC_RDP_CLIENT_H +#include + #include #include diff --git a/protocols/rdp/src/rdp_cliprdr.c b/protocols/rdp/src/rdp_cliprdr.c index ff9860aa..168e3dd0 100644 --- a/protocols/rdp/src/rdp_cliprdr.c +++ b/protocols/rdp/src/rdp_cliprdr.c @@ -42,6 +42,7 @@ #include #include +#include #include "client.h" #include "rdp_cliprdr.h" From 4758595e23ee426e771a75a63e7a5dcd71f5bdfa Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Mon, 22 Oct 2012 15:02:58 -0700 Subject: [PATCH 182/253] Use width/height from client if not specified in args. --- protocols/rdp/src/client.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/protocols/rdp/src/client.c b/protocols/rdp/src/client.c index 11d38937..451c6b40 100644 --- a/protocols/rdp/src/client.c +++ b/protocols/rdp/src/client.c @@ -322,26 +322,26 @@ int guac_client_init(guac_client* client, int argc, char** argv) { settings->encryption_method = ENCRYPTION_METHOD_40BIT | ENCRYPTION_METHOD_128BIT | ENCRYPTION_METHOD_FIPS; settings->encryption_level = ENCRYPTION_LEVEL_CLIENT_COMPATIBLE; - /* Session width */ - settings->width = RDP_DEFAULT_WIDTH; + /* Use optimal width unless overridden */ + settings->width = client->info.optimal_width; if (argv[IDX_WIDTH][0] != '\0') settings->width = atoi(argv[IDX_WIDTH]); /* Use default width if given width is invalid. */ - if (settings->width == 0) { + if (settings->width <= 0) { settings->width = RDP_DEFAULT_WIDTH; guac_client_log_error(client, "Invalid width: \"%s\". Using default of %i.", argv[IDX_WIDTH], settings->width); } - /* Session height */ - settings->height = RDP_DEFAULT_HEIGHT; + /* Use optimal height unless overridden */ + settings->height = client->info.optimal_height; if (argv[IDX_HEIGHT][0] != '\0') settings->height = atoi(argv[IDX_HEIGHT]); /* Use default height if given height is invalid. */ - if (settings->height == 0) { + if (settings->height <= 0) { settings->height = RDP_DEFAULT_HEIGHT; guac_client_log_error(client, "Invalid height: \"%s\". Using default of %i.", From a5142f4e38048729b15b8d0c9cc1549f9ce5fe5d Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Mon, 22 Oct 2012 15:50:26 -0700 Subject: [PATCH 183/253] Updated ChangeLog --- protocols/rdp/ChangeLog | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/protocols/rdp/ChangeLog b/protocols/rdp/ChangeLog index 73d3681f..fc7a8df9 100644 --- a/protocols/rdp/ChangeLog +++ b/protocols/rdp/ChangeLog @@ -1,3 +1,7 @@ +2012-10-22 Michael Jumper + + * Use guac_client_info to choose optimal size if size not overridden + 2012-08-31 Laurent Meunier * Use configured color depth From 45e083985e5e19540e4f466c5a89182a9d7ece8c Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Sat, 27 Oct 2012 18:36:21 -0700 Subject: [PATCH 184/253] Add guac_rdpsnd freerdp plugin. --- protocols/rdp/Makefile.am | 11 +- protocols/rdp/guac_rdpsnd/Makefile.am | 64 +++++ protocols/rdp/guac_rdpsnd/rdpsnd_main.c | 307 ++++++++++++++++++++++++ protocols/rdp/guac_rdpsnd/rdpsnd_main.h | 109 +++++++++ protocols/rdp/include/config.h | 0 protocols/rdp/src/client.c | 9 +- 6 files changed, 497 insertions(+), 3 deletions(-) create mode 100644 protocols/rdp/guac_rdpsnd/Makefile.am create mode 100644 protocols/rdp/guac_rdpsnd/rdpsnd_main.c create mode 100644 protocols/rdp/guac_rdpsnd/rdpsnd_main.h create mode 100644 protocols/rdp/include/config.h diff --git a/protocols/rdp/Makefile.am b/protocols/rdp/Makefile.am index c87f6faa..1a2bd458 100644 --- a/protocols/rdp/Makefile.am +++ b/protocols/rdp/Makefile.am @@ -37,9 +37,10 @@ AUTOMAKE_OPTIONS = foreign ACLOCAL_AMFLAGS = -I m4 -AM_CFLAGS = -Werror -Wall -pedantic -Iinclude +AM_CFLAGS = -Werror -Wall -Iinclude lib_LTLIBRARIES = libguac-client-rdp.la +freerdp_LTLIBRARIES = guac_rdpsnd.la libguac_client_rdp_la_SOURCES = src/client.c src/rdp_bitmap.c src/rdp_glyph.c src/rdp_pointer.c src/rdp_gdi.c src/guac_handlers.c src/rdp_cliprdr.c \ src/rdp_keymap.c \ @@ -47,6 +48,8 @@ libguac_client_rdp_la_SOURCES = src/client.c src/rdp_bitmap.c src/rdp_glyph.c sr src/rdp_keymap_en_us.c \ src/default_pointer.c +guac_rdpsnd_la_SOURCES = guac_rdpsnd/rdpsnd_main.c + noinst_HEADERS = \ include/client.h \ include/default_pointer.h \ @@ -56,9 +59,13 @@ noinst_HEADERS = \ include/rdp_gdi.h \ include/rdp_glyph.h \ include/rdp_keymap.h \ - include/rdp_pointer.h + include/rdp_pointer.h \ + guac_rdpsnd/rdpsnd_main.h libguac_client_rdp_la_LDFLAGS = -version-info 0:0:0 +guac_rdpsnd_la_LDFLAGS = -module -avoid-version -shared + +freerdpdir = ${libdir}/freerdp/ EXTRA_DIST = LICENSE diff --git a/protocols/rdp/guac_rdpsnd/Makefile.am b/protocols/rdp/guac_rdpsnd/Makefile.am new file mode 100644 index 00000000..c87f6faa --- /dev/null +++ b/protocols/rdp/guac_rdpsnd/Makefile.am @@ -0,0 +1,64 @@ +# ***** BEGIN LICENSE BLOCK ***** +# Version: MPL 1.1/GPL 2.0/LGPL 2.1 +# +# The contents of this file are subject to the Mozilla Public License Version +# 1.1 (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# http://www.mozilla.org/MPL/ +# +# Software distributed under the License is distributed on an "AS IS" basis, +# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +# for the specific language governing rights and limitations under the +# License. +# +# The Original Code is libguac-client-rdp. +# +# The Initial Developer of the Original Code is +# Michael Jumper. +# Portions created by the Initial Developer are Copyright (C) 2011 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# +# Alternatively, the contents of this file may be used under the terms of +# either the GNU General Public License Version 2 or later (the "GPL"), or +# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), +# in which case the provisions of the GPL or the LGPL are applicable instead +# of those above. If you wish to allow use of your version of this file only +# under the terms of either the GPL or the LGPL, and not to allow others to +# use your version of this file under the terms of the MPL, indicate your +# decision by deleting the provisions above and replace them with the notice +# and other provisions required by the GPL or the LGPL. If you do not delete +# the provisions above, a recipient may use your version of this file under +# the terms of any one of the MPL, the GPL or the LGPL. +# +# ***** END LICENSE BLOCK ***** + +AUTOMAKE_OPTIONS = foreign + +ACLOCAL_AMFLAGS = -I m4 +AM_CFLAGS = -Werror -Wall -pedantic -Iinclude + +lib_LTLIBRARIES = libguac-client-rdp.la + +libguac_client_rdp_la_SOURCES = src/client.c src/rdp_bitmap.c src/rdp_glyph.c src/rdp_pointer.c src/rdp_gdi.c src/guac_handlers.c src/rdp_cliprdr.c \ + src/rdp_keymap.c \ + src/rdp_keymap_base.c \ + src/rdp_keymap_en_us.c \ + src/default_pointer.c + +noinst_HEADERS = \ + include/client.h \ + include/default_pointer.h \ + include/guac_handlers.h \ + include/rdp_bitmap.h \ + include/rdp_cliprdr.h \ + include/rdp_gdi.h \ + include/rdp_glyph.h \ + include/rdp_keymap.h \ + include/rdp_pointer.h + +libguac_client_rdp_la_LDFLAGS = -version-info 0:0:0 + +EXTRA_DIST = LICENSE + diff --git a/protocols/rdp/guac_rdpsnd/rdpsnd_main.c b/protocols/rdp/guac_rdpsnd/rdpsnd_main.c new file mode 100644 index 00000000..080db7d6 --- /dev/null +++ b/protocols/rdp/guac_rdpsnd/rdpsnd_main.c @@ -0,0 +1,307 @@ +/** + * FreeRDP: A Remote Desktop Protocol client. + * Audio Output Virtual Channel + * + * Copyright 2009-2011 Jay Sorg + * Copyright 2010-2011 Vic Lee + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "rdpsnd_main.h" + +void guac_rdpsnd_process_receive(rdpSvcPlugin* plugin, + STREAM* data_in) { + + guac_rdpsndPlugin* rdpsnd = (guac_rdpsndPlugin*) plugin; + + uint8 msgType; + uint16 BodySize; + + if (rdpsnd->expectingWave) { + rdpsnd_process_message_wave(rdpsnd, data_in); + return; + } + + /* Read event */ + stream_read_uint8(data_in, msgType); /* msgType */ + stream_seek_uint8(data_in); /* bPad */ + stream_read_uint16(data_in, BodySize); + + switch (msgType) { + + case SNDC_FORMATS: + guac_rdpsnd_process_message_formats(rdpsnd, data_in); + break; + + case SNDC_TRAINING: + guac_rdpsnd_process_message_training(rdpsnd, data_in); + break; + + case SNDC_WAVE: + guac_rdpsnd_process_message_wave_info(rdpsnd, data_in, BodySize); + break; + + case SNDC_CLOSE: + guac_rdpsnd_process_message_close(rdpsnd); + break; + + case SNDC_SETVOLUME: + guac_rdpsnd_process_message_setvolume(rdpsnd, data_in); + break; + + default: + /*DEBUG_WARN("unknown msgType %d", msgType);*/ + break; + } + +} + + +/* receives a list of server supported formats and returns a list + of client supported formats */ +void guac_rdpsnd_process_message_formats(guac_rdpsndPlugin* rdpsnd, STREAM* data_in) { + + rdpSvcPlugin* plugin = (rdpSvcPlugin*)rdpsnd; + + /* Get client from plugin */ + guac_client* client = (guac_client*) + plugin->channel_entry_points.pExtendedData; + + uint16 wNumberOfFormats; + uint16 nFormat; + uint16 wVersion; + STREAM* data_out; + rdpsndFormat* out_formats; + uint16 n_out_formats; + rdpsndFormat* format; + uint8* format_mark; + uint8* data_mark; + int pos; + + stream_seek_uint32(data_in); /* dwFlags */ + stream_seek_uint32(data_in); /* dwVolume */ + stream_seek_uint32(data_in); /* dwPitch */ + stream_seek_uint16(data_in); /* wDGramPort */ + stream_read_uint16(data_in, wNumberOfFormats); + stream_read_uint8(data_in, rdpsnd->cBlockNo); /* cLastBlockConfirmed */ + stream_read_uint16(data_in, wVersion); + stream_seek_uint8(data_in); /* bPad */ + + out_formats = (rdpsndFormat*) + xzalloc(wNumberOfFormats * sizeof(rdpsndFormat)); + + n_out_formats = 0; + + data_out = stream_new(24); + stream_write_uint8(data_out, SNDC_FORMATS); /* msgType */ + stream_write_uint8(data_out, 0); /* bPad */ + stream_seek_uint16(data_out); /* BodySize */ + stream_write_uint32(data_out, TSSNDCAPS_ALIVE); /* dwFlags */ + stream_write_uint32(data_out, 0); /* dwVolume */ + stream_write_uint32(data_out, 0); /* dwPitch */ + stream_write_uint16_be(data_out, 0); /* wDGramPort */ + stream_seek_uint16(data_out); /* wNumberOfFormats */ + stream_write_uint8(data_out, 0); /* cLastBlockConfirmed */ + stream_write_uint16(data_out, 6); /* wVersion */ + stream_write_uint8(data_out, 0); /* bPad */ + + for (nFormat = 0; nFormat < wNumberOfFormats; nFormat++) { + + stream_get_mark(data_in, format_mark); + format = &out_formats[n_out_formats]; + stream_read_uint16(data_in, format->wFormatTag); + stream_read_uint16(data_in, format->nChannels); + stream_read_uint32(data_in, format->nSamplesPerSec); + stream_seek_uint32(data_in); /* nAvgBytesPerSec */ + stream_read_uint16(data_in, format->nBlockAlign); + stream_read_uint16(data_in, format->wBitsPerSample); + stream_read_uint16(data_in, format->cbSize); + stream_get_mark(data_in, data_mark); + stream_seek(data_in, format->cbSize); + format->data = NULL; + + if (format->wFormatTag == WAVE_FORMAT_PCM) { + + guac_client_log_info(client, + "Accepted format: %i-bit PCM with %i channels at " + "%i Hz", + format->wBitsPerSample, + format->nChannels, + format->nSamplesPerSec); + + stream_check_size(data_out, 18 + format->cbSize); + stream_write(data_out, format_mark, 18 + format->cbSize); + if (format->cbSize > 0) + { + format->data = xmalloc(format->cbSize); + memcpy(format->data, data_mark, format->cbSize); + } + n_out_formats++; + } + + } + + xfree(out_formats); + + pos = stream_get_pos(data_out); + stream_set_pos(data_out, 2); + stream_write_uint16(data_out, pos - 4); + stream_set_pos(data_out, 18); + stream_write_uint16(data_out, n_out_formats); + stream_set_pos(data_out, pos); + + svc_plugin_send((rdpSvcPlugin*)rdpsnd, data_out); + + if (wVersion >= 6) { + + /* Respond with guality mode */ + data_out = stream_new(8); + stream_write_uint8(data_out, SNDC_QUALITYMODE); /* msgType */ + stream_write_uint8(data_out, 0); /* bPad */ + stream_write_uint16(data_out, 4); /* BodySize */ + stream_write_uint16(data_out, HIGH_QUALITY); /* wQualityMode */ + stream_write_uint16(data_out, 0); /* Reserved */ + + svc_plugin_send((rdpSvcPlugin*)rdpsnd, data_out); + } + +} + +/* server is getting a feel of the round trip time */ +void guac_rdpsnd_process_message_training(guac_rdpsndPlugin* rdpsnd, + STREAM* data_in) { + + uint16 wTimeStamp; + uint16 wPackSize; + STREAM* data_out; + + /* Read timestamp */ + stream_read_uint16(data_in, wTimeStamp); + stream_read_uint16(data_in, wPackSize); + + /* Send training response */ + data_out = stream_new(8); + stream_write_uint8(data_out, SNDC_TRAINING); /* msgType */ + stream_write_uint8(data_out, 0); /* bPad */ + stream_write_uint16(data_out, 4); /* BodySize */ + stream_write_uint16(data_out, wTimeStamp); + stream_write_uint16(data_out, wPackSize); + + svc_plugin_send((rdpSvcPlugin*) rdpsnd, data_out); + +} + +void guac_rdpsnd_process_message_wave_info(guac_rdpsndPlugin* rdpsnd, STREAM* data_in, uint16 BodySize) { + + uint16 wFormatNo; + + /* Read wave information */ + stream_read_uint16(data_in, rdpsnd->wTimeStamp); + stream_read_uint16(data_in, wFormatNo); + stream_read_uint8(data_in, rdpsnd->cBlockNo); + stream_seek(data_in, 3); /* bPad */ + stream_read(data_in, rdpsnd->waveData, 4); + + /* Read wave in next iteration */ + rdpsnd->waveDataSize = BodySize - 8; + rdpsnd->expectingWave = true; + +} + +/* header is not removed from data in this function */ +void rdpsnd_process_message_wave(guac_rdpsndPlugin* rdpsnd, + STREAM* data_in) { + + rdpSvcPlugin* plugin = (rdpSvcPlugin*)rdpsnd; + + /* Get client from plugin */ + guac_client* client = (guac_client*) + plugin->channel_entry_points.pExtendedData; + + STREAM* data_out; + + int size; + unsigned char* buffer; + + rdpsnd->expectingWave = 0; + memcpy(stream_get_head(data_in), rdpsnd->waveData, 4); + if (stream_get_size(data_in) != rdpsnd->waveDataSize) { + return; + } + + buffer = stream_get_head(data_in); + size = stream_get_size(data_in); + + guac_client_log_info(client, "Got sound: %i bytes.", size); + + data_out = stream_new(8); + stream_write_uint8(data_out, SNDC_WAVECONFIRM); + stream_write_uint8(data_out, 0); + stream_write_uint16(data_out, 4); + stream_write_uint16(data_out, rdpsnd->wTimeStamp); + stream_write_uint8(data_out, rdpsnd->cBlockNo); /* cConfirmedBlockNo */ + stream_write_uint8(data_out, 0); /* bPad */ + + svc_plugin_send(plugin, data_out); + rdpsnd->plugin.interval_ms = 10; +} + +void guac_rdpsnd_process_connect(rdpSvcPlugin* plugin) { + + /* Get client from plugin */ + guac_client* client = (guac_client*) + plugin->channel_entry_points.pExtendedData; + + /* Log that sound has been loaded */ + guac_client_log_info(client, "guac_rdpsnd connected."); + +} + +void guac_rdpsnd_process_message_setvolume(guac_rdpsndPlugin* rdpsnd, + STREAM* data_in) { + + /* Ignored for now */ + uint32 dwVolume; + stream_read_uint32(data_in, dwVolume); + +} + +void guac_rdpsnd_process_message_close(guac_rdpsndPlugin* rdpsnd) { + rdpsnd->plugin.interval_ms = 10; +} + +void guac_rdpsnd_process_terminate(rdpSvcPlugin* plugin) { + xfree(plugin); +} + +void guac_rdpsnd_process_event(rdpSvcPlugin* plugin, RDP_EVENT* event) { + freerdp_event_free(event); +} + +DEFINE_SVC_PLUGIN(guac_rdpsnd, "rdpsnd", + CHANNEL_OPTION_INITIALIZED | CHANNEL_OPTION_ENCRYPT_RDP) + diff --git a/protocols/rdp/guac_rdpsnd/rdpsnd_main.h b/protocols/rdp/guac_rdpsnd/rdpsnd_main.h new file mode 100644 index 00000000..c5181df0 --- /dev/null +++ b/protocols/rdp/guac_rdpsnd/rdpsnd_main.h @@ -0,0 +1,109 @@ +/** + * FreeRDP: A Remote Desktop Protocol client. + * Audio Output Virtual Channel + * + * Copyright 2010-2011 Vic Lee + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __RDPSND_MAIN_H +#define __RDPSND_MAIN_H + +#define SNDC_CLOSE 1 +#define SNDC_WAVE 2 +#define SNDC_SETVOLUME 3 +#define SNDC_SETPITCH 4 +#define SNDC_WAVECONFIRM 5 +#define SNDC_TRAINING 6 +#define SNDC_FORMATS 7 +#define SNDC_CRYPTKEY 8 +#define SNDC_WAVEENCRYPT 9 +#define SNDC_UDPWAVE 10 +#define SNDC_UDPWAVELAST 11 +#define SNDC_QUALITYMODE 12 + +#define TSSNDCAPS_ALIVE 1 +#define TSSNDCAPS_VOLUME 2 +#define TSSNDCAPS_PITCH 4 + +#define DYNAMIC_QUALITY 0x0000 +#define MEDIUM_QUALITY 0x0001 +#define HIGH_QUALITY 0x0002 + +#define WAVE_FORMAT_PCM 1 + +typedef struct rdpsndFormat { + uint16 wFormatTag; + uint16 nChannels; + uint32 nSamplesPerSec; + uint16 nBlockAlign; + uint16 wBitsPerSample; + uint16 cbSize; + uint8* data; +} rdpsndFormat; + + +typedef struct guac_rdpsndPlugin { + + rdpSvcPlugin plugin; + + uint8 cBlockNo; + rdpsndFormat* supported_formats; + int n_supported_formats; + int current_format; + + boolean expectingWave; + uint8 waveData[4]; + uint16 waveDataSize; + uint32 wTimeStamp; /* server timestamp */ + uint32 wave_timestamp; /* client timestamp */ + + boolean is_open; + uint32 close_timestamp; + + uint16 fixed_format; + uint16 fixed_channel; + uint32 fixed_rate; + int latency; + +} guac_rdpsndPlugin ; + +void guac_rdpsnd_process_receive(rdpSvcPlugin* plugin, + STREAM* data_in); + +void guac_rdpsnd_process_message_formats(guac_rdpsndPlugin* rdpsnd, + STREAM* data_in); + +void guac_rdpsnd_process_message_training(guac_rdpsndPlugin* rdpsnd, + STREAM* data_in); + +void guac_rdpsnd_process_message_wave_info(guac_rdpsndPlugin* rdpsnd, + STREAM* data_in, uint16 BodySize); + +void rdpsnd_process_message_wave(guac_rdpsndPlugin* rdpsnd, + STREAM* data_in); + +void guac_rdpsnd_process_connect(rdpSvcPlugin* plugin); + +void guac_rdpsnd_process_message_setvolume(guac_rdpsndPlugin* rdpsnd, + STREAM* data_in); + +void guac_rdpsnd_process_message_close(guac_rdpsndPlugin* rdpsnd); + +void guac_rdpsnd_process_terminate(rdpSvcPlugin* plugin); + +void guac_rdpsnd_process_event(rdpSvcPlugin* plugin, RDP_EVENT* event); + +#endif /* __RDPSND_MAIN_H */ + diff --git a/protocols/rdp/include/config.h b/protocols/rdp/include/config.h new file mode 100644 index 00000000..e69de29b diff --git a/protocols/rdp/src/client.c b/protocols/rdp/src/client.c index 451c6b40..3bba1d23 100644 --- a/protocols/rdp/src/client.c +++ b/protocols/rdp/src/client.c @@ -112,7 +112,14 @@ boolean rdp_freerdp_pre_connect(freerdp* instance) { CLRCONV* clrconv; /* Load clipboard plugin */ - freerdp_channels_load_plugin(channels, instance->settings, "cliprdr", NULL); + if (freerdp_channels_load_plugin(channels, instance->settings, + "cliprdr", NULL)) + guac_client_log_error(client, "Failed to load cliprdr plugin."); + + /* Load sound plugin */ + if (freerdp_channels_load_plugin(channels, instance->settings, + "guac_rdpsnd", client)) + guac_client_log_error(client, "Failed to load guac_rdpsnd plugin."); /* Init color conversion structure */ clrconv = xnew(CLRCONV); From 41b4a30042aa06cb70fd1b2aa20842d8883f5790 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Sat, 27 Oct 2012 19:46:07 -0700 Subject: [PATCH 185/253] Added client parameter. --- protocols/rdp/guac_rdpsnd/rdpsnd_main.c | 499 ++++++++++++------------ protocols/rdp/guac_rdpsnd/rdpsnd_main.h | 49 +-- 2 files changed, 269 insertions(+), 279 deletions(-) diff --git a/protocols/rdp/guac_rdpsnd/rdpsnd_main.c b/protocols/rdp/guac_rdpsnd/rdpsnd_main.c index 080db7d6..5fe06871 100644 --- a/protocols/rdp/guac_rdpsnd/rdpsnd_main.c +++ b/protocols/rdp/guac_rdpsnd/rdpsnd_main.c @@ -33,242 +33,10 @@ #include "rdpsnd_main.h" -void guac_rdpsnd_process_receive(rdpSvcPlugin* plugin, - STREAM* data_in) { +/* SVC DEFINITION */ - guac_rdpsndPlugin* rdpsnd = (guac_rdpsndPlugin*) plugin; - - uint8 msgType; - uint16 BodySize; - - if (rdpsnd->expectingWave) { - rdpsnd_process_message_wave(rdpsnd, data_in); - return; - } - - /* Read event */ - stream_read_uint8(data_in, msgType); /* msgType */ - stream_seek_uint8(data_in); /* bPad */ - stream_read_uint16(data_in, BodySize); - - switch (msgType) { - - case SNDC_FORMATS: - guac_rdpsnd_process_message_formats(rdpsnd, data_in); - break; - - case SNDC_TRAINING: - guac_rdpsnd_process_message_training(rdpsnd, data_in); - break; - - case SNDC_WAVE: - guac_rdpsnd_process_message_wave_info(rdpsnd, data_in, BodySize); - break; - - case SNDC_CLOSE: - guac_rdpsnd_process_message_close(rdpsnd); - break; - - case SNDC_SETVOLUME: - guac_rdpsnd_process_message_setvolume(rdpsnd, data_in); - break; - - default: - /*DEBUG_WARN("unknown msgType %d", msgType);*/ - break; - } - -} - - -/* receives a list of server supported formats and returns a list - of client supported formats */ -void guac_rdpsnd_process_message_formats(guac_rdpsndPlugin* rdpsnd, STREAM* data_in) { - - rdpSvcPlugin* plugin = (rdpSvcPlugin*)rdpsnd; - - /* Get client from plugin */ - guac_client* client = (guac_client*) - plugin->channel_entry_points.pExtendedData; - - uint16 wNumberOfFormats; - uint16 nFormat; - uint16 wVersion; - STREAM* data_out; - rdpsndFormat* out_formats; - uint16 n_out_formats; - rdpsndFormat* format; - uint8* format_mark; - uint8* data_mark; - int pos; - - stream_seek_uint32(data_in); /* dwFlags */ - stream_seek_uint32(data_in); /* dwVolume */ - stream_seek_uint32(data_in); /* dwPitch */ - stream_seek_uint16(data_in); /* wDGramPort */ - stream_read_uint16(data_in, wNumberOfFormats); - stream_read_uint8(data_in, rdpsnd->cBlockNo); /* cLastBlockConfirmed */ - stream_read_uint16(data_in, wVersion); - stream_seek_uint8(data_in); /* bPad */ - - out_formats = (rdpsndFormat*) - xzalloc(wNumberOfFormats * sizeof(rdpsndFormat)); - - n_out_formats = 0; - - data_out = stream_new(24); - stream_write_uint8(data_out, SNDC_FORMATS); /* msgType */ - stream_write_uint8(data_out, 0); /* bPad */ - stream_seek_uint16(data_out); /* BodySize */ - stream_write_uint32(data_out, TSSNDCAPS_ALIVE); /* dwFlags */ - stream_write_uint32(data_out, 0); /* dwVolume */ - stream_write_uint32(data_out, 0); /* dwPitch */ - stream_write_uint16_be(data_out, 0); /* wDGramPort */ - stream_seek_uint16(data_out); /* wNumberOfFormats */ - stream_write_uint8(data_out, 0); /* cLastBlockConfirmed */ - stream_write_uint16(data_out, 6); /* wVersion */ - stream_write_uint8(data_out, 0); /* bPad */ - - for (nFormat = 0; nFormat < wNumberOfFormats; nFormat++) { - - stream_get_mark(data_in, format_mark); - format = &out_formats[n_out_formats]; - stream_read_uint16(data_in, format->wFormatTag); - stream_read_uint16(data_in, format->nChannels); - stream_read_uint32(data_in, format->nSamplesPerSec); - stream_seek_uint32(data_in); /* nAvgBytesPerSec */ - stream_read_uint16(data_in, format->nBlockAlign); - stream_read_uint16(data_in, format->wBitsPerSample); - stream_read_uint16(data_in, format->cbSize); - stream_get_mark(data_in, data_mark); - stream_seek(data_in, format->cbSize); - format->data = NULL; - - if (format->wFormatTag == WAVE_FORMAT_PCM) { - - guac_client_log_info(client, - "Accepted format: %i-bit PCM with %i channels at " - "%i Hz", - format->wBitsPerSample, - format->nChannels, - format->nSamplesPerSec); - - stream_check_size(data_out, 18 + format->cbSize); - stream_write(data_out, format_mark, 18 + format->cbSize); - if (format->cbSize > 0) - { - format->data = xmalloc(format->cbSize); - memcpy(format->data, data_mark, format->cbSize); - } - n_out_formats++; - } - - } - - xfree(out_formats); - - pos = stream_get_pos(data_out); - stream_set_pos(data_out, 2); - stream_write_uint16(data_out, pos - 4); - stream_set_pos(data_out, 18); - stream_write_uint16(data_out, n_out_formats); - stream_set_pos(data_out, pos); - - svc_plugin_send((rdpSvcPlugin*)rdpsnd, data_out); - - if (wVersion >= 6) { - - /* Respond with guality mode */ - data_out = stream_new(8); - stream_write_uint8(data_out, SNDC_QUALITYMODE); /* msgType */ - stream_write_uint8(data_out, 0); /* bPad */ - stream_write_uint16(data_out, 4); /* BodySize */ - stream_write_uint16(data_out, HIGH_QUALITY); /* wQualityMode */ - stream_write_uint16(data_out, 0); /* Reserved */ - - svc_plugin_send((rdpSvcPlugin*)rdpsnd, data_out); - } - -} - -/* server is getting a feel of the round trip time */ -void guac_rdpsnd_process_message_training(guac_rdpsndPlugin* rdpsnd, - STREAM* data_in) { - - uint16 wTimeStamp; - uint16 wPackSize; - STREAM* data_out; - - /* Read timestamp */ - stream_read_uint16(data_in, wTimeStamp); - stream_read_uint16(data_in, wPackSize); - - /* Send training response */ - data_out = stream_new(8); - stream_write_uint8(data_out, SNDC_TRAINING); /* msgType */ - stream_write_uint8(data_out, 0); /* bPad */ - stream_write_uint16(data_out, 4); /* BodySize */ - stream_write_uint16(data_out, wTimeStamp); - stream_write_uint16(data_out, wPackSize); - - svc_plugin_send((rdpSvcPlugin*) rdpsnd, data_out); - -} - -void guac_rdpsnd_process_message_wave_info(guac_rdpsndPlugin* rdpsnd, STREAM* data_in, uint16 BodySize) { - - uint16 wFormatNo; - - /* Read wave information */ - stream_read_uint16(data_in, rdpsnd->wTimeStamp); - stream_read_uint16(data_in, wFormatNo); - stream_read_uint8(data_in, rdpsnd->cBlockNo); - stream_seek(data_in, 3); /* bPad */ - stream_read(data_in, rdpsnd->waveData, 4); - - /* Read wave in next iteration */ - rdpsnd->waveDataSize = BodySize - 8; - rdpsnd->expectingWave = true; - -} - -/* header is not removed from data in this function */ -void rdpsnd_process_message_wave(guac_rdpsndPlugin* rdpsnd, - STREAM* data_in) { - - rdpSvcPlugin* plugin = (rdpSvcPlugin*)rdpsnd; - - /* Get client from plugin */ - guac_client* client = (guac_client*) - plugin->channel_entry_points.pExtendedData; - - STREAM* data_out; - - int size; - unsigned char* buffer; - - rdpsnd->expectingWave = 0; - memcpy(stream_get_head(data_in), rdpsnd->waveData, 4); - if (stream_get_size(data_in) != rdpsnd->waveDataSize) { - return; - } - - buffer = stream_get_head(data_in); - size = stream_get_size(data_in); - - guac_client_log_info(client, "Got sound: %i bytes.", size); - - data_out = stream_new(8); - stream_write_uint8(data_out, SNDC_WAVECONFIRM); - stream_write_uint8(data_out, 0); - stream_write_uint16(data_out, 4); - stream_write_uint16(data_out, rdpsnd->wTimeStamp); - stream_write_uint8(data_out, rdpsnd->cBlockNo); /* cConfirmedBlockNo */ - stream_write_uint8(data_out, 0); /* bPad */ - - svc_plugin_send(plugin, data_out); - rdpsnd->plugin.interval_ms = 10; -} +DEFINE_SVC_PLUGIN(guac_rdpsnd, "rdpsnd", + CHANNEL_OPTION_INITIALIZED | CHANNEL_OPTION_ENCRYPT_RDP) void guac_rdpsnd_process_connect(rdpSvcPlugin* plugin) { @@ -281,19 +49,6 @@ void guac_rdpsnd_process_connect(rdpSvcPlugin* plugin) { } -void guac_rdpsnd_process_message_setvolume(guac_rdpsndPlugin* rdpsnd, - STREAM* data_in) { - - /* Ignored for now */ - uint32 dwVolume; - stream_read_uint32(data_in, dwVolume); - -} - -void guac_rdpsnd_process_message_close(guac_rdpsndPlugin* rdpsnd) { - rdpsnd->plugin.interval_ms = 10; -} - void guac_rdpsnd_process_terminate(rdpSvcPlugin* plugin) { xfree(plugin); } @@ -302,6 +57,250 @@ void guac_rdpsnd_process_event(rdpSvcPlugin* plugin, RDP_EVENT* event) { freerdp_event_free(event); } -DEFINE_SVC_PLUGIN(guac_rdpsnd, "rdpsnd", - CHANNEL_OPTION_INITIALIZED | CHANNEL_OPTION_ENCRYPT_RDP) +void guac_rdpsnd_process_receive(rdpSvcPlugin* plugin, + STREAM* input_stream) { + + guac_rdpsndPlugin* rdpsnd = (guac_rdpsndPlugin*) plugin; + + /* Get client from plugin */ + guac_client* client = (guac_client*) + plugin->channel_entry_points.pExtendedData; + + uint8 msgType; + uint16 BodySize; + + if (rdpsnd->expectingWave) { + rdpsnd_process_message_wave(rdpsnd, client, input_stream); + return; + } + + /* Read event */ + stream_read_uint8(input_stream, msgType); /* msgType */ + stream_seek_uint8(input_stream); /* bPad */ + stream_read_uint16(input_stream, BodySize); + + switch (msgType) { + + case SNDC_FORMATS: + guac_rdpsnd_process_message_formats(rdpsnd, client, input_stream); + break; + + case SNDC_TRAINING: + guac_rdpsnd_process_message_training(rdpsnd, client, input_stream); + break; + + case SNDC_WAVE: + guac_rdpsnd_process_message_wave_info(rdpsnd, client, input_stream, BodySize); + break; + + case SNDC_CLOSE: + guac_rdpsnd_process_message_close(rdpsnd, client); + break; + + case SNDC_SETVOLUME: + guac_rdpsnd_process_message_setvolume(rdpsnd, client, input_stream); + break; + + default: + /*DEBUG_WARN("unknown msgType %d", msgType);*/ + break; + } + +} + +/* MESSAGE HANDLERS */ + +/* receives a list of server supported formats and returns a list + of client supported formats */ +void guac_rdpsnd_process_message_formats(guac_rdpsndPlugin* rdpsnd, + guac_client* client, STREAM* input_stream) { + + uint16 wNumberOfFormats; + uint16 nFormat; + uint16 wVersion; + STREAM* output_stream; + rdpsndFormat* out_formats; + uint16 n_out_formats; + rdpsndFormat* format; + uint8* format_mark; + uint8* data_mark; + int pos; + + stream_seek_uint32(input_stream); /* dwFlags */ + stream_seek_uint32(input_stream); /* dwVolume */ + stream_seek_uint32(input_stream); /* dwPitch */ + stream_seek_uint16(input_stream); /* wDGramPort */ + stream_read_uint16(input_stream, wNumberOfFormats); + stream_read_uint8(input_stream, rdpsnd->cBlockNo); /* cLastBlockConfirmed */ + stream_read_uint16(input_stream, wVersion); + stream_seek_uint8(input_stream); /* bPad */ + + out_formats = (rdpsndFormat*) + xzalloc(wNumberOfFormats * sizeof(rdpsndFormat)); + + n_out_formats = 0; + + output_stream = stream_new(24); + stream_write_uint8(output_stream, SNDC_FORMATS); /* msgType */ + stream_write_uint8(output_stream, 0); /* bPad */ + stream_seek_uint16(output_stream); /* BodySize */ + stream_write_uint32(output_stream, TSSNDCAPS_ALIVE); /* dwFlags */ + stream_write_uint32(output_stream, 0); /* dwVolume */ + stream_write_uint32(output_stream, 0); /* dwPitch */ + stream_write_uint16_be(output_stream, 0); /* wDGramPort */ + stream_seek_uint16(output_stream); /* wNumberOfFormats */ + stream_write_uint8(output_stream, 0); /* cLastBlockConfirmed */ + stream_write_uint16(output_stream, 6); /* wVersion */ + stream_write_uint8(output_stream, 0); /* bPad */ + + for (nFormat = 0; nFormat < wNumberOfFormats; nFormat++) { + + stream_get_mark(input_stream, format_mark); + format = &out_formats[n_out_formats]; + stream_read_uint16(input_stream, format->wFormatTag); + stream_read_uint16(input_stream, format->nChannels); + stream_read_uint32(input_stream, format->nSamplesPerSec); + stream_seek_uint32(input_stream); /* nAvgBytesPerSec */ + stream_read_uint16(input_stream, format->nBlockAlign); + stream_read_uint16(input_stream, format->wBitsPerSample); + stream_read_uint16(input_stream, format->cbSize); + stream_get_mark(input_stream, data_mark); + stream_seek(input_stream, format->cbSize); + format->data = NULL; + + if (format->wFormatTag == WAVE_FORMAT_PCM) { + + guac_client_log_info(client, + "Accepted format: %i-bit PCM with %i channels at " + "%i Hz", + format->wBitsPerSample, + format->nChannels, + format->nSamplesPerSec); + + stream_check_size(output_stream, 18 + format->cbSize); + stream_write(output_stream, format_mark, 18 + format->cbSize); + if (format->cbSize > 0) + { + format->data = xmalloc(format->cbSize); + memcpy(format->data, data_mark, format->cbSize); + } + n_out_formats++; + } + + } + + xfree(out_formats); + + pos = stream_get_pos(output_stream); + stream_set_pos(output_stream, 2); + stream_write_uint16(output_stream, pos - 4); + stream_set_pos(output_stream, 18); + stream_write_uint16(output_stream, n_out_formats); + stream_set_pos(output_stream, pos); + + svc_plugin_send((rdpSvcPlugin*)rdpsnd, output_stream); + + if (wVersion >= 6) { + + /* Respond with guality mode */ + output_stream = stream_new(8); + stream_write_uint8(output_stream, SNDC_QUALITYMODE); /* msgType */ + stream_write_uint8(output_stream, 0); /* bPad */ + stream_write_uint16(output_stream, 4); /* BodySize */ + stream_write_uint16(output_stream, HIGH_QUALITY); /* wQualityMode */ + stream_write_uint16(output_stream, 0); /* Reserved */ + + svc_plugin_send((rdpSvcPlugin*)rdpsnd, output_stream); + } + +} + +/* server is getting a feel of the round trip time */ +void guac_rdpsnd_process_message_training(guac_rdpsndPlugin* rdpsnd, + guac_client* client, STREAM* input_stream) { + + uint16 wTimeStamp; + uint16 wPackSize; + STREAM* output_stream; + + /* Read timestamp */ + stream_read_uint16(input_stream, wTimeStamp); + stream_read_uint16(input_stream, wPackSize); + + /* Send training response */ + output_stream = stream_new(8); + stream_write_uint8(output_stream, SNDC_TRAINING); /* msgType */ + stream_write_uint8(output_stream, 0); /* bPad */ + stream_write_uint16(output_stream, 4); /* BodySize */ + stream_write_uint16(output_stream, wTimeStamp); + stream_write_uint16(output_stream, wPackSize); + + svc_plugin_send((rdpSvcPlugin*) rdpsnd, output_stream); + +} + +void guac_rdpsnd_process_message_wave_info(guac_rdpsndPlugin* rdpsnd, guac_client* client, STREAM* input_stream, uint16 BodySize) { + + uint16 wFormatNo; + + /* Read wave information */ + stream_read_uint16(input_stream, rdpsnd->wTimeStamp); + stream_read_uint16(input_stream, wFormatNo); + stream_read_uint8(input_stream, rdpsnd->cBlockNo); + stream_seek(input_stream, 3); /* bPad */ + stream_read(input_stream, rdpsnd->waveData, 4); + + /* Read wave in next iteration */ + rdpsnd->waveDataSize = BodySize - 8; + rdpsnd->expectingWave = true; + +} + +/* header is not removed from data in this function */ +void rdpsnd_process_message_wave(guac_rdpsndPlugin* rdpsnd, + guac_client* client, STREAM* input_stream) { + + rdpSvcPlugin* plugin = (rdpSvcPlugin*)rdpsnd; + + STREAM* output_stream; + + int size; + unsigned char* buffer; + + rdpsnd->expectingWave = 0; + memcpy(stream_get_head(input_stream), rdpsnd->waveData, 4); + if (stream_get_size(input_stream) != rdpsnd->waveDataSize) { + return; + } + + buffer = stream_get_head(input_stream); + size = stream_get_size(input_stream); + + guac_client_log_info(client, "Got sound: %i bytes.", size); + + output_stream = stream_new(8); + stream_write_uint8(output_stream, SNDC_WAVECONFIRM); + stream_write_uint8(output_stream, 0); + stream_write_uint16(output_stream, 4); + stream_write_uint16(output_stream, rdpsnd->wTimeStamp); + stream_write_uint8(output_stream, rdpsnd->cBlockNo); /* cConfirmedBlockNo */ + stream_write_uint8(output_stream, 0); /* bPad */ + + svc_plugin_send(plugin, output_stream); + rdpsnd->plugin.interval_ms = 10; +} + +void guac_rdpsnd_process_message_setvolume(guac_rdpsndPlugin* rdpsnd, + guac_client* client, STREAM* input_stream) { + + /* Ignored for now */ + uint32 dwVolume; + stream_read_uint32(input_stream, dwVolume); + +} + +void guac_rdpsnd_process_message_close(guac_rdpsndPlugin* rdpsnd, + guac_client* client) { + rdpsnd->plugin.interval_ms = 10; +} diff --git a/protocols/rdp/guac_rdpsnd/rdpsnd_main.h b/protocols/rdp/guac_rdpsnd/rdpsnd_main.h index c5181df0..dcda05f2 100644 --- a/protocols/rdp/guac_rdpsnd/rdpsnd_main.h +++ b/protocols/rdp/guac_rdpsnd/rdpsnd_main.h @@ -59,51 +59,42 @@ typedef struct guac_rdpsndPlugin { rdpSvcPlugin plugin; uint8 cBlockNo; - rdpsndFormat* supported_formats; - int n_supported_formats; - int current_format; boolean expectingWave; uint8 waveData[4]; uint16 waveDataSize; uint32 wTimeStamp; /* server timestamp */ - uint32 wave_timestamp; /* client timestamp */ - - boolean is_open; - uint32 close_timestamp; - - uint16 fixed_format; - uint16 fixed_channel; - uint32 fixed_rate; - int latency; } guac_rdpsndPlugin ; -void guac_rdpsnd_process_receive(rdpSvcPlugin* plugin, - STREAM* data_in); - -void guac_rdpsnd_process_message_formats(guac_rdpsndPlugin* rdpsnd, - STREAM* data_in); - -void guac_rdpsnd_process_message_training(guac_rdpsndPlugin* rdpsnd, - STREAM* data_in); - -void guac_rdpsnd_process_message_wave_info(guac_rdpsndPlugin* rdpsnd, - STREAM* data_in, uint16 BodySize); - -void rdpsnd_process_message_wave(guac_rdpsndPlugin* rdpsnd, - STREAM* data_in); void guac_rdpsnd_process_connect(rdpSvcPlugin* plugin); -void guac_rdpsnd_process_message_setvolume(guac_rdpsndPlugin* rdpsnd, +void guac_rdpsnd_process_receive(rdpSvcPlugin* plugin, STREAM* data_in); -void guac_rdpsnd_process_message_close(guac_rdpsndPlugin* rdpsnd); - void guac_rdpsnd_process_terminate(rdpSvcPlugin* plugin); void guac_rdpsnd_process_event(rdpSvcPlugin* plugin, RDP_EVENT* event); + +void guac_rdpsnd_process_message_formats(guac_rdpsndPlugin* rdpsnd, + guac_client* client, STREAM* data_in); + +void guac_rdpsnd_process_message_training(guac_rdpsndPlugin* rdpsnd, + guac_client* client, STREAM* data_in); + +void guac_rdpsnd_process_message_wave_info(guac_rdpsndPlugin* rdpsnd, + guac_client* client, STREAM* data_in, uint16 BodySize); + +void rdpsnd_process_message_wave(guac_rdpsndPlugin* rdpsnd, + guac_client* client, STREAM* data_in); + +void guac_rdpsnd_process_message_setvolume(guac_rdpsndPlugin* rdpsnd, + guac_client* client, STREAM* data_in); + +void guac_rdpsnd_process_message_close(guac_rdpsndPlugin* rdpsnd, + guac_client* client); + #endif /* __RDPSND_MAIN_H */ From c440cd21a092a89ad2301adf181766a4cd05f529 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Sat, 27 Oct 2012 19:50:20 -0700 Subject: [PATCH 186/253] Removed useless Makefile.am --- protocols/rdp/guac_rdpsnd/Makefile.am | 64 --------------------------- 1 file changed, 64 deletions(-) delete mode 100644 protocols/rdp/guac_rdpsnd/Makefile.am diff --git a/protocols/rdp/guac_rdpsnd/Makefile.am b/protocols/rdp/guac_rdpsnd/Makefile.am deleted file mode 100644 index c87f6faa..00000000 --- a/protocols/rdp/guac_rdpsnd/Makefile.am +++ /dev/null @@ -1,64 +0,0 @@ -# ***** BEGIN LICENSE BLOCK ***** -# Version: MPL 1.1/GPL 2.0/LGPL 2.1 -# -# The contents of this file are subject to the Mozilla Public License Version -# 1.1 (the "License"); you may not use this file except in compliance with -# the License. You may obtain a copy of the License at -# http://www.mozilla.org/MPL/ -# -# Software distributed under the License is distributed on an "AS IS" basis, -# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License -# for the specific language governing rights and limitations under the -# License. -# -# The Original Code is libguac-client-rdp. -# -# The Initial Developer of the Original Code is -# Michael Jumper. -# Portions created by the Initial Developer are Copyright (C) 2011 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# -# Alternatively, the contents of this file may be used under the terms of -# either the GNU General Public License Version 2 or later (the "GPL"), or -# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), -# in which case the provisions of the GPL or the LGPL are applicable instead -# of those above. If you wish to allow use of your version of this file only -# under the terms of either the GPL or the LGPL, and not to allow others to -# use your version of this file under the terms of the MPL, indicate your -# decision by deleting the provisions above and replace them with the notice -# and other provisions required by the GPL or the LGPL. If you do not delete -# the provisions above, a recipient may use your version of this file under -# the terms of any one of the MPL, the GPL or the LGPL. -# -# ***** END LICENSE BLOCK ***** - -AUTOMAKE_OPTIONS = foreign - -ACLOCAL_AMFLAGS = -I m4 -AM_CFLAGS = -Werror -Wall -pedantic -Iinclude - -lib_LTLIBRARIES = libguac-client-rdp.la - -libguac_client_rdp_la_SOURCES = src/client.c src/rdp_bitmap.c src/rdp_glyph.c src/rdp_pointer.c src/rdp_gdi.c src/guac_handlers.c src/rdp_cliprdr.c \ - src/rdp_keymap.c \ - src/rdp_keymap_base.c \ - src/rdp_keymap_en_us.c \ - src/default_pointer.c - -noinst_HEADERS = \ - include/client.h \ - include/default_pointer.h \ - include/guac_handlers.h \ - include/rdp_bitmap.h \ - include/rdp_cliprdr.h \ - include/rdp_gdi.h \ - include/rdp_glyph.h \ - include/rdp_keymap.h \ - include/rdp_pointer.h - -libguac_client_rdp_la_LDFLAGS = -version-info 0:0:0 - -EXTRA_DIST = LICENSE - From a1ed00728c4babdbfb59151291a2159404967019 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Sat, 27 Oct 2012 20:03:18 -0700 Subject: [PATCH 187/253] Regroup source. --- protocols/rdp/Makefile.am | 5 +- .../guac_rdpsnd/{rdpsnd_main.c => messages.c} | 78 +----------- .../guac_rdpsnd/{rdpsnd_main.h => messages.h} | 31 +---- protocols/rdp/guac_rdpsnd/service.c | 111 ++++++++++++++++++ protocols/rdp/guac_rdpsnd/service.h | 46 ++++++++ 5 files changed, 165 insertions(+), 106 deletions(-) rename protocols/rdp/guac_rdpsnd/{rdpsnd_main.c => messages.c} (80%) rename protocols/rdp/guac_rdpsnd/{rdpsnd_main.h => messages.h} (79%) create mode 100644 protocols/rdp/guac_rdpsnd/service.c create mode 100644 protocols/rdp/guac_rdpsnd/service.h diff --git a/protocols/rdp/Makefile.am b/protocols/rdp/Makefile.am index 1a2bd458..cca4ebf0 100644 --- a/protocols/rdp/Makefile.am +++ b/protocols/rdp/Makefile.am @@ -48,7 +48,7 @@ libguac_client_rdp_la_SOURCES = src/client.c src/rdp_bitmap.c src/rdp_glyph.c sr src/rdp_keymap_en_us.c \ src/default_pointer.c -guac_rdpsnd_la_SOURCES = guac_rdpsnd/rdpsnd_main.c +guac_rdpsnd_la_SOURCES = guac_rdpsnd/messages.c guac_rdpsnd/service.c noinst_HEADERS = \ include/client.h \ @@ -60,7 +60,8 @@ noinst_HEADERS = \ include/rdp_glyph.h \ include/rdp_keymap.h \ include/rdp_pointer.h \ - guac_rdpsnd/rdpsnd_main.h + guac_rdpsnd/messages.h \ + guac_rdpsnd/service.h libguac_client_rdp_la_LDFLAGS = -version-info 0:0:0 guac_rdpsnd_la_LDFLAGS = -module -avoid-version -shared diff --git a/protocols/rdp/guac_rdpsnd/rdpsnd_main.c b/protocols/rdp/guac_rdpsnd/messages.c similarity index 80% rename from protocols/rdp/guac_rdpsnd/rdpsnd_main.c rename to protocols/rdp/guac_rdpsnd/messages.c index 5fe06871..a0e15060 100644 --- a/protocols/rdp/guac_rdpsnd/rdpsnd_main.c +++ b/protocols/rdp/guac_rdpsnd/messages.c @@ -31,82 +31,8 @@ #include -#include "rdpsnd_main.h" - -/* SVC DEFINITION */ - -DEFINE_SVC_PLUGIN(guac_rdpsnd, "rdpsnd", - CHANNEL_OPTION_INITIALIZED | CHANNEL_OPTION_ENCRYPT_RDP) - -void guac_rdpsnd_process_connect(rdpSvcPlugin* plugin) { - - /* Get client from plugin */ - guac_client* client = (guac_client*) - plugin->channel_entry_points.pExtendedData; - - /* Log that sound has been loaded */ - guac_client_log_info(client, "guac_rdpsnd connected."); - -} - -void guac_rdpsnd_process_terminate(rdpSvcPlugin* plugin) { - xfree(plugin); -} - -void guac_rdpsnd_process_event(rdpSvcPlugin* plugin, RDP_EVENT* event) { - freerdp_event_free(event); -} - -void guac_rdpsnd_process_receive(rdpSvcPlugin* plugin, - STREAM* input_stream) { - - guac_rdpsndPlugin* rdpsnd = (guac_rdpsndPlugin*) plugin; - - /* Get client from plugin */ - guac_client* client = (guac_client*) - plugin->channel_entry_points.pExtendedData; - - uint8 msgType; - uint16 BodySize; - - if (rdpsnd->expectingWave) { - rdpsnd_process_message_wave(rdpsnd, client, input_stream); - return; - } - - /* Read event */ - stream_read_uint8(input_stream, msgType); /* msgType */ - stream_seek_uint8(input_stream); /* bPad */ - stream_read_uint16(input_stream, BodySize); - - switch (msgType) { - - case SNDC_FORMATS: - guac_rdpsnd_process_message_formats(rdpsnd, client, input_stream); - break; - - case SNDC_TRAINING: - guac_rdpsnd_process_message_training(rdpsnd, client, input_stream); - break; - - case SNDC_WAVE: - guac_rdpsnd_process_message_wave_info(rdpsnd, client, input_stream, BodySize); - break; - - case SNDC_CLOSE: - guac_rdpsnd_process_message_close(rdpsnd, client); - break; - - case SNDC_SETVOLUME: - guac_rdpsnd_process_message_setvolume(rdpsnd, client, input_stream); - break; - - default: - /*DEBUG_WARN("unknown msgType %d", msgType);*/ - break; - } - -} +#include "service.h" +#include "messages.h" /* MESSAGE HANDLERS */ diff --git a/protocols/rdp/guac_rdpsnd/rdpsnd_main.h b/protocols/rdp/guac_rdpsnd/messages.h similarity index 79% rename from protocols/rdp/guac_rdpsnd/rdpsnd_main.h rename to protocols/rdp/guac_rdpsnd/messages.h index dcda05f2..b83cdfdd 100644 --- a/protocols/rdp/guac_rdpsnd/rdpsnd_main.h +++ b/protocols/rdp/guac_rdpsnd/messages.h @@ -17,8 +17,8 @@ * limitations under the License. */ -#ifndef __RDPSND_MAIN_H -#define __RDPSND_MAIN_H +#ifndef __GUAC_RDPSND_MESSAGES_H +#define __GUAC_RDPSND_MESSAGES_H #define SNDC_CLOSE 1 #define SNDC_WAVE 2 @@ -53,31 +53,6 @@ typedef struct rdpsndFormat { uint8* data; } rdpsndFormat; - -typedef struct guac_rdpsndPlugin { - - rdpSvcPlugin plugin; - - uint8 cBlockNo; - - boolean expectingWave; - uint8 waveData[4]; - uint16 waveDataSize; - uint32 wTimeStamp; /* server timestamp */ - -} guac_rdpsndPlugin ; - - -void guac_rdpsnd_process_connect(rdpSvcPlugin* plugin); - -void guac_rdpsnd_process_receive(rdpSvcPlugin* plugin, - STREAM* data_in); - -void guac_rdpsnd_process_terminate(rdpSvcPlugin* plugin); - -void guac_rdpsnd_process_event(rdpSvcPlugin* plugin, RDP_EVENT* event); - - void guac_rdpsnd_process_message_formats(guac_rdpsndPlugin* rdpsnd, guac_client* client, STREAM* data_in); @@ -96,5 +71,5 @@ void guac_rdpsnd_process_message_setvolume(guac_rdpsndPlugin* rdpsnd, void guac_rdpsnd_process_message_close(guac_rdpsndPlugin* rdpsnd, guac_client* client); -#endif /* __RDPSND_MAIN_H */ +#endif diff --git a/protocols/rdp/guac_rdpsnd/service.c b/protocols/rdp/guac_rdpsnd/service.c new file mode 100644 index 00000000..a9752d9d --- /dev/null +++ b/protocols/rdp/guac_rdpsnd/service.c @@ -0,0 +1,111 @@ +/** + * FreeRDP: A Remote Desktop Protocol client. + * Audio Output Virtual Channel + * + * Copyright 2009-2011 Jay Sorg + * Copyright 2010-2011 Vic Lee + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "service.h" +#include "messages.h" + +/* SVC DEFINITION */ + +DEFINE_SVC_PLUGIN(guac_rdpsnd, "rdpsnd", + CHANNEL_OPTION_INITIALIZED | CHANNEL_OPTION_ENCRYPT_RDP) + +void guac_rdpsnd_process_connect(rdpSvcPlugin* plugin) { + + /* Get client from plugin */ + guac_client* client = (guac_client*) + plugin->channel_entry_points.pExtendedData; + + /* Log that sound has been loaded */ + guac_client_log_info(client, "guac_rdpsnd connected."); + +} + +void guac_rdpsnd_process_terminate(rdpSvcPlugin* plugin) { + xfree(plugin); +} + +void guac_rdpsnd_process_event(rdpSvcPlugin* plugin, RDP_EVENT* event) { + freerdp_event_free(event); +} + +void guac_rdpsnd_process_receive(rdpSvcPlugin* plugin, + STREAM* input_stream) { + + guac_rdpsndPlugin* rdpsnd = (guac_rdpsndPlugin*) plugin; + + /* Get client from plugin */ + guac_client* client = (guac_client*) + plugin->channel_entry_points.pExtendedData; + + uint8 msgType; + uint16 BodySize; + + if (rdpsnd->expectingWave) { + rdpsnd_process_message_wave(rdpsnd, client, input_stream); + return; + } + + /* Read event */ + stream_read_uint8(input_stream, msgType); /* msgType */ + stream_seek_uint8(input_stream); /* bPad */ + stream_read_uint16(input_stream, BodySize); + + switch (msgType) { + + case SNDC_FORMATS: + guac_rdpsnd_process_message_formats(rdpsnd, client, input_stream); + break; + + case SNDC_TRAINING: + guac_rdpsnd_process_message_training(rdpsnd, client, input_stream); + break; + + case SNDC_WAVE: + guac_rdpsnd_process_message_wave_info(rdpsnd, client, input_stream, BodySize); + break; + + case SNDC_CLOSE: + guac_rdpsnd_process_message_close(rdpsnd, client); + break; + + case SNDC_SETVOLUME: + guac_rdpsnd_process_message_setvolume(rdpsnd, client, input_stream); + break; + + default: + /*DEBUG_WARN("unknown msgType %d", msgType);*/ + break; + } + +} + diff --git a/protocols/rdp/guac_rdpsnd/service.h b/protocols/rdp/guac_rdpsnd/service.h new file mode 100644 index 00000000..5fd70c41 --- /dev/null +++ b/protocols/rdp/guac_rdpsnd/service.h @@ -0,0 +1,46 @@ +/** + * FreeRDP: A Remote Desktop Protocol client. + * Audio Output Virtual Channel + * + * Copyright 2010-2011 Vic Lee + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __GUAC_RDPSND_SERVICE_H +#define __GUAC_RDPSND_SERVICE_H + +typedef struct guac_rdpsndPlugin { + + rdpSvcPlugin plugin; + + uint8 cBlockNo; + + boolean expectingWave; + uint8 waveData[4]; + uint16 waveDataSize; + uint32 wTimeStamp; /* server timestamp */ + +} guac_rdpsndPlugin ; + +void guac_rdpsnd_process_connect(rdpSvcPlugin* plugin); + +void guac_rdpsnd_process_receive(rdpSvcPlugin* plugin, + STREAM* data_in); + +void guac_rdpsnd_process_terminate(rdpSvcPlugin* plugin); + +void guac_rdpsnd_process_event(rdpSvcPlugin* plugin, RDP_EVENT* event); + +#endif + From f417f37f5f490ff7740f02e3e165234609133423 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Sat, 27 Oct 2012 20:52:48 -0700 Subject: [PATCH 188/253] Add audio encoding API. --- protocols/rdp/Makefile.am | 21 +++- protocols/rdp/include/audio.h | 156 ++++++++++++++++++++++++++++ protocols/rdp/include/ogg_encoder.h | 46 ++++++++ protocols/rdp/src/audio.c | 115 ++++++++++++++++++++ protocols/rdp/src/ogg_encoder.c | 74 +++++++++++++ 5 files changed, 407 insertions(+), 5 deletions(-) create mode 100644 protocols/rdp/include/audio.h create mode 100644 protocols/rdp/include/ogg_encoder.h create mode 100644 protocols/rdp/src/audio.c create mode 100644 protocols/rdp/src/ogg_encoder.c diff --git a/protocols/rdp/Makefile.am b/protocols/rdp/Makefile.am index cca4ebf0..2ffadb87 100644 --- a/protocols/rdp/Makefile.am +++ b/protocols/rdp/Makefile.am @@ -42,18 +42,29 @@ AM_CFLAGS = -Werror -Wall -Iinclude lib_LTLIBRARIES = libguac-client-rdp.la freerdp_LTLIBRARIES = guac_rdpsnd.la -libguac_client_rdp_la_SOURCES = src/client.c src/rdp_bitmap.c src/rdp_glyph.c src/rdp_pointer.c src/rdp_gdi.c src/guac_handlers.c src/rdp_cliprdr.c \ - src/rdp_keymap.c \ - src/rdp_keymap_base.c \ - src/rdp_keymap_en_us.c \ - src/default_pointer.c +libguac_client_rdp_la_SOURCES = \ + src/audio.c \ + src/client.c \ + src/rdp_bitmap.c \ + src/rdp_glyph.c \ + src/rdp_pointer.c \ + src/rdp_gdi.c \ + src/guac_handlers.c \ + src/ogg_encoder.c \ + src/rdp_cliprdr.c \ + src/rdp_keymap.c \ + src/rdp_keymap_base.c \ + src/rdp_keymap_en_us.c \ + src/default_pointer.c guac_rdpsnd_la_SOURCES = guac_rdpsnd/messages.c guac_rdpsnd/service.c noinst_HEADERS = \ + include/audio.h \ include/client.h \ include/default_pointer.h \ include/guac_handlers.h \ + include/ogg_encoder.h \ include/rdp_bitmap.h \ include/rdp_cliprdr.h \ include/rdp_gdi.h \ diff --git a/protocols/rdp/include/audio.h b/protocols/rdp/include/audio.h new file mode 100644 index 00000000..dadd04d1 --- /dev/null +++ b/protocols/rdp/include/audio.h @@ -0,0 +1,156 @@ + +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is libguac-client-rdp. + * + * The Initial Developer of the Original Code is + * Michael Jumper. + * Portions created by the Initial Developer are Copyright (C) 2010 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#ifndef __GUAC_TEST_AUDIO_H +#define __GUAC_TEST_AUDIO_H + +#include +#include + +typedef struct audio_stream audio_stream; + +/** + * Handler which is called when the audio stream is opened. + */ +typedef void audio_encoder_begin_handler(audio_stream* audio); + +/** + * Handler which is called when the audio stream is closed. + */ +typedef void audio_encoder_end_handler(audio_stream* audio); + +/** + * Handler which is called when the audio stream is flushed. + */ +typedef void audio_encoder_write_handler(audio_stream* audio, + int* pcm_data, int length); + +/** + * Arbitrary audio codec encoder. + */ +typedef struct audio_encoder { + + /** + * Handler which will be called when the audio stream is opened. + */ + audio_encoder_begin_handler* begin_handler; + + /** + * Handler which will be called when the audio stream is flushed. + */ + audio_encoder_write_handler* write_handler; + + /** + * Handler which will be called when the audio stream is closed. + */ + audio_encoder_end_handler* end_handler; + +} audio_encoder; + +/** + * Basic audio stream. PCM data is added to the stream. When the stream is + * flushed, a write handler receives PCM data packets and, presumably, streams + * them to the guac_stream provided. + */ +struct audio_stream { + + /** + * PCM data buffer, 16-bit samples, 2-channel. + */ + int* pcm_data; + + /** + * Number of samples in buffer. + */ + int used; + + /** + * Maximum number of samples in buffer. + */ + int length; + + /** + * Arbitrary codec encoder. When the PCM buffer is flushed, PCM data will be sent + * to this encoder. + */ + audio_encoder* encoder; + + /** + * The client associated with this audio stream. + */ + guac_client* client; + + /** + * The actual stream associated with this audio stream. + */ + guac_stream* stream; + +}; + +/** + * Allocates a new audio stream. + */ +audio_stream* audio_stream_alloc(guac_client* client, + audio_encoder* encoder); + +/** + * Frees the given audio stream. + */ +void audio_stream_free(audio_stream* stream); + +/** + * Begins a new audio stream. + */ +void audio_stream_begin(audio_stream* stream); + +/** + * Ends the current audio stream. + */ +void audio_stream_end(audio_stream* stream); + +/** + * Writes PCM data to the given audio stream. + */ +void audio_stream_write_pcm(audio_stream* stream, const int* data, int length); + +/** + * Flushes the given audio stream. + */ +void audio_stream_flush(audio_stream* stream); + +#endif + diff --git a/protocols/rdp/include/ogg_encoder.h b/protocols/rdp/include/ogg_encoder.h new file mode 100644 index 00000000..8a1048cc --- /dev/null +++ b/protocols/rdp/include/ogg_encoder.h @@ -0,0 +1,46 @@ + +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is libguac-client-rdp. + * + * The Initial Developer of the Original Code is + * Michael Jumper. + * Portions created by the Initial Developer are Copyright (C) 2010 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#ifndef __GUAC_OGG_ENCODER_H +#define __GUAC_OGG_ENCODER_H + +#include "audio.h" + +extern audio_encoder* ogg_encoder; + +#endif + diff --git a/protocols/rdp/src/audio.c b/protocols/rdp/src/audio.c new file mode 100644 index 00000000..eaf7f5ed --- /dev/null +++ b/protocols/rdp/src/audio.c @@ -0,0 +1,115 @@ + +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is libguac-client-rdp. + * + * The Initial Developer of the Original Code is + * Michael Jumper. + * Portions created by the Initial Developer are Copyright (C) 2010 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#include +#include +#include +#include +#include + +#include "audio.h" + +audio_stream* audio_stream_alloc(guac_client* client, audio_encoder* encoder) { + + /* Allocate stream */ + audio_stream* audio = (audio_stream*) malloc(sizeof(audio_stream)); + + /* Reset buffer stats */ + audio->used = 0; + audio->length = 0x40000; + + /* Allocate buffer */ + audio->pcm_data = malloc(sizeof(int) * audio->length); + + /* Assign encoder */ + audio->encoder = encoder; + audio->stream = guac_client_alloc_stream(client); + + return audio; +} + +void audio_stream_begin(audio_stream* audio) { + audio->encoder->begin_handler(audio); +} + +void audio_stream_end(audio_stream* audio) { + audio_stream_flush(audio); + audio->encoder->end_handler(audio); +} + +void audio_stream_free(audio_stream* audio) { + free(audio->pcm_data); + free(audio); +} + +void audio_stream_write_pcm(audio_stream* audio, const int* data, int length) { + + /* Resize audio buffer if necessary */ + if (length > audio->length) { + + /* Resize to double provided length */ + audio->length = length*2; + audio->pcm_data = realloc(audio, sizeof(int) * audio->length); + + } + + /* Flush if necessary */ + if (audio->used + length > audio->length) + audio_stream_flush(audio); + + /* Append to buffer */ + memcpy(&(audio->pcm_data[audio->used]), data, sizeof(int) * length); + audio->used += length; + +} + +void audio_stream_flush(audio_stream* audio) { + + /* If data in buffer */ + if (audio->used != 0) { + + /* Write data */ + audio->encoder->write_handler(audio, + audio->pcm_data, audio->used); + + /* Reset buffer */ + audio->used = 0; + + } + +} + diff --git a/protocols/rdp/src/ogg_encoder.c b/protocols/rdp/src/ogg_encoder.c new file mode 100644 index 00000000..36790c3c --- /dev/null +++ b/protocols/rdp/src/ogg_encoder.c @@ -0,0 +1,74 @@ + +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is libguac-client-rdp. + * + * The Initial Developer of the Original Code is + * Michael Jumper. + * Portions created by the Initial Developer are Copyright (C) 2010 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#include +#include + +#include "audio.h" + +void ogg_encoder_begin_handler(audio_stream* audio) { + + guac_client_log_info(audio->client, + "OGG: Beginning audio stream."); + +} + +void ogg_encoder_end_handler(audio_stream* audio) { + + guac_client_log_info(audio->client, + "OGG: Ending audio stream."); + +} + +void ogg_encoder_write_handler(audio_stream* audio, int* pcm_data, int length) { + + guac_client_log_info(audio->client, + "OGG: Writing data to stream, length=%i", + length); + +} + +/* Encoder handlers */ +audio_encoder _ogg_encoder = { + .begin_handler = ogg_encoder_begin_handler, + .write_handler = ogg_encoder_write_handler, + .end_handler = ogg_encoder_end_handler +}; + +/* Actual encoder */ +audio_encoder* ogg_encoder = &_ogg_encoder; + From 29603318848945fc27ac959335e7821a7dcb6414 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Sun, 28 Oct 2012 00:23:44 -0700 Subject: [PATCH 189/253] Pass stream to guac_rdpsnd. --- protocols/rdp/guac_rdpsnd/messages.c | 17 ++++++------ protocols/rdp/guac_rdpsnd/messages.h | 12 ++++----- protocols/rdp/guac_rdpsnd/service.c | 23 ++++++++-------- protocols/rdp/include/client.h | 6 +++++ protocols/rdp/src/client.c | 39 +++++++++++++++++++++++++--- 5 files changed, 68 insertions(+), 29 deletions(-) diff --git a/protocols/rdp/guac_rdpsnd/messages.c b/protocols/rdp/guac_rdpsnd/messages.c index a0e15060..b6948ca3 100644 --- a/protocols/rdp/guac_rdpsnd/messages.c +++ b/protocols/rdp/guac_rdpsnd/messages.c @@ -31,6 +31,7 @@ #include +#include "audio.h" #include "service.h" #include "messages.h" @@ -39,7 +40,7 @@ /* receives a list of server supported formats and returns a list of client supported formats */ void guac_rdpsnd_process_message_formats(guac_rdpsndPlugin* rdpsnd, - guac_client* client, STREAM* input_stream) { + audio_stream* audio, STREAM* input_stream) { uint16 wNumberOfFormats; uint16 nFormat; @@ -96,7 +97,7 @@ void guac_rdpsnd_process_message_formats(guac_rdpsndPlugin* rdpsnd, if (format->wFormatTag == WAVE_FORMAT_PCM) { - guac_client_log_info(client, + guac_client_log_info(audio->client, "Accepted format: %i-bit PCM with %i channels at " "%i Hz", format->wBitsPerSample, @@ -143,7 +144,7 @@ void guac_rdpsnd_process_message_formats(guac_rdpsndPlugin* rdpsnd, /* server is getting a feel of the round trip time */ void guac_rdpsnd_process_message_training(guac_rdpsndPlugin* rdpsnd, - guac_client* client, STREAM* input_stream) { + audio_stream* audio, STREAM* input_stream) { uint16 wTimeStamp; uint16 wPackSize; @@ -165,7 +166,7 @@ void guac_rdpsnd_process_message_training(guac_rdpsndPlugin* rdpsnd, } -void guac_rdpsnd_process_message_wave_info(guac_rdpsndPlugin* rdpsnd, guac_client* client, STREAM* input_stream, uint16 BodySize) { +void guac_rdpsnd_process_message_wave_info(guac_rdpsndPlugin* rdpsnd, audio_stream* audio, STREAM* input_stream, uint16 BodySize) { uint16 wFormatNo; @@ -184,7 +185,7 @@ void guac_rdpsnd_process_message_wave_info(guac_rdpsndPlugin* rdpsnd, guac_clien /* header is not removed from data in this function */ void rdpsnd_process_message_wave(guac_rdpsndPlugin* rdpsnd, - guac_client* client, STREAM* input_stream) { + audio_stream* audio, STREAM* input_stream) { rdpSvcPlugin* plugin = (rdpSvcPlugin*)rdpsnd; @@ -202,7 +203,7 @@ void rdpsnd_process_message_wave(guac_rdpsndPlugin* rdpsnd, buffer = stream_get_head(input_stream); size = stream_get_size(input_stream); - guac_client_log_info(client, "Got sound: %i bytes.", size); + guac_client_log_info(audio->client, "Got sound: %i bytes.", size); output_stream = stream_new(8); stream_write_uint8(output_stream, SNDC_WAVECONFIRM); @@ -217,7 +218,7 @@ void rdpsnd_process_message_wave(guac_rdpsndPlugin* rdpsnd, } void guac_rdpsnd_process_message_setvolume(guac_rdpsndPlugin* rdpsnd, - guac_client* client, STREAM* input_stream) { + audio_stream* audio, STREAM* input_stream) { /* Ignored for now */ uint32 dwVolume; @@ -226,7 +227,7 @@ void guac_rdpsnd_process_message_setvolume(guac_rdpsndPlugin* rdpsnd, } void guac_rdpsnd_process_message_close(guac_rdpsndPlugin* rdpsnd, - guac_client* client) { + audio_stream* audio) { rdpsnd->plugin.interval_ms = 10; } diff --git a/protocols/rdp/guac_rdpsnd/messages.h b/protocols/rdp/guac_rdpsnd/messages.h index b83cdfdd..2b66f7e1 100644 --- a/protocols/rdp/guac_rdpsnd/messages.h +++ b/protocols/rdp/guac_rdpsnd/messages.h @@ -54,22 +54,22 @@ typedef struct rdpsndFormat { } rdpsndFormat; void guac_rdpsnd_process_message_formats(guac_rdpsndPlugin* rdpsnd, - guac_client* client, STREAM* data_in); + audio_stream* audio, STREAM* data_in); void guac_rdpsnd_process_message_training(guac_rdpsndPlugin* rdpsnd, - guac_client* client, STREAM* data_in); + audio_stream* audio, STREAM* data_in); void guac_rdpsnd_process_message_wave_info(guac_rdpsndPlugin* rdpsnd, - guac_client* client, STREAM* data_in, uint16 BodySize); + audio_stream* audio, STREAM* data_in, uint16 BodySize); void rdpsnd_process_message_wave(guac_rdpsndPlugin* rdpsnd, - guac_client* client, STREAM* data_in); + audio_stream* audio, STREAM* data_in); void guac_rdpsnd_process_message_setvolume(guac_rdpsndPlugin* rdpsnd, - guac_client* client, STREAM* data_in); + audio_stream* audio, STREAM* data_in); void guac_rdpsnd_process_message_close(guac_rdpsndPlugin* rdpsnd, - guac_client* client); + audio_stream* audio); #endif diff --git a/protocols/rdp/guac_rdpsnd/service.c b/protocols/rdp/guac_rdpsnd/service.c index a9752d9d..e9a92f4f 100644 --- a/protocols/rdp/guac_rdpsnd/service.c +++ b/protocols/rdp/guac_rdpsnd/service.c @@ -31,6 +31,7 @@ #include +#include "audio.h" #include "service.h" #include "messages.h" @@ -41,12 +42,12 @@ DEFINE_SVC_PLUGIN(guac_rdpsnd, "rdpsnd", void guac_rdpsnd_process_connect(rdpSvcPlugin* plugin) { - /* Get client from plugin */ - guac_client* client = (guac_client*) + /* Get audio stream from plugin */ + audio_stream* audio = (audio_stream*) plugin->channel_entry_points.pExtendedData; /* Log that sound has been loaded */ - guac_client_log_info(client, "guac_rdpsnd connected."); + guac_client_log_info(audio->client, "guac_rdpsnd connected."); } @@ -63,15 +64,15 @@ void guac_rdpsnd_process_receive(rdpSvcPlugin* plugin, guac_rdpsndPlugin* rdpsnd = (guac_rdpsndPlugin*) plugin; - /* Get client from plugin */ - guac_client* client = (guac_client*) + /* Get audio stream from plugin */ + audio_stream* audio = (audio_stream*) plugin->channel_entry_points.pExtendedData; uint8 msgType; uint16 BodySize; if (rdpsnd->expectingWave) { - rdpsnd_process_message_wave(rdpsnd, client, input_stream); + rdpsnd_process_message_wave(rdpsnd, audio, input_stream); return; } @@ -83,23 +84,23 @@ void guac_rdpsnd_process_receive(rdpSvcPlugin* plugin, switch (msgType) { case SNDC_FORMATS: - guac_rdpsnd_process_message_formats(rdpsnd, client, input_stream); + guac_rdpsnd_process_message_formats(rdpsnd, audio, input_stream); break; case SNDC_TRAINING: - guac_rdpsnd_process_message_training(rdpsnd, client, input_stream); + guac_rdpsnd_process_message_training(rdpsnd, audio, input_stream); break; case SNDC_WAVE: - guac_rdpsnd_process_message_wave_info(rdpsnd, client, input_stream, BodySize); + guac_rdpsnd_process_message_wave_info(rdpsnd, audio, input_stream, BodySize); break; case SNDC_CLOSE: - guac_rdpsnd_process_message_close(rdpsnd, client); + guac_rdpsnd_process_message_close(rdpsnd, audio); break; case SNDC_SETVOLUME: - guac_rdpsnd_process_message_setvolume(rdpsnd, client, input_stream); + guac_rdpsnd_process_message_setvolume(rdpsnd, audio, input_stream); break; default: diff --git a/protocols/rdp/include/client.h b/protocols/rdp/include/client.h index 0c28d8fe..1fba847f 100644 --- a/protocols/rdp/include/client.h +++ b/protocols/rdp/include/client.h @@ -45,6 +45,7 @@ #include +#include "audio.h" #include "rdp_keymap.h" /** @@ -138,6 +139,11 @@ typedef struct rdp_guac_client_data { */ char* clipboard; + /** + * Audio output, if any. + */ + audio_stream* audio; + } rdp_guac_client_data; /** diff --git a/protocols/rdp/src/client.c b/protocols/rdp/src/client.c index 3bba1d23..9345933b 100644 --- a/protocols/rdp/src/client.c +++ b/protocols/rdp/src/client.c @@ -61,6 +61,9 @@ #include #include +#include "audio.h" +#include "ogg_encoder.h" + #include "client.h" #include "guac_handlers.h" #include "rdp_keymap.h" @@ -110,16 +113,43 @@ boolean rdp_freerdp_pre_connect(freerdp* instance) { rdpPointer* pointer; rdpPrimaryUpdate* primary; CLRCONV* clrconv; + int i; + + rdp_guac_client_data* guac_client_data = + (rdp_guac_client_data*) client->data; /* Load clipboard plugin */ if (freerdp_channels_load_plugin(channels, instance->settings, "cliprdr", NULL)) guac_client_log_error(client, "Failed to load cliprdr plugin."); - /* Load sound plugin */ - if (freerdp_channels_load_plugin(channels, instance->settings, - "guac_rdpsnd", client)) - guac_client_log_error(client, "Failed to load guac_rdpsnd plugin."); + /* Choose an encoding */ + for (i=0; client->info.audio_mimetypes[i] != NULL; i++) { + + const char* mimetype = client->info.audio_mimetypes[i]; + + // If Ogg is supported, done. + if (strcmp(mimetype, "audio/ogg") == 0) { + guac_client_log_info(client, "Loading Ogg Vorbis encoder."); + guac_client_data->audio = audio_stream_alloc(client, ogg_encoder); + break; + } + + } + + /* If an encoding is available, load the sound plugin */ + if (guac_client_data->audio != NULL) { + + /* Load sound plugin */ + if (freerdp_channels_load_plugin(channels, instance->settings, + "guac_rdpsnd", guac_client_data->audio)) + guac_client_log_error(client, + "Failed to load guac_rdpsnd plugin."); + + } + else + guac_client_log_info(client, + "No available audio encoding. Sound disabled."); /* Init color conversion structure */ clrconv = xnew(CLRCONV); @@ -425,6 +455,7 @@ int guac_client_init(guac_client* client, int argc, char** argv) { guac_client_data->mouse_button_mask = 0; guac_client_data->current_surface = GUAC_DEFAULT_LAYER; guac_client_data->clipboard = NULL; + guac_client_data->audio = NULL; /* Clear keysym state mapping and keymap */ memset(guac_client_data->keysym_state, 0, From 0114621de32c0304242c93e7605e052b2e19cce4 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Sun, 28 Oct 2012 00:33:58 -0700 Subject: [PATCH 190/253] Set client in audio_stream. --- protocols/rdp/src/audio.c | 1 + 1 file changed, 1 insertion(+) diff --git a/protocols/rdp/src/audio.c b/protocols/rdp/src/audio.c index eaf7f5ed..bdab70e2 100644 --- a/protocols/rdp/src/audio.c +++ b/protocols/rdp/src/audio.c @@ -47,6 +47,7 @@ audio_stream* audio_stream_alloc(guac_client* client, audio_encoder* encoder) { /* Allocate stream */ audio_stream* audio = (audio_stream*) malloc(sizeof(audio_stream)); + audio->client = client; /* Reset buffer stats */ audio->used = 0; From bcde14d27028a8bf224986f282d2e7d3fc0b2ae1 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Sun, 28 Oct 2012 01:14:19 -0700 Subject: [PATCH 191/253] Fix realloc, add convenience buffer to audio stream. --- protocols/rdp/Makefile.am | 5 +++- protocols/rdp/guac_rdpsnd/messages.c | 5 ++++ protocols/rdp/include/audio.h | 45 +++++++++++++++++++++++----- protocols/rdp/src/audio.c | 38 +++++++++++++++++++---- protocols/rdp/src/ogg_encoder.c | 3 +- 5 files changed, 81 insertions(+), 15 deletions(-) diff --git a/protocols/rdp/Makefile.am b/protocols/rdp/Makefile.am index 2ffadb87..618b4b72 100644 --- a/protocols/rdp/Makefile.am +++ b/protocols/rdp/Makefile.am @@ -57,7 +57,10 @@ libguac_client_rdp_la_SOURCES = \ src/rdp_keymap_en_us.c \ src/default_pointer.c -guac_rdpsnd_la_SOURCES = guac_rdpsnd/messages.c guac_rdpsnd/service.c +guac_rdpsnd_la_SOURCES = \ + src/audio.c \ + guac_rdpsnd/messages.c \ + guac_rdpsnd/service.c noinst_HEADERS = \ include/audio.h \ diff --git a/protocols/rdp/guac_rdpsnd/messages.c b/protocols/rdp/guac_rdpsnd/messages.c index b6948ca3..d8d595d5 100644 --- a/protocols/rdp/guac_rdpsnd/messages.c +++ b/protocols/rdp/guac_rdpsnd/messages.c @@ -205,6 +205,11 @@ void rdpsnd_process_message_wave(guac_rdpsndPlugin* rdpsnd, guac_client_log_info(audio->client, "Got sound: %i bytes.", size); + /* For now, start AND end stream right here */ + audio_stream_begin(audio); + audio_stream_write_pcm(audio, buffer, size); + audio_stream_end(audio); + output_stream = stream_new(8); stream_write_uint8(output_stream, SNDC_WAVECONFIRM); stream_write_uint8(output_stream, 0); diff --git a/protocols/rdp/include/audio.h b/protocols/rdp/include/audio.h index dadd04d1..dfa2e47c 100644 --- a/protocols/rdp/include/audio.h +++ b/protocols/rdp/include/audio.h @@ -57,7 +57,7 @@ typedef void audio_encoder_end_handler(audio_stream* audio); * Handler which is called when the audio stream is flushed. */ typedef void audio_encoder_write_handler(audio_stream* audio, - int* pcm_data, int length); + unsigned char* pcm_data, int length); /** * Arbitrary audio codec encoder. @@ -89,23 +89,38 @@ typedef struct audio_encoder { struct audio_stream { /** - * PCM data buffer, 16-bit samples, 2-channel. + * PCM data buffer, 16-bit samples, 2-channel, 44100 Hz. */ - int* pcm_data; + unsigned char* pcm_data; /** - * Number of samples in buffer. + * Number of bytes in buffer. */ int used; /** - * Maximum number of samples in buffer. + * Maximum number of bytes in buffer. */ int length; /** - * Arbitrary codec encoder. When the PCM buffer is flushed, PCM data will be sent - * to this encoder. + * Encoded audio data buffer, as written by the encoder. + */ + unsigned char* encoded_data; + + /** + * Number of bytes in the encoded data buffer. + */ + int encoded_data_used; + + /** + * Maximum number of bytes in the encoded data buffer. + */ + int encoded_data_length; + + /** + * Arbitrary codec encoder. When the PCM buffer is flushed, PCM data will + * be sent to this encoder. */ audio_encoder* encoder; @@ -145,12 +160,26 @@ void audio_stream_end(audio_stream* stream); /** * Writes PCM data to the given audio stream. */ -void audio_stream_write_pcm(audio_stream* stream, const int* data, int length); +void audio_stream_write_pcm(audio_stream* stream, + unsigned char* data, int length); /** * Flushes the given audio stream. */ void audio_stream_flush(audio_stream* stream); +/** + * Appends arbitrarily-encoded data to the encoded_data buffer + * within the given audio stream. + */ +void audio_stream_append_data(audio_stream* stream, + unsigned char* data, int length); + +/** + * Clears all data from the encoded_data buffer in the given + * audio stream. + */ +void audio_stream_clear_data(audio_stream* stream); + #endif diff --git a/protocols/rdp/src/audio.c b/protocols/rdp/src/audio.c index bdab70e2..131c1ca4 100644 --- a/protocols/rdp/src/audio.c +++ b/protocols/rdp/src/audio.c @@ -53,8 +53,12 @@ audio_stream* audio_stream_alloc(guac_client* client, audio_encoder* encoder) { audio->used = 0; audio->length = 0x40000; - /* Allocate buffer */ - audio->pcm_data = malloc(sizeof(int) * audio->length); + audio->encoded_data_used = 0; + audio->encoded_data_length = 0x40000; + + /* Allocate bufferis */ + audio->pcm_data = malloc(audio->length); + audio->encoded_data = malloc(audio->encoded_data_length); /* Assign encoder */ audio->encoder = encoder; @@ -77,14 +81,15 @@ void audio_stream_free(audio_stream* audio) { free(audio); } -void audio_stream_write_pcm(audio_stream* audio, const int* data, int length) { +void audio_stream_write_pcm(audio_stream* audio, + unsigned char* data, int length) { /* Resize audio buffer if necessary */ if (length > audio->length) { /* Resize to double provided length */ audio->length = length*2; - audio->pcm_data = realloc(audio, sizeof(int) * audio->length); + audio->pcm_data = realloc(audio->pcm_data, audio->length); } @@ -93,7 +98,7 @@ void audio_stream_write_pcm(audio_stream* audio, const int* data, int length) { audio_stream_flush(audio); /* Append to buffer */ - memcpy(&(audio->pcm_data[audio->used]), data, sizeof(int) * length); + memcpy(&(audio->pcm_data[audio->used]), data, length); audio->used += length; } @@ -114,3 +119,26 @@ void audio_stream_flush(audio_stream* audio) { } +void audio_stream_append_data(audio_stream* audio, + unsigned char* data, int length) { + + /* Resize audio buffer if necessary */ + if (audio->encoded_data_used + length > audio->encoded_data_length) { + + /* Increase to double concatenated size to accomodate */ + audio->encoded_data_length = (audio->encoded_data_length + length)*2; + audio->encoded_data = realloc(audio->encoded_data, + audio->encoded_data_length); + + } + + /* Append to buffer */ + memcpy(&(audio->encoded_data[audio->encoded_data_used]), data, length); + audio->encoded_data_used += length; + +} + +void audio_stream_clear_data(audio_stream* audio) { + audio->encoded_data_used = 0; +} + diff --git a/protocols/rdp/src/ogg_encoder.c b/protocols/rdp/src/ogg_encoder.c index 36790c3c..8c118754 100644 --- a/protocols/rdp/src/ogg_encoder.c +++ b/protocols/rdp/src/ogg_encoder.c @@ -54,7 +54,8 @@ void ogg_encoder_end_handler(audio_stream* audio) { } -void ogg_encoder_write_handler(audio_stream* audio, int* pcm_data, int length) { +void ogg_encoder_write_handler(audio_stream* audio, + unsigned char* pcm_data, int length) { guac_client_log_info(audio->client, "OGG: Writing data to stream, length=%i", From 73468176691dd0956f5e8c5bd359326ebdcabcfd Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Mon, 29 Oct 2012 10:51:56 -0700 Subject: [PATCH 192/253] Refactored audio API. --- protocols/rdp/guac_rdpsnd/messages.c | 6 ++++-- protocols/rdp/include/audio.h | 27 +++++++++++++++++++-------- protocols/rdp/src/audio.c | 16 ++++++++++------ 3 files changed, 33 insertions(+), 16 deletions(-) diff --git a/protocols/rdp/guac_rdpsnd/messages.c b/protocols/rdp/guac_rdpsnd/messages.c index d8d595d5..c4eb0651 100644 --- a/protocols/rdp/guac_rdpsnd/messages.c +++ b/protocols/rdp/guac_rdpsnd/messages.c @@ -181,6 +181,9 @@ void guac_rdpsnd_process_message_wave_info(guac_rdpsndPlugin* rdpsnd, audio_stre rdpsnd->waveDataSize = BodySize - 8; rdpsnd->expectingWave = true; + audio_stream_begin(audio, 22050, 2, 16); /* FIXME: Hard-coding rates */ + audio_stream_write_pcm(audio, rdpsnd->waveData, 4); + } /* header is not removed from data in this function */ @@ -205,8 +208,7 @@ void rdpsnd_process_message_wave(guac_rdpsndPlugin* rdpsnd, guac_client_log_info(audio->client, "Got sound: %i bytes.", size); - /* For now, start AND end stream right here */ - audio_stream_begin(audio); + /* Write rest of audio packet */ audio_stream_write_pcm(audio, buffer, size); audio_stream_end(audio); diff --git a/protocols/rdp/include/audio.h b/protocols/rdp/include/audio.h index dfa2e47c..d5dd8eb1 100644 --- a/protocols/rdp/include/audio.h +++ b/protocols/rdp/include/audio.h @@ -134,6 +134,23 @@ struct audio_stream { */ guac_stream* stream; + /** + * The number of samples per second of PCM data sent to this stream. + */ + int rate; + + /** + * The number of audio channels per sample of PCM data. Legal values are + * 1 or 2. + */ + int channels; + + /** + * The number of bits per sample per channel for PCM data. Legal values are + * 8 or 16. + */ + int bps; + }; /** @@ -150,7 +167,7 @@ void audio_stream_free(audio_stream* stream); /** * Begins a new audio stream. */ -void audio_stream_begin(audio_stream* stream); +void audio_stream_begin(audio_stream* stream, int rate, int channels, int bps); /** * Ends the current audio stream. @@ -172,14 +189,8 @@ void audio_stream_flush(audio_stream* stream); * Appends arbitrarily-encoded data to the encoded_data buffer * within the given audio stream. */ -void audio_stream_append_data(audio_stream* stream, +void audio_stream_write_encoded(audio_stream* audio, unsigned char* data, int length); -/** - * Clears all data from the encoded_data buffer in the given - * audio stream. - */ -void audio_stream_clear_data(audio_stream* stream); - #endif diff --git a/protocols/rdp/src/audio.c b/protocols/rdp/src/audio.c index 131c1ca4..74d6f723 100644 --- a/protocols/rdp/src/audio.c +++ b/protocols/rdp/src/audio.c @@ -67,8 +67,16 @@ audio_stream* audio_stream_alloc(guac_client* client, audio_encoder* encoder) { return audio; } -void audio_stream_begin(audio_stream* audio) { +void audio_stream_begin(audio_stream* audio, int rate, int channels, int bps) { + + /* Load PCM properties */ + audio->rate = rate; + audio->channels = channels; + audio->bps = bps; + + /* Call handler */ audio->encoder->begin_handler(audio); + } void audio_stream_end(audio_stream* audio) { @@ -119,7 +127,7 @@ void audio_stream_flush(audio_stream* audio) { } -void audio_stream_append_data(audio_stream* audio, +void audio_stream_write_encoded(audio_stream* audio, unsigned char* data, int length) { /* Resize audio buffer if necessary */ @@ -138,7 +146,3 @@ void audio_stream_append_data(audio_stream* audio, } -void audio_stream_clear_data(audio_stream* audio) { - audio->encoded_data_used = 0; -} - From 4daa2123baaff72ea7ba6d80d0ca8c6c4a5d4b54 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Mon, 29 Oct 2012 10:56:13 -0700 Subject: [PATCH 193/253] Add encoded data to audio_stream. --- protocols/rdp/include/audio.h | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/protocols/rdp/include/audio.h b/protocols/rdp/include/audio.h index d5dd8eb1..fb441f2a 100644 --- a/protocols/rdp/include/audio.h +++ b/protocols/rdp/include/audio.h @@ -151,6 +151,11 @@ struct audio_stream { */ int bps; + /** + * Encoder-specific state data. + */ + void* data; + }; /** From 65752f689c7e9f02d731f6c28e0e8564622ce054 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Mon, 29 Oct 2012 11:12:49 -0700 Subject: [PATCH 194/253] Actually send audio messages. --- protocols/rdp/guac_rdpsnd/messages.c | 2 -- protocols/rdp/include/audio.h | 5 +++++ protocols/rdp/src/audio.c | 21 ++++++++++++++++++++- protocols/rdp/src/guac_handlers.c | 4 ++++ 4 files changed, 29 insertions(+), 3 deletions(-) diff --git a/protocols/rdp/guac_rdpsnd/messages.c b/protocols/rdp/guac_rdpsnd/messages.c index c4eb0651..decc5a54 100644 --- a/protocols/rdp/guac_rdpsnd/messages.c +++ b/protocols/rdp/guac_rdpsnd/messages.c @@ -206,8 +206,6 @@ void rdpsnd_process_message_wave(guac_rdpsndPlugin* rdpsnd, buffer = stream_get_head(input_stream); size = stream_get_size(input_stream); - guac_client_log_info(audio->client, "Got sound: %i bytes.", size); - /* Write rest of audio packet */ audio_stream_write_pcm(audio, buffer, size); audio_stream_end(audio); diff --git a/protocols/rdp/include/audio.h b/protocols/rdp/include/audio.h index fb441f2a..61f537f7 100644 --- a/protocols/rdp/include/audio.h +++ b/protocols/rdp/include/audio.h @@ -151,6 +151,11 @@ struct audio_stream { */ int bps; + /** + * The number of PCM bytes written since the audio chunk began. + */ + int pcm_bytes_written; + /** * Encoder-specific state data. */ diff --git a/protocols/rdp/src/audio.c b/protocols/rdp/src/audio.c index 74d6f723..e27fe50d 100644 --- a/protocols/rdp/src/audio.c +++ b/protocols/rdp/src/audio.c @@ -56,7 +56,7 @@ audio_stream* audio_stream_alloc(guac_client* client, audio_encoder* encoder) { audio->encoded_data_used = 0; audio->encoded_data_length = 0x40000; - /* Allocate bufferis */ + /* Allocate buffers */ audio->pcm_data = malloc(audio->length); audio->encoded_data = malloc(audio->encoded_data_length); @@ -74,14 +74,30 @@ void audio_stream_begin(audio_stream* audio, int rate, int channels, int bps) { audio->channels = channels; audio->bps = bps; + /* Reset write counter */ + audio->pcm_bytes_written = 0; + /* Call handler */ audio->encoder->begin_handler(audio); } void audio_stream_end(audio_stream* audio) { + + /* Calculate duration of PCM data */ + int duration = + audio->pcm_bytes_written * 1000 * 8 / audio->rate + / audio->channels / audio->bps; + + /* Flush stream and finish encoding */ audio_stream_flush(audio); audio->encoder->end_handler(audio); + + /* Send audio */ + guac_protocol_send_audio(audio->stream->socket, + 0, "audio/ogg" /* FIXME: Hard-coded mimetype */, + duration, audio->encoded_data, audio->encoded_data_used); + } void audio_stream_free(audio_stream* audio) { @@ -92,6 +108,9 @@ void audio_stream_free(audio_stream* audio) { void audio_stream_write_pcm(audio_stream* audio, unsigned char* data, int length) { + /* Update counter */ + audio->pcm_bytes_written += length; + /* Resize audio buffer if necessary */ if (length > audio->length) { diff --git a/protocols/rdp/src/guac_handlers.c b/protocols/rdp/src/guac_handlers.c index f0b6e888..9638bb00 100644 --- a/protocols/rdp/src/guac_handlers.c +++ b/protocols/rdp/src/guac_handlers.c @@ -200,6 +200,10 @@ int rdp_guac_client_handle_messages(guac_client* client) { return 1; } + /* Flush any audio */ + if (guac_client_data->audio != NULL) + guac_socket_flush(guac_client_data->audio->stream->socket); + /* Success */ return 0; From 5ea7f5589d7a1d45c1880ca58e842b202a3f491c Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Mon, 29 Oct 2012 11:26:38 -0700 Subject: [PATCH 195/253] Check for libvorbisenc. --- protocols/rdp/configure.in | 2 ++ 1 file changed, 2 insertions(+) diff --git a/protocols/rdp/configure.in b/protocols/rdp/configure.in index 6c69ac4e..c915caa5 100644 --- a/protocols/rdp/configure.in +++ b/protocols/rdp/configure.in @@ -52,6 +52,8 @@ AC_CHECK_LIB([freerdp-channels], [freerdp_channels_new],, AC_MSG_ERROR("libfreer AC_CHECK_LIB([freerdp-utils], [xzalloc],, AC_MSG_ERROR("libfreerdp-utils is required (part of FreeRDP)")) AC_CHECK_LIB([freerdp-codec], [freerdp_image_convert],, AC_MSG_ERROR("libfreerdp-codec is required (part of FreeRDP)")) +AC_CHECK_LIB([vorbisenc], [vorbis_encode_init],, AC_MSG_ERROR("libvorbisenc is required for sound")) + # Checks for header files. AC_CHECK_HEADERS([guacamole/client.h guacamole/guacio.h guacamole/protocol.h freerdp/locale/keyboard.h freerdp/kbd/layouts.h]) From e14265ab46c719e97153b587b1dc51a64ab79700 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Mon, 29 Oct 2012 11:53:08 -0700 Subject: [PATCH 196/253] Implement part of vorbis encoder. --- protocols/rdp/include/ogg_encoder.h | 21 +++++++++ protocols/rdp/src/ogg_encoder.c | 69 +++++++++++++++++++++++++++-- 2 files changed, 86 insertions(+), 4 deletions(-) diff --git a/protocols/rdp/include/ogg_encoder.h b/protocols/rdp/include/ogg_encoder.h index 8a1048cc..78bfa6e5 100644 --- a/protocols/rdp/include/ogg_encoder.h +++ b/protocols/rdp/include/ogg_encoder.h @@ -40,6 +40,27 @@ #include "audio.h" +#include + +typedef struct ogg_encoder_state { + + /** + * Ogg state + */ + ogg_stream_state ogg_state; + ogg_page ogg_page; + ogg_packet ogg_packet; + + /** + * Vorbis state + */ + vorbis_info info; + vorbis_comment comment; + vorbis_dsp_state vorbis_state; + vorbis_block vorbis_block; + +} ogg_encoder_state; + extern audio_encoder* ogg_encoder; #endif diff --git a/protocols/rdp/src/ogg_encoder.c b/protocols/rdp/src/ogg_encoder.c index 8c118754..84c1deec 100644 --- a/protocols/rdp/src/ogg_encoder.c +++ b/protocols/rdp/src/ogg_encoder.c @@ -35,22 +35,83 @@ * * ***** END LICENSE BLOCK ***** */ +#include + #include #include +#include + #include "audio.h" +#include "ogg_encoder.h" void ogg_encoder_begin_handler(audio_stream* audio) { - guac_client_log_info(audio->client, - "OGG: Beginning audio stream."); + /* Allocate stream state */ + ogg_encoder_state* state = (ogg_encoder_state*) + malloc(sizeof(ogg_encoder_state)); + + /* Init state */ + vorbis_info_init(&(state->info)); + vorbis_encode_init_vbr(&(state->info), audio->channels, audio->rate, 0.1); + + vorbis_analysis_init(&(state->vorbis_state), &(state->info)); + vorbis_block_init(&(state->vorbis_state), &(state->vorbis_block)); + + vorbis_comment_init(&(state->comment)); + vorbis_comment_add_tag(&(state->comment), "ENCODER", "libguac-client-rdp"); + + ogg_stream_init(&(state->ogg_state), rand()); + + /* Write headers */ + { + ogg_packet header; + ogg_packet header_comm; + ogg_packet header_code; + + vorbis_analysis_headerout( + &(state->vorbis_state), + &(state->comment), + &header, &header_comm, &header_code); + + ogg_stream_packetin(&(state->ogg_state), &header); + ogg_stream_packetin(&(state->ogg_state), &header_comm); + ogg_stream_packetin(&(state->ogg_state), &header_code); + + /* For each packet */ + while (ogg_stream_flush(&(state->ogg_state), &(state->ogg_page)) != 0) { + + /* Write packet header */ + audio_stream_write_encoded(audio, + state->ogg_page.header, + state->ogg_page.header_len); + + /* Write packet body */ + audio_stream_write_encoded(audio, + state->ogg_page.body, + state->ogg_page.body_len); + } + + } + + audio->data = state; } void ogg_encoder_end_handler(audio_stream* audio) { - guac_client_log_info(audio->client, - "OGG: Ending audio stream."); + /* Get state */ + ogg_encoder_state* state = (ogg_encoder_state*) audio->data; + + /* Clean up encoder */ + ogg_stream_clear(&(state->ogg_state)); + vorbis_block_clear(&(state->vorbis_block)); + vorbis_dsp_clear(&(state->vorbis_state)); + vorbis_comment_clear(&(state->comment)); + vorbis_info_clear(&(state->info)); + + /* Free stream state */ + free(audio->data); } From face237d8d6920a0782487fab059775fdc64e5ed Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Mon, 29 Oct 2012 12:48:33 -0700 Subject: [PATCH 197/253] Actually output sound. --- protocols/rdp/src/audio.c | 3 ++ protocols/rdp/src/ogg_encoder.c | 80 +++++++++++++++++++++++++++++++-- 2 files changed, 79 insertions(+), 4 deletions(-) diff --git a/protocols/rdp/src/audio.c b/protocols/rdp/src/audio.c index e27fe50d..cc529584 100644 --- a/protocols/rdp/src/audio.c +++ b/protocols/rdp/src/audio.c @@ -98,6 +98,9 @@ void audio_stream_end(audio_stream* audio) { 0, "audio/ogg" /* FIXME: Hard-coded mimetype */, duration, audio->encoded_data, audio->encoded_data_used); + /* Clear data */ + audio->encoded_data_used = 0; + } void audio_stream_free(audio_stream* audio) { diff --git a/protocols/rdp/src/ogg_encoder.c b/protocols/rdp/src/ogg_encoder.c index 84c1deec..458034a1 100644 --- a/protocols/rdp/src/ogg_encoder.c +++ b/protocols/rdp/src/ogg_encoder.c @@ -53,7 +53,7 @@ void ogg_encoder_begin_handler(audio_stream* audio) { /* Init state */ vorbis_info_init(&(state->info)); - vorbis_encode_init_vbr(&(state->info), audio->channels, audio->rate, 0.1); + vorbis_encode_init_vbr(&(state->info), audio->channels, audio->rate, 0.4); vorbis_analysis_init(&(state->vorbis_state), &(state->info)); vorbis_block_init(&(state->vorbis_state), &(state->vorbis_block)); @@ -98,11 +98,59 @@ void ogg_encoder_begin_handler(audio_stream* audio) { } +void ogg_encoder_write_blocks(audio_stream* audio) { + + /* Get state */ + ogg_encoder_state* state = (ogg_encoder_state*) audio->data; + + while (vorbis_analysis_blockout(&(state->vorbis_state), + &(state->vorbis_block)) == 1) { + + /* Analyze */ + vorbis_analysis(&(state->vorbis_block), NULL); + vorbis_bitrate_addblock(&(state->vorbis_block)); + + /* Flush Ogg pages */ + while (vorbis_bitrate_flushpacket(&(state->vorbis_state), + &(state->ogg_packet))) { + + /* Weld packet into bitstream */ + ogg_stream_packetin(&(state->ogg_state), &(state->ogg_packet)); + + /* Write out pages */ + while (ogg_stream_pageout(&(state->ogg_state), + &(state->ogg_page)) != 0) { + + /* Write packet header */ + audio_stream_write_encoded(audio, + state->ogg_page.header, + state->ogg_page.header_len); + + /* Write packet body */ + audio_stream_write_encoded(audio, + state->ogg_page.body, + state->ogg_page.body_len); + + if (ogg_page_eos(&(state->ogg_page))) + break; + + } + + } + + } + +} + void ogg_encoder_end_handler(audio_stream* audio) { /* Get state */ ogg_encoder_state* state = (ogg_encoder_state*) audio->data; + /* Write end-of-stream */ + vorbis_analysis_wrote(&(state->vorbis_state), 0); + ogg_encoder_write_blocks(audio); + /* Clean up encoder */ ogg_stream_clear(&(state->ogg_state)); vorbis_block_clear(&(state->vorbis_block)); @@ -118,9 +166,33 @@ void ogg_encoder_end_handler(audio_stream* audio) { void ogg_encoder_write_handler(audio_stream* audio, unsigned char* pcm_data, int length) { - guac_client_log_info(audio->client, - "OGG: Writing data to stream, length=%i", - length); + /* Get state */ + ogg_encoder_state* state = (ogg_encoder_state*) audio->data; + + /* Calculate samples */ + int samples = length / audio->channels * 8 / audio->bps; + int i; + + /* Get buffer */ + float** buffer = vorbis_analysis_buffer(&(state->vorbis_state), samples); + + for (i=0; ivorbis_state), samples); + + /* Write data */ + ogg_encoder_write_blocks(audio); } From 5886074bc039d2fcd2f3eeef98f0de883acd50bf Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Mon, 29 Oct 2012 13:47:55 -0700 Subject: [PATCH 198/253] Fix conversion. --- protocols/rdp/src/ogg_encoder.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/protocols/rdp/src/ogg_encoder.c b/protocols/rdp/src/ogg_encoder.c index 458034a1..2947e1ff 100644 --- a/protocols/rdp/src/ogg_encoder.c +++ b/protocols/rdp/src/ogg_encoder.c @@ -176,11 +176,13 @@ void ogg_encoder_write_handler(audio_stream* audio, /* Get buffer */ float** buffer = vorbis_analysis_buffer(&(state->vorbis_state), samples); + signed char* readbuffer = (signed char*) pcm_data; + for (i=0; i Date: Mon, 29 Oct 2012 23:11:33 -0700 Subject: [PATCH 199/253] Fix bytes-written calculation. --- protocols/rdp/guac_rdpsnd/messages.c | 14 +++----------- protocols/rdp/src/audio.c | 10 ++++++---- 2 files changed, 9 insertions(+), 15 deletions(-) diff --git a/protocols/rdp/guac_rdpsnd/messages.c b/protocols/rdp/guac_rdpsnd/messages.c index decc5a54..34af38fd 100644 --- a/protocols/rdp/guac_rdpsnd/messages.c +++ b/protocols/rdp/guac_rdpsnd/messages.c @@ -182,7 +182,6 @@ void guac_rdpsnd_process_message_wave_info(guac_rdpsndPlugin* rdpsnd, audio_stre rdpsnd->expectingWave = true; audio_stream_begin(audio, 22050, 2, 16); /* FIXME: Hard-coding rates */ - audio_stream_write_pcm(audio, rdpsnd->waveData, 4); } @@ -194,20 +193,13 @@ void rdpsnd_process_message_wave(guac_rdpsndPlugin* rdpsnd, STREAM* output_stream; - int size; - unsigned char* buffer; + unsigned char* buffer = stream_get_head(input_stream); rdpsnd->expectingWave = 0; - memcpy(stream_get_head(input_stream), rdpsnd->waveData, 4); - if (stream_get_size(input_stream) != rdpsnd->waveDataSize) { - return; - } - - buffer = stream_get_head(input_stream); - size = stream_get_size(input_stream); + memcpy(buffer, rdpsnd->waveData, 4); /* Write rest of audio packet */ - audio_stream_write_pcm(audio, buffer, size); + audio_stream_write_pcm(audio, buffer, rdpsnd->waveDataSize); audio_stream_end(audio); output_stream = stream_new(8); diff --git a/protocols/rdp/src/audio.c b/protocols/rdp/src/audio.c index cc529584..a4815f37 100644 --- a/protocols/rdp/src/audio.c +++ b/protocols/rdp/src/audio.c @@ -84,15 +84,17 @@ void audio_stream_begin(audio_stream* audio, int rate, int channels, int bps) { void audio_stream_end(audio_stream* audio) { - /* Calculate duration of PCM data */ - int duration = - audio->pcm_bytes_written * 1000 * 8 / audio->rate - / audio->channels / audio->bps; + int duration; /* Flush stream and finish encoding */ audio_stream_flush(audio); audio->encoder->end_handler(audio); + /* Calculate duration of PCM data */ + duration = + audio->pcm_bytes_written * 1000 * 8 / audio->rate + / audio->channels / audio->bps; + /* Send audio */ guac_protocol_send_audio(audio->stream->socket, 0, "audio/ogg" /* FIXME: Hard-coded mimetype */, From 9207d7c89e0b26e05d45d33e5372668e1ad8e332 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Wed, 31 Oct 2012 01:05:43 -0700 Subject: [PATCH 200/253] Lock output with mutex (otherwise, instructions collide and break the stream). --- protocols/rdp/configure.in | 1 + protocols/rdp/include/client.h | 7 +++++++ protocols/rdp/src/audio.c | 8 ++++++++ protocols/rdp/src/client.c | 10 ++++++++++ protocols/rdp/src/guac_handlers.c | 6 +++++- protocols/rdp/src/rdp_bitmap.c | 9 +++++++++ protocols/rdp/src/rdp_gdi.c | 26 +++++++++++++++++++++++++- protocols/rdp/src/rdp_glyph.c | 4 ++++ protocols/rdp/src/rdp_pointer.c | 10 +++++++++- 9 files changed, 78 insertions(+), 3 deletions(-) diff --git a/protocols/rdp/configure.in b/protocols/rdp/configure.in index c915caa5..1a96eb59 100644 --- a/protocols/rdp/configure.in +++ b/protocols/rdp/configure.in @@ -51,6 +51,7 @@ AC_CHECK_LIB([freerdp-core], [freerdp_new],, AC_MSG_ERROR("libfreerdp-core is re AC_CHECK_LIB([freerdp-channels], [freerdp_channels_new],, AC_MSG_ERROR("libfreerdp-channels is required (part of FreeRDP)")) AC_CHECK_LIB([freerdp-utils], [xzalloc],, AC_MSG_ERROR("libfreerdp-utils is required (part of FreeRDP)")) AC_CHECK_LIB([freerdp-codec], [freerdp_image_convert],, AC_MSG_ERROR("libfreerdp-codec is required (part of FreeRDP)")) +AC_CHECK_LIB([pthread], [pthread_mutex_init],, AC_MSG_ERROR("libpthread is required")) AC_CHECK_LIB([vorbisenc], [vorbis_encode_init],, AC_MSG_ERROR("libvorbisenc is required for sound")) diff --git a/protocols/rdp/include/client.h b/protocols/rdp/include/client.h index 1fba847f..9a1d55fc 100644 --- a/protocols/rdp/include/client.h +++ b/protocols/rdp/include/client.h @@ -144,6 +144,13 @@ typedef struct rdp_guac_client_data { */ audio_stream* audio; + /** + * Lock which is locked and unlocked for each update. + */ + pthread_mutex_t update_lock; + + pthread_mutexattr_t attributes; + } rdp_guac_client_data; /** diff --git a/protocols/rdp/src/audio.c b/protocols/rdp/src/audio.c index a4815f37..eb6a3a50 100644 --- a/protocols/rdp/src/audio.c +++ b/protocols/rdp/src/audio.c @@ -37,11 +37,13 @@ #include #include +#include #include #include #include #include "audio.h" +#include "client.h" audio_stream* audio_stream_alloc(guac_client* client, audio_encoder* encoder) { @@ -86,6 +88,8 @@ void audio_stream_end(audio_stream* audio) { int duration; + rdp_guac_client_data* data = (rdp_guac_client_data*) audio->client->data; + /* Flush stream and finish encoding */ audio_stream_flush(audio); audio->encoder->end_handler(audio); @@ -95,11 +99,15 @@ void audio_stream_end(audio_stream* audio) { audio->pcm_bytes_written * 1000 * 8 / audio->rate / audio->channels / audio->bps; + pthread_mutex_lock(&(data->update_lock)); + /* Send audio */ guac_protocol_send_audio(audio->stream->socket, 0, "audio/ogg" /* FIXME: Hard-coded mimetype */, duration, audio->encoded_data, audio->encoded_data_used); + pthread_mutex_unlock(&(data->update_lock)); + /* Clear data */ audio->encoded_data_used = 0; diff --git a/protocols/rdp/src/client.c b/protocols/rdp/src/client.c index 9345933b..fc218120 100644 --- a/protocols/rdp/src/client.c +++ b/protocols/rdp/src/client.c @@ -38,8 +38,11 @@ * * ***** END LICENSE BLOCK ***** */ +#define _XOPEN_SOURCE 500 + #include #include +#include #include #include @@ -457,6 +460,13 @@ int guac_client_init(guac_client* client, int argc, char** argv) { guac_client_data->clipboard = NULL; guac_client_data->audio = NULL; + /* Init update lock */ + pthread_mutexattr_init(&(guac_client_data->attributes)); + pthread_mutexattr_settype(&(guac_client_data->attributes), + PTHREAD_MUTEX_RECURSIVE); + pthread_mutex_init(&(guac_client_data->update_lock), + &(guac_client_data->attributes)); + /* Clear keysym state mapping and keymap */ memset(guac_client_data->keysym_state, 0, sizeof(guac_rdp_keysym_state_map)); diff --git a/protocols/rdp/src/guac_handlers.c b/protocols/rdp/src/guac_handlers.c index 9638bb00..0f9efe37 100644 --- a/protocols/rdp/src/guac_handlers.c +++ b/protocols/rdp/src/guac_handlers.c @@ -39,6 +39,7 @@ * * ***** END LICENSE BLOCK ***** */ +#include #include #include @@ -201,8 +202,11 @@ int rdp_guac_client_handle_messages(guac_client* client) { } /* Flush any audio */ - if (guac_client_data->audio != NULL) + if (guac_client_data->audio != NULL) { + pthread_mutex_lock(&(guac_client_data->update_lock)); guac_socket_flush(guac_client_data->audio->stream->socket); + pthread_mutex_unlock(&(guac_client_data->update_lock)); + } /* Success */ return 0; diff --git a/protocols/rdp/src/rdp_bitmap.c b/protocols/rdp/src/rdp_bitmap.c index 2d674102..ca11e2e9 100644 --- a/protocols/rdp/src/rdp_bitmap.c +++ b/protocols/rdp/src/rdp_bitmap.c @@ -38,6 +38,7 @@ #include #include +#include #include @@ -64,6 +65,9 @@ void guac_rdp_cache_bitmap(rdpContext* context, rdpBitmap* bitmap) { /* Cache image data if present */ if (bitmap->data != NULL) { + rdp_guac_client_data* data = (rdp_guac_client_data*) client->data; + pthread_mutex_lock(&(data->update_lock)); + /* Create surface from image data */ cairo_surface_t* surface = cairo_image_surface_create_for_data( bitmap->data, CAIRO_FORMAT_RGB24, @@ -76,6 +80,7 @@ void guac_rdp_cache_bitmap(rdpContext* context, rdpBitmap* bitmap) { /* Free surface */ cairo_surface_destroy(surface); + pthread_mutex_unlock(&(data->update_lock)); } /* Store buffer reference in bitmap */ @@ -120,6 +125,9 @@ void guac_rdp_bitmap_paint(rdpContext* context, rdpBitmap* bitmap) { int width = bitmap->right - bitmap->left + 1; int height = bitmap->bottom - bitmap->top + 1; + rdp_guac_client_data* data = (rdp_guac_client_data*) client->data; + pthread_mutex_lock(&(data->update_lock)); + /* If not cached, cache if necessary */ if (((guac_rdp_bitmap*) bitmap)->layer == NULL && ((guac_rdp_bitmap*) bitmap)->used >= 1) @@ -154,6 +162,7 @@ void guac_rdp_bitmap_paint(rdpContext* context, rdpBitmap* bitmap) { /* Increment usage counter */ ((guac_rdp_bitmap*) bitmap)->used++; + pthread_mutex_unlock(&(data->update_lock)); } void guac_rdp_bitmap_free(rdpContext* context, rdpBitmap* bitmap) { diff --git a/protocols/rdp/src/rdp_gdi.c b/protocols/rdp/src/rdp_gdi.c index 66b3cde2..238eb081 100644 --- a/protocols/rdp/src/rdp_gdi.c +++ b/protocols/rdp/src/rdp_gdi.c @@ -36,6 +36,7 @@ * * ***** END LICENSE BLOCK ***** */ +#include #include #include @@ -106,6 +107,9 @@ void guac_rdp_gdi_dstblt(rdpContext* context, DSTBLT_ORDER* dstblt) { guac_client* client = ((rdp_freerdp_context*) context)->client; const guac_layer* current_layer = ((rdp_guac_client_data*) client->data)->current_surface; + rdp_guac_client_data* data = (rdp_guac_client_data*) client->data; + pthread_mutex_lock(&(data->update_lock)); + switch (dstblt->bRop) { /* Blackness */ @@ -129,7 +133,7 @@ void guac_rdp_gdi_dstblt(rdpContext* context, DSTBLT_ORDER* dstblt) { } - + pthread_mutex_unlock(&(data->update_lock)); } @@ -142,6 +146,9 @@ void guac_rdp_gdi_scrblt(rdpContext* context, SCRBLT_ORDER* scrblt) { guac_client* client = ((rdp_freerdp_context*) context)->client; const guac_layer* current_layer = ((rdp_guac_client_data*) client->data)->current_surface; + + rdp_guac_client_data* data = (rdp_guac_client_data*) client->data; + pthread_mutex_lock(&(data->update_lock)); /* Copy screen rect to current surface */ guac_protocol_send_copy(client->socket, @@ -150,6 +157,8 @@ void guac_rdp_gdi_scrblt(rdpContext* context, SCRBLT_ORDER* scrblt) { GUAC_COMP_OVER, current_layer, scrblt->nLeftRect, scrblt->nTopRect); + pthread_mutex_unlock(&(data->update_lock)); + } void guac_rdp_gdi_memblt(rdpContext* context, MEMBLT_ORDER* memblt) { @@ -159,6 +168,9 @@ void guac_rdp_gdi_memblt(rdpContext* context, MEMBLT_ORDER* memblt) { guac_socket* socket = client->socket; guac_rdp_bitmap* bitmap = (guac_rdp_bitmap*) memblt->bitmap; + rdp_guac_client_data* data = (rdp_guac_client_data*) client->data; + pthread_mutex_lock(&(data->update_lock)); + switch (memblt->bRop) { /* If blackness, send black rectangle */ @@ -250,6 +262,8 @@ void guac_rdp_gdi_memblt(rdpContext* context, MEMBLT_ORDER* memblt) { } + pthread_mutex_unlock(&(data->update_lock)); + } void guac_rdp_gdi_opaquerect(rdpContext* context, OPAQUE_RECT_ORDER* opaque_rect) { @@ -261,6 +275,9 @@ void guac_rdp_gdi_opaquerect(rdpContext* context, OPAQUE_RECT_ORDER* opaque_rect const guac_layer* current_layer = ((rdp_guac_client_data*) client->data)->current_surface; + rdp_guac_client_data* data = (rdp_guac_client_data*) client->data; + pthread_mutex_lock(&(data->update_lock)); + guac_protocol_send_rect(client->socket, current_layer, opaque_rect->nLeftRect, opaque_rect->nTopRect, opaque_rect->nWidth, opaque_rect->nHeight); @@ -272,6 +289,8 @@ void guac_rdp_gdi_opaquerect(rdpContext* context, OPAQUE_RECT_ORDER* opaque_rect (color ) & 0xFF, 255); + pthread_mutex_unlock(&(data->update_lock)); + } void guac_rdp_gdi_palette_update(rdpContext* context, PALETTE_UPDATE* palette) { @@ -287,6 +306,9 @@ void guac_rdp_gdi_set_bounds(rdpContext* context, rdpBounds* bounds) { guac_client* client = ((rdp_freerdp_context*) context)->client; const guac_layer* current_layer = ((rdp_guac_client_data*) client->data)->current_surface; + rdp_guac_client_data* data = (rdp_guac_client_data*) client->data; + pthread_mutex_lock(&(data->update_lock)); + /* Reset clip */ guac_protocol_send_reset(client->socket, current_layer); @@ -300,6 +322,8 @@ void guac_rdp_gdi_set_bounds(rdpContext* context, rdpBounds* bounds) { guac_protocol_send_clip(client->socket, current_layer); } + pthread_mutex_unlock(&(data->update_lock)); + } void guac_rdp_gdi_end_paint(rdpContext* context) { diff --git a/protocols/rdp/src/rdp_glyph.c b/protocols/rdp/src/rdp_glyph.c index 951d8ecf..50b4f178 100644 --- a/protocols/rdp/src/rdp_glyph.c +++ b/protocols/rdp/src/rdp_glyph.c @@ -36,6 +36,7 @@ * * ***** END LICENSE BLOCK ***** */ +#include #include #include @@ -203,6 +204,8 @@ void guac_rdp_glyph_enddraw(rdpContext* context, rdp_guac_client_data* guac_client_data = (rdp_guac_client_data*) client->data; const guac_layer* current_layer = ((rdp_guac_client_data*) client->data)->current_surface; + pthread_mutex_lock(&(guac_client_data->update_lock)); + /* Use glyph surface to provide image data for glyph rectangle */ cairo_surface_t* glyph_surface = guac_client_data->glyph_surface; int stride = cairo_image_surface_get_stride(glyph_surface); @@ -235,5 +238,6 @@ void guac_rdp_glyph_enddraw(rdpContext* context, /* Destroy cairo instance */ cairo_destroy(guac_client_data->glyph_cairo); + pthread_mutex_unlock(&(guac_client_data->update_lock)); } diff --git a/protocols/rdp/src/rdp_pointer.c b/protocols/rdp/src/rdp_pointer.c index fa9eb2a3..a52e5863 100644 --- a/protocols/rdp/src/rdp_pointer.c +++ b/protocols/rdp/src/rdp_pointer.c @@ -36,7 +36,7 @@ * * ***** END LICENSE BLOCK ***** */ - +#include #include #include @@ -59,6 +59,9 @@ void guac_rdp_pointer_new(rdpContext* context, rdpPointer* pointer) { cairo_surface_t* surface; + rdp_guac_client_data* client_data = (rdp_guac_client_data*) client->data; + pthread_mutex_lock(&(client_data->update_lock)); + /* Convert to alpha cursor if mask data present */ if (pointer->andMaskData && pointer->xorMaskData) freerdp_alpha_cursor_convert(data, @@ -81,6 +84,7 @@ void guac_rdp_pointer_new(rdpContext* context, rdpPointer* pointer) { /* Remember buffer */ ((guac_rdp_pointer*) pointer)->layer = buffer; + pthread_mutex_unlock(&(client_data->update_lock)); } void guac_rdp_pointer_set(rdpContext* context, rdpPointer* pointer) { @@ -88,11 +92,15 @@ void guac_rdp_pointer_set(rdpContext* context, rdpPointer* pointer) { guac_client* client = ((rdp_freerdp_context*) context)->client; guac_socket* socket = client->socket; + rdp_guac_client_data* data = (rdp_guac_client_data*) client->data; + pthread_mutex_lock(&(data->update_lock)); + /* Set cursor */ guac_protocol_send_cursor(socket, pointer->xPos, pointer->yPos, ((guac_rdp_pointer*) pointer)->layer, 0, 0, pointer->width, pointer->height); + pthread_mutex_unlock(&(data->update_lock)); } void guac_rdp_pointer_free(rdpContext* context, rdpPointer* pointer) { From c5e4dcabf220264acd6e709440f436e1aecb38d5 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Wed, 31 Oct 2012 17:44:23 -0700 Subject: [PATCH 201/253] Remove hard-coded values. --- protocols/rdp/guac_rdpsnd/messages.c | 56 ++++++++++++++++++++-------- protocols/rdp/guac_rdpsnd/service.h | 21 ++++++++++- protocols/rdp/include/audio.h | 6 +++ protocols/rdp/src/audio.c | 2 +- protocols/rdp/src/ogg_encoder.c | 1 + 5 files changed, 69 insertions(+), 17 deletions(-) diff --git a/protocols/rdp/guac_rdpsnd/messages.c b/protocols/rdp/guac_rdpsnd/messages.c index 34af38fd..4eed8e11 100644 --- a/protocols/rdp/guac_rdpsnd/messages.c +++ b/protocols/rdp/guac_rdpsnd/messages.c @@ -97,21 +97,43 @@ void guac_rdpsnd_process_message_formats(guac_rdpsndPlugin* rdpsnd, if (format->wFormatTag == WAVE_FORMAT_PCM) { - guac_client_log_info(audio->client, - "Accepted format: %i-bit PCM with %i channels at " - "%i Hz", - format->wBitsPerSample, - format->nChannels, - format->nSamplesPerSec); + /* If can fit another format, accept it */ + if (rdpsnd->format_count < GUAC_RDP_MAX_FORMATS) { + + /* Add channel */ + int current = rdpsnd->format_count++; + rdpsnd->formats[current].rate = format->nSamplesPerSec; + rdpsnd->formats[current].channels = format->nChannels; + rdpsnd->formats[current].bps = format->wBitsPerSample; + + /* Log format */ + guac_client_log_info(audio->client, + "Accepted format: %i-bit PCM with %i channels at " + "%i Hz", + format->wBitsPerSample, + format->nChannels, + format->nSamplesPerSec); + + /* Store as accepted for future response */ + stream_check_size(output_stream, 18 + format->cbSize); + stream_write(output_stream, format_mark, 18 + format->cbSize); + if (format->cbSize > 0) { + format->data = xmalloc(format->cbSize); + memcpy(format->data, data_mark, format->cbSize); + } + n_out_formats++; + + } + + /* Otherwise, log that we dropped one */ + else + guac_client_log_info(audio->client, + "Dropped valid format: %i-bit PCM with %i channels at " + "%i Hz", + format->wBitsPerSample, + format->nChannels, + format->nSamplesPerSec); - stream_check_size(output_stream, 18 + format->cbSize); - stream_write(output_stream, format_mark, 18 + format->cbSize); - if (format->cbSize > 0) - { - format->data = xmalloc(format->cbSize); - memcpy(format->data, data_mark, format->cbSize); - } - n_out_formats++; } } @@ -181,7 +203,11 @@ void guac_rdpsnd_process_message_wave_info(guac_rdpsndPlugin* rdpsnd, audio_stre rdpsnd->waveDataSize = BodySize - 8; rdpsnd->expectingWave = true; - audio_stream_begin(audio, 22050, 2, 16); /* FIXME: Hard-coding rates */ + /* Init stream with requested format */ + audio_stream_begin(audio, + rdpsnd->formats[wFormatNo].rate, + rdpsnd->formats[wFormatNo].channels, + rdpsnd->formats[wFormatNo].bps); } diff --git a/protocols/rdp/guac_rdpsnd/service.h b/protocols/rdp/guac_rdpsnd/service.h index 5fd70c41..f7fab404 100644 --- a/protocols/rdp/guac_rdpsnd/service.h +++ b/protocols/rdp/guac_rdpsnd/service.h @@ -20,6 +20,21 @@ #ifndef __GUAC_RDPSND_SERVICE_H #define __GUAC_RDPSND_SERVICE_H + +#define GUAC_RDP_MAX_FORMATS 16 + + +typedef struct guac_pcm_format { + + int rate; + + int channels; + + int bps; + +} guac_pcm_format; + + typedef struct guac_rdpsndPlugin { rdpSvcPlugin plugin; @@ -31,7 +46,11 @@ typedef struct guac_rdpsndPlugin { uint16 waveDataSize; uint32 wTimeStamp; /* server timestamp */ -} guac_rdpsndPlugin ; + guac_pcm_format formats[GUAC_RDP_MAX_FORMATS]; + + int format_count; + +} guac_rdpsndPlugin; void guac_rdpsnd_process_connect(rdpSvcPlugin* plugin); diff --git a/protocols/rdp/include/audio.h b/protocols/rdp/include/audio.h index 61f537f7..441856df 100644 --- a/protocols/rdp/include/audio.h +++ b/protocols/rdp/include/audio.h @@ -64,6 +64,12 @@ typedef void audio_encoder_write_handler(audio_stream* audio, */ typedef struct audio_encoder { + /** + * The mimetype of the audio data encoded by this audio + * encoder. + */ + const char* mimetype; + /** * Handler which will be called when the audio stream is opened. */ diff --git a/protocols/rdp/src/audio.c b/protocols/rdp/src/audio.c index eb6a3a50..d517a73b 100644 --- a/protocols/rdp/src/audio.c +++ b/protocols/rdp/src/audio.c @@ -103,7 +103,7 @@ void audio_stream_end(audio_stream* audio) { /* Send audio */ guac_protocol_send_audio(audio->stream->socket, - 0, "audio/ogg" /* FIXME: Hard-coded mimetype */, + 0, audio->encoder->mimetype, duration, audio->encoded_data, audio->encoded_data_used); pthread_mutex_unlock(&(data->update_lock)); diff --git a/protocols/rdp/src/ogg_encoder.c b/protocols/rdp/src/ogg_encoder.c index 2947e1ff..8c6f97d2 100644 --- a/protocols/rdp/src/ogg_encoder.c +++ b/protocols/rdp/src/ogg_encoder.c @@ -200,6 +200,7 @@ void ogg_encoder_write_handler(audio_stream* audio, /* Encoder handlers */ audio_encoder _ogg_encoder = { + .mimetype = "audio/ogg", .begin_handler = ogg_encoder_begin_handler, .write_handler = ogg_encoder_write_handler, .end_handler = ogg_encoder_end_handler From 8f1b86586a7784cf4cea9b01314f7226e9f01ee2 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Wed, 31 Oct 2012 21:52:16 -0700 Subject: [PATCH 202/253] Add RDP message lock. --- protocols/rdp/guac_rdpsnd/messages.c | 19 +++++++++++++++++++ protocols/rdp/include/client.h | 5 +++++ protocols/rdp/src/client.c | 8 +++++++- protocols/rdp/src/guac_handlers.c | 13 +++++++++++++ 4 files changed, 44 insertions(+), 1 deletion(-) diff --git a/protocols/rdp/guac_rdpsnd/messages.c b/protocols/rdp/guac_rdpsnd/messages.c index 4eed8e11..524e6595 100644 --- a/protocols/rdp/guac_rdpsnd/messages.c +++ b/protocols/rdp/guac_rdpsnd/messages.c @@ -18,6 +18,7 @@ * limitations under the License. */ +#include #include #include #include @@ -34,6 +35,7 @@ #include "audio.h" #include "service.h" #include "messages.h" +#include "client.h" /* MESSAGE HANDLERS */ @@ -53,6 +55,9 @@ void guac_rdpsnd_process_message_formats(guac_rdpsndPlugin* rdpsnd, uint8* data_mark; int pos; + rdp_guac_client_data* guac_client_data = + (rdp_guac_client_data*) audio->client->data; + stream_seek_uint32(input_stream); /* dwFlags */ stream_seek_uint32(input_stream); /* dwVolume */ stream_seek_uint32(input_stream); /* dwPitch */ @@ -147,6 +152,7 @@ void guac_rdpsnd_process_message_formats(guac_rdpsndPlugin* rdpsnd, stream_write_uint16(output_stream, n_out_formats); stream_set_pos(output_stream, pos); + pthread_mutex_lock(&(guac_client_data->rdp_lock)); svc_plugin_send((rdpSvcPlugin*)rdpsnd, output_stream); if (wVersion >= 6) { @@ -162,6 +168,8 @@ void guac_rdpsnd_process_message_formats(guac_rdpsndPlugin* rdpsnd, svc_plugin_send((rdpSvcPlugin*)rdpsnd, output_stream); } + pthread_mutex_unlock(&(guac_client_data->rdp_lock)); + } /* server is getting a feel of the round trip time */ @@ -172,6 +180,9 @@ void guac_rdpsnd_process_message_training(guac_rdpsndPlugin* rdpsnd, uint16 wPackSize; STREAM* output_stream; + rdp_guac_client_data* guac_client_data = + (rdp_guac_client_data*) audio->client->data; + /* Read timestamp */ stream_read_uint16(input_stream, wTimeStamp); stream_read_uint16(input_stream, wPackSize); @@ -184,7 +195,9 @@ void guac_rdpsnd_process_message_training(guac_rdpsndPlugin* rdpsnd, stream_write_uint16(output_stream, wTimeStamp); stream_write_uint16(output_stream, wPackSize); + pthread_mutex_lock(&(guac_client_data->rdp_lock)); svc_plugin_send((rdpSvcPlugin*) rdpsnd, output_stream); + pthread_mutex_unlock(&(guac_client_data->rdp_lock)); } @@ -221,6 +234,9 @@ void rdpsnd_process_message_wave(guac_rdpsndPlugin* rdpsnd, unsigned char* buffer = stream_get_head(input_stream); + rdp_guac_client_data* guac_client_data = + (rdp_guac_client_data*) audio->client->data; + rdpsnd->expectingWave = 0; memcpy(buffer, rdpsnd->waveData, 4); @@ -236,7 +252,10 @@ void rdpsnd_process_message_wave(guac_rdpsndPlugin* rdpsnd, stream_write_uint8(output_stream, rdpsnd->cBlockNo); /* cConfirmedBlockNo */ stream_write_uint8(output_stream, 0); /* bPad */ + pthread_mutex_lock(&(guac_client_data->rdp_lock)); svc_plugin_send(plugin, output_stream); + pthread_mutex_unlock(&(guac_client_data->rdp_lock)); + rdpsnd->plugin.interval_ms = 10; } diff --git a/protocols/rdp/include/client.h b/protocols/rdp/include/client.h index 9a1d55fc..0bc5b4e4 100644 --- a/protocols/rdp/include/client.h +++ b/protocols/rdp/include/client.h @@ -149,6 +149,11 @@ typedef struct rdp_guac_client_data { */ pthread_mutex_t update_lock; + /** + * Lock which is locked and unlocked for each RDP message. + */ + pthread_mutex_t rdp_lock; + pthread_mutexattr_t attributes; } rdp_guac_client_data; diff --git a/protocols/rdp/src/client.c b/protocols/rdp/src/client.c index fc218120..a1aba93a 100644 --- a/protocols/rdp/src/client.c +++ b/protocols/rdp/src/client.c @@ -460,13 +460,19 @@ int guac_client_init(guac_client* client, int argc, char** argv) { guac_client_data->clipboard = NULL; guac_client_data->audio = NULL; - /* Init update lock */ + /* Recursive attribute for locks */ pthread_mutexattr_init(&(guac_client_data->attributes)); pthread_mutexattr_settype(&(guac_client_data->attributes), PTHREAD_MUTEX_RECURSIVE); + + /* Init update lock */ pthread_mutex_init(&(guac_client_data->update_lock), &(guac_client_data->attributes)); + /* Init RDP lock */ + pthread_mutex_init(&(guac_client_data->rdp_lock), + &(guac_client_data->attributes)); + /* Clear keysym state mapping and keymap */ memset(guac_client_data->keysym_state, 0, sizeof(guac_rdp_keysym_state_map)); diff --git a/protocols/rdp/src/guac_handlers.c b/protocols/rdp/src/guac_handlers.c index 0f9efe37..e72ac343 100644 --- a/protocols/rdp/src/guac_handlers.c +++ b/protocols/rdp/src/guac_handlers.c @@ -218,6 +218,8 @@ int rdp_guac_client_mouse_handler(guac_client* client, int x, int y, int mask) { rdp_guac_client_data* guac_client_data = (rdp_guac_client_data*) client->data; freerdp* rdp_inst = guac_client_data->rdp_inst; + pthread_mutex_lock(&(guac_client_data->rdp_lock)); + /* If button mask unchanged, just send move event */ if (mask == guac_client_data->mouse_button_mask) rdp_inst->input->MouseEvent(rdp_inst->input, PTR_FLAGS_MOVE, x, y); @@ -283,6 +285,8 @@ int rdp_guac_client_mouse_handler(guac_client* client, int x, int y, int mask) { guac_client_data->mouse_button_mask = mask; } + pthread_mutex_unlock(&(guac_client_data->rdp_lock)); + return 0; } @@ -302,6 +306,8 @@ int __guac_rdp_send_keysym(guac_client* client, int keysym, int pressed) { /* If defined, send event */ if (keysym_desc->scancode != 0) { + pthread_mutex_lock(&(guac_client_data->rdp_lock)); + /* If defined, send any prerequesite keys that must be set */ if (keysym_desc->set_keysyms != NULL) __guac_rdp_update_keysyms(client, keysym_desc->set_keysyms, 0, 1); @@ -325,6 +331,8 @@ int __guac_rdp_send_keysym(guac_client* client, int keysym, int pressed) { if (keysym_desc->clear_keysyms != NULL) __guac_rdp_update_keysyms(client, keysym_desc->clear_keysyms, 1, 1); + pthread_mutex_unlock(&(guac_client_data->rdp_lock)); + return 0; } @@ -352,10 +360,15 @@ int __guac_rdp_send_keysym(guac_client* client, int keysym, int pressed) { guac_client_log_info(client, "Translated keysym 0x%x to U+%04X", keysym, codepoint); + pthread_mutex_lock(&(guac_client_data->rdp_lock)); + /* Send Unicode event */ rdp_inst->input->UnicodeKeyboardEvent( rdp_inst->input, 0, codepoint); + + pthread_mutex_unlock(&(guac_client_data->rdp_lock)); + } else From ef0eace8c59597a08fed7cb32b731d911ea28a8d Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Thu, 1 Nov 2012 12:55:00 -0700 Subject: [PATCH 203/253] Remove hard-coded mimetype. --- protocols/rdp/src/client.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/protocols/rdp/src/client.c b/protocols/rdp/src/client.c index a1aba93a..56365c90 100644 --- a/protocols/rdp/src/client.c +++ b/protocols/rdp/src/client.c @@ -132,7 +132,7 @@ boolean rdp_freerdp_pre_connect(freerdp* instance) { const char* mimetype = client->info.audio_mimetypes[i]; // If Ogg is supported, done. - if (strcmp(mimetype, "audio/ogg") == 0) { + if (strcmp(mimetype, ogg_encoder->mimetype) == 0) { guac_client_log_info(client, "Loading Ogg Vorbis encoder."); guac_client_data->audio = audio_stream_alloc(client, ogg_encoder); break; From c1a495136344bbd778a91871d5735e347663c271 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Thu, 1 Nov 2012 14:25:34 -0700 Subject: [PATCH 204/253] Implement wav encoder. --- protocols/rdp/Makefile.am | 22 +-- protocols/rdp/include/wav_encoder.h | 144 ++++++++++++++++++++ protocols/rdp/src/wav_encoder.c | 201 ++++++++++++++++++++++++++++ 3 files changed, 357 insertions(+), 10 deletions(-) create mode 100644 protocols/rdp/include/wav_encoder.h create mode 100644 protocols/rdp/src/wav_encoder.c diff --git a/protocols/rdp/Makefile.am b/protocols/rdp/Makefile.am index 618b4b72..f41f66ac 100644 --- a/protocols/rdp/Makefile.am +++ b/protocols/rdp/Makefile.am @@ -45,24 +45,27 @@ freerdp_LTLIBRARIES = guac_rdpsnd.la libguac_client_rdp_la_SOURCES = \ src/audio.c \ src/client.c \ - src/rdp_bitmap.c \ - src/rdp_glyph.c \ - src/rdp_pointer.c \ - src/rdp_gdi.c \ + src/default_pointer.c \ src/guac_handlers.c \ src/ogg_encoder.c \ + src/rdp_bitmap.c \ src/rdp_cliprdr.c \ - src/rdp_keymap.c \ + src/rdp_gdi.c \ + src/rdp_glyph.c \ src/rdp_keymap_base.c \ + src/rdp_keymap.c \ src/rdp_keymap_en_us.c \ - src/default_pointer.c + src/rdp_pointer.c \ + src/wav_encoder.c guac_rdpsnd_la_SOURCES = \ - src/audio.c \ guac_rdpsnd/messages.c \ - guac_rdpsnd/service.c + guac_rdpsnd/service.c \ + src/audio.c noinst_HEADERS = \ + guac_rdpsnd/messages.h \ + guac_rdpsnd/service.h \ include/audio.h \ include/client.h \ include/default_pointer.h \ @@ -74,8 +77,7 @@ noinst_HEADERS = \ include/rdp_glyph.h \ include/rdp_keymap.h \ include/rdp_pointer.h \ - guac_rdpsnd/messages.h \ - guac_rdpsnd/service.h + include/wav_encoder.h libguac_client_rdp_la_LDFLAGS = -version-info 0:0:0 guac_rdpsnd_la_LDFLAGS = -module -avoid-version -shared diff --git a/protocols/rdp/include/wav_encoder.h b/protocols/rdp/include/wav_encoder.h new file mode 100644 index 00000000..ce575ae9 --- /dev/null +++ b/protocols/rdp/include/wav_encoder.h @@ -0,0 +1,144 @@ + +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is libguac-client-rdp. + * + * The Initial Developer of the Original Code is + * Michael Jumper. + * Portions created by the Initial Developer are Copyright (C) 2010 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#ifndef __GUAC_WAV_ENCODER_H +#define __GUAC_WAV_ENCODER_H + +#include "audio.h" + +typedef struct wav_encoder_riff_header { + + /** + * The RIFF chunk header, normally the string "RIFF". + */ + unsigned char chunk_id[4]; + + /** + * Size of the entire file, not including chunk_id or chunk_size. + */ + unsigned char chunk_size[4]; + + /** + * The format of this file, normally the string "WAVE". + */ + unsigned char chunk_format[4]; + +} wav_encoder_riff_header; + +typedef struct wav_encoder_fmt_header { + + /** + * ID of this subchunk. For the fmt subchunk, this should be "fmt ". + */ + unsigned char subchunk_id[4]; + + /** + * The size of the rest of this subchunk. For PCM, this will be 16. + */ + unsigned char subchunk_size[4]; + + /** + * Format of this subchunk. For PCM, this will be 1. + */ + unsigned char subchunk_format[2]; + + /** + * The number of channels in the PCM data. + */ + unsigned char subchunk_channels[2]; + + /** + * The sample rate of the PCM data. + */ + unsigned char subchunk_sample_rate[4]; + + /** + * The sample rate of the PCM data in bytes per second. + */ + unsigned char subchunk_byte_rate[4]; + + /** + * The number of bytes per sample. + */ + unsigned char subchunk_block_align[2]; + + /** + * The number of bits per sample. + */ + unsigned char subchunk_bps[2]; + +} wav_encoder_fmt_header; + +typedef struct wav_encoder_state { + + /** + * Arbitrary PCM data available for writing when the overall WAV is + * flushed. + */ + unsigned char* data_buffer; + + /** + * The number of bytes currently present in the data buffer. + */ + int used; + + /** + * The total number of bytes that can be written into the data buffer + * without requiring resizing. + */ + int length; + +} wav_encoder_state; + +typedef struct wav_encoder_data_header { + + /** + * ID of this subchunk. For the data subchunk, this should be "data". + */ + unsigned char subchunk_id[4]; + + /** + * The number of bytes in the PCM data. + */ + unsigned char subchunk_size[4]; + +} wav_encoder_data_header; + +extern audio_encoder* wav_encoder; + +#endif + diff --git a/protocols/rdp/src/wav_encoder.c b/protocols/rdp/src/wav_encoder.c new file mode 100644 index 00000000..0a306675 --- /dev/null +++ b/protocols/rdp/src/wav_encoder.c @@ -0,0 +1,201 @@ + +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is libguac-client-rdp. + * + * The Initial Developer of the Original Code is + * Michael Jumper. + * Portions created by the Initial Developer are Copyright (C) 2010 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#define WAV_BUFFER_SIZE 0x4000 + +#include +#include + +#include +#include + +#include "audio.h" +#include "wav_encoder.h" + +void wav_encoder_begin_handler(audio_stream* audio) { + + /* Allocate stream state */ + wav_encoder_state* state = (wav_encoder_state*) + malloc(sizeof(wav_encoder_state)); + + /* Initialize buffer */ + state->length = WAV_BUFFER_SIZE; + state->used = 0; + state->data_buffer = (unsigned char*) malloc(state->length); + + audio->data = state; + +} + +void _wav_encoder_write_le(unsigned char* buffer, int value, int length) { + + int offset; + + /* Write all bytes in the given value in little-endian byte order */ + for (offset=0; offset>= 8; + buffer++; + + } + +} + +void wav_encoder_end_handler(audio_stream* audio) { + + /* + * Static header init + */ + + wav_encoder_riff_header riff_header = { + .chunk_id = "RIFF", + .chunk_format = "WAVE" + }; + + wav_encoder_fmt_header fmt_header = { + .subchunk_id = "fmt ", + .subchunk_size = {0x10, 0x00, 0x00, 0x00}, /* 16 */ + .subchunk_format = {0x01, 0x00} /* 1 = PCM */ + }; + + wav_encoder_data_header data_header = { + .subchunk_id = "data" + }; + + /* Get state */ + wav_encoder_state* state = (wav_encoder_state*) audio->data; + + /* + * RIFF HEADER + */ + + /* Chunk size */ + _wav_encoder_write_le(riff_header.chunk_size, + 4 + sizeof(fmt_header) + sizeof(data_header) + state->used, + sizeof(riff_header.chunk_size)); + + audio_stream_write_encoded(audio, + (unsigned char*) &riff_header, + sizeof(riff_header)); + + /* + * FMT HEADER + */ + + /* Channels */ + _wav_encoder_write_le(fmt_header.subchunk_channels, + audio->channels, sizeof(fmt_header.subchunk_channels)); + + /* Sample rate */ + _wav_encoder_write_le(fmt_header.subchunk_sample_rate, + audio->rate, sizeof(fmt_header.subchunk_sample_rate)); + + /* Byte rate */ + _wav_encoder_write_le(fmt_header.subchunk_byte_rate, + audio->rate * audio->channels * audio->bps / 8, + sizeof(fmt_header.subchunk_byte_rate)); + + /* Block align */ + _wav_encoder_write_le(fmt_header.subchunk_block_align, + audio->channels * audio->bps / 8, + sizeof(fmt_header.subchunk_block_align)); + + /* Bits per second */ + _wav_encoder_write_le(fmt_header.subchunk_bps, + audio->bps, sizeof(fmt_header.subchunk_bps)); + + audio_stream_write_encoded(audio, + (unsigned char*) &fmt_header, + sizeof(fmt_header)); + + /* + * DATA HEADER + */ + + /* PCM data size */ + _wav_encoder_write_le(data_header.subchunk_size, + state->used, sizeof(data_header.subchunk_size)); + + audio_stream_write_encoded(audio, + (unsigned char*) &data_header, + sizeof(data_header)); + + /* Write .wav data */ + audio_stream_write_encoded(audio, state->data_buffer, state->used); + + /* Free stream state */ + free(state); + +} + +void wav_encoder_write_handler(audio_stream* audio, + unsigned char* pcm_data, int length) { + + /* Get state */ + wav_encoder_state* state = (wav_encoder_state*) audio->data; + + /* Increase size of buffer if necessary */ + if (state->used + length > state->length) { + + /* Increase to double concatenated size to accomodate */ + state->length = (state->length + length)*2; + state->data_buffer = realloc(state->data_buffer, + state->length); + + } + + /* Append to buffer */ + memcpy(&(state->data_buffer[state->used]), pcm_data, length); + state->used += length; + +} + +/* Encoder handlers */ +audio_encoder _wav_encoder = { + .mimetype = "audio/wav", + .begin_handler = wav_encoder_begin_handler, + .write_handler = wav_encoder_write_handler, + .end_handler = wav_encoder_end_handler +}; + +/* Actual encoder */ +audio_encoder* wav_encoder = &_wav_encoder; + From 3163825568d2f6382b27c3619e4051adca3574b7 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Thu, 1 Nov 2012 14:26:36 -0700 Subject: [PATCH 205/253] Add check+load for wav encoder. --- protocols/rdp/src/client.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/protocols/rdp/src/client.c b/protocols/rdp/src/client.c index 56365c90..9db40a74 100644 --- a/protocols/rdp/src/client.c +++ b/protocols/rdp/src/client.c @@ -66,6 +66,7 @@ #include "audio.h" #include "ogg_encoder.h" +#include "wav_encoder.h" #include "client.h" #include "guac_handlers.h" @@ -138,6 +139,13 @@ boolean rdp_freerdp_pre_connect(freerdp* instance) { break; } + // If wav is supported, done. + if (strcmp(mimetype, wav_encoder->mimetype) == 0) { + guac_client_log_info(client, "Loading wav encoder."); + guac_client_data->audio = audio_stream_alloc(client, wav_encoder); + break; + } + } /* If an encoding is available, load the sound plugin */ From 19de4b21878a9721986fe215b92a9a1b4b25809d Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Thu, 1 Nov 2012 14:29:25 -0700 Subject: [PATCH 206/253] Fix comments. --- protocols/rdp/src/client.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/protocols/rdp/src/client.c b/protocols/rdp/src/client.c index 9db40a74..cf29355e 100644 --- a/protocols/rdp/src/client.c +++ b/protocols/rdp/src/client.c @@ -132,14 +132,14 @@ boolean rdp_freerdp_pre_connect(freerdp* instance) { const char* mimetype = client->info.audio_mimetypes[i]; - // If Ogg is supported, done. + /* If Ogg is supported, done. */ if (strcmp(mimetype, ogg_encoder->mimetype) == 0) { guac_client_log_info(client, "Loading Ogg Vorbis encoder."); guac_client_data->audio = audio_stream_alloc(client, ogg_encoder); break; } - // If wav is supported, done. + /* If wav is supported, done. */ if (strcmp(mimetype, wav_encoder->mimetype) == 0) { guac_client_log_info(client, "Loading wav encoder."); guac_client_data->audio = audio_stream_alloc(client, wav_encoder); From fccec2e5e4d6b67b3e39d4f22c7a0494c9528cef Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Fri, 2 Nov 2012 00:21:59 -0700 Subject: [PATCH 207/253] Use double for calculating duration. --- protocols/rdp/src/audio.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/protocols/rdp/src/audio.c b/protocols/rdp/src/audio.c index d517a73b..c6c5e0db 100644 --- a/protocols/rdp/src/audio.c +++ b/protocols/rdp/src/audio.c @@ -86,7 +86,7 @@ void audio_stream_begin(audio_stream* audio, int rate, int channels, int bps) { void audio_stream_end(audio_stream* audio) { - int duration; + double duration; rdp_guac_client_data* data = (rdp_guac_client_data*) audio->client->data; @@ -95,9 +95,8 @@ void audio_stream_end(audio_stream* audio) { audio->encoder->end_handler(audio); /* Calculate duration of PCM data */ - duration = - audio->pcm_bytes_written * 1000 * 8 / audio->rate - / audio->channels / audio->bps; + duration = ((double) (audio->pcm_bytes_written * 1000 * 8)) + / audio->rate / audio->channels / audio->bps; pthread_mutex_lock(&(data->update_lock)); From 6e3f04536b68f2cc703d3dfb1d21153f015fd92d Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Fri, 2 Nov 2012 03:14:25 -0700 Subject: [PATCH 208/253] Completely rewrite guac_rdpsnd based on knowledge gained from inspection and modification of the FreeRDP rdpsnd plugin (plus reading MS docs), update license. --- protocols/rdp/guac_rdpsnd/messages.c | 364 +++++++++++++++------------ protocols/rdp/guac_rdpsnd/messages.h | 181 +++++++++---- protocols/rdp/guac_rdpsnd/service.c | 146 ++++++----- protocols/rdp/guac_rdpsnd/service.h | 125 +++++++-- 4 files changed, 525 insertions(+), 291 deletions(-) diff --git a/protocols/rdp/guac_rdpsnd/messages.c b/protocols/rdp/guac_rdpsnd/messages.c index 524e6595..1df1747d 100644 --- a/protocols/rdp/guac_rdpsnd/messages.c +++ b/protocols/rdp/guac_rdpsnd/messages.c @@ -1,33 +1,47 @@ -/** - * FreeRDP: A Remote Desktop Protocol client. - * Audio Output Virtual Channel + +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 * - * Copyright 2009-2011 Jay Sorg - * Copyright 2010-2011 Vic Lee + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. * - * http://www.apache.org/licenses/LICENSE-2.0 + * The Original Code is libguac-client-rdp. * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ + * The Initial Developer of the Original Code is + * Michael Jumper. + * Portions created by the Initial Developer are Copyright (C) 2011 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ #include -#include #include #include #include #include #include #include -#include -#include #include #include @@ -39,94 +53,104 @@ /* MESSAGE HANDLERS */ -/* receives a list of server supported formats and returns a list - of client supported formats */ -void guac_rdpsnd_process_message_formats(guac_rdpsndPlugin* rdpsnd, - audio_stream* audio, STREAM* input_stream) { +void guac_rdpsnd_formats_handler(guac_rdpsndPlugin* rdpsnd, + audio_stream* audio, STREAM* input_stream, + guac_rdpsnd_pdu_header* header) { - uint16 wNumberOfFormats; - uint16 nFormat; - uint16 wVersion; - STREAM* output_stream; - rdpsndFormat* out_formats; - uint16 n_out_formats; - rdpsndFormat* format; - uint8* format_mark; - uint8* data_mark; - int pos; + int server_format_count; + int server_version; + int i; + + STREAM* output_stream; + int output_body_size; + unsigned char* output_stream_end; rdp_guac_client_data* guac_client_data = (rdp_guac_client_data*) audio->client->data; - stream_seek_uint32(input_stream); /* dwFlags */ - stream_seek_uint32(input_stream); /* dwVolume */ - stream_seek_uint32(input_stream); /* dwPitch */ - stream_seek_uint16(input_stream); /* wDGramPort */ - stream_read_uint16(input_stream, wNumberOfFormats); - stream_read_uint8(input_stream, rdpsnd->cBlockNo); /* cLastBlockConfirmed */ - stream_read_uint16(input_stream, wVersion); - stream_seek_uint8(input_stream); /* bPad */ + /* Format header */ + stream_seek(input_stream, 14); + stream_read_uint16(input_stream, server_format_count); + stream_seek_uint8(input_stream); + stream_read_uint16(input_stream, server_version); + stream_seek_uint8(input_stream); - out_formats = (rdpsndFormat*) - xzalloc(wNumberOfFormats * sizeof(rdpsndFormat)); + /* Initialize Client Audio Formats and Version PDU */ + output_stream = stream_new(24); + stream_write_uint8(output_stream, SNDC_FORMATS); + stream_write_uint8(output_stream, 0); - n_out_formats = 0; + /* Fill in body size later */ + stream_seek_uint16(output_stream); /* offset = 0x02 */ - output_stream = stream_new(24); - stream_write_uint8(output_stream, SNDC_FORMATS); /* msgType */ - stream_write_uint8(output_stream, 0); /* bPad */ - stream_seek_uint16(output_stream); /* BodySize */ - stream_write_uint32(output_stream, TSSNDCAPS_ALIVE); /* dwFlags */ - stream_write_uint32(output_stream, 0); /* dwVolume */ - stream_write_uint32(output_stream, 0); /* dwPitch */ - stream_write_uint16_be(output_stream, 0); /* wDGramPort */ - stream_seek_uint16(output_stream); /* wNumberOfFormats */ - stream_write_uint8(output_stream, 0); /* cLastBlockConfirmed */ - stream_write_uint16(output_stream, 6); /* wVersion */ - stream_write_uint8(output_stream, 0); /* bPad */ + /* Flags, volume, and pitch */ + stream_write_uint32(output_stream, TSSNDCAPS_ALIVE); + stream_write_uint32(output_stream, 0); + stream_write_uint32(output_stream, 0); - for (nFormat = 0; nFormat < wNumberOfFormats; nFormat++) { + /* Datagram port (UDP) */ + stream_write_uint16(output_stream, 0); - stream_get_mark(input_stream, format_mark); - format = &out_formats[n_out_formats]; - stream_read_uint16(input_stream, format->wFormatTag); - stream_read_uint16(input_stream, format->nChannels); - stream_read_uint32(input_stream, format->nSamplesPerSec); - stream_seek_uint32(input_stream); /* nAvgBytesPerSec */ - stream_read_uint16(input_stream, format->nBlockAlign); - stream_read_uint16(input_stream, format->wBitsPerSample); - stream_read_uint16(input_stream, format->cbSize); - stream_get_mark(input_stream, data_mark); - stream_seek(input_stream, format->cbSize); - format->data = NULL; + /* Fill in format count later */ + stream_seek_uint16(output_stream); /* offset = 0x12 */ - if (format->wFormatTag == WAVE_FORMAT_PCM) { + /* Version and padding */ + stream_write_uint8(output_stream, 0); + stream_write_uint16(output_stream, 6); + stream_write_uint8(output_stream, 0); + + /* Check each server format, respond if supported */ + for (i=0; i < server_format_count; i++) { + + unsigned char* format_start; + + int format_tag; + int channels; + int rate; + int bps; + int body_size; + + /* Remember position in stream */ + stream_get_mark(input_stream, format_start); + + /* Read format */ + stream_read_uint16(input_stream, format_tag); + stream_read_uint16(input_stream, channels); + stream_read_uint32(input_stream, rate); + stream_seek_uint32(input_stream); + stream_seek_uint16(input_stream); + stream_read_uint16(input_stream, bps); + + /* Skip past extra data */ + stream_read_uint16(input_stream, body_size); + stream_seek(input_stream, body_size); + + /* If PCM, accept */ + if (format_tag == WAVE_FORMAT_PCM) { /* If can fit another format, accept it */ if (rdpsnd->format_count < GUAC_RDP_MAX_FORMATS) { /* Add channel */ int current = rdpsnd->format_count++; - rdpsnd->formats[current].rate = format->nSamplesPerSec; - rdpsnd->formats[current].channels = format->nChannels; - rdpsnd->formats[current].bps = format->wBitsPerSample; + rdpsnd->formats[current].rate = rate; + rdpsnd->formats[current].channels = channels; + rdpsnd->formats[current].bps = bps; /* Log format */ guac_client_log_info(audio->client, "Accepted format: %i-bit PCM with %i channels at " "%i Hz", - format->wBitsPerSample, - format->nChannels, - format->nSamplesPerSec); + bps, channels, rate); - /* Store as accepted for future response */ - stream_check_size(output_stream, 18 + format->cbSize); - stream_write(output_stream, format_mark, 18 + format->cbSize); - if (format->cbSize > 0) { - format->data = xmalloc(format->cbSize); - memcpy(format->data, data_mark, format->cbSize); - } - n_out_formats++; + /* Queue format for sending as accepted */ + stream_check_size(output_stream, 18 + body_size); + stream_write(output_stream, format_start, 18 + body_size); + + /* + * BEWARE that using stream_check_size means that any "marks" + * set via stream_set_mark on output_stream are invalid. + */ } @@ -135,141 +159,155 @@ void guac_rdpsnd_process_message_formats(guac_rdpsndPlugin* rdpsnd, guac_client_log_info(audio->client, "Dropped valid format: %i-bit PCM with %i channels at " "%i Hz", - format->wBitsPerSample, - format->nChannels, - format->nSamplesPerSec); + bps, channels, rate); - } + } - } + } - xfree(out_formats); + /* Calculate size of PDU */ + output_body_size = stream_get_length(output_stream) - 4; + stream_get_mark(output_stream, output_stream_end); - pos = stream_get_pos(output_stream); - stream_set_pos(output_stream, 2); - stream_write_uint16(output_stream, pos - 4); - stream_set_pos(output_stream, 18); - stream_write_uint16(output_stream, n_out_formats); - stream_set_pos(output_stream, pos); + /* Set body size */ + stream_set_pos(output_stream, 0x02); + stream_write_uint16(output_stream, output_body_size); + /* Set format count */ + stream_set_pos(output_stream, 0x12); + stream_write_uint16(output_stream, rdpsnd->format_count); + + /* Reposition cursor at end (necessary for message send) */ + stream_set_mark(output_stream, output_stream_end); + + /* Send accepted formats */ pthread_mutex_lock(&(guac_client_data->rdp_lock)); - svc_plugin_send((rdpSvcPlugin*)rdpsnd, output_stream); + svc_plugin_send((rdpSvcPlugin*)rdpsnd, output_stream); - if (wVersion >= 6) { + /* If version greater than 6, must send Quality Mode PDU */ + if (server_version >= 6) { - /* Respond with guality mode */ - output_stream = stream_new(8); - stream_write_uint8(output_stream, SNDC_QUALITYMODE); /* msgType */ - stream_write_uint8(output_stream, 0); /* bPad */ - stream_write_uint16(output_stream, 4); /* BodySize */ - stream_write_uint16(output_stream, HIGH_QUALITY); /* wQualityMode */ - stream_write_uint16(output_stream, 0); /* Reserved */ + /* Always send High Quality for now */ + output_stream = stream_new(8); + stream_write_uint8(output_stream, SNDC_QUALITYMODE); + stream_write_uint8(output_stream, 0); + stream_write_uint16(output_stream, 4); + stream_write_uint16(output_stream, HIGH_QUALITY); + stream_write_uint16(output_stream, 0); - svc_plugin_send((rdpSvcPlugin*)rdpsnd, output_stream); - } + svc_plugin_send((rdpSvcPlugin*)rdpsnd, output_stream); + } pthread_mutex_unlock(&(guac_client_data->rdp_lock)); } /* server is getting a feel of the round trip time */ -void guac_rdpsnd_process_message_training(guac_rdpsndPlugin* rdpsnd, - audio_stream* audio, STREAM* input_stream) { +void guac_rdpsnd_training_handler(guac_rdpsndPlugin* rdpsnd, + audio_stream* audio, STREAM* input_stream, + guac_rdpsnd_pdu_header* header) { - uint16 wTimeStamp; - uint16 wPackSize; - STREAM* output_stream; + int data_size; + STREAM* output_stream; rdp_guac_client_data* guac_client_data = (rdp_guac_client_data*) audio->client->data; - /* Read timestamp */ - stream_read_uint16(input_stream, wTimeStamp); - stream_read_uint16(input_stream, wPackSize); + /* Read timestamp and data size */ + stream_read_uint16(input_stream, rdpsnd->server_timestamp); + stream_read_uint16(input_stream, data_size); /* Send training response */ - output_stream = stream_new(8); - stream_write_uint8(output_stream, SNDC_TRAINING); /* msgType */ - stream_write_uint8(output_stream, 0); /* bPad */ - stream_write_uint16(output_stream, 4); /* BodySize */ - stream_write_uint16(output_stream, wTimeStamp); - stream_write_uint16(output_stream, wPackSize); + output_stream = stream_new(8); + stream_write_uint8(output_stream, SNDC_TRAINING); + stream_write_uint8(output_stream, 0); + stream_write_uint16(output_stream, 4); + stream_write_uint16(output_stream, rdpsnd->server_timestamp); + stream_write_uint16(output_stream, data_size); pthread_mutex_lock(&(guac_client_data->rdp_lock)); - svc_plugin_send((rdpSvcPlugin*) rdpsnd, output_stream); + svc_plugin_send((rdpSvcPlugin*) rdpsnd, output_stream); pthread_mutex_unlock(&(guac_client_data->rdp_lock)); } -void guac_rdpsnd_process_message_wave_info(guac_rdpsndPlugin* rdpsnd, audio_stream* audio, STREAM* input_stream, uint16 BodySize) { +void guac_rdpsnd_wave_info_handler(guac_rdpsndPlugin* rdpsnd, + audio_stream* audio, STREAM* input_stream, + guac_rdpsnd_pdu_header* header) { - uint16 wFormatNo; + unsigned char buffer[4]; + int format; /* Read wave information */ - stream_read_uint16(input_stream, rdpsnd->wTimeStamp); - stream_read_uint16(input_stream, wFormatNo); - stream_read_uint8(input_stream, rdpsnd->cBlockNo); - stream_seek(input_stream, 3); /* bPad */ - stream_read(input_stream, rdpsnd->waveData, 4); + stream_read_uint16(input_stream, rdpsnd->server_timestamp); + stream_read_uint16(input_stream, format); + stream_read_uint8(input_stream, rdpsnd->waveinfo_block_number); + stream_seek(input_stream, 3); + stream_read(input_stream, buffer, 4); + + /* + * Size of incoming wave data is equal to the body size field of this + * header, less the size of a WaveInfo PDU (not including the header), + * thus body_size - 12. + */ + rdpsnd->incoming_wave_size = header->body_size - 12; /* Read wave in next iteration */ - rdpsnd->waveDataSize = BodySize - 8; - rdpsnd->expectingWave = true; + rdpsnd->next_pdu_is_wave = true; /* Init stream with requested format */ audio_stream_begin(audio, - rdpsnd->formats[wFormatNo].rate, - rdpsnd->formats[wFormatNo].channels, - rdpsnd->formats[wFormatNo].bps); + rdpsnd->formats[format].rate, + rdpsnd->formats[format].channels, + rdpsnd->formats[format].bps); + + /* Write initial 4 bytes of data */ + audio_stream_write_pcm(audio, buffer, 4); } -/* header is not removed from data in this function */ -void rdpsnd_process_message_wave(guac_rdpsndPlugin* rdpsnd, - audio_stream* audio, STREAM* input_stream) { +void guac_rdpsnd_wave_handler(guac_rdpsndPlugin* rdpsnd, + audio_stream* audio, STREAM* input_stream, + guac_rdpsnd_pdu_header* header) { - rdpSvcPlugin* plugin = (rdpSvcPlugin*)rdpsnd; - - STREAM* output_stream; - - unsigned char* buffer = stream_get_head(input_stream); + rdpSvcPlugin* plugin = (rdpSvcPlugin*)rdpsnd; rdp_guac_client_data* guac_client_data = (rdp_guac_client_data*) audio->client->data; - rdpsnd->expectingWave = 0; - memcpy(buffer, rdpsnd->waveData, 4); + /* Wave Confirmation PDU */ + STREAM* output_stream = stream_new(8); + + /* Get wave data */ + unsigned char* buffer = stream_get_head(input_stream) + 4; /* Write rest of audio packet */ - audio_stream_write_pcm(audio, buffer, rdpsnd->waveDataSize); + audio_stream_write_pcm(audio, buffer, rdpsnd->incoming_wave_size); audio_stream_end(audio); - output_stream = stream_new(8); - stream_write_uint8(output_stream, SNDC_WAVECONFIRM); - stream_write_uint8(output_stream, 0); - stream_write_uint16(output_stream, 4); - stream_write_uint16(output_stream, rdpsnd->wTimeStamp); - stream_write_uint8(output_stream, rdpsnd->cBlockNo); /* cConfirmedBlockNo */ - stream_write_uint8(output_stream, 0); /* bPad */ + /* Write Wave Confirmation PDU */ + stream_write_uint8(output_stream, SNDC_WAVECONFIRM); + stream_write_uint8(output_stream, 0); + stream_write_uint16(output_stream, 4); + stream_write_uint16(output_stream, rdpsnd->server_timestamp); + stream_write_uint8(output_stream, rdpsnd->waveinfo_block_number); + stream_write_uint8(output_stream, 0); + /* Send Wave Confirmation PDU */ pthread_mutex_lock(&(guac_client_data->rdp_lock)); svc_plugin_send(plugin, output_stream); pthread_mutex_unlock(&(guac_client_data->rdp_lock)); - rdpsnd->plugin.interval_ms = 10; -} - -void guac_rdpsnd_process_message_setvolume(guac_rdpsndPlugin* rdpsnd, - audio_stream* audio, STREAM* input_stream) { - - /* Ignored for now */ - uint32 dwVolume; - stream_read_uint32(input_stream, dwVolume); + /* We no longer expect to receive wave data */ + rdpsnd->next_pdu_is_wave = false; } -void guac_rdpsnd_process_message_close(guac_rdpsndPlugin* rdpsnd, - audio_stream* audio) { - rdpsnd->plugin.interval_ms = 10; +void guac_rdpsnd_close_handler(guac_rdpsndPlugin* rdpsnd, + audio_stream* audio, STREAM* input_stream, + guac_rdpsnd_pdu_header* header) { + + /* STUB: Do nothing for now */ + } diff --git a/protocols/rdp/guac_rdpsnd/messages.h b/protocols/rdp/guac_rdpsnd/messages.h index 2b66f7e1..12c5e717 100644 --- a/protocols/rdp/guac_rdpsnd/messages.h +++ b/protocols/rdp/guac_rdpsnd/messages.h @@ -1,75 +1,162 @@ -/** - * FreeRDP: A Remote Desktop Protocol client. - * Audio Output Virtual Channel + +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 * - * Copyright 2010-2011 Vic Lee + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. * - * http://www.apache.org/licenses/LICENSE-2.0 + * The Original Code is libguac-client-rdp. * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ + * The Initial Developer of the Original Code is + * Michael Jumper. + * Portions created by the Initial Developer are Copyright (C) 2011 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ #ifndef __GUAC_RDPSND_MESSAGES_H #define __GUAC_RDPSND_MESSAGES_H +/* + * PDU Message Types + */ + +/** + * Close PDU + */ #define SNDC_CLOSE 1 + +/** + * WaveInfo PDU. This PDU is sent just before wave data is sent. + */ #define SNDC_WAVE 2 -#define SNDC_SETVOLUME 3 -#define SNDC_SETPITCH 4 + +/** + * Wave Confirm PDU. This PDU is sent in response to the WaveInfo PDU, + * confirming it has been received and played. + */ #define SNDC_WAVECONFIRM 5 + +/** + * Training PDU. This PDU is sent by the server occasionally and must be + * responded to with another training PDU, similar to Guac's sync message. + */ #define SNDC_TRAINING 6 + +/** + * Server Audio Formats and Version PDU. This PDU is sent by the server to + * advertise to the client which audio formats are supported. + */ #define SNDC_FORMATS 7 -#define SNDC_CRYPTKEY 8 -#define SNDC_WAVEENCRYPT 9 -#define SNDC_UDPWAVE 10 -#define SNDC_UDPWAVELAST 11 + +/** + * Quality Mode PDU. This PDU must be sent by the client to select an audio + * quality mode if the server is at least version 6. + */ #define SNDC_QUALITYMODE 12 +/* + * Quality Modes + */ + +/** + * Dynamic Quality. The server will choose the audio quality based on its + * perception of latency. + */ +#define DYNAMIC_QUALITY 0x0000 + +/** + * Medium Quality. The server prioritizes bandwidth over quality. + */ +#define MEDIUM_QUALITY 0x0001 + +/** + * High Quality. The server prioritizes quality over bandwidth. + */ +#define HIGH_QUALITY 0x0002 + +/* + * Capabilities + */ #define TSSNDCAPS_ALIVE 1 -#define TSSNDCAPS_VOLUME 2 -#define TSSNDCAPS_PITCH 4 - -#define DYNAMIC_QUALITY 0x0000 -#define MEDIUM_QUALITY 0x0001 -#define HIGH_QUALITY 0x0002 +/* + * Sound Formats + */ #define WAVE_FORMAT_PCM 1 -typedef struct rdpsndFormat { - uint16 wFormatTag; - uint16 nChannels; - uint32 nSamplesPerSec; - uint16 nBlockAlign; - uint16 wBitsPerSample; - uint16 cbSize; - uint8* data; -} rdpsndFormat; +/** + * The header common to all RDPSND PDUs. + */ +typedef struct guac_rdpsnd_pdu_header { -void guac_rdpsnd_process_message_formats(guac_rdpsndPlugin* rdpsnd, - audio_stream* audio, STREAM* data_in); + /** + * The type of message represented by this PDU (SNDC_WAVE, etc.) + */ + int message_type; -void guac_rdpsnd_process_message_training(guac_rdpsndPlugin* rdpsnd, - audio_stream* audio, STREAM* data_in); + /** + * The size of the remainder of the message. + */ + int body_size; -void guac_rdpsnd_process_message_wave_info(guac_rdpsndPlugin* rdpsnd, - audio_stream* audio, STREAM* data_in, uint16 BodySize); +} guac_rdpsnd_pdu_header; -void rdpsnd_process_message_wave(guac_rdpsndPlugin* rdpsnd, - audio_stream* audio, STREAM* data_in); +/** + * Handler for the SNDC_FORMATS (Server Audio Formats and Version) PDU. + */ +void guac_rdpsnd_formats_handler(guac_rdpsndPlugin* rdpsnd, + audio_stream* audio, STREAM* input_stream, + guac_rdpsnd_pdu_header* header); -void guac_rdpsnd_process_message_setvolume(guac_rdpsndPlugin* rdpsnd, - audio_stream* audio, STREAM* data_in); +/** + * Handler for the SNDC_TRAINING (Training) PDU. + */ +void guac_rdpsnd_training_handler(guac_rdpsndPlugin* rdpsnd, + audio_stream* audio, STREAM* input_stream, + guac_rdpsnd_pdu_header* header); -void guac_rdpsnd_process_message_close(guac_rdpsndPlugin* rdpsnd, - audio_stream* audio); +/** + * Handler for the SNDC_WAVE (WaveInfo) PDU. + */ +void guac_rdpsnd_wave_info_handler(guac_rdpsndPlugin* rdpsnd, + audio_stream* audio, STREAM* input_stream, + guac_rdpsnd_pdu_header* header); + +/** + * Handler for the SNDWAV (Wave) PDU which follows any WaveInfo PDU. + */ +void guac_rdpsnd_wave_handler(guac_rdpsndPlugin* rdpsnd, + audio_stream* audio, STREAM* input_stream, + guac_rdpsnd_pdu_header* header); + +/** + * Handler for the SNDC_CLOSE (Close) PDU. + */ +void guac_rdpsnd_close_handler(guac_rdpsndPlugin* rdpsnd, + audio_stream* audio, STREAM* input_stream, + guac_rdpsnd_pdu_header* header); #endif diff --git a/protocols/rdp/guac_rdpsnd/service.c b/protocols/rdp/guac_rdpsnd/service.c index e9a92f4f..89569ca5 100644 --- a/protocols/rdp/guac_rdpsnd/service.c +++ b/protocols/rdp/guac_rdpsnd/service.c @@ -1,32 +1,47 @@ -/** - * FreeRDP: A Remote Desktop Protocol client. - * Audio Output Virtual Channel - * - * Copyright 2009-2011 Jay Sorg - * Copyright 2010-2011 Vic Lee - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is libguac-client-rdp. + * + * The Initial Developer of the Original Code is + * Michael Jumper. + * Portions created by the Initial Developer are Copyright (C) 2011 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + #include #include + #include #include #include #include -#include -#include #include #include @@ -35,10 +50,16 @@ #include "service.h" #include "messages.h" -/* SVC DEFINITION */ + +/* Define service, associate with "rdpsnd" channel */ DEFINE_SVC_PLUGIN(guac_rdpsnd, "rdpsnd", - CHANNEL_OPTION_INITIALIZED | CHANNEL_OPTION_ENCRYPT_RDP) + CHANNEL_OPTION_INITIALIZED | CHANNEL_OPTION_ENCRYPT_RDP) + + +/* + * Service Handlers + */ void guac_rdpsnd_process_connect(rdpSvcPlugin* plugin) { @@ -46,67 +67,74 @@ void guac_rdpsnd_process_connect(rdpSvcPlugin* plugin) { audio_stream* audio = (audio_stream*) plugin->channel_entry_points.pExtendedData; + /* Update every 10 ms */ + plugin->interval_ms = 10; + /* Log that sound has been loaded */ guac_client_log_info(audio->client, "guac_rdpsnd connected."); } void guac_rdpsnd_process_terminate(rdpSvcPlugin* plugin) { - xfree(plugin); + xfree(plugin); } void guac_rdpsnd_process_event(rdpSvcPlugin* plugin, RDP_EVENT* event) { - freerdp_event_free(event); + freerdp_event_free(event); } void guac_rdpsnd_process_receive(rdpSvcPlugin* plugin, STREAM* input_stream) { - guac_rdpsndPlugin* rdpsnd = (guac_rdpsndPlugin*) plugin; + guac_rdpsndPlugin* rdpsnd = (guac_rdpsndPlugin*) plugin; + guac_rdpsnd_pdu_header header; /* Get audio stream from plugin */ audio_stream* audio = (audio_stream*) plugin->channel_entry_points.pExtendedData; - uint8 msgType; - uint16 BodySize; + /* Read RDPSND PDU header */ + stream_read_uint8(input_stream, header.message_type); + stream_seek_uint8(input_stream); + stream_read_uint16(input_stream, header.body_size); - if (rdpsnd->expectingWave) { - rdpsnd_process_message_wave(rdpsnd, audio, input_stream); - return; - } + /* + * If next PDU is SNDWAVE (due to receiving WaveInfo PDU previously), + * ignore the header and parse as a Wave PDU. + */ + if (rdpsnd->next_pdu_is_wave) { + guac_rdpsnd_wave_handler(rdpsnd, audio, input_stream, &header); + return; + } - /* Read event */ - stream_read_uint8(input_stream, msgType); /* msgType */ - stream_seek_uint8(input_stream); /* bPad */ - stream_read_uint16(input_stream, BodySize); + /* Dispatch message to standard handlers */ + switch (header.message_type) { - switch (msgType) { + /* Server Audio Formats and Version PDU */ + case SNDC_FORMATS: + guac_rdpsnd_formats_handler(rdpsnd, audio, + input_stream, &header); + break; - case SNDC_FORMATS: - guac_rdpsnd_process_message_formats(rdpsnd, audio, input_stream); - break; + /* Training PDU */ + case SNDC_TRAINING: + guac_rdpsnd_training_handler(rdpsnd, audio, + input_stream, &header); + break; - case SNDC_TRAINING: - guac_rdpsnd_process_message_training(rdpsnd, audio, input_stream); - break; + /* WaveInfo PDU */ + case SNDC_WAVE: + guac_rdpsnd_wave_info_handler(rdpsnd, audio, + input_stream, &header); + break; - case SNDC_WAVE: - guac_rdpsnd_process_message_wave_info(rdpsnd, audio, input_stream, BodySize); - break; + /* Close PDU */ + case SNDC_CLOSE: + guac_rdpsnd_close_handler(rdpsnd, audio, + input_stream, &header); + break; - case SNDC_CLOSE: - guac_rdpsnd_process_message_close(rdpsnd, audio); - break; - - case SNDC_SETVOLUME: - guac_rdpsnd_process_message_setvolume(rdpsnd, audio, input_stream); - break; - - default: - /*DEBUG_WARN("unknown msgType %d", msgType);*/ - break; - } + } } diff --git a/protocols/rdp/guac_rdpsnd/service.h b/protocols/rdp/guac_rdpsnd/service.h index f7fab404..d843d7f9 100644 --- a/protocols/rdp/guac_rdpsnd/service.h +++ b/protocols/rdp/guac_rdpsnd/service.h @@ -1,64 +1,145 @@ -/** - * FreeRDP: A Remote Desktop Protocol client. - * Audio Output Virtual Channel + +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 * - * Copyright 2010-2011 Vic Lee + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. * - * http://www.apache.org/licenses/LICENSE-2.0 + * The Original Code is libguac-client-rdp. * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ + * The Initial Developer of the Original Code is + * Michael Jumper. + * Portions created by the Initial Developer are Copyright (C) 2011 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ #ifndef __GUAC_RDPSND_SERVICE_H #define __GUAC_RDPSND_SERVICE_H - +/** + * The maximum number of PCM formats to accept during the initial RDPSND + * handshake with the RDP server. + */ #define GUAC_RDP_MAX_FORMATS 16 +/** + * Abstract representation of a PCM format, including the sample rate, number + * of channels, and bits per sample. + */ typedef struct guac_pcm_format { + /** + * The sample rate of this PCM format. + */ int rate; + /** + * The number off channels used by this PCM format. This will typically + * be 1 or 2. + */ int channels; + /** + * The number of bits per sample within this PCM format. This should be + * either 8 or 16. + */ int bps; } guac_pcm_format; +/** + * Structure representing the current state of the Guacamole RDPSND plugin for + * FreeRDP. + */ typedef struct guac_rdpsndPlugin { - rdpSvcPlugin plugin; + /** + * The FreeRDP parts of this plugin. This absolutely MUST be first. + * FreeRDP depends on accessing this structure as if it were an instance + * of rdpSvcPlugin. + */ + rdpSvcPlugin plugin; - uint8 cBlockNo; + /** + * The block number of the last SNDC_WAVE (WaveInfo) PDU received. + */ + int waveinfo_block_number; - boolean expectingWave; - uint8 waveData[4]; - uint16 waveDataSize; - uint32 wTimeStamp; /* server timestamp */ + /** + * Whether the next PDU coming is a SNDWAVE (Wave) PDU. Wave PDUs do not + * have headers, and are indicated by the receipt of a WaveInfo PDU. + */ + int next_pdu_is_wave; + /** + * The size, in bytes, of the wave data in the coming Wave PDU, if any. + */ + int incoming_wave_size; + + /** + * The last received server timestamp. + */ + int server_timestamp; + + /** + * All formats agreed upon by server and client during the initial format + * exchange. All of these formats will be PCM, which is the only format + * guaranteed to be supported (based on the official RDP documentation). + */ guac_pcm_format formats[GUAC_RDP_MAX_FORMATS]; + /** + * The total number of formats. + */ int format_count; } guac_rdpsndPlugin; + +/** + * Handler called when this plugin is loaded by FreeRDP. + */ void guac_rdpsnd_process_connect(rdpSvcPlugin* plugin); +/** + * Handler called when this plugin receives data along its designated channel. + */ void guac_rdpsnd_process_receive(rdpSvcPlugin* plugin, - STREAM* data_in); + STREAM* input_stream); +/** + * Handler called when this plugin is being unloaded. + */ void guac_rdpsnd_process_terminate(rdpSvcPlugin* plugin); +/** + * Handler called when this plugin receives an event. For the sake of RDPSND, + * all events will be ignored and simply free'd. + */ void guac_rdpsnd_process_event(rdpSvcPlugin* plugin, RDP_EVENT* event); #endif From 9e9ecca022a54992c2f33845bc89410222f26f7a Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Thu, 22 Nov 2012 18:42:27 -0800 Subject: [PATCH 209/253] Make vorbis support conditional. --- protocols/rdp/Makefile.am | 11 +++++++++-- protocols/rdp/configure.in | 18 +++++++++++++++++- protocols/rdp/src/client.c | 7 ++++++- 3 files changed, 32 insertions(+), 4 deletions(-) diff --git a/protocols/rdp/Makefile.am b/protocols/rdp/Makefile.am index f41f66ac..c0d7df0f 100644 --- a/protocols/rdp/Makefile.am +++ b/protocols/rdp/Makefile.am @@ -43,11 +43,11 @@ lib_LTLIBRARIES = libguac-client-rdp.la freerdp_LTLIBRARIES = guac_rdpsnd.la libguac_client_rdp_la_SOURCES = \ + $(OGG_SOURCES) \ src/audio.c \ src/client.c \ src/default_pointer.c \ src/guac_handlers.c \ - src/ogg_encoder.c \ src/rdp_bitmap.c \ src/rdp_cliprdr.c \ src/rdp_gdi.c \ @@ -64,13 +64,13 @@ guac_rdpsnd_la_SOURCES = \ src/audio.c noinst_HEADERS = \ + $(OGG_HEADERS) \ guac_rdpsnd/messages.h \ guac_rdpsnd/service.h \ include/audio.h \ include/client.h \ include/default_pointer.h \ include/guac_handlers.h \ - include/ogg_encoder.h \ include/rdp_bitmap.h \ include/rdp_cliprdr.h \ include/rdp_gdi.h \ @@ -79,6 +79,13 @@ noinst_HEADERS = \ include/rdp_pointer.h \ include/wav_encoder.h +# Compile OGG support if available +if ENABLE_OGG + libguac_client_rdp_la_SOURCES += src/ogg_encoder.c + noinst_HEADERS += include/ogg_encoder.h +endif + + libguac_client_rdp_la_LDFLAGS = -version-info 0:0:0 guac_rdpsnd_la_LDFLAGS = -module -avoid-version -shared diff --git a/protocols/rdp/configure.in b/protocols/rdp/configure.in index 1a96eb59..266a64eb 100644 --- a/protocols/rdp/configure.in +++ b/protocols/rdp/configure.in @@ -53,7 +53,23 @@ AC_CHECK_LIB([freerdp-utils], [xzalloc],, AC_MSG_ERROR("libfreerdp-utils is requ AC_CHECK_LIB([freerdp-codec], [freerdp_image_convert],, AC_MSG_ERROR("libfreerdp-codec is required (part of FreeRDP)")) AC_CHECK_LIB([pthread], [pthread_mutex_init],, AC_MSG_ERROR("libpthread is required")) -AC_CHECK_LIB([vorbisenc], [vorbis_encode_init],, AC_MSG_ERROR("libvorbisenc is required for sound")) +# Check for libvorbisenc + +have_vorbisenc=no +AC_CHECK_HEADER(vorbis/vorbisenc.h, + AC_CHECK_LIB([vorbisenc], [vorbis_encode_init], [have_vorbisenc=yes])) +AM_CONDITIONAL([ENABLE_OGG], [test "x${have_vorbisenc}" = "xyes"]) + +if test "x${have_vorbisenc}" = "xno" +then + AC_MSG_WARN([ + -------------------------------------------- + Unable to find libvorbisenc. + Sound will not be encoded with Ogg Vorbis. + --------------------------------------------]) +else + AC_DEFINE([ENABLE_OGG]) +fi # Checks for header files. AC_CHECK_HEADERS([guacamole/client.h guacamole/guacio.h guacamole/protocol.h freerdp/locale/keyboard.h freerdp/kbd/layouts.h]) diff --git a/protocols/rdp/src/client.c b/protocols/rdp/src/client.c index cf29355e..3b2ecd78 100644 --- a/protocols/rdp/src/client.c +++ b/protocols/rdp/src/client.c @@ -65,9 +65,12 @@ #include #include "audio.h" -#include "ogg_encoder.h" #include "wav_encoder.h" +#ifdef ENABLE_OGG +#include "ogg_encoder.h" +#endif + #include "client.h" #include "guac_handlers.h" #include "rdp_keymap.h" @@ -132,12 +135,14 @@ boolean rdp_freerdp_pre_connect(freerdp* instance) { const char* mimetype = client->info.audio_mimetypes[i]; +#ifdef ENABLE_OGG /* If Ogg is supported, done. */ if (strcmp(mimetype, ogg_encoder->mimetype) == 0) { guac_client_log_info(client, "Loading Ogg Vorbis encoder."); guac_client_data->audio = audio_stream_alloc(client, ogg_encoder); break; } +#endif /* If wav is supported, done. */ if (strcmp(mimetype, wav_encoder->mimetype) == 0) { From 04592995699e0de642c04d0bebcfaf3ad3dd6562 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Thu, 22 Nov 2012 18:55:11 -0800 Subject: [PATCH 210/253] Rearrange test for libvorbis. --- protocols/rdp/configure.in | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/protocols/rdp/configure.in b/protocols/rdp/configure.in index 266a64eb..7fe47ec7 100644 --- a/protocols/rdp/configure.in +++ b/protocols/rdp/configure.in @@ -55,9 +55,9 @@ AC_CHECK_LIB([pthread], [pthread_mutex_init],, AC_MSG_ERROR("libpthread is requi # Check for libvorbisenc -have_vorbisenc=no -AC_CHECK_HEADER(vorbis/vorbisenc.h, - AC_CHECK_LIB([vorbisenc], [vorbis_encode_init], [have_vorbisenc=yes])) +have_vorbisenc=yes +AC_CHECK_HEADER(vorbis/vorbisenc.h,, [have_vorbisenc=no]) +AC_CHECK_LIB([vorbisenc], [vorbis_encode_init],, [have_vorbisenc=no]) AM_CONDITIONAL([ENABLE_OGG], [test "x${have_vorbisenc}" = "xyes"]) if test "x${have_vorbisenc}" = "xno" From dceda44d67eb1a4903bbf4545b1d6e737e6780f8 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Thu, 22 Nov 2012 19:07:03 -0800 Subject: [PATCH 211/253] Add disable-audio option. --- protocols/rdp/include/client.h | 5 +++ protocols/rdp/src/client.c | 67 ++++++++++++++++++++-------------- 2 files changed, 45 insertions(+), 27 deletions(-) diff --git a/protocols/rdp/include/client.h b/protocols/rdp/include/client.h index 0bc5b4e4..abc9d6b0 100644 --- a/protocols/rdp/include/client.h +++ b/protocols/rdp/include/client.h @@ -139,6 +139,11 @@ typedef struct rdp_guac_client_data { */ char* clipboard; + /** + * Whether audio is enabled. + */ + int audio_enabled; + /** * Audio output, if any. */ diff --git a/protocols/rdp/src/client.c b/protocols/rdp/src/client.c index 3b2ecd78..1e45674e 100644 --- a/protocols/rdp/src/client.c +++ b/protocols/rdp/src/client.c @@ -91,6 +91,7 @@ const char* GUAC_CLIENT_ARGS[] = { "height", "initial-program", "color-depth", + "disable-audio", NULL }; @@ -103,7 +104,8 @@ enum ARGS_IDX { IDX_WIDTH, IDX_HEIGHT, IDX_INITIAL_PROGRAM, - IDX_COLOR_DEPTH + IDX_COLOR_DEPTH, + IDX_DISABLE_AUDIO }; int __guac_receive_channel_data(freerdp* rdp_inst, int channelId, uint8* data, int size, int flags, int total_size) { @@ -130,42 +132,49 @@ boolean rdp_freerdp_pre_connect(freerdp* instance) { "cliprdr", NULL)) guac_client_log_error(client, "Failed to load cliprdr plugin."); - /* Choose an encoding */ - for (i=0; client->info.audio_mimetypes[i] != NULL; i++) { + /* If audio enabled, choose an encoder */ + if (guac_client_data->audio_enabled) { - const char* mimetype = client->info.audio_mimetypes[i]; + /* Choose an encoding */ + for (i=0; client->info.audio_mimetypes[i] != NULL; i++) { + + const char* mimetype = client->info.audio_mimetypes[i]; #ifdef ENABLE_OGG - /* If Ogg is supported, done. */ - if (strcmp(mimetype, ogg_encoder->mimetype) == 0) { - guac_client_log_info(client, "Loading Ogg Vorbis encoder."); - guac_client_data->audio = audio_stream_alloc(client, ogg_encoder); - break; - } + /* If Ogg is supported, done. */ + if (strcmp(mimetype, ogg_encoder->mimetype) == 0) { + guac_client_log_info(client, "Loading Ogg Vorbis encoder."); + guac_client_data->audio = audio_stream_alloc(client, + ogg_encoder); + break; + } #endif - /* If wav is supported, done. */ - if (strcmp(mimetype, wav_encoder->mimetype) == 0) { - guac_client_log_info(client, "Loading wav encoder."); - guac_client_data->audio = audio_stream_alloc(client, wav_encoder); - break; + /* If wav is supported, done. */ + if (strcmp(mimetype, wav_encoder->mimetype) == 0) { + guac_client_log_info(client, "Loading wav encoder."); + guac_client_data->audio = audio_stream_alloc(client, + wav_encoder); + break; + } + } - } + /* If an encoding is available, load the sound plugin */ + if (guac_client_data->audio != NULL) { - /* If an encoding is available, load the sound plugin */ - if (guac_client_data->audio != NULL) { + /* Load sound plugin */ + if (freerdp_channels_load_plugin(channels, instance->settings, + "guac_rdpsnd", guac_client_data->audio)) + guac_client_log_error(client, + "Failed to load guac_rdpsnd plugin."); - /* Load sound plugin */ - if (freerdp_channels_load_plugin(channels, instance->settings, - "guac_rdpsnd", guac_client_data->audio)) - guac_client_log_error(client, - "Failed to load guac_rdpsnd plugin."); + } + else + guac_client_log_info(client, + "No available audio encoding. Sound disabled."); - } - else - guac_client_log_info(client, - "No available audio encoding. Sound disabled."); + } /* end if audio enabled */ /* Init color conversion structure */ clrconv = xnew(CLRCONV); @@ -437,6 +446,10 @@ int guac_client_init(guac_client* client, int argc, char** argv) { argv[IDX_WIDTH], settings->color_depth); } + /* Audio enable/disable */ + guac_client_data->audio_enabled = + (strcmp(argv[IDX_DISABLE_AUDIO], "true") != 0); + /* Order support */ bitmap_cache = settings->bitmap_cache; settings->os_major_type = OSMAJORTYPE_UNSPECIFIED; From b606aa2f7b07993154389b361839bde1877ee197 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Thu, 22 Nov 2012 19:10:10 -0800 Subject: [PATCH 212/253] Update ChangeLog --- protocols/rdp/ChangeLog | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/protocols/rdp/ChangeLog b/protocols/rdp/ChangeLog index fc7a8df9..ad7d1fa9 100644 --- a/protocols/rdp/ChangeLog +++ b/protocols/rdp/ChangeLog @@ -1,4 +1,12 @@ -2012-10-22 Michael Jumper +2012-11-22 Michael Jumper + + * Add disable-audio option (fixes #221) + +2012-11-02 Michael Jumper + + * Added sound support (fixes #32) + +2012-10-22 Michael Jumper * Use guac_client_info to choose optimal size if size not overridden From 51c11ca5723619afb2e0bf2198cab997fb86fcf0 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Tue, 27 Nov 2012 10:51:26 -0800 Subject: [PATCH 213/253] Fix threading issues with FreeRDP. --- protocols/rdp/src/guac_handlers.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/protocols/rdp/src/guac_handlers.c b/protocols/rdp/src/guac_handlers.c index e72ac343..3880b5a9 100644 --- a/protocols/rdp/src/guac_handlers.c +++ b/protocols/rdp/src/guac_handlers.c @@ -168,6 +168,8 @@ int rdp_guac_client_handle_messages(guac_client* client) { } } + pthread_mutex_lock(&(guac_client_data->rdp_lock)); + /* Check the libfreerdp fds */ if (!freerdp_check_fds(rdp_inst)) { guac_error = GUAC_STATUS_BAD_STATE; @@ -201,6 +203,8 @@ int rdp_guac_client_handle_messages(guac_client* client) { return 1; } + pthread_mutex_unlock(&(guac_client_data->rdp_lock)); + /* Flush any audio */ if (guac_client_data->audio != NULL) { pthread_mutex_lock(&(guac_client_data->update_lock)); From e5decbed9ed1ee4e5a28ff707af372fd74824e8d Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Sat, 1 Dec 2012 13:08:26 -0800 Subject: [PATCH 214/253] Bump version. --- protocols/rdp/configure.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/protocols/rdp/configure.in b/protocols/rdp/configure.in index 7fe47ec7..1609be41 100644 --- a/protocols/rdp/configure.in +++ b/protocols/rdp/configure.in @@ -35,7 +35,7 @@ # ***** END LICENSE BLOCK ***** AC_INIT(src/client.c) -AM_INIT_AUTOMAKE([libguac-client-rdp], 0.6.2) +AM_INIT_AUTOMAKE([libguac-client-rdp], 0.7.0) AC_CONFIG_MACRO_DIR([m4]) # Checks for programs. From bd4a440957399caf0f482bbd99df96a55a998f11 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Sun, 2 Dec 2012 01:14:02 -0800 Subject: [PATCH 215/253] Add config.h hackery header to distributed headers. --- protocols/rdp/Makefile.am | 1 + 1 file changed, 1 insertion(+) diff --git a/protocols/rdp/Makefile.am b/protocols/rdp/Makefile.am index c0d7df0f..d3255edf 100644 --- a/protocols/rdp/Makefile.am +++ b/protocols/rdp/Makefile.am @@ -69,6 +69,7 @@ noinst_HEADERS = \ guac_rdpsnd/service.h \ include/audio.h \ include/client.h \ + include/config.h \ include/default_pointer.h \ include/guac_handlers.h \ include/rdp_bitmap.h \ From cf71ae25a0730a3345d0aad6440412bdbc84cdb7 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Thu, 13 Dec 2012 14:35:00 -0800 Subject: [PATCH 216/253] Implement PATBLT fallback (pay attention to ROP, ignore brush). Fixes #238. --- protocols/rdp/src/rdp_gdi.c | 107 +++++++++++++++++++++++++++++++++++- 1 file changed, 106 insertions(+), 1 deletion(-) diff --git a/protocols/rdp/src/rdp_gdi.c b/protocols/rdp/src/rdp_gdi.c index 238eb081..575419f2 100644 --- a/protocols/rdp/src/rdp_gdi.c +++ b/protocols/rdp/src/rdp_gdi.c @@ -138,8 +138,113 @@ void guac_rdp_gdi_dstblt(rdpContext* context, DSTBLT_ORDER* dstblt) { } void guac_rdp_gdi_patblt(rdpContext* context, PATBLT_ORDER* patblt) { + + /* + * Note that this is not a full implementation of PATBLT. This is a + * fallback implementation which only renders a solid block of background + * color using the specified ROP3 operation, ignoring whatever brush + * was actually specified. + * + * As libguac-client-rdp explicitly tells the server not to send PATBLT, + * well-behaved RDP servers will not use this operation at all, while + * others will at least have a fallback. + */ + + /* Get client and current layer */ guac_client* client = ((rdp_freerdp_context*) context)->client; - guac_client_log_info(client, "guac_rdp_gdi_patblt()"); + const guac_layer* current_layer = + ((rdp_guac_client_data*) client->data)->current_surface; + + /* Layer for actual transfer */ + guac_layer* buffer; + + /* + * Warn that rendering is a fallback, as the server should not be sending + * this order. + */ + guac_client_log_info(client, "Using fallback PATBLT (server is ignoring " + "negotiated client capabilities)"); + + /* Render rectangle based on ROP */ + switch (patblt->bRop) { + + /* If blackness, send black rectangle */ + case 0x00: + guac_protocol_send_rect(client->socket, current_layer, + patblt->nLeftRect, patblt->nTopRect, + patblt->nWidth, patblt->nHeight); + + guac_protocol_send_cfill(client->socket, + GUAC_COMP_OVER, current_layer, + 0x00, 0x00, 0x00, 0xFF); + break; + + /* If NOP, do nothing */ + case 0xAA: + break; + + /* If operation is just SRC, send background only */ + case 0xCC: + guac_protocol_send_rect(client->socket, current_layer, + patblt->nLeftRect, patblt->nTopRect, + patblt->nWidth, patblt->nHeight); + + guac_protocol_send_cfill(client->socket, + GUAC_COMP_OVER, current_layer, + 0x00, 0x00, 0x00, 0xFF); + break; + + /* If whiteness, send white rectangle */ + case 0xFF: + guac_protocol_send_rect(client->socket, current_layer, + patblt->nLeftRect, patblt->nTopRect, + patblt->nWidth, patblt->nHeight); + + guac_protocol_send_cfill(client->socket, + GUAC_COMP_OVER, current_layer, + (patblt->backColor >> 16) & 0xFF, + (patblt->backColor >> 8 ) & 0xFF, + (patblt->backColor ) & 0xFF, + 0xFF); + break; + + /* Otherwise, use transfer */ + default: + + /* Allocate buffer for transfer */ + buffer = guac_client_alloc_buffer(client); + + /* Get transfer function for ROP */ + + /* Send rectangle stroke */ + guac_protocol_send_rect(client->socket, buffer, + 0, 0, patblt->nWidth, patblt->nHeight); + + /* Fill rectangle with back color only */ + guac_protocol_send_cfill(client->socket, GUAC_COMP_OVER, buffer, + (patblt->backColor >> 16) & 0xFF, + (patblt->backColor >> 8 ) & 0xFF, + (patblt->backColor ) & 0xFF, + 0xFF); + + /* Transfer */ + guac_protocol_send_transfer(client->socket, + + /* ... from buffer */ + buffer, 0, 0, patblt->nWidth, patblt->nHeight, + + /* ... using specified transfer function */ + guac_rdp_rop3_transfer_function( + client, patblt->bRop), + + /* ... to current layer */ + current_layer, patblt->nLeftRect, patblt->nTopRect); + + /* Done with buffer */ + guac_client_free_buffer(client, buffer); + + } + } void guac_rdp_gdi_scrblt(rdpContext* context, SCRBLT_ORDER* scrblt) { From e0f4ed892b91f3ddeb905ff608c2dbb0f5e52baf Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Thu, 13 Dec 2012 14:56:45 -0800 Subject: [PATCH 217/253] Implement PAT ops. --- protocols/rdp/src/rdp_gdi.c | 47 ++++++++++++++++++++++++++----------- 1 file changed, 33 insertions(+), 14 deletions(-) diff --git a/protocols/rdp/src/rdp_gdi.c b/protocols/rdp/src/rdp_gdi.c index 575419f2..4d4a5b46 100644 --- a/protocols/rdp/src/rdp_gdi.c +++ b/protocols/rdp/src/rdp_gdi.c @@ -158,6 +158,9 @@ void guac_rdp_gdi_patblt(rdpContext* context, PATBLT_ORDER* patblt) { /* Layer for actual transfer */ guac_layer* buffer; + /* Transfer function (if necessary) */ + guac_transfer_function transfer; + /* * Warn that rendering is a fallback, as the server should not be sending * this order. @@ -185,17 +188,7 @@ void guac_rdp_gdi_patblt(rdpContext* context, PATBLT_ORDER* patblt) { /* If operation is just SRC, send background only */ case 0xCC: - guac_protocol_send_rect(client->socket, current_layer, - patblt->nLeftRect, patblt->nTopRect, - patblt->nWidth, patblt->nHeight); - - guac_protocol_send_cfill(client->socket, - GUAC_COMP_OVER, current_layer, - 0x00, 0x00, 0x00, 0xFF); - break; - - /* If whiteness, send white rectangle */ - case 0xFF: + case 0xF0: guac_protocol_send_rect(client->socket, current_layer, patblt->nLeftRect, patblt->nTopRect, patblt->nWidth, patblt->nHeight); @@ -208,13 +201,40 @@ void guac_rdp_gdi_patblt(rdpContext* context, PATBLT_ORDER* patblt) { 0xFF); break; + /* If whiteness, send white rectangle */ + case 0xFF: + guac_protocol_send_rect(client->socket, current_layer, + patblt->nLeftRect, patblt->nTopRect, + patblt->nWidth, patblt->nHeight); + + guac_protocol_send_cfill(client->socket, + GUAC_COMP_OVER, current_layer, + 0xFF, 0xFF, 0xFF, 0xFF); + break; + /* Otherwise, use transfer */ default: /* Allocate buffer for transfer */ buffer = guac_client_alloc_buffer(client); - /* Get transfer function for ROP */ + /* Get reasonable transfer function for ROP */ + switch (patblt->bRop) { + + /* PATINVERT */ + case 0x5A: + transfer = GUAC_TRANSFER_BINARY_XOR; + break; + + /* PATPAINT */ + case 0xFB: + transfer = GUAC_TRANSFER_BINARY_OR; + break; + + default: + transfer = guac_rdp_rop3_transfer_function( + client, patblt->bRop); + } /* Send rectangle stroke */ guac_protocol_send_rect(client->socket, buffer, @@ -234,8 +254,7 @@ void guac_rdp_gdi_patblt(rdpContext* context, PATBLT_ORDER* patblt) { buffer, 0, 0, patblt->nWidth, patblt->nHeight, /* ... using specified transfer function */ - guac_rdp_rop3_transfer_function( - client, patblt->bRop), + transfer, /* ... to current layer */ current_layer, patblt->nLeftRect, patblt->nTopRect); From e0a08b54612d97f1bc3623b18975844600d49cf0 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Thu, 13 Dec 2012 15:01:11 -0800 Subject: [PATCH 218/253] Ignore ROP, assume invert unless ROP an easy operation. --- protocols/rdp/src/rdp_gdi.c | 42 ++++++++----------------------------- 1 file changed, 9 insertions(+), 33 deletions(-) diff --git a/protocols/rdp/src/rdp_gdi.c b/protocols/rdp/src/rdp_gdi.c index 4d4a5b46..5672d448 100644 --- a/protocols/rdp/src/rdp_gdi.c +++ b/protocols/rdp/src/rdp_gdi.c @@ -158,9 +158,6 @@ void guac_rdp_gdi_patblt(rdpContext* context, PATBLT_ORDER* patblt) { /* Layer for actual transfer */ guac_layer* buffer; - /* Transfer function (if necessary) */ - guac_transfer_function transfer; - /* * Warn that rendering is a fallback, as the server should not be sending * this order. @@ -186,7 +183,7 @@ void guac_rdp_gdi_patblt(rdpContext* context, PATBLT_ORDER* patblt) { case 0xAA: break; - /* If operation is just SRC, send background only */ + /* If operation is just a copy, send foreground only */ case 0xCC: case 0xF0: guac_protocol_send_rect(client->socket, current_layer, @@ -195,9 +192,9 @@ void guac_rdp_gdi_patblt(rdpContext* context, PATBLT_ORDER* patblt) { guac_protocol_send_cfill(client->socket, GUAC_COMP_OVER, current_layer, - (patblt->backColor >> 16) & 0xFF, - (patblt->backColor >> 8 ) & 0xFF, - (patblt->backColor ) & 0xFF, + (patblt->foreColor >> 16) & 0xFF, + (patblt->foreColor >> 8 ) & 0xFF, + (patblt->foreColor ) & 0xFF, 0xFF); break; @@ -212,40 +209,19 @@ void guac_rdp_gdi_patblt(rdpContext* context, PATBLT_ORDER* patblt) { 0xFF, 0xFF, 0xFF, 0xFF); break; - /* Otherwise, use transfer */ + /* Otherwise, invert entire rect */ default: /* Allocate buffer for transfer */ buffer = guac_client_alloc_buffer(client); - /* Get reasonable transfer function for ROP */ - switch (patblt->bRop) { - - /* PATINVERT */ - case 0x5A: - transfer = GUAC_TRANSFER_BINARY_XOR; - break; - - /* PATPAINT */ - case 0xFB: - transfer = GUAC_TRANSFER_BINARY_OR; - break; - - default: - transfer = guac_rdp_rop3_transfer_function( - client, patblt->bRop); - } - /* Send rectangle stroke */ guac_protocol_send_rect(client->socket, buffer, 0, 0, patblt->nWidth, patblt->nHeight); - /* Fill rectangle with back color only */ + /* Fill rectangle with fore color only */ guac_protocol_send_cfill(client->socket, GUAC_COMP_OVER, buffer, - (patblt->backColor >> 16) & 0xFF, - (patblt->backColor >> 8 ) & 0xFF, - (patblt->backColor ) & 0xFF, - 0xFF); + 0xFF, 0xFF, 0xFF, 0xFF); /* Transfer */ guac_protocol_send_transfer(client->socket, @@ -253,8 +229,8 @@ void guac_rdp_gdi_patblt(rdpContext* context, PATBLT_ORDER* patblt) { /* ... from buffer */ buffer, 0, 0, patblt->nWidth, patblt->nHeight, - /* ... using specified transfer function */ - transfer, + /* ... inverting */ + GUAC_TRANSFER_BINARY_XOR, /* ... to current layer */ current_layer, patblt->nLeftRect, patblt->nTopRect); From 7a2a9a3e64c5e797d7229dfd6ef04ca5aec64301 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Thu, 13 Dec 2012 16:12:47 -0800 Subject: [PATCH 219/253] Update changelog, bump version. --- protocols/rdp/ChangeLog | 4 ++++ protocols/rdp/configure.in | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/protocols/rdp/ChangeLog b/protocols/rdp/ChangeLog index ad7d1fa9..56159f1b 100644 --- a/protocols/rdp/ChangeLog +++ b/protocols/rdp/ChangeLog @@ -1,3 +1,7 @@ +2012-12-13 Michael Jumper + + * Implement PATBLT fallback (fixes #238) + 2012-11-22 Michael Jumper * Add disable-audio option (fixes #221) diff --git a/protocols/rdp/configure.in b/protocols/rdp/configure.in index 1609be41..f99d4396 100644 --- a/protocols/rdp/configure.in +++ b/protocols/rdp/configure.in @@ -35,7 +35,7 @@ # ***** END LICENSE BLOCK ***** AC_INIT(src/client.c) -AM_INIT_AUTOMAKE([libguac-client-rdp], 0.7.0) +AM_INIT_AUTOMAKE([libguac-client-rdp], 0.7.1) AC_CONFIG_MACRO_DIR([m4]) # Checks for programs. From 00401147ba842d283b522d6022620b62d36e1ef9 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Tue, 25 Dec 2012 19:36:19 -0800 Subject: [PATCH 220/253] Implement console arguments (fixes #227) --- protocols/rdp/ChangeLog | 4 ++++ protocols/rdp/src/client.c | 10 +++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/protocols/rdp/ChangeLog b/protocols/rdp/ChangeLog index 56159f1b..dd89481d 100644 --- a/protocols/rdp/ChangeLog +++ b/protocols/rdp/ChangeLog @@ -1,3 +1,7 @@ +2012-12-25 Michael Jumper + + * Console arguments (fixes #227) + 2012-12-13 Michael Jumper * Implement PATBLT fallback (fixes #238) diff --git a/protocols/rdp/src/client.c b/protocols/rdp/src/client.c index 1e45674e..bf95175d 100644 --- a/protocols/rdp/src/client.c +++ b/protocols/rdp/src/client.c @@ -92,6 +92,8 @@ const char* GUAC_CLIENT_ARGS[] = { "initial-program", "color-depth", "disable-audio", + "console", + "console-audio", NULL }; @@ -105,7 +107,9 @@ enum ARGS_IDX { IDX_HEIGHT, IDX_INITIAL_PROGRAM, IDX_COLOR_DEPTH, - IDX_DISABLE_AUDIO + IDX_DISABLE_AUDIO, + IDX_CONSOLE, + IDX_CONSOLE_AUDIO }; int __guac_receive_channel_data(freerdp* rdp_inst, int channelId, uint8* data, int size, int flags, int total_size) { @@ -373,6 +377,10 @@ int guac_client_init(guac_client* client, int argc, char** argv) { /* Set settings */ settings = rdp_inst->settings; + /* Console */ + settings->console_session = (strcmp(argv[IDX_CONSOLE], "true") != 0); + settings->console_audio = (strcmp(argv[IDX_CONSOLE_AUDIO], "true") != 0); + /* --no-auth */ settings->authentication = false; From 0bff3ac8d11b7f9fcf948a7f7dbd21b7d3764b82 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Tue, 25 Dec 2012 19:36:40 -0800 Subject: [PATCH 221/253] Bump version number. --- protocols/rdp/configure.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/protocols/rdp/configure.in b/protocols/rdp/configure.in index f99d4396..9f0505eb 100644 --- a/protocols/rdp/configure.in +++ b/protocols/rdp/configure.in @@ -35,7 +35,7 @@ # ***** END LICENSE BLOCK ***** AC_INIT(src/client.c) -AM_INIT_AUTOMAKE([libguac-client-rdp], 0.7.1) +AM_INIT_AUTOMAKE([libguac-client-rdp], 0.7.2) AC_CONFIG_MACRO_DIR([m4]) # Checks for programs. From e67508884211c4e87f779a6abb9ed003b6b2e877 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Tue, 25 Dec 2012 20:49:57 -0800 Subject: [PATCH 222/253] Update email addresses. --- protocols/rdp/ChangeLog | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/protocols/rdp/ChangeLog b/protocols/rdp/ChangeLog index dd89481d..1501aaf2 100644 --- a/protocols/rdp/ChangeLog +++ b/protocols/rdp/ChangeLog @@ -1,20 +1,20 @@ -2012-12-25 Michael Jumper +2012-12-25 Michael Jumper * Console arguments (fixes #227) -2012-12-13 Michael Jumper +2012-12-13 Michael Jumper * Implement PATBLT fallback (fixes #238) -2012-11-22 Michael Jumper +2012-11-22 Michael Jumper * Add disable-audio option (fixes #221) -2012-11-02 Michael Jumper +2012-11-02 Michael Jumper * Added sound support (fixes #32) -2012-10-22 Michael Jumper +2012-10-22 Michael Jumper * Use guac_client_info to choose optimal size if size not overridden @@ -22,7 +22,7 @@ * Use configured color depth -2012-08-11 Michael Jumper +2012-08-11 Michael Jumper * Fix m4/ autoreconf error @@ -30,7 +30,7 @@ * Add SetNull and SetDefault handlers (fixes #148) -2012-05-04 Michael Jumper +2012-05-04 Michael Jumper * Removed Alt-code fallback mode * Added embedded default mouse pointer @@ -39,7 +39,7 @@ * Unicode keyboard events -2012-05-04 Michael Jumper +2012-05-04 Michael Jumper * Initial release From 411c21adbcf50777f581c9f63dd35e697f5db6f2 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Tue, 25 Dec 2012 20:50:35 -0800 Subject: [PATCH 223/253] Fix AUTHORS. --- protocols/rdp/AUTHORS | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/protocols/rdp/AUTHORS b/protocols/rdp/AUTHORS index dc7ab73c..7c02bb1d 100644 --- a/protocols/rdp/AUTHORS +++ b/protocols/rdp/AUTHORS @@ -1,4 +1,4 @@ -Michael Jumper +Michael Jumper Matt Hortman Jocelyn Delalande -David Lechevalier \ No newline at end of file +David Lechevalier From 89fa8f168036c0f870459a9c5b31780c5b35146a Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Wed, 26 Dec 2012 15:29:54 -0800 Subject: [PATCH 224/253] Fixed strcmp() logic around console and console-audio parameters. --- protocols/rdp/src/client.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/protocols/rdp/src/client.c b/protocols/rdp/src/client.c index bf95175d..147f7d62 100644 --- a/protocols/rdp/src/client.c +++ b/protocols/rdp/src/client.c @@ -378,8 +378,8 @@ int guac_client_init(guac_client* client, int argc, char** argv) { settings = rdp_inst->settings; /* Console */ - settings->console_session = (strcmp(argv[IDX_CONSOLE], "true") != 0); - settings->console_audio = (strcmp(argv[IDX_CONSOLE_AUDIO], "true") != 0); + settings->console_session = (strcmp(argv[IDX_CONSOLE], "true") == 0); + settings->console_audio = (strcmp(argv[IDX_CONSOLE_AUDIO], "true") == 0); /* --no-auth */ settings->authentication = false; From 40954430dc7926bd4056ad5948abb1440d2f24e9 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Tue, 15 Jan 2013 20:57:45 -0800 Subject: [PATCH 225/253] Use enum to determine arg length. --- protocols/rdp/src/client.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/protocols/rdp/src/client.c b/protocols/rdp/src/client.c index 147f7d62..5de9b674 100644 --- a/protocols/rdp/src/client.c +++ b/protocols/rdp/src/client.c @@ -109,7 +109,9 @@ enum ARGS_IDX { IDX_COLOR_DEPTH, IDX_DISABLE_AUDIO, IDX_CONSOLE, - IDX_CONSOLE_AUDIO + IDX_CONSOLE_AUDIO, + + RDP_ARGS_COUNT }; int __guac_receive_channel_data(freerdp* rdp_inst, int channelId, uint8* data, int size, int flags, int total_size) { @@ -340,7 +342,7 @@ int guac_client_init(guac_client* client, int argc, char** argv) { */ const guac_rdp_keymap* chosen_keymap = &guac_rdp_keymap_en_us; - if (argc < 9) { + if (argc < RDP_ARGS_COUNT) { guac_protocol_send_error(client->socket, "Wrong argument count received."); From 9faf4b0bf2e61c7761e7e902225c9ebdafa046be Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Wed, 23 Jan 2013 01:34:51 -0800 Subject: [PATCH 226/253] Ensure width is divisible by 4 (fixes #262) --- protocols/rdp/src/client.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/protocols/rdp/src/client.c b/protocols/rdp/src/client.c index 5de9b674..9f5ee924 100644 --- a/protocols/rdp/src/client.c +++ b/protocols/rdp/src/client.c @@ -407,6 +407,9 @@ int guac_client_init(guac_client* client, int argc, char** argv) { argv[IDX_WIDTH], settings->width); } + /* Round width up to nearest multiple of 4 */ + settings->width = (settings->width + 3) & ~0x3; + /* Use optimal height unless overridden */ settings->height = client->info.optimal_height; if (argv[IDX_HEIGHT][0] != '\0') From e8d8d60485201fb40a62e5bb7cc8a5d28ada21ac Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Sun, 17 Mar 2013 22:05:16 -0700 Subject: [PATCH 227/253] Bump version. --- protocols/rdp/configure.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/protocols/rdp/configure.in b/protocols/rdp/configure.in index 9f0505eb..857f004f 100644 --- a/protocols/rdp/configure.in +++ b/protocols/rdp/configure.in @@ -35,7 +35,7 @@ # ***** END LICENSE BLOCK ***** AC_INIT(src/client.c) -AM_INIT_AUTOMAKE([libguac-client-rdp], 0.7.2) +AM_INIT_AUTOMAKE([libguac-client-rdp], 0.7.3) AC_CONFIG_MACRO_DIR([m4]) # Checks for programs. From e6414039a3969b98b270d485da8efed3d733fb78 Mon Sep 17 00:00:00 2001 From: Alexandre Duvaly Date: Sat, 23 Mar 2013 01:41:38 -0700 Subject: [PATCH 228/253] Added French keymap (not yet used). --- protocols/rdp/src/rdp_keymap_fr_fr.c | 499 +++++++++++++++++++++++++++ 1 file changed, 499 insertions(+) create mode 100644 protocols/rdp/src/rdp_keymap_fr_fr.c diff --git a/protocols/rdp/src/rdp_keymap_fr_fr.c b/protocols/rdp/src/rdp_keymap_fr_fr.c new file mode 100644 index 00000000..5df4692b --- /dev/null +++ b/protocols/rdp/src/rdp_keymap_fr_fr.c @@ -0,0 +1,499 @@ + +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is libguac-client-rdp. + * + * The Initial Developer of the Original Code is + * Michael Jumper. + * Portions created by the Initial Developer are Copyright (C) 2011 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Matt Hortman + * Alexandre Devely + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#include + +#ifdef HAVE_FREERDP_LOCALE_KEYBOARD_H +#include +#else +#include +#endif + +#include "rdp_keymap.h" + + +/* + This array is order by .keysym + the .keysym is the ASCII value + the .scancode the key scancode + +*/ +static guac_rdp_keysym_desc __guac_rdp_keymap_mapping[] = { + + /* space */ + { .keysym = 0x0020, .scancode = 0x39 }, + + /* exclam */ + { .keysym = 0x0021, .scancode = 0x35, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* quotedbl */ + { .keysym = 0x0022, .scancode = 0x04, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* numbersign */ + { .keysym = 0x0023, .scancode = 0x04, + .set_keysyms = GUAC_KEYSYMS_CTRL_ALT }, + + /* dollar */ + { .keysym = 0x0024, .scancode = 0x1b, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* percent */ + { .keysym = 0x0025, .scancode = 0x28, + .set_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* ampersand */ + { .keysym = 0x0026, .scancode = 0x02, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* quoteright */ + { .keysym = 0x0027, .scancode = 0x05, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* parenleft */ + { .keysym = 0x0028, .scancode = 0x06, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* parenright */ + { .keysym = 0x0029, .scancode = 0x0c, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* asterisk */ + { .keysym = 0x002a, .scancode = 0x2b, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* plus */ + { .keysym = 0x002b, .scancode = 0x0D, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* comma */ + { .keysym = 0x002c, .scancode = 0x32, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* minus */ + { .keysym = 0x002d, .scancode = 0x07, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* period */ + { .keysym = 0x002e, .scancode = 0x33, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* slash */ + { .keysym = 0x002f, .scancode = 0x34, + .set_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* 0 */ + { .keysym = 0x0030, .scancode = 0x0B, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* 1 */ + { .keysym = 0x0031, .scancode = 0x02, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* 2 */ + { .keysym = 0x0032, .scancode = 0x03, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* 3 */ + { .keysym = 0x0033, .scancode = 0x04, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* 4 */ + { .keysym = 0x0034, .scancode = 0x05, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* 5 */ + { .keysym = 0x0035, .scancode = 0x06, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* 6 */ + { .keysym = 0x0036, .scancode = 0x07, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* 7 */ + { .keysym = 0x0037, .scancode = 0x08, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* 8 */ + { .keysym = 0x0038, .scancode = 0x09, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* 9 */ + { .keysym = 0x0039, .scancode = 0x0A, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* colon */ + { .keysym = 0x003a, .scancode = 0x34, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* semicolon */ + { .keysym = 0x003b, .scancode = 0x33, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* less */ + { .keysym = 0x003c, .scancode = 0x56, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* equal */ + { .keysym = 0x003d, .scancode = 0x0D, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* greater */ + { .keysym = 0x003e, .scancode = 0x56, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* question */ + { .keysym = 0x003f, .scancode = 0x32, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* at */ + { .keysym = 0x0040, .scancode = 0x0B, + .set_keysyms = GUAC_KEYSYMS_CTRL_ALT }, + + /* A */ + { .keysym = 0x0041, .scancode = 0x10, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* B */ + { .keysym = 0x0042, .scancode = 0x30, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* C */ + { .keysym = 0x0043, .scancode = 0x2E, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* D */ + { .keysym = 0x0044, .scancode = 0x20, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* E */ + { .keysym = 0x0045, .scancode = 0x12, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* F */ + { .keysym = 0x0046, .scancode = 0x21, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* G */ + { .keysym = 0x0047, .scancode = 0x22, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* H */ + { .keysym = 0x0048, .scancode = 0x23, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* I */ + { .keysym = 0x0049, .scancode = 0x17, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* J */ + { .keysym = 0x004a, .scancode = 0x24, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* K */ + { .keysym = 0x004b, .scancode = 0x25, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* L */ + { .keysym = 0x004c, .scancode = 0x26, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* M */ + { .keysym = 0x004d, .scancode = 0x27, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* N */ + { .keysym = 0x004e, .scancode = 0x31, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* O */ + { .keysym = 0x004f, .scancode = 0x18, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* P */ + { .keysym = 0x0050, .scancode = 0x19, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* Q */ + { .keysym = 0x0051, .scancode = 0x1E, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* R */ + { .keysym = 0x0052, .scancode = 0x13, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* S */ + { .keysym = 0x0053, .scancode = 0x1F, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* T */ + { .keysym = 0x0054, .scancode = 0x14, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* U */ + { .keysym = 0x0055, .scancode = 0x16, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* V */ + { .keysym = 0x0056, .scancode = 0x2F, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* W */ + { .keysym = 0x0057, .scancode = 0x2C, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* X */ + { .keysym = 0x0058, .scancode = 0x2D, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* Y */ + { .keysym = 0x0059, .scancode = 0x15, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* Z */ + { .keysym = 0x005a, .scancode = 0x11, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* bracketleft */ + { .keysym = 0x005b, .scancode = 0x06, + .set_keysyms = GUAC_KEYSYMS_CTRL_ALT }, + + /* backslash */ + { .keysym = 0x005c, .scancode = 0x09, + .set_keysyms = GUAC_KEYSYMS_CTRL_ALT }, + + /* bracketright */ + { .keysym = 0x005d, .scancode = 0x0c, + .set_keysyms = GUAC_KEYSYMS_CTRL_ALT }, + + /* asciicircum */ + { .keysym = 0x005e, .scancode = 0x0a, + .set_keysyms = GUAC_KEYSYMS_CTRL_ALT }, + + /* underscore */ + { .keysym = 0x005f, .scancode = 0x09, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* quoteleft */ + { .keysym = 0x0060, .scancode = 0x08, + .set_keysyms = GUAC_KEYSYMS_CTRL_ALT }, + + /* a */ + { .keysym = 0x0061, .scancode = 0x10, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* b */ + { .keysym = 0x0062, .scancode = 0x30, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* c */ + { .keysym = 0x0063, .scancode = 0x2E, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* d */ + { .keysym = 0x0064, .scancode = 0x20, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* e */ + { .keysym = 0x0065, .scancode = 0x12, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* f */ + { .keysym = 0x0066, .scancode = 0x21, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* g */ + { .keysym = 0x0067, .scancode = 0x22, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* h */ + { .keysym = 0x0068, .scancode = 0x23, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* i */ + { .keysym = 0x0069, .scancode = 0x17, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* j */ + { .keysym = 0x006a, .scancode = 0x24, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* k */ + { .keysym = 0x006b, .scancode = 0x25, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* l */ + { .keysym = 0x006c, .scancode = 0x26, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* m */ + { .keysym = 0x006d, .scancode = 0x27, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* n */ + { .keysym = 0x006e, .scancode = 0x31, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* o */ + { .keysym = 0x006f, .scancode = 0x18, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* p */ + { .keysym = 0x0070, .scancode = 0x19, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* q */ + { .keysym = 0x0071, .scancode = 0x1E, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* r */ + { .keysym = 0x0072, .scancode = 0x13, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* s */ + { .keysym = 0x0073, .scancode = 0x1F, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* t */ + { .keysym = 0x0074, .scancode = 0x14, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* u */ + { .keysym = 0x0075, .scancode = 0x16, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* v */ + { .keysym = 0x0076, .scancode = 0x2F, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* w */ + { .keysym = 0x0077, .scancode = 0x2C, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* x */ + { .keysym = 0x0078, .scancode = 0x2D, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* y */ + { .keysym = 0x0079, .scancode = 0x15, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* z */ + { .keysym = 0x007a, .scancode = 0x11, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* braceleft */ + { .keysym = 0x007b, .scancode = 0x05, + .set_keysyms = GUAC_KEYSYMS_CTRL_ALT }, + + /* bar */ + { .keysym = 0x007c, .scancode = 0x07, + .set_keysyms = GUAC_KEYSYMS_CTRL_ALT }, + + /* braceright */ + { .keysym = 0x007d, .scancode = 0x0D, + .set_keysyms = GUAC_KEYSYMS_CTRL_ALT }, + + /* asciitilde */ + { .keysym = 0x007e, .scancode = 0x03, + .set_keysyms = GUAC_KEYSYMS_CTRL_ALT }, + + /* pound; */ + { .keysym = 0x00a3, .scancode = 0x1b, + .set_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* curren; */ + { .keysym = 0x00a4, .scancode = 0x1b, + .set_keysyms = GUAC_KEYSYMS_CTRL_ALT }, + + /* sect; */ + { .keysym = 0x00a7, .scancode = 0x35, + .set_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* deg */ + { .keysym = 0x00b0, .scancode = 0x0c, + .set_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* micro */ + { .keysym = 0x00b5, .scancode = 0x2b, + .set_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* agrave */ + { .keysym = 0x00e0, .scancode = 0x0b, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* auml */ + { .keysym = 0x00e4, .scancode = 0x1a, + .set_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* Ccedil */ + { .keysym = 0x00e7, .scancode = 0x0a, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* egrave */ + { .keysym = 0x00e8, .scancode = 0x08, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* eacute */ + { .keysym = 0x00e9, .scancode = 0x03, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* ugrave */ + { .keysym = 0x00f9, .scancode = 0x28, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* euro */ + { .keysym = 0x10020ac, .scancode = 0x12, + .set_keysyms = GUAC_KEYSYMS_CTRL_ALT }, + + {0} + +}; + +guac_rdp_keymap guac_rdp_keymap_fr_fr = { + + .name = "fr-fr-azerty", + + .parent = &guac_rdp_keymap_base, + .mapping = __guac_rdp_keymap_mapping, + .freerdp_keyboard_layout = KBD_FRENCH + +}; + From 9b00ce9f284e377d425fbf659b082473ad7016c2 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Tue, 15 Jan 2013 20:56:59 -0800 Subject: [PATCH 229/253] German keyboard stub. --- protocols/rdp/Makefile.am | 1 + protocols/rdp/include/rdp_keymap.h | 10 + protocols/rdp/src/client.c | 25 +- protocols/rdp/src/rdp_keymap_de_de.c | 441 +++++++++++++++++++++++++++ 4 files changed, 472 insertions(+), 5 deletions(-) create mode 100644 protocols/rdp/src/rdp_keymap_de_de.c diff --git a/protocols/rdp/Makefile.am b/protocols/rdp/Makefile.am index d3255edf..ccfae88a 100644 --- a/protocols/rdp/Makefile.am +++ b/protocols/rdp/Makefile.am @@ -54,6 +54,7 @@ libguac_client_rdp_la_SOURCES = \ src/rdp_glyph.c \ src/rdp_keymap_base.c \ src/rdp_keymap.c \ + src/rdp_keymap_de_de.c \ src/rdp_keymap_en_us.c \ src/rdp_pointer.c \ src/wav_encoder.c diff --git a/protocols/rdp/include/rdp_keymap.h b/protocols/rdp/include/rdp_keymap.h index 05b0b018..bb26bc2f 100644 --- a/protocols/rdp/include/rdp_keymap.h +++ b/protocols/rdp/include/rdp_keymap.h @@ -126,6 +126,11 @@ typedef int guac_rdp_keysym_state_map[256][256]; */ extern const guac_rdp_keymap guac_rdp_keymap_en_us; +/** + * Map of X11 keysyms to RDP scancodes (German). + */ +extern const guac_rdp_keymap guac_rdp_keymap_de_de; + /** * Map of X11 keysyms to RDP scancodes (common non-printable keys). */ @@ -172,5 +177,10 @@ extern const int GUAC_KEYSYMS_ALL_ALT[]; */ extern const int GUAC_KEYSYMS_ALL_MODIFIERS[]; +/** + * NULL-terminated array of all keymaps. + */ +extern const guac_rpd_keymap* GUAC_KEYMAPS[]; + #endif diff --git a/protocols/rdp/src/client.c b/protocols/rdp/src/client.c index 9f5ee924..66db28ae 100644 --- a/protocols/rdp/src/client.c +++ b/protocols/rdp/src/client.c @@ -94,10 +94,12 @@ const char* GUAC_CLIENT_ARGS[] = { "disable-audio", "console", "console-audio", + "layout", NULL }; -enum ARGS_IDX { +enum RDP_ARGS_IDX { + IDX_HOSTNAME, IDX_PORT, IDX_DOMAIN, @@ -110,7 +112,7 @@ enum ARGS_IDX { IDX_DISABLE_AUDIO, IDX_CONSOLE, IDX_CONSOLE_AUDIO, - + IDX_LAYOUT, RDP_ARGS_COUNT }; @@ -337,10 +339,8 @@ int guac_client_init(guac_client* client, int argc, char** argv) { * Selected server-side keymap. Client will be assumed to also use this * keymap. Keys will be sent to server based on client input on a * best-effort basis. - * - * Currently hard-coded to en-us-qwerty. */ - const guac_rdp_keymap* chosen_keymap = &guac_rdp_keymap_en_us; + const guac_rdp_keymap* chosen_keymap; if (argc < RDP_ARGS_COUNT) { @@ -522,6 +522,21 @@ int guac_client_init(guac_client* client, int argc, char** argv) { client->data = guac_client_data; ((rdp_freerdp_context*) rdp_inst->context)->client = client; + /* Pick keymap based on argument */ + if (argv[IDX_LAYOUT][0] != '\0') { + + /* US English Qwerty */ + if (strcmp("en-us-qwerty", argv[IDX_LAYOUT]) == 0) + chosen_keymap = &rdp_guac_keymap_en_us; + + /* US English Qwerty */ + if (strcmp("en-us-qwerty", argv[IDX_LAYOUT]) == 0) + chosen_keymap = &rdp_guac_keymap_en_us; + + else + chosen_keymap = &rdp_guac_keymap_en_us; + } + /* Load keymap into client */ __guac_rdp_client_load_keymap(client, chosen_keymap); diff --git a/protocols/rdp/src/rdp_keymap_de_de.c b/protocols/rdp/src/rdp_keymap_de_de.c new file mode 100644 index 00000000..521de9da --- /dev/null +++ b/protocols/rdp/src/rdp_keymap_de_de.c @@ -0,0 +1,441 @@ + +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is libguac-client-rdp. + * + * The Initial Developer of the Original Code is + * Michael Jumper. + * Portions created by the Initial Developer are Copyright (C) 2011 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#include + +#ifdef HAVE_FREERDP_LOCALE_KEYBOARD_H +#include +#else +#include +#endif + +#include "rdp_keymap.h" + +static guac_rdp_keysym_desc __guac_rdp_keymap_mapping[] = { + + /* space */ + { .keysym = 0x0020, .scancode = 0x39 }, + + /* exclam */ + { .keysym = 0x0021, .scancode = 0x02, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* quotedbl */ + { .keysym = 0x0022, .scancode = 0x28, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* numbersign */ + { .keysym = 0x0023, .scancode = 0x04, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* dollar */ + { .keysym = 0x0024, .scancode = 0x05, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* percent */ + { .keysym = 0x0025, .scancode = 0x06, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* ampersand */ + { .keysym = 0x0026, .scancode = 0x08, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* quoteright */ + { .keysym = 0x0027, .scancode = 0x28 }, + + /* parenleft */ + { .keysym = 0x0028, .scancode = 0x0A, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* parenright */ + { .keysym = 0x0029, .scancode = 0x0B, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* asterisk */ + { .keysym = 0x002a, .scancode = 0x09, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* plus */ + { .keysym = 0x002b, .scancode = 0x0D, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* comma */ + { .keysym = 0x002c, .scancode = 0x33, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* minus */ + { .keysym = 0x002d, .scancode = 0x0C, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* period */ + { .keysym = 0x002e, .scancode = 0x34, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* slash */ + { .keysym = 0x002f, .scancode = 0x35, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* 0 */ + { .keysym = 0x0030, .scancode = 0x0B, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* 1 */ + { .keysym = 0x0031, .scancode = 0x02, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* 2 */ + { .keysym = 0x0032, .scancode = 0x03, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* 3 */ + { .keysym = 0x0033, .scancode = 0x04, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* 4 */ + { .keysym = 0x0034, .scancode = 0x05, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* 5 */ + { .keysym = 0x0035, .scancode = 0x06, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* 6 */ + { .keysym = 0x0036, .scancode = 0x07, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* 7 */ + { .keysym = 0x0037, .scancode = 0x08, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* 8 */ + { .keysym = 0x0038, .scancode = 0x09, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* 9 */ + { .keysym = 0x0039, .scancode = 0x0A, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* colon */ + { .keysym = 0x003a, .scancode = 0x27, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* semicolon */ + { .keysym = 0x003b, .scancode = 0x27, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* less */ + { .keysym = 0x003c, .scancode = 0x33, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* equal */ + { .keysym = 0x003d, .scancode = 0x0D, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* greater */ + { .keysym = 0x003e, .scancode = 0x34, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* question */ + { .keysym = 0x003f, .scancode = 0x35, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* at */ + { .keysym = 0x0040, .scancode = 0x03, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* A */ + { .keysym = 0x0041, .scancode = 0x1E, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* B */ + { .keysym = 0x0042, .scancode = 0x30, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* C */ + { .keysym = 0x0043, .scancode = 0x2E, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* D */ + { .keysym = 0x0044, .scancode = 0x20, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* E */ + { .keysym = 0x0045, .scancode = 0x12, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* F */ + { .keysym = 0x0046, .scancode = 0x21, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* G */ + { .keysym = 0x0047, .scancode = 0x22, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* H */ + { .keysym = 0x0048, .scancode = 0x23, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* I */ + { .keysym = 0x0049, .scancode = 0x17, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* J */ + { .keysym = 0x004a, .scancode = 0x24, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* K */ + { .keysym = 0x004b, .scancode = 0x25, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* L */ + { .keysym = 0x004c, .scancode = 0x26, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* M */ + { .keysym = 0x004d, .scancode = 0x32, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* N */ + { .keysym = 0x004e, .scancode = 0x31, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* O */ + { .keysym = 0x004f, .scancode = 0x18, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* P */ + { .keysym = 0x0050, .scancode = 0x19, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* Q */ + { .keysym = 0x0051, .scancode = 0x10, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* R */ + { .keysym = 0x0052, .scancode = 0x13, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* S */ + { .keysym = 0x0053, .scancode = 0x1F, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* T */ + { .keysym = 0x0054, .scancode = 0x14, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* U */ + { .keysym = 0x0055, .scancode = 0x16, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* V */ + { .keysym = 0x0056, .scancode = 0x2F, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* W */ + { .keysym = 0x0057, .scancode = 0x11, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* X */ + { .keysym = 0x0058, .scancode = 0x2D, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* Y */ + { .keysym = 0x0059, .scancode = 0x15, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* Z */ + { .keysym = 0x005a, .scancode = 0x2C, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* bracketleft */ + { .keysym = 0x005b, .scancode = 0x1A, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* backslash */ + { .keysym = 0x005c, .scancode = 0x2B, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* bracketright */ + { .keysym = 0x005d, .scancode = 0x1B, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* asciicircum */ + { .keysym = 0x005e, .scancode = 0x07, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* underscore */ + { .keysym = 0x005f, .scancode = 0x0C, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* quoteleft */ + { .keysym = 0x0060, .scancode = 0x29, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* a */ + { .keysym = 0x0061, .scancode = 0x1E, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* b */ + { .keysym = 0x0062, .scancode = 0x30, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* c */ + { .keysym = 0x0063, .scancode = 0x2E, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* d */ + { .keysym = 0x0064, .scancode = 0x20, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* e */ + { .keysym = 0x0065, .scancode = 0x12, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* f */ + { .keysym = 0x0066, .scancode = 0x21, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* g */ + { .keysym = 0x0067, .scancode = 0x22, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* h */ + { .keysym = 0x0068, .scancode = 0x23, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* i */ + { .keysym = 0x0069, .scancode = 0x17, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* j */ + { .keysym = 0x006a, .scancode = 0x24, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* k */ + { .keysym = 0x006b, .scancode = 0x25, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* l */ + { .keysym = 0x006c, .scancode = 0x26, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* m */ + { .keysym = 0x006d, .scancode = 0x32, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* n */ + { .keysym = 0x006e, .scancode = 0x31, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* o */ + { .keysym = 0x006f, .scancode = 0x18, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* p */ + { .keysym = 0x0070, .scancode = 0x19, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* q */ + { .keysym = 0x0071, .scancode = 0x10, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* r */ + { .keysym = 0x0072, .scancode = 0x13, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* s */ + { .keysym = 0x0073, .scancode = 0x1F, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* t */ + { .keysym = 0x0074, .scancode = 0x14, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* u */ + { .keysym = 0x0075, .scancode = 0x16, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* v */ + { .keysym = 0x0076, .scancode = 0x2F, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* w */ + { .keysym = 0x0077, .scancode = 0x11, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* x */ + { .keysym = 0x0078, .scancode = 0x2D, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* y */ + { .keysym = 0x0079, .scancode = 0x15, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* z */ + { .keysym = 0x007a, .scancode = 0x2C, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* braceleft */ + { .keysym = 0x007b, .scancode = 0x1A, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* bar */ + { .keysym = 0x007c, .scancode = 0x2B, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* braceright */ + { .keysym = 0x007d, .scancode = 0x1B, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* asciitilde */ + { .keysym = 0x007e, .scancode = 0x29, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + {0} + +}; + +const guac_rdp_keymap guac_rdp_keymap_de_de = { + + .name = "de-de-qwertz", + + .parent = &guac_rdp_keymap_base, + .mapping = __guac_rdp_keymap_mapping, + .freerdp_keyboard_layout = KBD_GERMAN + +}; + From b736f13d32a285d5f5b0d93df4e25b8143291f23 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Tue, 26 Mar 2013 13:22:56 -0700 Subject: [PATCH 230/253] Merge keymap source provided by Trac use on #141. --- protocols/rdp/src/rdp_keymap_de_de.c | 109 +++++++++++++++++---------- 1 file changed, 70 insertions(+), 39 deletions(-) diff --git a/protocols/rdp/src/rdp_keymap_de_de.c b/protocols/rdp/src/rdp_keymap_de_de.c index 521de9da..1458b22f 100644 --- a/protocols/rdp/src/rdp_keymap_de_de.c +++ b/protocols/rdp/src/rdp_keymap_de_de.c @@ -55,12 +55,12 @@ static guac_rdp_keysym_desc __guac_rdp_keymap_mapping[] = { .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* quotedbl */ - { .keysym = 0x0022, .scancode = 0x28, + { .keysym = 0x0022, .scancode = 0x03, .set_keysyms = GUAC_KEYSYMS_SHIFT }, - + /* numbersign */ - { .keysym = 0x0023, .scancode = 0x04, - .set_keysyms = GUAC_KEYSYMS_SHIFT }, + { .keysym = 0x0023, .scancode = 0x2b, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, /* dollar */ { .keysym = 0x0024, .scancode = 0x05, @@ -71,34 +71,35 @@ static guac_rdp_keysym_desc __guac_rdp_keymap_mapping[] = { .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* ampersand */ - { .keysym = 0x0026, .scancode = 0x08, + { .keysym = 0x0026, .scancode = 0x07, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* quoteright */ - { .keysym = 0x0027, .scancode = 0x28 }, + + { .keysym = 0x0027, .scancode = 0x2b }, /* parenleft */ - { .keysym = 0x0028, .scancode = 0x0A, + { .keysym = 0x0028, .scancode = 0x09, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* parenright */ - { .keysym = 0x0029, .scancode = 0x0B, + { .keysym = 0x0029, .scancode = 0x0A, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* asterisk */ - { .keysym = 0x002a, .scancode = 0x09, + { .keysym = 0x002a, .scancode = 0x1b, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* plus */ - { .keysym = 0x002b, .scancode = 0x0D, - .set_keysyms = GUAC_KEYSYMS_SHIFT }, + { .keysym = 0x002b, .scancode = 0x1b, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, /* comma */ { .keysym = 0x002c, .scancode = 0x33, .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, /* minus */ - { .keysym = 0x002d, .scancode = 0x0C, + { .keysym = 0x002d, .scancode = 0x35, .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, /* period */ @@ -106,8 +107,8 @@ static guac_rdp_keysym_desc __guac_rdp_keymap_mapping[] = { .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, /* slash */ - { .keysym = 0x002f, .scancode = 0x35, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + { .keysym = 0x002f, .scancode = 0x08, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* 0 */ { .keysym = 0x0030, .scancode = 0x0B, @@ -150,27 +151,27 @@ static guac_rdp_keysym_desc __guac_rdp_keymap_mapping[] = { .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, /* colon */ - { .keysym = 0x003a, .scancode = 0x27, + { .keysym = 0x003a, .scancode = 0x34, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* semicolon */ - { .keysym = 0x003b, .scancode = 0x27, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, - - /* less */ - { .keysym = 0x003c, .scancode = 0x33, + { .keysym = 0x003b, .scancode = 0x33, .set_keysyms = GUAC_KEYSYMS_SHIFT }, - /* equal */ - { .keysym = 0x003d, .scancode = 0x0D, + /* less ??*/ + { .keysym = 0x003c, .scancode = 0x56, .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, - /* greater */ - { .keysym = 0x003e, .scancode = 0x34, + /* equal */ + { .keysym = 0x003d, .scancode = 0x0B, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* greater ??*/ + { .keysym = 0x003e, .scancode = 0x56, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* question */ - { .keysym = 0x003f, .scancode = 0x35, + { .keysym = 0x003f, .scancode = 0x0c, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* at */ @@ -274,35 +275,35 @@ static guac_rdp_keysym_desc __guac_rdp_keymap_mapping[] = { .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* Y */ - { .keysym = 0x0059, .scancode = 0x15, + { .keysym = 0x0059, .scancode = 0x2c, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* Z */ - { .keysym = 0x005a, .scancode = 0x2C, + { .keysym = 0x005a, .scancode = 0x15, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* bracketleft */ - { .keysym = 0x005b, .scancode = 0x1A, + { .keysym = 0x005b, .scancode = 0x09, .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, /* backslash */ - { .keysym = 0x005c, .scancode = 0x2B, + { .keysym = 0x005c, .scancode = 0x0c, .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, /* bracketright */ - { .keysym = 0x005d, .scancode = 0x1B, + { .keysym = 0x005d, .scancode = 0x0a, .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, /* asciicircum */ - { .keysym = 0x005e, .scancode = 0x07, + { .keysym = 0x005e, .scancode = 0x29, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* underscore */ - { .keysym = 0x005f, .scancode = 0x0C, + { .keysym = 0x005f, .scancode = 0x35, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* quoteleft */ - { .keysym = 0x0060, .scancode = 0x29, + { .keysym = 0x0060, .scancode = 0x2f, .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, /* a */ @@ -402,27 +403,57 @@ static guac_rdp_keysym_desc __guac_rdp_keymap_mapping[] = { .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, /* y */ - { .keysym = 0x0079, .scancode = 0x15, + { .keysym = 0x0079, .scancode = 0x2c, .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, /* z */ - { .keysym = 0x007a, .scancode = 0x2C, + { .keysym = 0x007a, .scancode = 0x15, .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + /* german umlauts ä*/ + + { .keysym = 0x00e4, .scancode = 0x28, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + { .keysym = 0x00c4, .scancode = 0x28, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* ö */ + { .keysym = 0x00f6, .scancode = 0x27, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + { .keysym = 0x00d6, .scancode = 0x27, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* ü */ + { .keysym = 0x00fc, .scancode = 0x1a, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + { .keysym = 0x00dc, .scancode = 0x1a, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* ß */ + { .keysym = 0x00df, .scancode = 0x0c, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + + /* braceleft */ - { .keysym = 0x007b, .scancode = 0x1A, + { .keysym = 0x007b, .scancode = 0x08, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* bar */ { .keysym = 0x007c, .scancode = 0x2B, - .set_keysyms = GUAC_KEYSYMS_SHIFT }, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* braceright */ - { .keysym = 0x007d, .scancode = 0x1B, + { .keysym = 0x007d, .scancode = 0x0b, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* asciitilde */ - { .keysym = 0x007e, .scancode = 0x29, + { .keysym = 0x007e, .scancode = 0x1b, .set_keysyms = GUAC_KEYSYMS_SHIFT }, {0} From 7ba047f5a8112c1eb094eef7043c3704abdaf40e Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Fri, 29 Mar 2013 13:08:14 -0700 Subject: [PATCH 231/253] Add French and German keymaps to build, add failsafe keymap, parse layout parameter, cleanup contributed keymaps, add missing declarations. --- protocols/rdp/Makefile.am | 30 ++++++------ protocols/rdp/include/rdp_keymap.h | 28 +++++++++-- protocols/rdp/src/client.c | 33 ++++++++++--- protocols/rdp/src/rdp_keymap.c | 2 + protocols/rdp/src/rdp_keymap_de_de.c | 2 +- protocols/rdp/src/rdp_keymap_failsafe.c | 63 +++++++++++++++++++++++++ protocols/rdp/src/rdp_keymap_fr_fr.c | 12 ++--- 7 files changed, 136 insertions(+), 34 deletions(-) create mode 100644 protocols/rdp/src/rdp_keymap_failsafe.c diff --git a/protocols/rdp/Makefile.am b/protocols/rdp/Makefile.am index ccfae88a..595691f8 100644 --- a/protocols/rdp/Makefile.am +++ b/protocols/rdp/Makefile.am @@ -43,20 +43,22 @@ lib_LTLIBRARIES = libguac-client-rdp.la freerdp_LTLIBRARIES = guac_rdpsnd.la libguac_client_rdp_la_SOURCES = \ - $(OGG_SOURCES) \ - src/audio.c \ - src/client.c \ - src/default_pointer.c \ - src/guac_handlers.c \ - src/rdp_bitmap.c \ - src/rdp_cliprdr.c \ - src/rdp_gdi.c \ - src/rdp_glyph.c \ - src/rdp_keymap_base.c \ - src/rdp_keymap.c \ - src/rdp_keymap_de_de.c \ - src/rdp_keymap_en_us.c \ - src/rdp_pointer.c \ + $(OGG_SOURCES) \ + src/audio.c \ + src/client.c \ + src/default_pointer.c \ + src/guac_handlers.c \ + src/rdp_bitmap.c \ + src/rdp_cliprdr.c \ + src/rdp_gdi.c \ + src/rdp_glyph.c \ + src/rdp_keymap_base.c \ + src/rdp_keymap.c \ + src/rdp_keymap_de_de.c \ + src/rdp_keymap_failsafe.c \ + src/rdp_keymap_fr_fr.c \ + src/rdp_keymap_en_us.c \ + src/rdp_pointer.c \ src/wav_encoder.c guac_rdpsnd_la_SOURCES = \ diff --git a/protocols/rdp/include/rdp_keymap.h b/protocols/rdp/include/rdp_keymap.h index bb26bc2f..f9aa7ecd 100644 --- a/protocols/rdp/include/rdp_keymap.h +++ b/protocols/rdp/include/rdp_keymap.h @@ -122,17 +122,27 @@ typedef guac_rdp_keysym_desc guac_rdp_static_keymap[256][256]; typedef int guac_rdp_keysym_state_map[256][256]; /** - * Map of X11 keysyms to RDP scancodes (US English). + * US English keymap. */ extern const guac_rdp_keymap guac_rdp_keymap_en_us; /** - * Map of X11 keysyms to RDP scancodes (German). + * German keymap. */ extern const guac_rdp_keymap guac_rdp_keymap_de_de; /** - * Map of X11 keysyms to RDP scancodes (common non-printable keys). + * French keymap. + */ +extern const guac_rdp_keymap guac_rdp_keymap_fr_fr; + +/** + * Failsafe (Unicode events for all printable characters) keymap. + */ +extern const guac_rdp_keymap guac_rdp_keymap_failsafe; + +/** + * Common, base keymap for non-printable keys. */ extern const guac_rdp_keymap guac_rdp_keymap_base; @@ -172,6 +182,16 @@ extern const int GUAC_KEYSYMS_ALT[]; */ extern const int GUAC_KEYSYMS_ALL_ALT[]; +/** + * Keysym string containing both "alt" keys. + */ +extern const int GUAC_KEYSYMS_ALL_ALT[]; + +/** + * Keysym string containing the left "alt" and left "ctrl" keys + */ +extern const int GUAC_KEYSYMS_CTRL_ALT[]; + /** * Keysym string containing all modifier keys. */ @@ -180,7 +200,7 @@ extern const int GUAC_KEYSYMS_ALL_MODIFIERS[]; /** * NULL-terminated array of all keymaps. */ -extern const guac_rpd_keymap* GUAC_KEYMAPS[]; +extern const guac_rdp_keymap* GUAC_KEYMAPS[]; #endif diff --git a/protocols/rdp/src/client.c b/protocols/rdp/src/client.c index 66db28ae..842a9bd4 100644 --- a/protocols/rdp/src/client.c +++ b/protocols/rdp/src/client.c @@ -527,16 +527,37 @@ int guac_client_init(guac_client* client, int argc, char** argv) { /* US English Qwerty */ if (strcmp("en-us-qwerty", argv[IDX_LAYOUT]) == 0) - chosen_keymap = &rdp_guac_keymap_en_us; + chosen_keymap = &guac_rdp_keymap_en_us; - /* US English Qwerty */ - if (strcmp("en-us-qwerty", argv[IDX_LAYOUT]) == 0) - chosen_keymap = &rdp_guac_keymap_en_us; + /* German Qwertz */ + else if (strcmp("de-de-qwertz", argv[IDX_LAYOUT]) == 0) + chosen_keymap = &guac_rdp_keymap_de_de; + + /* French Azerty */ + else if (strcmp("fr-fr-azerty", argv[IDX_LAYOUT]) == 0) + chosen_keymap = &guac_rdp_keymap_fr_fr; + + /* Failsafe (Unicode) keymap */ + else if (strcmp("failsafe", argv[IDX_LAYOUT]) == 0) + chosen_keymap = &guac_rdp_keymap_failsafe; + + /* If keymap unknown, resort to failsafe */ + else { + + guac_client_log_error(client, + "Unknown layout \"%s\". Using the failsafe layout instead.", + argv[IDX_LAYOUT]); + + chosen_keymap = &guac_rdp_keymap_failsafe; + + } - else - chosen_keymap = &rdp_guac_keymap_en_us; } + /* If no keymap requested, assume US */ + else + chosen_keymap = &guac_rdp_keymap_en_us; + /* Load keymap into client */ __guac_rdp_client_load_keymap(client, chosen_keymap); diff --git a/protocols/rdp/src/rdp_keymap.c b/protocols/rdp/src/rdp_keymap.c index 8391754f..c5a79c02 100644 --- a/protocols/rdp/src/rdp_keymap.c +++ b/protocols/rdp/src/rdp_keymap.c @@ -46,6 +46,8 @@ const int GUAC_KEYSYMS_ALL_CTRL[] = {0xFFE3, 0xFFE4, 0}; const int GUAC_KEYSYMS_ALT[] = {0xFFE9, 0}; const int GUAC_KEYSYMS_ALL_ALT[] = {0xFFE9, 0xFFEA, 0}; +const int GUAC_KEYSYMS_CTRL_ALT[] = {0xFFE3, 0xFFE9, 0}; + const int GUAC_KEYSYMS_ALL_MODIFIERS[] = { 0xFFE1, 0xFFE2, /* Left and right shift */ 0xFFE3, 0xFFE4, /* Left and right control */ diff --git a/protocols/rdp/src/rdp_keymap_de_de.c b/protocols/rdp/src/rdp_keymap_de_de.c index 1458b22f..3ca6708a 100644 --- a/protocols/rdp/src/rdp_keymap_de_de.c +++ b/protocols/rdp/src/rdp_keymap_de_de.c @@ -57,7 +57,7 @@ static guac_rdp_keysym_desc __guac_rdp_keymap_mapping[] = { /* quotedbl */ { .keysym = 0x0022, .scancode = 0x03, .set_keysyms = GUAC_KEYSYMS_SHIFT }, - + /* numbersign */ { .keysym = 0x0023, .scancode = 0x2b, .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, diff --git a/protocols/rdp/src/rdp_keymap_failsafe.c b/protocols/rdp/src/rdp_keymap_failsafe.c new file mode 100644 index 00000000..e4ecc67c --- /dev/null +++ b/protocols/rdp/src/rdp_keymap_failsafe.c @@ -0,0 +1,63 @@ + +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is libguac-client-rdp. + * + * The Initial Developer of the Original Code is + * Michael Jumper. + * Portions created by the Initial Developer are Copyright (C) 2011 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#include + +#ifdef HAVE_FREERDP_LOCALE_KEYBOARD_H +#include +#else +#include +#endif + +#include "rdp_keymap.h" + +static guac_rdp_keysym_desc __guac_rdp_keymap_mapping[] = { + + {0} + +}; + +const guac_rdp_keymap guac_rdp_keymap_failsafe = { + + .name = "failsafe", + + .parent = &guac_rdp_keymap_base, + .mapping = __guac_rdp_keymap_mapping, + .freerdp_keyboard_layout = KBD_US + +}; + diff --git a/protocols/rdp/src/rdp_keymap_fr_fr.c b/protocols/rdp/src/rdp_keymap_fr_fr.c index 5df4692b..64de29eb 100644 --- a/protocols/rdp/src/rdp_keymap_fr_fr.c +++ b/protocols/rdp/src/rdp_keymap_fr_fr.c @@ -48,12 +48,6 @@ #include "rdp_keymap.h" -/* - This array is order by .keysym - the .keysym is the ASCII value - the .scancode the key scancode - -*/ static guac_rdp_keysym_desc __guac_rdp_keymap_mapping[] = { /* space */ @@ -85,7 +79,7 @@ static guac_rdp_keysym_desc __guac_rdp_keymap_mapping[] = { /* quoteright */ { .keysym = 0x0027, .scancode = 0x05, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, /* parenleft */ { .keysym = 0x0028, .scancode = 0x06, @@ -477,7 +471,7 @@ static guac_rdp_keysym_desc __guac_rdp_keymap_mapping[] = { /* ugrave */ { .keysym = 0x00f9, .scancode = 0x28, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, /* euro */ { .keysym = 0x10020ac, .scancode = 0x12, @@ -487,7 +481,7 @@ static guac_rdp_keysym_desc __guac_rdp_keymap_mapping[] = { }; -guac_rdp_keymap guac_rdp_keymap_fr_fr = { +const guac_rdp_keymap guac_rdp_keymap_fr_fr = { .name = "fr-fr-azerty", From 6bf9a0a9e045b22acff2655dfff5fbefc032d1bc Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Fri, 29 Mar 2013 13:19:25 -0700 Subject: [PATCH 232/253] Fix comments. --- protocols/rdp/src/rdp_keymap_fr_fr.c | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/protocols/rdp/src/rdp_keymap_fr_fr.c b/protocols/rdp/src/rdp_keymap_fr_fr.c index 64de29eb..61b593a8 100644 --- a/protocols/rdp/src/rdp_keymap_fr_fr.c +++ b/protocols/rdp/src/rdp_keymap_fr_fr.c @@ -20,7 +20,6 @@ * the Initial Developer. All Rights Reserved. * * Contributor(s): - * Matt Hortman * Alexandre Devely * * Alternatively, the contents of this file may be used under the terms of @@ -429,19 +428,19 @@ static guac_rdp_keysym_desc __guac_rdp_keymap_mapping[] = { { .keysym = 0x007e, .scancode = 0x03, .set_keysyms = GUAC_KEYSYMS_CTRL_ALT }, - /* pound; */ + /* pound */ { .keysym = 0x00a3, .scancode = 0x1b, .set_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, - /* curren; */ + /* currency */ { .keysym = 0x00a4, .scancode = 0x1b, .set_keysyms = GUAC_KEYSYMS_CTRL_ALT }, - /* sect; */ + /* section */ { .keysym = 0x00a7, .scancode = 0x35, .set_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, - /* deg */ + /* degree */ { .keysym = 0x00b0, .scancode = 0x0c, .set_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, @@ -449,11 +448,11 @@ static guac_rdp_keysym_desc __guac_rdp_keymap_mapping[] = { { .keysym = 0x00b5, .scancode = 0x2b, .set_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, - /* agrave */ + /* a + grave */ { .keysym = 0x00e0, .scancode = 0x0b, .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, - /* auml */ + /* a + umlaut */ { .keysym = 0x00e4, .scancode = 0x1a, .set_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, @@ -461,17 +460,17 @@ static guac_rdp_keysym_desc __guac_rdp_keymap_mapping[] = { { .keysym = 0x00e7, .scancode = 0x0a, .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, - /* egrave */ + /* e + grave */ { .keysym = 0x00e8, .scancode = 0x08, .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, - /* eacute */ + /* e + acute */ { .keysym = 0x00e9, .scancode = 0x03, .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, - /* ugrave */ + /* u + grave */ { .keysym = 0x00f9, .scancode = 0x28, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, /* euro */ { .keysym = 0x10020ac, .scancode = 0x12, From 1ce5e859395006070f969fde5ea4c6174435f7c8 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Fri, 29 Mar 2013 13:34:45 -0700 Subject: [PATCH 233/253] Rename "layout" to "server-layout" to help reduce confusion. --- protocols/rdp/src/client.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/protocols/rdp/src/client.c b/protocols/rdp/src/client.c index 842a9bd4..d59db073 100644 --- a/protocols/rdp/src/client.c +++ b/protocols/rdp/src/client.c @@ -94,7 +94,7 @@ const char* GUAC_CLIENT_ARGS[] = { "disable-audio", "console", "console-audio", - "layout", + "server-layout", NULL }; @@ -112,7 +112,7 @@ enum RDP_ARGS_IDX { IDX_DISABLE_AUDIO, IDX_CONSOLE, IDX_CONSOLE_AUDIO, - IDX_LAYOUT, + IDX_SERVER_LAYOUT, RDP_ARGS_COUNT }; @@ -523,22 +523,22 @@ int guac_client_init(guac_client* client, int argc, char** argv) { ((rdp_freerdp_context*) rdp_inst->context)->client = client; /* Pick keymap based on argument */ - if (argv[IDX_LAYOUT][0] != '\0') { + if (argv[IDX_SERVER_LAYOUT][0] != '\0') { /* US English Qwerty */ - if (strcmp("en-us-qwerty", argv[IDX_LAYOUT]) == 0) + if (strcmp("en-us-qwerty", argv[IDX_SERVER_LAYOUT]) == 0) chosen_keymap = &guac_rdp_keymap_en_us; /* German Qwertz */ - else if (strcmp("de-de-qwertz", argv[IDX_LAYOUT]) == 0) + else if (strcmp("de-de-qwertz", argv[IDX_SERVER_LAYOUT]) == 0) chosen_keymap = &guac_rdp_keymap_de_de; /* French Azerty */ - else if (strcmp("fr-fr-azerty", argv[IDX_LAYOUT]) == 0) + else if (strcmp("fr-fr-azerty", argv[IDX_SERVER_LAYOUT]) == 0) chosen_keymap = &guac_rdp_keymap_fr_fr; /* Failsafe (Unicode) keymap */ - else if (strcmp("failsafe", argv[IDX_LAYOUT]) == 0) + else if (strcmp("failsafe", argv[IDX_SERVER_LAYOUT]) == 0) chosen_keymap = &guac_rdp_keymap_failsafe; /* If keymap unknown, resort to failsafe */ @@ -546,7 +546,7 @@ int guac_client_init(guac_client* client, int argc, char** argv) { guac_client_log_error(client, "Unknown layout \"%s\". Using the failsafe layout instead.", - argv[IDX_LAYOUT]); + argv[IDX_SERVER_LAYOUT]); chosen_keymap = &guac_rdp_keymap_failsafe; From 80f0b7e1e1687a8dbcde36372d2a09b9363ed102 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Fri, 29 Mar 2013 18:27:27 -0700 Subject: [PATCH 234/253] Remove Unicode translation warnings, as the functionality is intentional. --- protocols/rdp/src/guac_handlers.c | 6 ------ 1 file changed, 6 deletions(-) diff --git a/protocols/rdp/src/guac_handlers.c b/protocols/rdp/src/guac_handlers.c index 3880b5a9..8640f31c 100644 --- a/protocols/rdp/src/guac_handlers.c +++ b/protocols/rdp/src/guac_handlers.c @@ -361,9 +361,6 @@ int __guac_rdp_send_keysym(guac_client* client, int keysym, int pressed) { return 0; } - guac_client_log_info(client, "Translated keysym 0x%x to U+%04X", - keysym, codepoint); - pthread_mutex_lock(&(guac_client_data->rdp_lock)); /* Send Unicode event */ @@ -375,9 +372,6 @@ int __guac_rdp_send_keysym(guac_client* client, int keysym, int pressed) { } - else - guac_client_log_info(client, "Ignoring key release (Unicode event)"); - return 0; } From 3e4199f90a873fdff24a391ef0ea2c01e961c428 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Fri, 29 Mar 2013 22:04:46 -0700 Subject: [PATCH 235/253] Add missing AUTHORS (apologies to Alex DEVELY for mispelling his last name in his commit), clean up German keymap. --- protocols/rdp/AUTHORS | 2 ++ protocols/rdp/src/rdp_keymap_de_de.c | 13 ++++--------- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/protocols/rdp/AUTHORS b/protocols/rdp/AUTHORS index 7c02bb1d..e62be891 100644 --- a/protocols/rdp/AUTHORS +++ b/protocols/rdp/AUTHORS @@ -2,3 +2,5 @@ Michael Jumper Matt Hortman Jocelyn Delalande David Lechevalier +Alexandre Devely +Laurent Meunier diff --git a/protocols/rdp/src/rdp_keymap_de_de.c b/protocols/rdp/src/rdp_keymap_de_de.c index 3ca6708a..70417a1a 100644 --- a/protocols/rdp/src/rdp_keymap_de_de.c +++ b/protocols/rdp/src/rdp_keymap_de_de.c @@ -158,7 +158,7 @@ static guac_rdp_keysym_desc __guac_rdp_keymap_mapping[] = { { .keysym = 0x003b, .scancode = 0x33, .set_keysyms = GUAC_KEYSYMS_SHIFT }, - /* less ??*/ + /* less */ { .keysym = 0x003c, .scancode = 0x56, .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, @@ -166,7 +166,7 @@ static guac_rdp_keysym_desc __guac_rdp_keymap_mapping[] = { { .keysym = 0x003d, .scancode = 0x0B, .set_keysyms = GUAC_KEYSYMS_SHIFT }, - /* greater ??*/ + /* greater */ { .keysym = 0x003e, .scancode = 0x56, .set_keysyms = GUAC_KEYSYMS_SHIFT }, @@ -410,8 +410,7 @@ static guac_rdp_keysym_desc __guac_rdp_keymap_mapping[] = { { .keysym = 0x007a, .scancode = 0x15, .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, - /* german umlauts ä*/ - + /* ä */ { .keysym = 0x00e4, .scancode = 0x28, .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, @@ -425,7 +424,7 @@ static guac_rdp_keysym_desc __guac_rdp_keymap_mapping[] = { { .keysym = 0x00d6, .scancode = 0x27, .set_keysyms = GUAC_KEYSYMS_SHIFT }, - /* ü */ + /* ü */ { .keysym = 0x00fc, .scancode = 0x1a, .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, @@ -436,8 +435,6 @@ static guac_rdp_keysym_desc __guac_rdp_keymap_mapping[] = { { .keysym = 0x00df, .scancode = 0x0c, .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, - - /* braceleft */ { .keysym = 0x007b, .scancode = 0x08, .set_keysyms = GUAC_KEYSYMS_SHIFT }, @@ -446,8 +443,6 @@ static guac_rdp_keysym_desc __guac_rdp_keymap_mapping[] = { { .keysym = 0x007c, .scancode = 0x2B, .set_keysyms = GUAC_KEYSYMS_SHIFT }, - - /* braceright */ { .keysym = 0x007d, .scancode = 0x0b, .set_keysyms = GUAC_KEYSYMS_SHIFT }, From 5427c152ba5c32ba64d064e5cc3d7ab4c5ade246 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Wed, 8 May 2013 14:21:04 -0700 Subject: [PATCH 236/253] Fix German keymap, add right/left ctrl/alt keysyms. --- protocols/rdp/src/rdp_keymap.c | 2 +- protocols/rdp/src/rdp_keymap_base.c | 4 +- protocols/rdp/src/rdp_keymap_de_de.c | 131 +++++++++++++++++++-------- 3 files changed, 94 insertions(+), 43 deletions(-) diff --git a/protocols/rdp/src/rdp_keymap.c b/protocols/rdp/src/rdp_keymap.c index c5a79c02..552e473f 100644 --- a/protocols/rdp/src/rdp_keymap.c +++ b/protocols/rdp/src/rdp_keymap.c @@ -51,7 +51,7 @@ const int GUAC_KEYSYMS_CTRL_ALT[] = {0xFFE3, 0xFFE9, 0}; const int GUAC_KEYSYMS_ALL_MODIFIERS[] = { 0xFFE1, 0xFFE2, /* Left and right shift */ 0xFFE3, 0xFFE4, /* Left and right control */ - 0xFFE9, 0xFFEA, /* Left and right alt */ + 0xFFE9, 0xFFEA, /* Left and right alt (AltGr) */ 0 }; diff --git a/protocols/rdp/src/rdp_keymap_base.c b/protocols/rdp/src/rdp_keymap_base.c index 59ed68e9..1dc78183 100644 --- a/protocols/rdp/src/rdp_keymap_base.c +++ b/protocols/rdp/src/rdp_keymap_base.c @@ -176,7 +176,7 @@ static guac_rdp_keysym_desc __guac_rdp_keymap_mapping[] = { { .keysym = 0xffe3, .scancode = 0x1D }, /* Control_R */ - { .keysym = 0xffe4, .scancode = 0x1D }, + { .keysym = 0xffe4, .scancode = 0x9D }, /* Caps_Lock */ { .keysym = 0xffe5, .scancode = 0x3A, @@ -186,7 +186,7 @@ static guac_rdp_keysym_desc __guac_rdp_keymap_mapping[] = { { .keysym = 0xffe9, .scancode = 0x38 }, /* Alt_R */ - { .keysym = 0xffea, .scancode = 0x38 }, + { .keysym = 0xffea, .scancode = 0xB8 }, /* Super_L */ { .keysym = 0xffeb, .scancode = 0x5B, diff --git a/protocols/rdp/src/rdp_keymap_de_de.c b/protocols/rdp/src/rdp_keymap_de_de.c index 70417a1a..6187d060 100644 --- a/protocols/rdp/src/rdp_keymap_de_de.c +++ b/protocols/rdp/src/rdp_keymap_de_de.c @@ -52,131 +52,147 @@ static guac_rdp_keysym_desc __guac_rdp_keymap_mapping[] = { /* exclam */ { .keysym = 0x0021, .scancode = 0x02, + .clear_keysyms = GUAC_KEYSYMS_CTRL_ALT, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* quotedbl */ { .keysym = 0x0022, .scancode = 0x03, + .clear_keysyms = GUAC_KEYSYMS_CTRL_ALT, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* numbersign */ { .keysym = 0x0023, .scancode = 0x2b, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_MODIFIERS }, /* dollar */ { .keysym = 0x0024, .scancode = 0x05, + .clear_keysyms = GUAC_KEYSYMS_CTRL_ALT, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* percent */ { .keysym = 0x0025, .scancode = 0x06, + .clear_keysyms = GUAC_KEYSYMS_CTRL_ALT, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* ampersand */ { .keysym = 0x0026, .scancode = 0x07, + .clear_keysyms = GUAC_KEYSYMS_CTRL_ALT, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* quoteright */ - - { .keysym = 0x0027, .scancode = 0x2b }, + { .keysym = 0x0027, .scancode = 0x2b, + .clear_keysyms = GUAC_KEYSYMS_CTRL_ALT, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* parenleft */ { .keysym = 0x0028, .scancode = 0x09, + .clear_keysyms = GUAC_KEYSYMS_CTRL_ALT, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* parenright */ { .keysym = 0x0029, .scancode = 0x0A, + .clear_keysyms = GUAC_KEYSYMS_CTRL_ALT, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* asterisk */ { .keysym = 0x002a, .scancode = 0x1b, + .clear_keysyms = GUAC_KEYSYMS_CTRL_ALT, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* plus */ { .keysym = 0x002b, .scancode = 0x1b, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_MODIFIERS }, /* comma */ { .keysym = 0x002c, .scancode = 0x33, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_MODIFIERS }, /* minus */ { .keysym = 0x002d, .scancode = 0x35, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_MODIFIERS }, /* period */ { .keysym = 0x002e, .scancode = 0x34, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_MODIFIERS }, /* slash */ { .keysym = 0x002f, .scancode = 0x08, + .clear_keysyms = GUAC_KEYSYMS_CTRL_ALT, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* 0 */ { .keysym = 0x0030, .scancode = 0x0B, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_MODIFIERS }, /* 1 */ { .keysym = 0x0031, .scancode = 0x02, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_MODIFIERS }, /* 2 */ { .keysym = 0x0032, .scancode = 0x03, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_MODIFIERS }, /* 3 */ { .keysym = 0x0033, .scancode = 0x04, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_MODIFIERS }, /* 4 */ { .keysym = 0x0034, .scancode = 0x05, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_MODIFIERS }, /* 5 */ { .keysym = 0x0035, .scancode = 0x06, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_MODIFIERS }, /* 6 */ { .keysym = 0x0036, .scancode = 0x07, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_MODIFIERS }, /* 7 */ { .keysym = 0x0037, .scancode = 0x08, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_MODIFIERS }, /* 8 */ { .keysym = 0x0038, .scancode = 0x09, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_MODIFIERS }, /* 9 */ { .keysym = 0x0039, .scancode = 0x0A, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_MODIFIERS }, /* colon */ { .keysym = 0x003a, .scancode = 0x34, + .clear_keysyms = GUAC_KEYSYMS_CTRL_ALT, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* semicolon */ { .keysym = 0x003b, .scancode = 0x33, + .clear_keysyms = GUAC_KEYSYMS_CTRL_ALT, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* less */ { .keysym = 0x003c, .scancode = 0x56, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_MODIFIERS }, /* equal */ { .keysym = 0x003d, .scancode = 0x0B, - .set_keysyms = GUAC_KEYSYMS_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_CTRL_ALT, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* greater */ { .keysym = 0x003e, .scancode = 0x56, + .clear_keysyms = GUAC_KEYSYMS_CTRL_ALT, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* question */ { .keysym = 0x003f, .scancode = 0x0c, + .clear_keysyms = GUAC_KEYSYMS_CTRL_ALT, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* at */ - { .keysym = 0x0040, .scancode = 0x03, - .set_keysyms = GUAC_KEYSYMS_SHIFT }, + { .keysym = 0x0040, .scancode = 0x10, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT, + .set_keysyms = GUAC_KEYSYMS_CTRL_ALT }, /* A */ { .keysym = 0x0041, .scancode = 0x1E, @@ -196,6 +212,7 @@ static guac_rdp_keysym_desc __guac_rdp_keymap_mapping[] = { /* E */ { .keysym = 0x0045, .scancode = 0x12, + .clear_keysyms = GUAC_KEYSYMS_CTRL_ALT, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* F */ @@ -228,6 +245,7 @@ static guac_rdp_keysym_desc __guac_rdp_keymap_mapping[] = { /* M */ { .keysym = 0x004d, .scancode = 0x32, + .clear_keysyms = GUAC_KEYSYMS_CTRL_ALT, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* N */ @@ -244,6 +262,7 @@ static guac_rdp_keysym_desc __guac_rdp_keymap_mapping[] = { /* Q */ { .keysym = 0x0051, .scancode = 0x10, + .clear_keysyms = GUAC_KEYSYMS_CTRL_ALT, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* R */ @@ -284,28 +303,40 @@ static guac_rdp_keysym_desc __guac_rdp_keymap_mapping[] = { /* bracketleft */ { .keysym = 0x005b, .scancode = 0x09, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT, + .set_keysyms = GUAC_KEYSYMS_CTRL_ALT }, /* backslash */ { .keysym = 0x005c, .scancode = 0x0c, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT, + .set_keysyms = GUAC_KEYSYMS_CTRL_ALT }, /* bracketright */ { .keysym = 0x005d, .scancode = 0x0a, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, - - /* asciicircum */ - { .keysym = 0x005e, .scancode = 0x29, - .set_keysyms = GUAC_KEYSYMS_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT, + .set_keysyms = GUAC_KEYSYMS_CTRL_ALT }, /* underscore */ { .keysym = 0x005f, .scancode = 0x35, + .clear_keysyms = GUAC_KEYSYMS_CTRL_ALT, .set_keysyms = GUAC_KEYSYMS_SHIFT }, - /* quoteleft */ - { .keysym = 0x0060, .scancode = 0x2f, + /* dead grave (WRONG) */ + { .keysym = 0xfe50, .scancode = 0x0d, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* dead acute (WRONG) */ + { .keysym = 0xfe51, .scancode = 0x0d, .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + /* dead circum */ + { .keysym = 0xfe52, .scancode = 0x29, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* degree */ + { .keysym = 0x00b0, .scancode = 0x29, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + /* a */ { .keysym = 0x0061, .scancode = 0x1E, .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, @@ -324,7 +355,7 @@ static guac_rdp_keysym_desc __guac_rdp_keymap_mapping[] = { /* e */ { .keysym = 0x0065, .scancode = 0x12, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_MODIFIERS }, /* f */ { .keysym = 0x0066, .scancode = 0x21, @@ -356,7 +387,7 @@ static guac_rdp_keysym_desc __guac_rdp_keymap_mapping[] = { /* m */ { .keysym = 0x006d, .scancode = 0x32, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_MODIFIERS }, /* n */ { .keysym = 0x006e, .scancode = 0x31, @@ -372,7 +403,7 @@ static guac_rdp_keysym_desc __guac_rdp_keymap_mapping[] = { /* q */ { .keysym = 0x0071, .scancode = 0x10, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_MODIFIERS }, /* r */ { .keysym = 0x0072, .scancode = 0x13, @@ -414,42 +445,62 @@ static guac_rdp_keysym_desc __guac_rdp_keymap_mapping[] = { { .keysym = 0x00e4, .scancode = 0x28, .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + /* Ä */ { .keysym = 0x00c4, .scancode = 0x28, + .clear_keysyms = GUAC_KEYSYMS_CTRL_ALT, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* ö */ { .keysym = 0x00f6, .scancode = 0x27, .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + /* Ö */ { .keysym = 0x00d6, .scancode = 0x27, + .clear_keysyms = GUAC_KEYSYMS_CTRL_ALT, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* ü */ { .keysym = 0x00fc, .scancode = 0x1a, .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + /* Ü */ { .keysym = 0x00dc, .scancode = 0x1a, + .clear_keysyms = GUAC_KEYSYMS_CTRL_ALT, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* ß */ { .keysym = 0x00df, .scancode = 0x0c, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_MODIFIERS }, /* braceleft */ { .keysym = 0x007b, .scancode = 0x08, - .set_keysyms = GUAC_KEYSYMS_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT, + .set_keysyms = GUAC_KEYSYMS_CTRL_ALT }, /* bar */ { .keysym = 0x007c, .scancode = 0x2B, - .set_keysyms = GUAC_KEYSYMS_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT, + .set_keysyms = GUAC_KEYSYMS_CTRL_ALT }, /* braceright */ { .keysym = 0x007d, .scancode = 0x0b, - .set_keysyms = GUAC_KEYSYMS_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT, + .set_keysyms = GUAC_KEYSYMS_CTRL_ALT }, - /* asciitilde */ - { .keysym = 0x007e, .scancode = 0x1b, - .set_keysyms = GUAC_KEYSYMS_SHIFT }, + /* dead tilde */ + { .keysym = 0xfe53, .scancode = 0x1b, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT, + .set_keysyms = GUAC_KEYSYMS_CTRL_ALT }, + + /* euro */ + { .keysym = 0x10020ac, .scancode = 0x12, + .clear_keysyms = GUAC_KEYSYMS_SHIFT, + .set_keysyms = GUAC_KEYSYMS_CTRL_ALT }, + + /* mu */ + { .keysym = 0x00b5, .scancode = 0x32, + .clear_keysyms = GUAC_KEYSYMS_SHIFT, + .set_keysyms = GUAC_KEYSYMS_CTRL_ALT }, {0} From 4cb9b67a6feb88a48558eed0c7f584d4db3e8695 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Wed, 8 May 2013 14:32:13 -0700 Subject: [PATCH 237/253] Allow ctrl/alt on Q/E/M. --- protocols/rdp/src/rdp_keymap_de_de.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/protocols/rdp/src/rdp_keymap_de_de.c b/protocols/rdp/src/rdp_keymap_de_de.c index 6187d060..cc83983a 100644 --- a/protocols/rdp/src/rdp_keymap_de_de.c +++ b/protocols/rdp/src/rdp_keymap_de_de.c @@ -212,7 +212,6 @@ static guac_rdp_keysym_desc __guac_rdp_keymap_mapping[] = { /* E */ { .keysym = 0x0045, .scancode = 0x12, - .clear_keysyms = GUAC_KEYSYMS_CTRL_ALT, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* F */ @@ -245,7 +244,6 @@ static guac_rdp_keysym_desc __guac_rdp_keymap_mapping[] = { /* M */ { .keysym = 0x004d, .scancode = 0x32, - .clear_keysyms = GUAC_KEYSYMS_CTRL_ALT, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* N */ @@ -262,7 +260,6 @@ static guac_rdp_keysym_desc __guac_rdp_keymap_mapping[] = { /* Q */ { .keysym = 0x0051, .scancode = 0x10, - .clear_keysyms = GUAC_KEYSYMS_CTRL_ALT, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* R */ @@ -355,7 +352,7 @@ static guac_rdp_keysym_desc __guac_rdp_keymap_mapping[] = { /* e */ { .keysym = 0x0065, .scancode = 0x12, - .clear_keysyms = GUAC_KEYSYMS_ALL_MODIFIERS }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, /* f */ { .keysym = 0x0066, .scancode = 0x21, @@ -387,7 +384,7 @@ static guac_rdp_keysym_desc __guac_rdp_keymap_mapping[] = { /* m */ { .keysym = 0x006d, .scancode = 0x32, - .clear_keysyms = GUAC_KEYSYMS_ALL_MODIFIERS }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, /* n */ { .keysym = 0x006e, .scancode = 0x31, @@ -403,7 +400,7 @@ static guac_rdp_keysym_desc __guac_rdp_keymap_mapping[] = { /* q */ { .keysym = 0x0071, .scancode = 0x10, - .clear_keysyms = GUAC_KEYSYMS_ALL_MODIFIERS }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, /* r */ { .keysym = 0x0072, .scancode = 0x13, From 7fa531cc2e4a3b8c8e7af69a59c6fa6d2fa4f619 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Wed, 8 May 2013 18:24:46 -0700 Subject: [PATCH 238/253] Allow storage of keysyms in the 0x0100xxxx space. Map AltGr to Ctrl+Alt. --- protocols/rdp/include/rdp_keymap.h | 22 +++++++++++++++++----- protocols/rdp/src/guac_handlers.c | 5 +++-- protocols/rdp/src/rdp_keymap_base.c | 3 ++- 3 files changed, 22 insertions(+), 8 deletions(-) diff --git a/protocols/rdp/include/rdp_keymap.h b/protocols/rdp/include/rdp_keymap.h index f9aa7ecd..3cbb5e3d 100644 --- a/protocols/rdp/include/rdp_keymap.h +++ b/protocols/rdp/include/rdp_keymap.h @@ -114,12 +114,12 @@ struct guac_rdp_keymap { /** * Static mapping from keysyms to scancodes. */ -typedef guac_rdp_keysym_desc guac_rdp_static_keymap[256][256]; +typedef guac_rdp_keysym_desc guac_rdp_static_keymap[0x200][0x100]; /** * Mapping from keysym to current state */ -typedef int guac_rdp_keysym_state_map[256][256]; +typedef int guac_rdp_keysym_state_map[0x200][0x100]; /** * US English keymap. @@ -147,10 +147,22 @@ extern const guac_rdp_keymap guac_rdp_keymap_failsafe; extern const guac_rdp_keymap guac_rdp_keymap_base; /** - * Simple macro for referencing the mapped value of a scancode for a given - * keysym. + * Simple macro for determing whether a keysym can be stored (or retrieved) + * from any keymap. */ -#define GUAC_RDP_KEYSYM_LOOKUP(keysym_mapping, keysym) ((keysym_mapping)[((keysym) & 0xFF00) >> 8][(keysym) & 0xFF]) +#define GUAC_RDP_KEYSYM_STORABLE(keysym) ((keysym) <= 0xFFFF || ((keysym) & 0xFFFF0000) == 0x01000000) + +/** + * Simple macro for referencing the mapped value of a scancode for a given + * keysym. The idea here is that a keysym of the form 0xABCD will map to + * mapping[0xAB][0xCD] while a keysym of the form 0x100ABCD will map to + * mapping[0x1AB][0xCD]. + */ +#define GUAC_RDP_KEYSYM_LOOKUP(keysym_mapping, keysym) ( \ + (keysym_mapping) \ + [(((keysym) & 0xFF00) >> 8) | ((keysym) >> 16)] \ + [(keysym) & 0xFF] \ + ) /** * Keysym string containing only the left "shift" key. diff --git a/protocols/rdp/src/guac_handlers.c b/protocols/rdp/src/guac_handlers.c index 8640f31c..507c8fe5 100644 --- a/protocols/rdp/src/guac_handlers.c +++ b/protocols/rdp/src/guac_handlers.c @@ -301,7 +301,7 @@ int __guac_rdp_send_keysym(guac_client* client, int keysym, int pressed) { freerdp* rdp_inst = guac_client_data->rdp_inst; /* If keysym can be in lookup table */ - if (keysym <= 0xFFFF) { + if (GUAC_RDP_KEYSYM_STORABLE(keysym)) { /* Look up scancode mapping */ const guac_rdp_keysym_desc* keysym_desc = @@ -402,7 +402,8 @@ int rdp_guac_client_key_handler(guac_client* client, int keysym, int pressed) { rdp_guac_client_data* guac_client_data = (rdp_guac_client_data*) client->data; /* Update keysym state */ - GUAC_RDP_KEYSYM_LOOKUP(guac_client_data->keysym_state, keysym) = pressed; + if (GUAC_RDP_KEYSYM_STORABLE(keysym)) + GUAC_RDP_KEYSYM_LOOKUP(guac_client_data->keysym_state, keysym) = pressed; return __guac_rdp_send_keysym(client, keysym, pressed); diff --git a/protocols/rdp/src/rdp_keymap_base.c b/protocols/rdp/src/rdp_keymap_base.c index 1dc78183..8ccb51c2 100644 --- a/protocols/rdp/src/rdp_keymap_base.c +++ b/protocols/rdp/src/rdp_keymap_base.c @@ -186,7 +186,8 @@ static guac_rdp_keysym_desc __guac_rdp_keymap_mapping[] = { { .keysym = 0xffe9, .scancode = 0x38 }, /* Alt_R */ - { .keysym = 0xffea, .scancode = 0xB8 }, + { .keysym = 0xffea, .scancode = 0x38, + .set_keysyms = GUAC_KEYSYMS_CTRL }, /* Super_L */ { .keysym = 0xffeb, .scancode = 0x5B, From eb4ab6d383e371081aaa3d2397d0bcd5a5d30b1a Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Wed, 8 May 2013 18:28:43 -0700 Subject: [PATCH 239/253] Fix bar symbol. --- protocols/rdp/src/rdp_keymap_de_de.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/protocols/rdp/src/rdp_keymap_de_de.c b/protocols/rdp/src/rdp_keymap_de_de.c index cc83983a..57cd2f86 100644 --- a/protocols/rdp/src/rdp_keymap_de_de.c +++ b/protocols/rdp/src/rdp_keymap_de_de.c @@ -475,7 +475,7 @@ static guac_rdp_keysym_desc __guac_rdp_keymap_mapping[] = { .set_keysyms = GUAC_KEYSYMS_CTRL_ALT }, /* bar */ - { .keysym = 0x007c, .scancode = 0x2B, + { .keysym = 0x007c, .scancode = 0x56, .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT, .set_keysyms = GUAC_KEYSYMS_CTRL_ALT }, From 8e5dde0cd84582fe6f43686e385e538b47900cb5 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Wed, 8 May 2013 23:03:40 -0700 Subject: [PATCH 240/253] Remove ALL_MODIFIERS clear for most keys. --- protocols/rdp/src/rdp_keymap_de_de.c | 34 ++++++++++++++-------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/protocols/rdp/src/rdp_keymap_de_de.c b/protocols/rdp/src/rdp_keymap_de_de.c index 57cd2f86..3dd4f35f 100644 --- a/protocols/rdp/src/rdp_keymap_de_de.c +++ b/protocols/rdp/src/rdp_keymap_de_de.c @@ -62,7 +62,7 @@ static guac_rdp_keysym_desc __guac_rdp_keymap_mapping[] = { /* numbersign */ { .keysym = 0x0023, .scancode = 0x2b, - .clear_keysyms = GUAC_KEYSYMS_ALL_MODIFIERS }, + .clear_keysyms = GUAC_KEYSYMS_SHIFT }, /* dollar */ { .keysym = 0x0024, .scancode = 0x05, @@ -101,19 +101,19 @@ static guac_rdp_keysym_desc __guac_rdp_keymap_mapping[] = { /* plus */ { .keysym = 0x002b, .scancode = 0x1b, - .clear_keysyms = GUAC_KEYSYMS_ALL_MODIFIERS }, + .clear_keysyms = GUAC_KEYSYMS_SHIFT }, /* comma */ { .keysym = 0x002c, .scancode = 0x33, - .clear_keysyms = GUAC_KEYSYMS_ALL_MODIFIERS }, + .clear_keysyms = GUAC_KEYSYMS_SHIFT }, /* minus */ { .keysym = 0x002d, .scancode = 0x35, - .clear_keysyms = GUAC_KEYSYMS_ALL_MODIFIERS }, + .clear_keysyms = GUAC_KEYSYMS_SHIFT }, /* period */ { .keysym = 0x002e, .scancode = 0x34, - .clear_keysyms = GUAC_KEYSYMS_ALL_MODIFIERS }, + .clear_keysyms = GUAC_KEYSYMS_SHIFT }, /* slash */ { .keysym = 0x002f, .scancode = 0x08, @@ -122,43 +122,43 @@ static guac_rdp_keysym_desc __guac_rdp_keymap_mapping[] = { /* 0 */ { .keysym = 0x0030, .scancode = 0x0B, - .clear_keysyms = GUAC_KEYSYMS_ALL_MODIFIERS }, + .clear_keysyms = GUAC_KEYSYMS_SHIFT }, /* 1 */ { .keysym = 0x0031, .scancode = 0x02, - .clear_keysyms = GUAC_KEYSYMS_ALL_MODIFIERS }, + .clear_keysyms = GUAC_KEYSYMS_SHIFT }, /* 2 */ { .keysym = 0x0032, .scancode = 0x03, - .clear_keysyms = GUAC_KEYSYMS_ALL_MODIFIERS }, + .clear_keysyms = GUAC_KEYSYMS_SHIFT }, /* 3 */ { .keysym = 0x0033, .scancode = 0x04, - .clear_keysyms = GUAC_KEYSYMS_ALL_MODIFIERS }, + .clear_keysyms = GUAC_KEYSYMS_SHIFT }, /* 4 */ { .keysym = 0x0034, .scancode = 0x05, - .clear_keysyms = GUAC_KEYSYMS_ALL_MODIFIERS }, + .clear_keysyms = GUAC_KEYSYMS_SHIFT }, /* 5 */ { .keysym = 0x0035, .scancode = 0x06, - .clear_keysyms = GUAC_KEYSYMS_ALL_MODIFIERS }, + .clear_keysyms = GUAC_KEYSYMS_SHIFT }, /* 6 */ { .keysym = 0x0036, .scancode = 0x07, - .clear_keysyms = GUAC_KEYSYMS_ALL_MODIFIERS }, + .clear_keysyms = GUAC_KEYSYMS_SHIFT }, /* 7 */ { .keysym = 0x0037, .scancode = 0x08, - .clear_keysyms = GUAC_KEYSYMS_ALL_MODIFIERS }, + .clear_keysyms = GUAC_KEYSYMS_SHIFT }, /* 8 */ { .keysym = 0x0038, .scancode = 0x09, - .clear_keysyms = GUAC_KEYSYMS_ALL_MODIFIERS }, + .clear_keysyms = GUAC_KEYSYMS_SHIFT }, /* 9 */ { .keysym = 0x0039, .scancode = 0x0A, - .clear_keysyms = GUAC_KEYSYMS_ALL_MODIFIERS }, + .clear_keysyms = GUAC_KEYSYMS_SHIFT }, /* colon */ { .keysym = 0x003a, .scancode = 0x34, @@ -172,7 +172,7 @@ static guac_rdp_keysym_desc __guac_rdp_keymap_mapping[] = { /* less */ { .keysym = 0x003c, .scancode = 0x56, - .clear_keysyms = GUAC_KEYSYMS_ALL_MODIFIERS }, + .clear_keysyms = GUAC_KEYSYMS_SHIFT }, /* equal */ { .keysym = 0x003d, .scancode = 0x0B, @@ -467,7 +467,7 @@ static guac_rdp_keysym_desc __guac_rdp_keymap_mapping[] = { /* ß */ { .keysym = 0x00df, .scancode = 0x0c, - .clear_keysyms = GUAC_KEYSYMS_ALL_MODIFIERS }, + .clear_keysyms = GUAC_KEYSYMS_SHIFT }, /* braceleft */ { .keysym = 0x007b, .scancode = 0x08, From 6241ebcbb2fc4eaf226e174895bdf89a153c0ce2 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Wed, 8 May 2013 23:06:13 -0700 Subject: [PATCH 241/253] If clearing SHIFT, should clear ALL_SHIFT. --- protocols/rdp/src/rdp_keymap_de_de.c | 38 ++++++++++++++-------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/protocols/rdp/src/rdp_keymap_de_de.c b/protocols/rdp/src/rdp_keymap_de_de.c index 3dd4f35f..c968aab2 100644 --- a/protocols/rdp/src/rdp_keymap_de_de.c +++ b/protocols/rdp/src/rdp_keymap_de_de.c @@ -62,7 +62,7 @@ static guac_rdp_keysym_desc __guac_rdp_keymap_mapping[] = { /* numbersign */ { .keysym = 0x0023, .scancode = 0x2b, - .clear_keysyms = GUAC_KEYSYMS_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, /* dollar */ { .keysym = 0x0024, .scancode = 0x05, @@ -101,19 +101,19 @@ static guac_rdp_keysym_desc __guac_rdp_keymap_mapping[] = { /* plus */ { .keysym = 0x002b, .scancode = 0x1b, - .clear_keysyms = GUAC_KEYSYMS_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, /* comma */ { .keysym = 0x002c, .scancode = 0x33, - .clear_keysyms = GUAC_KEYSYMS_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, /* minus */ { .keysym = 0x002d, .scancode = 0x35, - .clear_keysyms = GUAC_KEYSYMS_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, /* period */ { .keysym = 0x002e, .scancode = 0x34, - .clear_keysyms = GUAC_KEYSYMS_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, /* slash */ { .keysym = 0x002f, .scancode = 0x08, @@ -122,43 +122,43 @@ static guac_rdp_keysym_desc __guac_rdp_keymap_mapping[] = { /* 0 */ { .keysym = 0x0030, .scancode = 0x0B, - .clear_keysyms = GUAC_KEYSYMS_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, /* 1 */ { .keysym = 0x0031, .scancode = 0x02, - .clear_keysyms = GUAC_KEYSYMS_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, /* 2 */ { .keysym = 0x0032, .scancode = 0x03, - .clear_keysyms = GUAC_KEYSYMS_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, /* 3 */ { .keysym = 0x0033, .scancode = 0x04, - .clear_keysyms = GUAC_KEYSYMS_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, /* 4 */ { .keysym = 0x0034, .scancode = 0x05, - .clear_keysyms = GUAC_KEYSYMS_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, /* 5 */ { .keysym = 0x0035, .scancode = 0x06, - .clear_keysyms = GUAC_KEYSYMS_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, /* 6 */ { .keysym = 0x0036, .scancode = 0x07, - .clear_keysyms = GUAC_KEYSYMS_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, /* 7 */ { .keysym = 0x0037, .scancode = 0x08, - .clear_keysyms = GUAC_KEYSYMS_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, /* 8 */ { .keysym = 0x0038, .scancode = 0x09, - .clear_keysyms = GUAC_KEYSYMS_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, /* 9 */ { .keysym = 0x0039, .scancode = 0x0A, - .clear_keysyms = GUAC_KEYSYMS_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, /* colon */ { .keysym = 0x003a, .scancode = 0x34, @@ -172,7 +172,7 @@ static guac_rdp_keysym_desc __guac_rdp_keymap_mapping[] = { /* less */ { .keysym = 0x003c, .scancode = 0x56, - .clear_keysyms = GUAC_KEYSYMS_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, /* equal */ { .keysym = 0x003d, .scancode = 0x0B, @@ -467,7 +467,7 @@ static guac_rdp_keysym_desc __guac_rdp_keymap_mapping[] = { /* ß */ { .keysym = 0x00df, .scancode = 0x0c, - .clear_keysyms = GUAC_KEYSYMS_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, /* braceleft */ { .keysym = 0x007b, .scancode = 0x08, @@ -491,12 +491,12 @@ static guac_rdp_keysym_desc __guac_rdp_keymap_mapping[] = { /* euro */ { .keysym = 0x10020ac, .scancode = 0x12, - .clear_keysyms = GUAC_KEYSYMS_SHIFT, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT, .set_keysyms = GUAC_KEYSYMS_CTRL_ALT }, /* mu */ { .keysym = 0x00b5, .scancode = 0x32, - .clear_keysyms = GUAC_KEYSYMS_SHIFT, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT, .set_keysyms = GUAC_KEYSYMS_CTRL_ALT }, {0} From 9557ca05abb6ebf6509040e9ed8e598a33e4de66 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Wed, 8 May 2013 23:09:42 -0700 Subject: [PATCH 242/253] Have to not clear both CTRL_ALT as that would prohibit CTRL+ combinations (and ALT+). --- protocols/rdp/src/rdp_keymap_de_de.c | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/protocols/rdp/src/rdp_keymap_de_de.c b/protocols/rdp/src/rdp_keymap_de_de.c index c968aab2..22341c01 100644 --- a/protocols/rdp/src/rdp_keymap_de_de.c +++ b/protocols/rdp/src/rdp_keymap_de_de.c @@ -52,12 +52,10 @@ static guac_rdp_keysym_desc __guac_rdp_keymap_mapping[] = { /* exclam */ { .keysym = 0x0021, .scancode = 0x02, - .clear_keysyms = GUAC_KEYSYMS_CTRL_ALT, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* quotedbl */ { .keysym = 0x0022, .scancode = 0x03, - .clear_keysyms = GUAC_KEYSYMS_CTRL_ALT, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* numbersign */ @@ -66,37 +64,30 @@ static guac_rdp_keysym_desc __guac_rdp_keymap_mapping[] = { /* dollar */ { .keysym = 0x0024, .scancode = 0x05, - .clear_keysyms = GUAC_KEYSYMS_CTRL_ALT, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* percent */ { .keysym = 0x0025, .scancode = 0x06, - .clear_keysyms = GUAC_KEYSYMS_CTRL_ALT, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* ampersand */ { .keysym = 0x0026, .scancode = 0x07, - .clear_keysyms = GUAC_KEYSYMS_CTRL_ALT, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* quoteright */ { .keysym = 0x0027, .scancode = 0x2b, - .clear_keysyms = GUAC_KEYSYMS_CTRL_ALT, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* parenleft */ { .keysym = 0x0028, .scancode = 0x09, - .clear_keysyms = GUAC_KEYSYMS_CTRL_ALT, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* parenright */ { .keysym = 0x0029, .scancode = 0x0A, - .clear_keysyms = GUAC_KEYSYMS_CTRL_ALT, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* asterisk */ { .keysym = 0x002a, .scancode = 0x1b, - .clear_keysyms = GUAC_KEYSYMS_CTRL_ALT, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* plus */ @@ -117,7 +108,6 @@ static guac_rdp_keysym_desc __guac_rdp_keymap_mapping[] = { /* slash */ { .keysym = 0x002f, .scancode = 0x08, - .clear_keysyms = GUAC_KEYSYMS_CTRL_ALT, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* 0 */ @@ -162,12 +152,10 @@ static guac_rdp_keysym_desc __guac_rdp_keymap_mapping[] = { /* colon */ { .keysym = 0x003a, .scancode = 0x34, - .clear_keysyms = GUAC_KEYSYMS_CTRL_ALT, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* semicolon */ { .keysym = 0x003b, .scancode = 0x33, - .clear_keysyms = GUAC_KEYSYMS_CTRL_ALT, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* less */ @@ -176,17 +164,14 @@ static guac_rdp_keysym_desc __guac_rdp_keymap_mapping[] = { /* equal */ { .keysym = 0x003d, .scancode = 0x0B, - .clear_keysyms = GUAC_KEYSYMS_CTRL_ALT, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* greater */ { .keysym = 0x003e, .scancode = 0x56, - .clear_keysyms = GUAC_KEYSYMS_CTRL_ALT, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* question */ { .keysym = 0x003f, .scancode = 0x0c, - .clear_keysyms = GUAC_KEYSYMS_CTRL_ALT, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* at */ @@ -315,7 +300,6 @@ static guac_rdp_keysym_desc __guac_rdp_keymap_mapping[] = { /* underscore */ { .keysym = 0x005f, .scancode = 0x35, - .clear_keysyms = GUAC_KEYSYMS_CTRL_ALT, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* dead grave (WRONG) */ @@ -444,7 +428,6 @@ static guac_rdp_keysym_desc __guac_rdp_keymap_mapping[] = { /* Ä */ { .keysym = 0x00c4, .scancode = 0x28, - .clear_keysyms = GUAC_KEYSYMS_CTRL_ALT, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* ö */ @@ -453,7 +436,6 @@ static guac_rdp_keysym_desc __guac_rdp_keymap_mapping[] = { /* Ö */ { .keysym = 0x00d6, .scancode = 0x27, - .clear_keysyms = GUAC_KEYSYMS_CTRL_ALT, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* ü */ @@ -462,7 +444,6 @@ static guac_rdp_keysym_desc __guac_rdp_keymap_mapping[] = { /* Ü */ { .keysym = 0x00dc, .scancode = 0x1a, - .clear_keysyms = GUAC_KEYSYMS_CTRL_ALT, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* ß */ From 5a5a02f99b6a959c2f51b9135f7d8385b3e6f651 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Thu, 9 May 2013 00:19:55 -0700 Subject: [PATCH 243/253] Fix French keyboard mapping. --- protocols/rdp/src/rdp_keymap_fr_fr.c | 51 ++++++++++++++++++++-------- 1 file changed, 36 insertions(+), 15 deletions(-) diff --git a/protocols/rdp/src/rdp_keymap_fr_fr.c b/protocols/rdp/src/rdp_keymap_fr_fr.c index 61b593a8..9fc03cb3 100644 --- a/protocols/rdp/src/rdp_keymap_fr_fr.c +++ b/protocols/rdp/src/rdp_keymap_fr_fr.c @@ -62,6 +62,7 @@ static guac_rdp_keysym_desc __guac_rdp_keymap_mapping[] = { /* numbersign */ { .keysym = 0x0023, .scancode = 0x04, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT, .set_keysyms = GUAC_KEYSYMS_CTRL_ALT }, /* dollar */ @@ -70,7 +71,7 @@ static guac_rdp_keysym_desc __guac_rdp_keymap_mapping[] = { /* percent */ { .keysym = 0x0025, .scancode = 0x28, - .set_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* ampersand */ { .keysym = 0x0026, .scancode = 0x02, @@ -110,7 +111,7 @@ static guac_rdp_keysym_desc __guac_rdp_keymap_mapping[] = { /* slash */ { .keysym = 0x002f, .scancode = 0x34, - .set_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* 0 */ { .keysym = 0x0030, .scancode = 0x0B, @@ -178,6 +179,7 @@ static guac_rdp_keysym_desc __guac_rdp_keymap_mapping[] = { /* at */ { .keysym = 0x0040, .scancode = 0x0B, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT, .set_keysyms = GUAC_KEYSYMS_CTRL_ALT }, /* A */ @@ -286,18 +288,22 @@ static guac_rdp_keysym_desc __guac_rdp_keymap_mapping[] = { /* bracketleft */ { .keysym = 0x005b, .scancode = 0x06, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT, .set_keysyms = GUAC_KEYSYMS_CTRL_ALT }, /* backslash */ { .keysym = 0x005c, .scancode = 0x09, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT, .set_keysyms = GUAC_KEYSYMS_CTRL_ALT }, /* bracketright */ { .keysym = 0x005d, .scancode = 0x0c, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT, .set_keysyms = GUAC_KEYSYMS_CTRL_ALT }, /* asciicircum */ { .keysym = 0x005e, .scancode = 0x0a, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT, .set_keysyms = GUAC_KEYSYMS_CTRL_ALT }, /* underscore */ @@ -306,6 +312,7 @@ static guac_rdp_keysym_desc __guac_rdp_keymap_mapping[] = { /* quoteleft */ { .keysym = 0x0060, .scancode = 0x08, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT, .set_keysyms = GUAC_KEYSYMS_CTRL_ALT }, /* a */ @@ -414,68 +421,82 @@ static guac_rdp_keysym_desc __guac_rdp_keymap_mapping[] = { /* braceleft */ { .keysym = 0x007b, .scancode = 0x05, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT, .set_keysyms = GUAC_KEYSYMS_CTRL_ALT }, /* bar */ { .keysym = 0x007c, .scancode = 0x07, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT, .set_keysyms = GUAC_KEYSYMS_CTRL_ALT }, /* braceright */ { .keysym = 0x007d, .scancode = 0x0D, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT, .set_keysyms = GUAC_KEYSYMS_CTRL_ALT }, /* asciitilde */ { .keysym = 0x007e, .scancode = 0x03, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT, .set_keysyms = GUAC_KEYSYMS_CTRL_ALT }, /* pound */ { .keysym = 0x00a3, .scancode = 0x1b, - .set_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* currency */ { .keysym = 0x00a4, .scancode = 0x1b, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT, .set_keysyms = GUAC_KEYSYMS_CTRL_ALT }, /* section */ { .keysym = 0x00a7, .scancode = 0x35, - .set_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* degree */ { .keysym = 0x00b0, .scancode = 0x0c, - .set_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* micro */ { .keysym = 0x00b5, .scancode = 0x2b, - .set_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, - /* a + grave */ + /* dead umlaut */ + { .keysym = 0xfe57, .scancode = 0x1a, + .set_keysyms = GUAC_KEYSYMS_SHIFT }, + + /* dead circum */ + { .keysym = 0xfe52, .scancode = 0x1a, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + + /* à */ { .keysym = 0x00e0, .scancode = 0x0b, .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, - /* a + umlaut */ - { .keysym = 0x00e4, .scancode = 0x1a, - .set_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, - - /* Ccedil */ + /* ç */ { .keysym = 0x00e7, .scancode = 0x0a, .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, - /* e + grave */ + /* è */ { .keysym = 0x00e8, .scancode = 0x08, .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, - /* e + acute */ + /* é */ { .keysym = 0x00e9, .scancode = 0x03, .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, - /* u + grave */ + /* ù */ { .keysym = 0x00f9, .scancode = 0x28, .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, /* euro */ { .keysym = 0x10020ac, .scancode = 0x12, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT, .set_keysyms = GUAC_KEYSYMS_CTRL_ALT }, + /* two superior */ + { .keysym = 0x00b2, .scancode = 0x29, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + {0} }; From af3fafcbd9edf1e807e98bb331e0f6de071cbe39 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Thu, 9 May 2013 00:20:09 -0700 Subject: [PATCH 244/253] Add superscript 2 and 3 to German mapping. --- protocols/rdp/src/rdp_keymap_de_de.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/protocols/rdp/src/rdp_keymap_de_de.c b/protocols/rdp/src/rdp_keymap_de_de.c index 22341c01..efd5a631 100644 --- a/protocols/rdp/src/rdp_keymap_de_de.c +++ b/protocols/rdp/src/rdp_keymap_de_de.c @@ -480,6 +480,16 @@ static guac_rdp_keysym_desc __guac_rdp_keymap_mapping[] = { .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT, .set_keysyms = GUAC_KEYSYMS_CTRL_ALT }, + /* two superior */ + { .keysym = 0x00b2, .scancode = 0x03, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT, + .set_keysyms = GUAC_KEYSYMS_CTRL_ALT }, + + /* three superior */ + { .keysym = 0x00b3, .scancode = 0x04, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT, + .set_keysyms = GUAC_KEYSYMS_CTRL_ALT }, + {0} }; From 03ae1481ea9204e832572eb67b90c617df4087fe Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Thu, 9 May 2013 00:24:04 -0700 Subject: [PATCH 245/253] Bump version. --- protocols/rdp/ChangeLog | 4 ++++ protocols/rdp/configure.in | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/protocols/rdp/ChangeLog b/protocols/rdp/ChangeLog index 1501aaf2..f789140f 100644 --- a/protocols/rdp/ChangeLog +++ b/protocols/rdp/ChangeLog @@ -1,3 +1,7 @@ +2013-05-09 Michael Jumper + + * Merge contributed keymaps for French and German. + 2012-12-25 Michael Jumper * Console arguments (fixes #227) diff --git a/protocols/rdp/configure.in b/protocols/rdp/configure.in index 857f004f..e21c6713 100644 --- a/protocols/rdp/configure.in +++ b/protocols/rdp/configure.in @@ -35,7 +35,7 @@ # ***** END LICENSE BLOCK ***** AC_INIT(src/client.c) -AM_INIT_AUTOMAKE([libguac-client-rdp], 0.7.3) +AM_INIT_AUTOMAKE([libguac-client-rdp], 0.7.4) AC_CONFIG_MACRO_DIR([m4]) # Checks for programs. From c40a9b89947c365a8a481130a1c9e91a36f169af Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Thu, 9 May 2013 20:44:56 -0700 Subject: [PATCH 246/253] Actually implement AltGr as a separate code, rather than Ctrl+Alt. --- protocols/rdp/include/rdp_keymap.h | 22 +++- protocols/rdp/src/rdp_keymap.c | 4 + protocols/rdp/src/rdp_keymap_base.c | 6 +- protocols/rdp/src/rdp_keymap_de_de.c | 166 ++++++++++++++++---------- protocols/rdp/src/rdp_keymap_fr_fr.c | 169 +++++++++++++++++---------- 5 files changed, 240 insertions(+), 127 deletions(-) diff --git a/protocols/rdp/include/rdp_keymap.h b/protocols/rdp/include/rdp_keymap.h index 3cbb5e3d..fcefdea1 100644 --- a/protocols/rdp/include/rdp_keymap.h +++ b/protocols/rdp/include/rdp_keymap.h @@ -174,6 +174,23 @@ extern const int GUAC_KEYSYMS_SHIFT[]; */ extern const int GUAC_KEYSYMS_ALL_SHIFT[]; +/** + * Keysym string containing only the right "alt" key (AltGr). + */ +extern const int GUAC_KEYSYMS_ALTGR[]; + +/** + * Keysym string containing the right "alt" key (AltGr) and + * left shift. + */ +extern const int GUAC_KEYSYMS_SHIFT_ALTGR[]; + +/** + * Keysym string containing the right "alt" key (AltGr) and + * both shift keys. + */ +extern const int GUAC_KEYSYMS_ALL_SHIFT_ALTGR[]; + /** * Keysym string containing only the left "ctrl" key. */ @@ -194,11 +211,6 @@ extern const int GUAC_KEYSYMS_ALT[]; */ extern const int GUAC_KEYSYMS_ALL_ALT[]; -/** - * Keysym string containing both "alt" keys. - */ -extern const int GUAC_KEYSYMS_ALL_ALT[]; - /** * Keysym string containing the left "alt" and left "ctrl" keys */ diff --git a/protocols/rdp/src/rdp_keymap.c b/protocols/rdp/src/rdp_keymap.c index 552e473f..82d49414 100644 --- a/protocols/rdp/src/rdp_keymap.c +++ b/protocols/rdp/src/rdp_keymap.c @@ -40,6 +40,10 @@ const int GUAC_KEYSYMS_SHIFT[] = {0xFFE1, 0}; const int GUAC_KEYSYMS_ALL_SHIFT[] = {0xFFE1, 0xFFE2, 0}; +const int GUAC_KEYSYMS_ALTGR[] = {0xFFEA, 0}; +const int GUAC_KEYSYMS_SHIFT_ALTGR[] = {0xFFE1, 0xFFEA, 0}; +const int GUAC_KEYSYMS_ALL_SHIFT_ALTGR[] = {0xFFE1, 0xFFE2, 0xFFEA, 0}; + const int GUAC_KEYSYMS_CTRL[] = {0xFFE3, 0}; const int GUAC_KEYSYMS_ALL_CTRL[] = {0xFFE3, 0xFFE4, 0}; diff --git a/protocols/rdp/src/rdp_keymap_base.c b/protocols/rdp/src/rdp_keymap_base.c index 8ccb51c2..dd99e5ad 100644 --- a/protocols/rdp/src/rdp_keymap_base.c +++ b/protocols/rdp/src/rdp_keymap_base.c @@ -187,7 +187,11 @@ static guac_rdp_keysym_desc __guac_rdp_keymap_mapping[] = { /* Alt_R */ { .keysym = 0xffea, .scancode = 0x38, - .set_keysyms = GUAC_KEYSYMS_CTRL }, + .flags = KBD_FLAGS_EXTENDED }, + + /* ISO_Level3_Shift */ + { .keysym = 0xfe03, .scancode = 0x38, + .flags = KBD_FLAGS_EXTENDED }, /* Super_L */ { .keysym = 0xffeb, .scancode = 0x5B, diff --git a/protocols/rdp/src/rdp_keymap_de_de.c b/protocols/rdp/src/rdp_keymap_de_de.c index efd5a631..ff8327ef 100644 --- a/protocols/rdp/src/rdp_keymap_de_de.c +++ b/protocols/rdp/src/rdp_keymap_de_de.c @@ -52,163 +52,186 @@ static guac_rdp_keysym_desc __guac_rdp_keymap_mapping[] = { /* exclam */ { .keysym = 0x0021, .scancode = 0x02, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* quotedbl */ { .keysym = 0x0022, .scancode = 0x03, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* numbersign */ { .keysym = 0x0023, .scancode = 0x2b, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* dollar */ { .keysym = 0x0024, .scancode = 0x05, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* percent */ { .keysym = 0x0025, .scancode = 0x06, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* ampersand */ { .keysym = 0x0026, .scancode = 0x07, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* quoteright */ { .keysym = 0x0027, .scancode = 0x2b, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* parenleft */ { .keysym = 0x0028, .scancode = 0x09, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* parenright */ { .keysym = 0x0029, .scancode = 0x0A, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* asterisk */ { .keysym = 0x002a, .scancode = 0x1b, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* plus */ { .keysym = 0x002b, .scancode = 0x1b, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* comma */ { .keysym = 0x002c, .scancode = 0x33, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* minus */ { .keysym = 0x002d, .scancode = 0x35, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* period */ { .keysym = 0x002e, .scancode = 0x34, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* slash */ { .keysym = 0x002f, .scancode = 0x08, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* 0 */ { .keysym = 0x0030, .scancode = 0x0B, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* 1 */ { .keysym = 0x0031, .scancode = 0x02, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* 2 */ { .keysym = 0x0032, .scancode = 0x03, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* 3 */ { .keysym = 0x0033, .scancode = 0x04, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* 4 */ { .keysym = 0x0034, .scancode = 0x05, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* 5 */ { .keysym = 0x0035, .scancode = 0x06, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* 6 */ { .keysym = 0x0036, .scancode = 0x07, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* 7 */ { .keysym = 0x0037, .scancode = 0x08, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* 8 */ { .keysym = 0x0038, .scancode = 0x09, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* 9 */ { .keysym = 0x0039, .scancode = 0x0A, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* colon */ { .keysym = 0x003a, .scancode = 0x34, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* semicolon */ { .keysym = 0x003b, .scancode = 0x33, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* less */ { .keysym = 0x003c, .scancode = 0x56, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* equal */ { .keysym = 0x003d, .scancode = 0x0B, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* greater */ { .keysym = 0x003e, .scancode = 0x56, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* question */ { .keysym = 0x003f, .scancode = 0x0c, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* at */ { .keysym = 0x0040, .scancode = 0x10, .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT, - .set_keysyms = GUAC_KEYSYMS_CTRL_ALT }, + .set_keysyms = GUAC_KEYSYMS_ALTGR }, /* A */ { .keysym = 0x0041, .scancode = 0x1E, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* B */ { .keysym = 0x0042, .scancode = 0x30, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* C */ { .keysym = 0x0043, .scancode = 0x2E, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* D */ { .keysym = 0x0044, .scancode = 0x20, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* E */ { .keysym = 0x0045, .scancode = 0x12, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* F */ { .keysym = 0x0046, .scancode = 0x21, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* G */ { .keysym = 0x0047, .scancode = 0x22, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* H */ { .keysym = 0x0048, .scancode = 0x23, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* I */ @@ -217,278 +240,301 @@ static guac_rdp_keysym_desc __guac_rdp_keymap_mapping[] = { /* J */ { .keysym = 0x004a, .scancode = 0x24, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* K */ { .keysym = 0x004b, .scancode = 0x25, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* L */ { .keysym = 0x004c, .scancode = 0x26, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* M */ { .keysym = 0x004d, .scancode = 0x32, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* N */ { .keysym = 0x004e, .scancode = 0x31, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* O */ { .keysym = 0x004f, .scancode = 0x18, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* P */ { .keysym = 0x0050, .scancode = 0x19, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* Q */ { .keysym = 0x0051, .scancode = 0x10, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* R */ { .keysym = 0x0052, .scancode = 0x13, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* S */ { .keysym = 0x0053, .scancode = 0x1F, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* T */ { .keysym = 0x0054, .scancode = 0x14, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* U */ { .keysym = 0x0055, .scancode = 0x16, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* V */ { .keysym = 0x0056, .scancode = 0x2F, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* W */ { .keysym = 0x0057, .scancode = 0x11, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* X */ { .keysym = 0x0058, .scancode = 0x2D, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* Y */ { .keysym = 0x0059, .scancode = 0x2c, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* Z */ { .keysym = 0x005a, .scancode = 0x15, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* bracketleft */ { .keysym = 0x005b, .scancode = 0x09, .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT, - .set_keysyms = GUAC_KEYSYMS_CTRL_ALT }, + .set_keysyms = GUAC_KEYSYMS_ALTGR }, /* backslash */ { .keysym = 0x005c, .scancode = 0x0c, .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT, - .set_keysyms = GUAC_KEYSYMS_CTRL_ALT }, + .set_keysyms = GUAC_KEYSYMS_ALTGR }, /* bracketright */ { .keysym = 0x005d, .scancode = 0x0a, .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT, - .set_keysyms = GUAC_KEYSYMS_CTRL_ALT }, + .set_keysyms = GUAC_KEYSYMS_ALTGR }, /* underscore */ { .keysym = 0x005f, .scancode = 0x35, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* dead grave (WRONG) */ { .keysym = 0xfe50, .scancode = 0x0d, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* dead acute (WRONG) */ { .keysym = 0xfe51, .scancode = 0x0d, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* dead circum */ { .keysym = 0xfe52, .scancode = 0x29, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* degree */ { .keysym = 0x00b0, .scancode = 0x29, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* a */ { .keysym = 0x0061, .scancode = 0x1E, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* b */ { .keysym = 0x0062, .scancode = 0x30, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* c */ { .keysym = 0x0063, .scancode = 0x2E, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* d */ { .keysym = 0x0064, .scancode = 0x20, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* e */ { .keysym = 0x0065, .scancode = 0x12, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* f */ { .keysym = 0x0066, .scancode = 0x21, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* g */ { .keysym = 0x0067, .scancode = 0x22, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* h */ { .keysym = 0x0068, .scancode = 0x23, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* i */ { .keysym = 0x0069, .scancode = 0x17, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* j */ { .keysym = 0x006a, .scancode = 0x24, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* k */ { .keysym = 0x006b, .scancode = 0x25, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* l */ { .keysym = 0x006c, .scancode = 0x26, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* m */ { .keysym = 0x006d, .scancode = 0x32, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* n */ { .keysym = 0x006e, .scancode = 0x31, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* o */ { .keysym = 0x006f, .scancode = 0x18, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* p */ { .keysym = 0x0070, .scancode = 0x19, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* q */ { .keysym = 0x0071, .scancode = 0x10, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* r */ { .keysym = 0x0072, .scancode = 0x13, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* s */ { .keysym = 0x0073, .scancode = 0x1F, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* t */ { .keysym = 0x0074, .scancode = 0x14, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* u */ { .keysym = 0x0075, .scancode = 0x16, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* v */ { .keysym = 0x0076, .scancode = 0x2F, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* w */ { .keysym = 0x0077, .scancode = 0x11, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* x */ { .keysym = 0x0078, .scancode = 0x2D, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* y */ { .keysym = 0x0079, .scancode = 0x2c, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* z */ { .keysym = 0x007a, .scancode = 0x15, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* ä */ { .keysym = 0x00e4, .scancode = 0x28, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* Ä */ { .keysym = 0x00c4, .scancode = 0x28, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* ö */ { .keysym = 0x00f6, .scancode = 0x27, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* Ö */ { .keysym = 0x00d6, .scancode = 0x27, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* ü */ { .keysym = 0x00fc, .scancode = 0x1a, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* Ü */ { .keysym = 0x00dc, .scancode = 0x1a, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* ß */ { .keysym = 0x00df, .scancode = 0x0c, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* braceleft */ { .keysym = 0x007b, .scancode = 0x08, .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT, - .set_keysyms = GUAC_KEYSYMS_CTRL_ALT }, + .set_keysyms = GUAC_KEYSYMS_ALTGR }, /* bar */ { .keysym = 0x007c, .scancode = 0x56, .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT, - .set_keysyms = GUAC_KEYSYMS_CTRL_ALT }, + .set_keysyms = GUAC_KEYSYMS_ALTGR }, /* braceright */ { .keysym = 0x007d, .scancode = 0x0b, .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT, - .set_keysyms = GUAC_KEYSYMS_CTRL_ALT }, + .set_keysyms = GUAC_KEYSYMS_ALTGR }, /* dead tilde */ { .keysym = 0xfe53, .scancode = 0x1b, .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT, - .set_keysyms = GUAC_KEYSYMS_CTRL_ALT }, + .set_keysyms = GUAC_KEYSYMS_ALTGR }, /* euro */ { .keysym = 0x10020ac, .scancode = 0x12, .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT, - .set_keysyms = GUAC_KEYSYMS_CTRL_ALT }, + .set_keysyms = GUAC_KEYSYMS_ALTGR }, /* mu */ { .keysym = 0x00b5, .scancode = 0x32, .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT, - .set_keysyms = GUAC_KEYSYMS_CTRL_ALT }, + .set_keysyms = GUAC_KEYSYMS_ALTGR }, /* two superior */ { .keysym = 0x00b2, .scancode = 0x03, .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT, - .set_keysyms = GUAC_KEYSYMS_CTRL_ALT }, + .set_keysyms = GUAC_KEYSYMS_ALTGR }, /* three superior */ { .keysym = 0x00b3, .scancode = 0x04, .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT, - .set_keysyms = GUAC_KEYSYMS_CTRL_ALT }, + .set_keysyms = GUAC_KEYSYMS_ALTGR }, {0} diff --git a/protocols/rdp/src/rdp_keymap_fr_fr.c b/protocols/rdp/src/rdp_keymap_fr_fr.c index 9fc03cb3..64b63922 100644 --- a/protocols/rdp/src/rdp_keymap_fr_fr.c +++ b/protocols/rdp/src/rdp_keymap_fr_fr.c @@ -54,448 +54,495 @@ static guac_rdp_keysym_desc __guac_rdp_keymap_mapping[] = { /* exclam */ { .keysym = 0x0021, .scancode = 0x35, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* quotedbl */ { .keysym = 0x0022, .scancode = 0x04, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* numbersign */ { .keysym = 0x0023, .scancode = 0x04, .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT, - .set_keysyms = GUAC_KEYSYMS_CTRL_ALT }, + .set_keysyms = GUAC_KEYSYMS_ALTGR }, /* dollar */ { .keysym = 0x0024, .scancode = 0x1b, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* percent */ { .keysym = 0x0025, .scancode = 0x28, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* ampersand */ { .keysym = 0x0026, .scancode = 0x02, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* quoteright */ { .keysym = 0x0027, .scancode = 0x05, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* parenleft */ { .keysym = 0x0028, .scancode = 0x06, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* parenright */ { .keysym = 0x0029, .scancode = 0x0c, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* asterisk */ { .keysym = 0x002a, .scancode = 0x2b, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* plus */ { .keysym = 0x002b, .scancode = 0x0D, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* comma */ { .keysym = 0x002c, .scancode = 0x32, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* minus */ { .keysym = 0x002d, .scancode = 0x07, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* period */ { .keysym = 0x002e, .scancode = 0x33, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* slash */ { .keysym = 0x002f, .scancode = 0x34, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* 0 */ { .keysym = 0x0030, .scancode = 0x0B, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* 1 */ { .keysym = 0x0031, .scancode = 0x02, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* 2 */ { .keysym = 0x0032, .scancode = 0x03, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* 3 */ { .keysym = 0x0033, .scancode = 0x04, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* 4 */ { .keysym = 0x0034, .scancode = 0x05, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* 5 */ { .keysym = 0x0035, .scancode = 0x06, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* 6 */ { .keysym = 0x0036, .scancode = 0x07, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* 7 */ { .keysym = 0x0037, .scancode = 0x08, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* 8 */ { .keysym = 0x0038, .scancode = 0x09, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* 9 */ { .keysym = 0x0039, .scancode = 0x0A, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* colon */ { .keysym = 0x003a, .scancode = 0x34, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* semicolon */ { .keysym = 0x003b, .scancode = 0x33, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* less */ { .keysym = 0x003c, .scancode = 0x56, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* equal */ { .keysym = 0x003d, .scancode = 0x0D, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* greater */ { .keysym = 0x003e, .scancode = 0x56, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* question */ { .keysym = 0x003f, .scancode = 0x32, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* at */ { .keysym = 0x0040, .scancode = 0x0B, .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT, - .set_keysyms = GUAC_KEYSYMS_CTRL_ALT }, + .set_keysyms = GUAC_KEYSYMS_ALTGR }, /* A */ { .keysym = 0x0041, .scancode = 0x10, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* B */ { .keysym = 0x0042, .scancode = 0x30, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* C */ { .keysym = 0x0043, .scancode = 0x2E, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* D */ { .keysym = 0x0044, .scancode = 0x20, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* E */ { .keysym = 0x0045, .scancode = 0x12, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* F */ { .keysym = 0x0046, .scancode = 0x21, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* G */ { .keysym = 0x0047, .scancode = 0x22, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* H */ { .keysym = 0x0048, .scancode = 0x23, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* I */ { .keysym = 0x0049, .scancode = 0x17, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* J */ { .keysym = 0x004a, .scancode = 0x24, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* K */ { .keysym = 0x004b, .scancode = 0x25, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* L */ { .keysym = 0x004c, .scancode = 0x26, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* M */ { .keysym = 0x004d, .scancode = 0x27, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* N */ { .keysym = 0x004e, .scancode = 0x31, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* O */ { .keysym = 0x004f, .scancode = 0x18, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* P */ { .keysym = 0x0050, .scancode = 0x19, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* Q */ { .keysym = 0x0051, .scancode = 0x1E, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* R */ { .keysym = 0x0052, .scancode = 0x13, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* S */ { .keysym = 0x0053, .scancode = 0x1F, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* T */ { .keysym = 0x0054, .scancode = 0x14, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* U */ { .keysym = 0x0055, .scancode = 0x16, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* V */ { .keysym = 0x0056, .scancode = 0x2F, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* W */ { .keysym = 0x0057, .scancode = 0x2C, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* X */ { .keysym = 0x0058, .scancode = 0x2D, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* Y */ { .keysym = 0x0059, .scancode = 0x15, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* Z */ { .keysym = 0x005a, .scancode = 0x11, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* bracketleft */ { .keysym = 0x005b, .scancode = 0x06, .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT, - .set_keysyms = GUAC_KEYSYMS_CTRL_ALT }, + .set_keysyms = GUAC_KEYSYMS_ALTGR }, /* backslash */ { .keysym = 0x005c, .scancode = 0x09, .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT, - .set_keysyms = GUAC_KEYSYMS_CTRL_ALT }, + .set_keysyms = GUAC_KEYSYMS_ALTGR }, /* bracketright */ { .keysym = 0x005d, .scancode = 0x0c, .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT, - .set_keysyms = GUAC_KEYSYMS_CTRL_ALT }, + .set_keysyms = GUAC_KEYSYMS_ALTGR }, /* asciicircum */ { .keysym = 0x005e, .scancode = 0x0a, .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT, - .set_keysyms = GUAC_KEYSYMS_CTRL_ALT }, + .set_keysyms = GUAC_KEYSYMS_ALTGR }, /* underscore */ { .keysym = 0x005f, .scancode = 0x09, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* quoteleft */ { .keysym = 0x0060, .scancode = 0x08, .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT, - .set_keysyms = GUAC_KEYSYMS_CTRL_ALT }, + .set_keysyms = GUAC_KEYSYMS_ALTGR }, /* a */ { .keysym = 0x0061, .scancode = 0x10, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* b */ { .keysym = 0x0062, .scancode = 0x30, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* c */ { .keysym = 0x0063, .scancode = 0x2E, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* d */ { .keysym = 0x0064, .scancode = 0x20, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* e */ { .keysym = 0x0065, .scancode = 0x12, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* f */ { .keysym = 0x0066, .scancode = 0x21, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* g */ { .keysym = 0x0067, .scancode = 0x22, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* h */ { .keysym = 0x0068, .scancode = 0x23, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* i */ { .keysym = 0x0069, .scancode = 0x17, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* j */ { .keysym = 0x006a, .scancode = 0x24, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* k */ { .keysym = 0x006b, .scancode = 0x25, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* l */ { .keysym = 0x006c, .scancode = 0x26, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* m */ { .keysym = 0x006d, .scancode = 0x27, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* n */ { .keysym = 0x006e, .scancode = 0x31, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* o */ { .keysym = 0x006f, .scancode = 0x18, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* p */ { .keysym = 0x0070, .scancode = 0x19, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* q */ { .keysym = 0x0071, .scancode = 0x1E, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* r */ { .keysym = 0x0072, .scancode = 0x13, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* s */ { .keysym = 0x0073, .scancode = 0x1F, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* t */ { .keysym = 0x0074, .scancode = 0x14, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* u */ { .keysym = 0x0075, .scancode = 0x16, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* v */ { .keysym = 0x0076, .scancode = 0x2F, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* w */ { .keysym = 0x0077, .scancode = 0x2C, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* x */ { .keysym = 0x0078, .scancode = 0x2D, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* y */ { .keysym = 0x0079, .scancode = 0x15, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* z */ { .keysym = 0x007a, .scancode = 0x11, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* braceleft */ { .keysym = 0x007b, .scancode = 0x05, .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT, - .set_keysyms = GUAC_KEYSYMS_CTRL_ALT }, + .set_keysyms = GUAC_KEYSYMS_ALTGR }, /* bar */ { .keysym = 0x007c, .scancode = 0x07, .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT, - .set_keysyms = GUAC_KEYSYMS_CTRL_ALT }, + .set_keysyms = GUAC_KEYSYMS_ALTGR }, /* braceright */ { .keysym = 0x007d, .scancode = 0x0D, .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT, - .set_keysyms = GUAC_KEYSYMS_CTRL_ALT }, + .set_keysyms = GUAC_KEYSYMS_ALTGR }, /* asciitilde */ { .keysym = 0x007e, .scancode = 0x03, .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT, - .set_keysyms = GUAC_KEYSYMS_CTRL_ALT }, + .set_keysyms = GUAC_KEYSYMS_ALTGR }, /* pound */ { .keysym = 0x00a3, .scancode = 0x1b, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* currency */ { .keysym = 0x00a4, .scancode = 0x1b, .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT, - .set_keysyms = GUAC_KEYSYMS_CTRL_ALT }, + .set_keysyms = GUAC_KEYSYMS_ALTGR }, /* section */ { .keysym = 0x00a7, .scancode = 0x35, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* degree */ { .keysym = 0x00b0, .scancode = 0x0c, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* micro */ { .keysym = 0x00b5, .scancode = 0x2b, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* dead umlaut */ { .keysym = 0xfe57, .scancode = 0x1a, + .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, /* dead circum */ { .keysym = 0xfe52, .scancode = 0x1a, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* à */ { .keysym = 0x00e0, .scancode = 0x0b, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* ç */ { .keysym = 0x00e7, .scancode = 0x0a, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* è */ { .keysym = 0x00e8, .scancode = 0x08, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* é */ { .keysym = 0x00e9, .scancode = 0x03, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* ù */ { .keysym = 0x00f9, .scancode = 0x28, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, /* euro */ { .keysym = 0x10020ac, .scancode = 0x12, .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT, - .set_keysyms = GUAC_KEYSYMS_CTRL_ALT }, + .set_keysyms = GUAC_KEYSYMS_ALTGR }, /* two superior */ { .keysym = 0x00b2, .scancode = 0x29, - .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT }, + .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR }, {0} From 960c3e1e4ad7358252a00a6ba5d80b115fb79825 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Mon, 13 May 2013 14:27:15 -0700 Subject: [PATCH 247/253] Implement clipping in software. --- protocols/rdp/include/client.h | 30 +++++++++++++ protocols/rdp/src/rdp_gdi.c | 79 +++++++++++++++++++++++++++------- 2 files changed, 94 insertions(+), 15 deletions(-) diff --git a/protocols/rdp/include/client.h b/protocols/rdp/include/client.h index abc9d6b0..78bbe2ad 100644 --- a/protocols/rdp/include/client.h +++ b/protocols/rdp/include/client.h @@ -118,6 +118,36 @@ typedef struct rdp_guac_client_data { */ const guac_layer* current_surface; + /** + * Whether graphical operations are restricted to a specific bounding + * rectangle. + */ + int bounded; + + /** + * The X coordinate of the upper-left corner of the bounding rectangle, + * if any. + */ + int bounds_left; + + /** + * The Y coordinate of the upper-left corner of the bounding rectangle, + * if any. + */ + int bounds_top; + + /** + * The X coordinate of the lower-right corner of the bounding rectangle, + * if any. + */ + int bounds_right; + + /** + * The Y coordinate of the lower-right corner of the bounding rectangle, + * if any. + */ + int bounds_bottom; + /** * The keymap to use when translating keysyms into scancodes or sequences * of scancodes for RDP. diff --git a/protocols/rdp/src/rdp_gdi.c b/protocols/rdp/src/rdp_gdi.c index 5672d448..7b8bdf33 100644 --- a/protocols/rdp/src/rdp_gdi.c +++ b/protocols/rdp/src/rdp_gdi.c @@ -44,6 +44,42 @@ #include "client.h" #include "rdp_bitmap.h" +static void __guac_rdp_clip_rect(rdp_guac_client_data* data, int* x, int* y, int* w, int* h) { + + if (data->bounded) { + + /* Get rect coordinates */ + int clipped_left = *x; + int clipped_top = *y; + int clipped_right = clipped_left + *w - 1; + int clipped_bottom = clipped_top + *h - 1; + + /* Clip left */ + if (clipped_left < data->bounds_left) clipped_left = data->bounds_left; + else if (clipped_left > data->bounds_left) clipped_left = data->bounds_left; + + /* Clip right */ + if (clipped_right < data->bounds_right) clipped_right = data->bounds_right; + else if (clipped_right > data->bounds_right) clipped_right = data->bounds_right; + + /* Clip top */ + if (clipped_top < data->bounds_top) clipped_top = data->bounds_top; + else if (clipped_top > data->bounds_top) clipped_top = data->bounds_top; + + /* Clip bottom */ + if (clipped_bottom < data->bounds_bottom) clipped_bottom = data->bounds_bottom; + else if (clipped_bottom > data->bounds_bottom) clipped_bottom = data->bounds_bottom; + + /* Store new rect dimensions */ + *x = clipped_left; + *y = clipped_right; + *w = clipped_right - clipped_left + 1; + *h = clipped_bottom - clipped_top + 1; + + } + +} + guac_transfer_function guac_rdp_rop3_transfer_function(guac_client* client, int rop3) { @@ -110,6 +146,9 @@ void guac_rdp_gdi_dstblt(rdpContext* context, DSTBLT_ORDER* dstblt) { rdp_guac_client_data* data = (rdp_guac_client_data*) client->data; pthread_mutex_lock(&(data->update_lock)); + /* Clip operation to bounds */ + __guac_rdp_clip_rect(data, &(dstblt->nLeftRect), &(dstblt->nTopRect), &(dstblt->nWidth), &(dstblt->nHeight)); + switch (dstblt->bRop) { /* Blackness */ @@ -155,6 +194,8 @@ void guac_rdp_gdi_patblt(rdpContext* context, PATBLT_ORDER* patblt) { const guac_layer* current_layer = ((rdp_guac_client_data*) client->data)->current_surface; + rdp_guac_client_data* data = (rdp_guac_client_data*) client->data; + /* Layer for actual transfer */ guac_layer* buffer; @@ -165,6 +206,9 @@ void guac_rdp_gdi_patblt(rdpContext* context, PATBLT_ORDER* patblt) { guac_client_log_info(client, "Using fallback PATBLT (server is ignoring " "negotiated client capabilities)"); + /* Clip operation to bounds */ + __guac_rdp_clip_rect(data, &(patblt->nLeftRect), &(patblt->nTopRect), &(patblt->nWidth), &(patblt->nHeight)); + /* Render rectangle based on ROP */ switch (patblt->bRop) { @@ -250,6 +294,9 @@ void guac_rdp_gdi_scrblt(rdpContext* context, SCRBLT_ORDER* scrblt) { rdp_guac_client_data* data = (rdp_guac_client_data*) client->data; pthread_mutex_lock(&(data->update_lock)); + /* Clip operation to bounds */ + __guac_rdp_clip_rect(data, &(scrblt->nLeftRect), &(scrblt->nTopRect), &(scrblt->nWidth), &(scrblt->nHeight)); + /* Copy screen rect to current surface */ guac_protocol_send_copy(client->socket, GUAC_DEFAULT_LAYER, @@ -271,6 +318,9 @@ void guac_rdp_gdi_memblt(rdpContext* context, MEMBLT_ORDER* memblt) { rdp_guac_client_data* data = (rdp_guac_client_data*) client->data; pthread_mutex_lock(&(data->update_lock)); + /* Clip operation to bounds */ + __guac_rdp_clip_rect(data, &(memblt->nLeftRect), &(memblt->nTopRect), &(memblt->nWidth), &(memblt->nHeight)); + switch (memblt->bRop) { /* If blackness, send black rectangle */ @@ -378,6 +428,10 @@ void guac_rdp_gdi_opaquerect(rdpContext* context, OPAQUE_RECT_ORDER* opaque_rect rdp_guac_client_data* data = (rdp_guac_client_data*) client->data; pthread_mutex_lock(&(data->update_lock)); + /* Clip operation to bounds */ + __guac_rdp_clip_rect(data, &(opaque_rect->nLeftRect), &(opaque_rect->nTopRect), + &(opaque_rect->nWidth), &(opaque_rect->nHeight)); + guac_protocol_send_rect(client->socket, current_layer, opaque_rect->nLeftRect, opaque_rect->nTopRect, opaque_rect->nWidth, opaque_rect->nHeight); @@ -404,26 +458,21 @@ void guac_rdp_gdi_palette_update(rdpContext* context, PALETTE_UPDATE* palette) { void guac_rdp_gdi_set_bounds(rdpContext* context, rdpBounds* bounds) { guac_client* client = ((rdp_freerdp_context*) context)->client; - const guac_layer* current_layer = ((rdp_guac_client_data*) client->data)->current_surface; - rdp_guac_client_data* data = (rdp_guac_client_data*) client->data; - pthread_mutex_lock(&(data->update_lock)); - /* Reset clip */ - guac_protocol_send_reset(client->socket, current_layer); + /* If no bounds given, clear bounding rect */ + if (bounds == NULL) + data->bounded = false; - /* Set clip if specified */ - if (bounds != NULL) { - guac_protocol_send_rect(client->socket, current_layer, - bounds->left, bounds->top, - bounds->right - bounds->left + 1, - bounds->bottom - bounds->top + 1); - - guac_protocol_send_clip(client->socket, current_layer); + /* Otherwise, set bounding rectangle */ + else { + data->bounded = true; + data->bounds_left = bounds->left; + data->bounds_top = bounds->top; + data->bounds_right = bounds->right; + data->bounds_bottom = bounds->bottom; } - pthread_mutex_unlock(&(data->update_lock)); - } void guac_rdp_gdi_end_paint(rdpContext* context) { From 00e44007f5ff67b6ec140edce0a91f6e094e35af Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Mon, 13 May 2013 14:34:24 -0700 Subject: [PATCH 248/253] Do not modify input, initialize bounded flag. --- protocols/rdp/src/client.c | 1 + protocols/rdp/src/rdp_gdi.c | 88 +++++++++++++++++++++++-------------- 2 files changed, 56 insertions(+), 33 deletions(-) diff --git a/protocols/rdp/src/client.c b/protocols/rdp/src/client.c index d59db073..c6f14227 100644 --- a/protocols/rdp/src/client.c +++ b/protocols/rdp/src/client.c @@ -494,6 +494,7 @@ int guac_client_init(guac_client* client, int argc, char** argv) { /* Store client data */ guac_client_data->rdp_inst = rdp_inst; + guac_client_data->bounded = false; guac_client_data->mouse_button_mask = 0; guac_client_data->current_surface = GUAC_DEFAULT_LAYER; guac_client_data->clipboard = NULL; diff --git a/protocols/rdp/src/rdp_gdi.c b/protocols/rdp/src/rdp_gdi.c index 7b8bdf33..93b81991 100644 --- a/protocols/rdp/src/rdp_gdi.c +++ b/protocols/rdp/src/rdp_gdi.c @@ -143,11 +143,16 @@ void guac_rdp_gdi_dstblt(rdpContext* context, DSTBLT_ORDER* dstblt) { guac_client* client = ((rdp_freerdp_context*) context)->client; const guac_layer* current_layer = ((rdp_guac_client_data*) client->data)->current_surface; + int x = dstblt->nLeftRect; + int y = dstblt->nTopRect; + int w = dstblt->nWidth; + int h = dstblt->nHeight; + rdp_guac_client_data* data = (rdp_guac_client_data*) client->data; pthread_mutex_lock(&(data->update_lock)); /* Clip operation to bounds */ - __guac_rdp_clip_rect(data, &(dstblt->nLeftRect), &(dstblt->nTopRect), &(dstblt->nWidth), &(dstblt->nHeight)); + __guac_rdp_clip_rect(data, &x, &y, &w, &h); switch (dstblt->bRop) { @@ -156,8 +161,8 @@ void guac_rdp_gdi_dstblt(rdpContext* context, DSTBLT_ORDER* dstblt) { /* Send black rectangle */ guac_protocol_send_rect(client->socket, current_layer, - dstblt->nLeftRect, dstblt->nTopRect, - dstblt->nWidth, dstblt->nHeight); + x, y, + w, h); guac_protocol_send_cfill(client->socket, GUAC_COMP_OVER, current_layer, @@ -194,6 +199,11 @@ void guac_rdp_gdi_patblt(rdpContext* context, PATBLT_ORDER* patblt) { const guac_layer* current_layer = ((rdp_guac_client_data*) client->data)->current_surface; + int x = patblt->nLeftRect; + int y = patblt->nTopRect; + int w = patblt->nWidth; + int h = patblt->nHeight; + rdp_guac_client_data* data = (rdp_guac_client_data*) client->data; /* Layer for actual transfer */ @@ -207,7 +217,7 @@ void guac_rdp_gdi_patblt(rdpContext* context, PATBLT_ORDER* patblt) { "negotiated client capabilities)"); /* Clip operation to bounds */ - __guac_rdp_clip_rect(data, &(patblt->nLeftRect), &(patblt->nTopRect), &(patblt->nWidth), &(patblt->nHeight)); + __guac_rdp_clip_rect(data, &x, &y, &w, &h); /* Render rectangle based on ROP */ switch (patblt->bRop) { @@ -215,8 +225,8 @@ void guac_rdp_gdi_patblt(rdpContext* context, PATBLT_ORDER* patblt) { /* If blackness, send black rectangle */ case 0x00: guac_protocol_send_rect(client->socket, current_layer, - patblt->nLeftRect, patblt->nTopRect, - patblt->nWidth, patblt->nHeight); + x, y, + w, h); guac_protocol_send_cfill(client->socket, GUAC_COMP_OVER, current_layer, @@ -231,8 +241,8 @@ void guac_rdp_gdi_patblt(rdpContext* context, PATBLT_ORDER* patblt) { case 0xCC: case 0xF0: guac_protocol_send_rect(client->socket, current_layer, - patblt->nLeftRect, patblt->nTopRect, - patblt->nWidth, patblt->nHeight); + x, y, + w, h); guac_protocol_send_cfill(client->socket, GUAC_COMP_OVER, current_layer, @@ -245,8 +255,8 @@ void guac_rdp_gdi_patblt(rdpContext* context, PATBLT_ORDER* patblt) { /* If whiteness, send white rectangle */ case 0xFF: guac_protocol_send_rect(client->socket, current_layer, - patblt->nLeftRect, patblt->nTopRect, - patblt->nWidth, patblt->nHeight); + x, y, + w, h); guac_protocol_send_cfill(client->socket, GUAC_COMP_OVER, current_layer, @@ -261,7 +271,7 @@ void guac_rdp_gdi_patblt(rdpContext* context, PATBLT_ORDER* patblt) { /* Send rectangle stroke */ guac_protocol_send_rect(client->socket, buffer, - 0, 0, patblt->nWidth, patblt->nHeight); + 0, 0, w, h); /* Fill rectangle with fore color only */ guac_protocol_send_cfill(client->socket, GUAC_COMP_OVER, buffer, @@ -271,13 +281,13 @@ void guac_rdp_gdi_patblt(rdpContext* context, PATBLT_ORDER* patblt) { guac_protocol_send_transfer(client->socket, /* ... from buffer */ - buffer, 0, 0, patblt->nWidth, patblt->nHeight, + buffer, 0, 0, w, h, /* ... inverting */ GUAC_TRANSFER_BINARY_XOR, /* ... to current layer */ - current_layer, patblt->nLeftRect, patblt->nTopRect); + current_layer, x, y); /* Done with buffer */ guac_client_free_buffer(client, buffer); @@ -291,18 +301,23 @@ void guac_rdp_gdi_scrblt(rdpContext* context, SCRBLT_ORDER* scrblt) { guac_client* client = ((rdp_freerdp_context*) context)->client; const guac_layer* current_layer = ((rdp_guac_client_data*) client->data)->current_surface; + int x = scrblt->nLeftRect; + int y = scrblt->nTopRect; + int w = scrblt->nWidth; + int h = scrblt->nHeight; + rdp_guac_client_data* data = (rdp_guac_client_data*) client->data; pthread_mutex_lock(&(data->update_lock)); /* Clip operation to bounds */ - __guac_rdp_clip_rect(data, &(scrblt->nLeftRect), &(scrblt->nTopRect), &(scrblt->nWidth), &(scrblt->nHeight)); + __guac_rdp_clip_rect(data, &x, &y, &w, &h); /* Copy screen rect to current surface */ guac_protocol_send_copy(client->socket, GUAC_DEFAULT_LAYER, - scrblt->nXSrc, scrblt->nYSrc, scrblt->nWidth, scrblt->nHeight, + scrblt->nXSrc, scrblt->nYSrc, w, h, GUAC_COMP_OVER, current_layer, - scrblt->nLeftRect, scrblt->nTopRect); + x, y); pthread_mutex_unlock(&(data->update_lock)); @@ -315,19 +330,24 @@ void guac_rdp_gdi_memblt(rdpContext* context, MEMBLT_ORDER* memblt) { guac_socket* socket = client->socket; guac_rdp_bitmap* bitmap = (guac_rdp_bitmap*) memblt->bitmap; + int x = memblt->nLeftRect; + int y = memblt->nTopRect; + int w = memblt->nWidth; + int h = memblt->nHeight; + rdp_guac_client_data* data = (rdp_guac_client_data*) client->data; pthread_mutex_lock(&(data->update_lock)); /* Clip operation to bounds */ - __guac_rdp_clip_rect(data, &(memblt->nLeftRect), &(memblt->nTopRect), &(memblt->nWidth), &(memblt->nHeight)); + __guac_rdp_clip_rect(data, &x, &y, &w, &h); switch (memblt->bRop) { /* If blackness, send black rectangle */ case 0x00: guac_protocol_send_rect(client->socket, current_layer, - memblt->nLeftRect, memblt->nTopRect, - memblt->nWidth, memblt->nHeight); + x, y, + w, h); guac_protocol_send_cfill(client->socket, GUAC_COMP_OVER, current_layer, @@ -354,13 +374,13 @@ void guac_rdp_gdi_memblt(rdpContext* context, MEMBLT_ORDER* memblt) { cairo_surface_t* surface = cairo_image_surface_create_for_data( memblt->bitmap->data + 4*(memblt->nXSrc + memblt->nYSrc*memblt->bitmap->width), CAIRO_FORMAT_RGB24, - memblt->nWidth, memblt->nHeight, + w, h, 4*memblt->bitmap->width); /* Send surface to buffer */ guac_protocol_send_png(socket, GUAC_COMP_OVER, current_layer, - memblt->nLeftRect, memblt->nTopRect, surface); + x, y, surface); /* Free surface */ cairo_surface_destroy(surface); @@ -373,9 +393,9 @@ void guac_rdp_gdi_memblt(rdpContext* context, MEMBLT_ORDER* memblt) { guac_protocol_send_copy(socket, bitmap->layer, memblt->nXSrc, memblt->nYSrc, - memblt->nWidth, memblt->nHeight, + w, h, GUAC_COMP_OVER, - current_layer, memblt->nLeftRect, memblt->nTopRect); + current_layer, x, y); /* Increment usage counter */ ((guac_rdp_bitmap*) bitmap)->used++; @@ -385,8 +405,8 @@ void guac_rdp_gdi_memblt(rdpContext* context, MEMBLT_ORDER* memblt) { /* If whiteness, send white rectangle */ case 0xFF: guac_protocol_send_rect(client->socket, current_layer, - memblt->nLeftRect, memblt->nTopRect, - memblt->nWidth, memblt->nHeight); + x, y, + w, h); guac_protocol_send_cfill(client->socket, GUAC_COMP_OVER, current_layer, @@ -403,9 +423,9 @@ void guac_rdp_gdi_memblt(rdpContext* context, MEMBLT_ORDER* memblt) { guac_protocol_send_transfer(socket, bitmap->layer, memblt->nXSrc, memblt->nYSrc, - memblt->nWidth, memblt->nHeight, + w, h, guac_rdp_rop3_transfer_function(client, memblt->bRop), - current_layer, memblt->nLeftRect, memblt->nTopRect); + current_layer, x, y); /* Increment usage counter */ ((guac_rdp_bitmap*) bitmap)->used++; @@ -428,13 +448,15 @@ void guac_rdp_gdi_opaquerect(rdpContext* context, OPAQUE_RECT_ORDER* opaque_rect rdp_guac_client_data* data = (rdp_guac_client_data*) client->data; pthread_mutex_lock(&(data->update_lock)); - /* Clip operation to bounds */ - __guac_rdp_clip_rect(data, &(opaque_rect->nLeftRect), &(opaque_rect->nTopRect), - &(opaque_rect->nWidth), &(opaque_rect->nHeight)); + int x = opaque_rect->nLeftRect; + int y = opaque_rect->nTopRect; + int w = opaque_rect->nWidth; + int h = opaque_rect->nHeight; - guac_protocol_send_rect(client->socket, current_layer, - opaque_rect->nLeftRect, opaque_rect->nTopRect, - opaque_rect->nWidth, opaque_rect->nHeight); + /* Clip operation to bounds */ + __guac_rdp_clip_rect(data, &x, &y, &w, &h); + + guac_protocol_send_rect(client->socket, current_layer, x, y, w, h); guac_protocol_send_cfill(client->socket, GUAC_COMP_OVER, current_layer, From 3af39503c0af8d75cd50dbb0b3756c6659ee0f80 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Mon, 13 May 2013 14:37:48 -0700 Subject: [PATCH 249/253] Fix clipping calculations. --- protocols/rdp/src/rdp_gdi.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/protocols/rdp/src/rdp_gdi.c b/protocols/rdp/src/rdp_gdi.c index 93b81991..0b52a77c 100644 --- a/protocols/rdp/src/rdp_gdi.c +++ b/protocols/rdp/src/rdp_gdi.c @@ -55,19 +55,19 @@ static void __guac_rdp_clip_rect(rdp_guac_client_data* data, int* x, int* y, int int clipped_bottom = clipped_top + *h - 1; /* Clip left */ - if (clipped_left < data->bounds_left) clipped_left = data->bounds_left; - else if (clipped_left > data->bounds_left) clipped_left = data->bounds_left; + if (clipped_left < data->bounds_left) clipped_left = data->bounds_left; + else if (clipped_left > data->bounds_right) clipped_left = data->bounds_right; /* Clip right */ - if (clipped_right < data->bounds_right) clipped_right = data->bounds_right; + if (clipped_right < data->bounds_left) clipped_right = data->bounds_left; else if (clipped_right > data->bounds_right) clipped_right = data->bounds_right; /* Clip top */ - if (clipped_top < data->bounds_top) clipped_top = data->bounds_top; - else if (clipped_top > data->bounds_top) clipped_top = data->bounds_top; + if (clipped_top < data->bounds_top) clipped_top = data->bounds_top; + else if (clipped_top > data->bounds_bottom) clipped_top = data->bounds_bottom; /* Clip bottom */ - if (clipped_bottom < data->bounds_bottom) clipped_bottom = data->bounds_bottom; + if (clipped_bottom < data->bounds_top) clipped_bottom = data->bounds_top; else if (clipped_bottom > data->bounds_bottom) clipped_bottom = data->bounds_bottom; /* Store new rect dimensions */ From b20aa538438654b199e1ee6b62aee1bc2c4d065b Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Mon, 13 May 2013 14:40:54 -0700 Subject: [PATCH 250/253] Wrong coordinate being stored in Y. --- protocols/rdp/src/rdp_gdi.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/protocols/rdp/src/rdp_gdi.c b/protocols/rdp/src/rdp_gdi.c index 0b52a77c..2d7cdb96 100644 --- a/protocols/rdp/src/rdp_gdi.c +++ b/protocols/rdp/src/rdp_gdi.c @@ -72,7 +72,7 @@ static void __guac_rdp_clip_rect(rdp_guac_client_data* data, int* x, int* y, int /* Store new rect dimensions */ *x = clipped_left; - *y = clipped_right; + *y = clipped_top; *w = clipped_right - clipped_left + 1; *h = clipped_bottom - clipped_top + 1; From 8698cfc1cc823fc7e968ab5e50a075b3befd441f Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Mon, 13 May 2013 17:50:14 -0700 Subject: [PATCH 251/253] Fix memblt/scrblt source coordinates. --- protocols/rdp/src/rdp_gdi.c | 61 ++++++++++++++++--------------------- 1 file changed, 27 insertions(+), 34 deletions(-) diff --git a/protocols/rdp/src/rdp_gdi.c b/protocols/rdp/src/rdp_gdi.c index 2d7cdb96..54af3bc9 100644 --- a/protocols/rdp/src/rdp_gdi.c +++ b/protocols/rdp/src/rdp_gdi.c @@ -160,9 +160,7 @@ void guac_rdp_gdi_dstblt(rdpContext* context, DSTBLT_ORDER* dstblt) { case 0: /* Send black rectangle */ - guac_protocol_send_rect(client->socket, current_layer, - x, y, - w, h); + guac_protocol_send_rect(client->socket, current_layer, x, y, w, h); guac_protocol_send_cfill(client->socket, GUAC_COMP_OVER, current_layer, @@ -224,9 +222,7 @@ void guac_rdp_gdi_patblt(rdpContext* context, PATBLT_ORDER* patblt) { /* If blackness, send black rectangle */ case 0x00: - guac_protocol_send_rect(client->socket, current_layer, - x, y, - w, h); + guac_protocol_send_rect(client->socket, current_layer, x, y, w, h); guac_protocol_send_cfill(client->socket, GUAC_COMP_OVER, current_layer, @@ -240,9 +236,7 @@ void guac_rdp_gdi_patblt(rdpContext* context, PATBLT_ORDER* patblt) { /* If operation is just a copy, send foreground only */ case 0xCC: case 0xF0: - guac_protocol_send_rect(client->socket, current_layer, - x, y, - w, h); + guac_protocol_send_rect(client->socket, current_layer, x, y, w, h); guac_protocol_send_cfill(client->socket, GUAC_COMP_OVER, current_layer, @@ -254,9 +248,7 @@ void guac_rdp_gdi_patblt(rdpContext* context, PATBLT_ORDER* patblt) { /* If whiteness, send white rectangle */ case 0xFF: - guac_protocol_send_rect(client->socket, current_layer, - x, y, - w, h); + guac_protocol_send_rect(client->socket, current_layer, x, y, w, h); guac_protocol_send_cfill(client->socket, GUAC_COMP_OVER, current_layer, @@ -306,18 +298,23 @@ void guac_rdp_gdi_scrblt(rdpContext* context, SCRBLT_ORDER* scrblt) { int w = scrblt->nWidth; int h = scrblt->nHeight; + int x_src = scrblt->nXSrc; + int y_src = scrblt->nYSrc; + rdp_guac_client_data* data = (rdp_guac_client_data*) client->data; pthread_mutex_lock(&(data->update_lock)); /* Clip operation to bounds */ __guac_rdp_clip_rect(data, &x, &y, &w, &h); + /* Update source coordinates */ + x_src += x - scrblt->nLeftRect; + y_src += y - scrblt->nTopRect; + /* Copy screen rect to current surface */ guac_protocol_send_copy(client->socket, - GUAC_DEFAULT_LAYER, - scrblt->nXSrc, scrblt->nYSrc, w, h, - GUAC_COMP_OVER, current_layer, - x, y); + GUAC_DEFAULT_LAYER, x_src, y_src, w, h, + GUAC_COMP_OVER, current_layer, x, y); pthread_mutex_unlock(&(data->update_lock)); @@ -335,19 +332,24 @@ void guac_rdp_gdi_memblt(rdpContext* context, MEMBLT_ORDER* memblt) { int w = memblt->nWidth; int h = memblt->nHeight; + int x_src = memblt->nXSrc; + int y_src = memblt->nYSrc; + rdp_guac_client_data* data = (rdp_guac_client_data*) client->data; pthread_mutex_lock(&(data->update_lock)); /* Clip operation to bounds */ __guac_rdp_clip_rect(data, &x, &y, &w, &h); + /* Update source coordinates */ + x_src += x - memblt->nLeftRect; + y_src += y - memblt->nTopRect; + switch (memblt->bRop) { /* If blackness, send black rectangle */ case 0x00: - guac_protocol_send_rect(client->socket, current_layer, - x, y, - w, h); + guac_protocol_send_rect(client->socket, current_layer, x, y, w, h); guac_protocol_send_cfill(client->socket, GUAC_COMP_OVER, current_layer, @@ -372,10 +374,8 @@ void guac_rdp_gdi_memblt(rdpContext* context, MEMBLT_ORDER* memblt) { /* Create surface from image data */ cairo_surface_t* surface = cairo_image_surface_create_for_data( - memblt->bitmap->data + 4*(memblt->nXSrc + memblt->nYSrc*memblt->bitmap->width), - CAIRO_FORMAT_RGB24, - w, h, - 4*memblt->bitmap->width); + memblt->bitmap->data + 4*(x_src + y_src*memblt->bitmap->width), + CAIRO_FORMAT_RGB24, w, h, 4*memblt->bitmap->width); /* Send surface to buffer */ guac_protocol_send_png(socket, @@ -391,11 +391,8 @@ void guac_rdp_gdi_memblt(rdpContext* context, MEMBLT_ORDER* memblt) { /* Otherwise, copy */ else guac_protocol_send_copy(socket, - bitmap->layer, - memblt->nXSrc, memblt->nYSrc, - w, h, - GUAC_COMP_OVER, - current_layer, x, y); + bitmap->layer, x_src, y_src, w, h, + GUAC_COMP_OVER, current_layer, x, y); /* Increment usage counter */ ((guac_rdp_bitmap*) bitmap)->used++; @@ -404,9 +401,7 @@ void guac_rdp_gdi_memblt(rdpContext* context, MEMBLT_ORDER* memblt) { /* If whiteness, send white rectangle */ case 0xFF: - guac_protocol_send_rect(client->socket, current_layer, - x, y, - w, h); + guac_protocol_send_rect(client->socket, current_layer, x, y, w, h); guac_protocol_send_cfill(client->socket, GUAC_COMP_OVER, current_layer, @@ -421,9 +416,7 @@ void guac_rdp_gdi_memblt(rdpContext* context, MEMBLT_ORDER* memblt) { guac_rdp_cache_bitmap(context, memblt->bitmap); guac_protocol_send_transfer(socket, - bitmap->layer, - memblt->nXSrc, memblt->nYSrc, - w, h, + bitmap->layer, x_src, y_src, w, h, guac_rdp_rop3_transfer_function(client, memblt->bRop), current_layer, x, y); From 7d0dfd44257e21c6591d04143583fb706386c0c6 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Mon, 13 May 2013 17:58:19 -0700 Subject: [PATCH 252/253] #250: Implement DSTBLT. --- protocols/rdp/src/rdp_gdi.c | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/protocols/rdp/src/rdp_gdi.c b/protocols/rdp/src/rdp_gdi.c index 54af3bc9..8fc587e1 100644 --- a/protocols/rdp/src/rdp_gdi.c +++ b/protocols/rdp/src/rdp_gdi.c @@ -168,10 +168,34 @@ void guac_rdp_gdi_dstblt(rdpContext* context, DSTBLT_ORDER* dstblt) { break; + /* DSTINVERT */ + case 0x55: + + /* Invert */ + guac_protocol_send_transfer(client->socket, + current_layer, x, y, w, h, + GUAC_TRANSFER_BINARY_NDEST, + current_layer, x, y); + + break; + + /* NOP */ + case 0xAA: + break; + + /* Whiteness */ + case 0xFF: + guac_protocol_send_rect(client->socket, current_layer, x, y, w, h); + + guac_protocol_send_cfill(client->socket, + GUAC_COMP_OVER, current_layer, + 0xFF, 0xFF, 0xFF, 0xFF); + break; + /* Unsupported ROP3 */ default: guac_client_log_info(client, - "guac_rdp_gdi_dstblt(rop3=%i)", dstblt->bRop); + "guac_rdp_gdi_dstblt(rop3=0x%x)", dstblt->bRop); } @@ -179,6 +203,7 @@ void guac_rdp_gdi_dstblt(rdpContext* context, DSTBLT_ORDER* dstblt) { } + void guac_rdp_gdi_patblt(rdpContext* context, PATBLT_ORDER* patblt) { /* From f73ece4e120c87b2f9fa116d49dddd6edeba4cf6 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Mon, 13 May 2013 22:03:28 -0700 Subject: [PATCH 253/253] Dead grave and dead acute are not actually wrong here. --- protocols/rdp/src/rdp_keymap_de_de.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/protocols/rdp/src/rdp_keymap_de_de.c b/protocols/rdp/src/rdp_keymap_de_de.c index ff8327ef..8b2143f6 100644 --- a/protocols/rdp/src/rdp_keymap_de_de.c +++ b/protocols/rdp/src/rdp_keymap_de_de.c @@ -343,12 +343,12 @@ static guac_rdp_keysym_desc __guac_rdp_keymap_mapping[] = { .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, - /* dead grave (WRONG) */ + /* dead grave */ { .keysym = 0xfe50, .scancode = 0x0d, .clear_keysyms = GUAC_KEYSYMS_ALTGR, .set_keysyms = GUAC_KEYSYMS_SHIFT }, - /* dead acute (WRONG) */ + /* dead acute */ { .keysym = 0xfe51, .scancode = 0x0d, .clear_keysyms = GUAC_KEYSYMS_ALL_SHIFT_ALTGR },