|
|
DataMuseum.dkPresents historical artifacts from the history of: Rational R1000/400 Tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Rational R1000/400 Tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: B T
Length: 86204 (0x150bc)
Types: TextFile
Names: »B«
└─⟦85b835f43⟧ Bits:30000549 8mm tape, Rational 1000, Xlib rev 6.00
└─⟦0c20f784e⟧ »DATA«
└─⟦1abbe589f⟧
└─⟦059497ac5⟧
└─⟦this⟧
with Text_Io;
with Xlbt_Arithmetic;
use Xlbt_Arithmetic;
with Xlbt_Basic;
use Xlbt_Basic;
with Xlbt_Event2;
use Xlbt_Event2;
with Xlbt_Key;
use Xlbt_Key;
with Xlbt_Key2;
use Xlbt_Key2;
with Xlbt_Key_Defs;
use Xlbt_Key_Defs;
with Xlbt_String;
use Xlbt_String;
with Xlbp_Keyboard_Encoding;
use Xlbp_Keyboard_Encoding;
with Xlbit_Library2;
use Xlbit_Library2;
with Xlbit_Library4;
use Xlbit_Library4;
with Xlbip_Internal;
use Xlbip_Internal;
with Xlbmt_Network_Types;
use Xlbmt_Network_Types;
with Xlbmt_Parameters;
use Xlbmt_Parameters;
with Xlbmp_Error_Log;
use Xlbmp_Error_Log;
package body Xlbp_Key is
------------------------------------------------------------------------------
-- X Library Keys
--
-- Xlbp_Key - Used to translate key codes to/from key symbols and strings.
------------------------------------------------------------------------------
-- Copyright 1989 - 1991 by Rational, Santa Clara, California.
-- Copyright 1987 - 1989 by Digital Equipment Corporation, Maynard, Mass.
-- Copyright 1987 - 1989 by Massachusetts Institute of Technology,
-- Cambridge, Massachusetts.
--
-- All Rights Reserved.
--
-- Permission to use, copy, modify, and distribute this software and its
-- documentation for any purpose and without fee is hereby granted,
-- provided that the above copyright notice(s) appear in all copies and that
-- both that copyright notice(s) and this permission notice appear in
-- supporting documentation, and that the names of Digital, MIT, or Rational
-- not be used in advertising or publicity pertaining to distribution of
-- the software without specific, written prior permission.
--
-- Digital, MIT, and Rational disclaim all warranties with regard to this
-- software, including all implied warranties of merchantability and fitness,
-- in no event shall Digital, MIT, or Rational be liable for any special,
-- indirect or consequential damages or any damages whatsoever resulting from
-- loss of use, data or profits, whether in an action of contract, negligence
-- or other tortious action, arising out of or in connection with the use or
-- performance of this software.
------------------------------------------------------------------------------
-- ****************************************************************************
-- * Date - /Name/ Comment
-- *
-- * 7-NOV-90 - /GEB/ Implement the new multitasking protection scheme for
-- * - library state.
-- ****************************************************************************
All_Mods : constant X_Key_Button_Mask :=
X_Key_Button_Mask'
(Shift_Mask | Lock_Mask | Control_Mask | Mod_1_Mask |
Mod_2_Mask | Mod_3_Mask | Mod_4_Mask | Mod_5_Mask => True,
others => False);
type X_Mod_Mask_Array is array (X_Key_Modifier) of X_Key_Button_Mask;
Mod_Mask : constant X_Mod_Mask_Array :=
(Shift_Map_Index =>
X_Key_Button_Mask'(Shift_Mask => True, others => False),
Lock_Map_Index =>
X_Key_Button_Mask'(Lock_Mask => True, others => False),
Control_Map_Index =>
X_Key_Button_Mask'(Control_Mask => True, others => False),
Mod_1_Map_Index =>
X_Key_Button_Mask'(Mod_1_Mask => True, others => False),
Mod_2_Map_Index =>
X_Key_Button_Mask'(Mod_2_Mask => True, others => False),
Mod_3_Map_Index =>
X_Key_Button_Mask'(Mod_3_Mask => True, others => False),
Mod_4_Map_Index =>
X_Key_Button_Mask'(Mod_4_Mask => True, others => False),
Mod_5_Map_Index =>
X_Key_Button_Mask'(Mod_5_Mask => True, others => False));
function Initialize (Display : X_Display) return Boolean;
procedure Initialize_Ks_Info_Map;
--\f
function Find_Key_Code (Display : X_Display;
Code : X_Key_Sym) return X_Key_Code is
------------------------------------------------------------------------------
-- given a Key_Sym, returns the first key_code found after the index value
-- in the table. (Hopefully, can be found quickly).
------------------------------------------------------------------------------
begin
for I in Display.Key_Syms'Range (1) loop
for J in Display.Key_Syms'Range (2) loop
if Display.Key_Syms (I, J) = Code then
--/ if not TeleGen2_2d_Bug then
return I;
--/ else
--// return X_Key_Code (I);
--/ end if;
end if;
end loop;
end loop;
return 0;
end Find_Key_Code;
--\f
procedure Compute_Mask_From_Key_Trans (Display : X_Display;
P : X_Key_Trans) is
------------------------------------------------------------------------------
-- given a list of modifiers, computes the mask necessary for later matching.
-- This routine must lookup the key in the Keymap and then search to see
-- what modifier it is bound to, if any.
------------------------------------------------------------------------------
Code : X_Key_Code;
M : X_Modifier_Keymap := Display.Modifier_Map;
begin
P.State := X_Key_Button_Mask'(Any_Modifier => True, others => False);
for I in P.Modifiers'Range loop
-- if not found, then not on current keyboard
Code := Find_Key_Code (Display, P.Modifiers (I));
if Code = 0 then
return;
end if;
-- code is now the keycode for the modifier you want
for J in M.Modifiermap'Range loop
for K in M.Modifiermap (J)'Range loop
if M.Modifiermap (J) (K) = Code then
P.State := P.State or Mod_Mask (K);
exit;
end if;
end loop;
end loop;
end loop;
P.State (Any_Modifier) := False;
end Compute_Mask_From_Key_Trans;
--\f
procedure X_Convert_Case (Display : X_Display;
Sym : X_Key_Sym;
Lower : out X_Key_Sym;
Upper : out X_Key_Sym) is
------------------------------------------------------------------------------
-- Display - Specifies the display to use
-- Sym - Specifies the symbol to upper/lower casify
-- Lower - Receives the lower case version
-- Upper - Receives the upper case version
--
-- Called with a symbol in order to obtain the upper and lower case versions
-- of the symbol if there are such things. ie. 'A' and 'a' both have uc/lc
-- versions but '%' doesn't.
------------------------------------------------------------------------------
use Latin1;
begin
Lower := Sym;
Upper := Sym;
if Sym > 16#FF# then
return;
end if;
if Sym >= Xk_S_A and then Sym <= Xk_S_Z then
Lower := Sym + (Xk_A - Xk_S_A);
elsif Sym >= Xk_A and then Sym <= Xk_Z then
Upper := Sym - (Xk_A - Xk_S_A);
elsif Sym >= Xk_S_Agrave and then Sym <= Xk_S_Odiaeresis then
Lower := Sym + (Xk_Agrave - Xk_S_Agrave);
elsif Sym >= Xk_Agrave and then Sym <= Xk_Odiaeresis then
Upper := Sym - (Xk_Agrave - Xk_S_Agrave);
elsif Sym >= Xk_Ooblique and then Sym <= Xk_S_Thorn then
Lower := Sym + (Xk_Oslash - Xk_Ooblique);
elsif Sym >= Xk_Oslash and then Sym <= Xk_Thorn then
Upper := Sym - (Xk_Oslash - Xk_Ooblique);
end if;
end X_Convert_Case;
--\f
function Key_Code_To_Key_Sym (Display : X_Display;
Key_Code : X_Key_Code;
Col : U_Char) return X_Key_Sym is
Col_Odd : U_Char;
Col_Even : U_Char;
Per : U_Char;
Lc : X_Key_Sym;
Uc : X_Key_Sym;
begin
----If the Key_Code is nonsense or if the Col is not in the 0..3 range and
-- is also out of the Key_Syms range then return No_Symbol.
--/ if not TeleGen2_2d_Bug then
if not (Key_Code in Display.Key_Syms'Range (1)) then
--/ else
--// if not (TeleGen2_2d_Bug(Key_Code) in Display.Key_Syms'Range (1)) then
--/ end if;
return No_Symbol;
end if;
if Col < Display.Key_Syms'First (2) or else
(Col > Display.Key_Syms'Last (2) and then Col >= 4) then
return No_Symbol;
end if;
----If Col is in the 0..3 range then we have an answer even if we have to
-- compute it.
if Col < 4 then
----Locate the last non-No_Symbol entry for this Key_Code.
Col_Odd := Col;
Per := Display.Key_Syms'Last (2);
if Col > 1 then
while Per >= 2 and then
--/ if not TeleGen2_2d_Bug then
Display.Key_Syms (Key_Code, Per) = No_Symbol loop
--/ else
--// Display.Key_Syms (TeleGen2_2d_Bug(Key_Code), Per) =
--// No_Symbol loop
--/ end if;
Per := Per - 1;
end loop;
if Per < 2 then
Col_Odd := Col_Odd - 1;
end if;
end if;
----If the even/odd pair of X_Key_Syms indexed by Col is a single symbol and
-- a No_Symbol then do the X_Convert_Case call to see if we have an upper/lower
-- case alphabetical.
Col_Even := Col_Odd - Col_Odd rem 2;
Col_Odd := Col_Even + 1;
if Per < Col_Odd or else
--/ if not TeleGen2_2d_Bug then
Display.Key_Syms (Key_Code, Col_Odd) = No_Symbol then
X_Convert_Case
(Display, Display.Key_Syms (Key_Code, Col_Even), Lc, Uc);
--/ else
--// Display.Key_Syms (TeleGen2_2d_Bug(Key_Code), Col_Odd) =
--// No_Symbol then
--// X_Convert_Case (Display,
--// Display.Key_Syms (TeleGen2_2d_Bug(Key_Code),
--// Col_Even),
--// Lc,
--// Uc);
--/ end if;
if Col rem 2 = 0 then
return Lc;
else
if Lc = Uc then
return No_Symbol;
else
return Uc;
end if;
end if;
end if;
end if;
----Otherwise return whatever is in the table.
--/ if not TeleGen2_2d_Bug then
return Display.Key_Syms (Key_Code, Col);
--/ else
--// return Display.Key_Syms (TeleGen2_2d_Bug(Key_Code), Col);
--/ end if;
end Key_Code_To_Key_Sym;
--\f
function Init_Mod_Map (Display : X_Display) return Boolean is
Map : X_Modifier_Keymap;
Sym : X_Key_Sym;
P : X_Key_Trans;
begin
Map := X_Get_Modifier_Mapping (Display);
Display.Modifier_Map := Map;
if Map = None_X_Modifier_Keymap then
return False;
end if;
if Display.Key_Syms = null and then not Initialize (Display) then
return False;
end if;
Lock_Display (Display);
----If any Lock key contains Caps_Lock, then interpret as Caps_Lock,
-- else if any contains Shift_Lock, then interpret as Shift_Lock,
-- else ignore Lock altogether.
Display.Lock_Meaning := No_Symbol;
----Lock modifiers are in the second row of the matrix.
for I in Map.Modifiermap'Range loop
for J in Display.Key_Syms'Range (2) loop
Sym :=
Key_Code_To_Key_Sym (Display,
Map.Modifiermap (I) (Lock_Map_Index),
J);
if Sym = Misc.Xk_Caps_Lock then
Display.Lock_Meaning := Misc.Xk_Caps_Lock;
exit;
elsif Sym = Misc.Xk_Shift_Lock then
Display.Lock_Meaning := Misc.Xk_Shift_Lock;
end if;
end loop;
end loop;
----Now find any Mod<n> modifier acting as the Group modifier.
Display.Mode_Switch := None_X_Key_Button_Mask;
for I in Map.Modifiermap'Range loop
for J in Display.Key_Syms'Range (2) loop
for K in Mod_1_Map_Index .. Mod_5_Map_Index loop
Sym := Key_Code_To_Key_Sym (Display,
Map.Modifiermap (I) (K),
J);
if Sym = Misc.Xk_Mode_Switch then
Display.Mode_Switch :=
Display.Mode_Switch or Mod_Mask (K);
end if;
end loop;
end loop;
end loop;
P := Display.Key_Bindings;
while P /= null loop
Compute_Mask_From_Key_Trans (Display, P);
P := P.Next;
end loop;
Unlock_Display (Display);
return True;
end Init_Mod_Map;
--\f
function Initialize (Display : X_Display) return Boolean is
Ks : X_Key_Sym_List_2d;
begin
----Let's go get the key_syms from the server.
if Display.Key_Syms = null then
----Get the keysym array from the server.
Ks := X_Get_Keyboard_Mapping (Display,
Display.Min_Keycode,
Display.Max_Keycode);
----Stick the table into the display.
Lock_Display (Display);
Display.Key_Syms := Ks;
Unlock_Display (Display);
end if;
----Check the modifier and translation tables also.
if Display.Modifier_Map = null and then not Init_Mod_Map (Display) then
return False;
end if;
return Ks /= null;
end Initialize;
--\f
function X_Key_Code_To_Key_Sym (Display : X_Display;
Key_Code : X_Key_Code;
Column : U_Char) return X_Key_Sym is
begin
if Display.Key_Syms = null and then not Initialize (Display) then
return No_Symbol;
end if;
return Key_Code_To_Key_Sym (Display, Key_Code, Column);
end X_Key_Code_To_Key_Sym;
--\f
function X_Key_Sym_To_Key_Code (Display : X_Display;
Key_Symbol : X_Key_Sym) return X_Key_Code is
begin
if Display.Key_Syms = null and then not Initialize (Display) then
return None_X_Key_Code;
end if;
for I in Display.Key_Syms'Range (1) loop
for J in Display.Key_Syms'Range (2) loop
--/ if not TeleGen2_2d_Bug then
if Key_Code_To_Key_Sym (Display, I, J) = Key_Symbol then
return I;
end if;
--/ else
--// if Key_Code_To_Key_Sym (Display, X_Key_Code (I), J) = key_symbol then
--// return X_Key_Code (I);
--// end if;
--/ end if;
end loop;
end loop;
return 0;
end X_Key_Sym_To_Key_Code;
--\f
function X_Key_Sym_To_String (Key_Symbol : X_Key_Sym) return X_String is
use X_Ks_Info_Map;
Iter : X_Ks_Info_Map.Iter;
Flags : S_Long;
Map : X_Ks_Info_Map.Map renames X_Lib_Ks_Info_Map;
begin
if Map = None_Map then
Initialize_Ks_Info_Map;
end if;
Initialize (Map, Iter, Key_Symbol);
if Done (Iter) then
return "";
else
declare
Str : constant X_String := Key (Iter);
begin
return Str;
end;
end if;
end X_Key_Sym_To_String;
--\f
function X_Lookup_Key_Sym (Event : X_Event;
Column : U_Char) return X_Key_Sym is
begin
if Event.Display.Key_Syms = null and then
not Initialize (Event.Display) then
return No_Symbol;
end if;
return Key_Code_To_Key_Sym (Event.Display, Event.Key.Key_Code, Column);
end X_Lookup_Key_Sym;
--\f
procedure X_Translate_Key (Display : X_Display;
Key_Code : X_Key_Code;
Modifiers : X_Key_Button_Mask;
Modifiers_Return : out X_Key_Button_Mask;
Key_Sym_Return : out X_Key_Sym;
Status : out X_Status) is
Per : U_Char;
K1 : X_Key_Sym;
K2 : X_Key_Sym;
Sym : X_Key_Sym;
Lsym : X_Key_Sym;
Usym : X_Key_Sym;
begin
if Display.Key_Syms = null and then not Initialize (Display) then
Status := Failed;
return;
end if;
Modifiers_Return := Display.Mode_Switch;
Modifiers_Return (Shift_Mask) := True;
Modifiers_Return (Lock_Mask) := True;
--/ if not TeleGen2_2d_Bug then
if Key_Code not in Display.Key_Syms'Range (1) then
--/ else
--// if TeleGen2_2d_Bug(Key_Code) not in Display.Key_Syms'Range (1) then
--/ end if;
Key_Sym_Return := No_Symbol;
Status := Successful;
return;
end if;
Per := Display.Key_Syms'Length (2);
while Per > 2 and then
--/ if not TeleGen2_2d_Bug then
Display.Key_Syms (Key_Code, Per - 1) = No_Symbol loop
--/ else
--// Display.Key_Syms (TeleGen2_2d_Bug(Key_Code), Per - 1) =
--// No_Symbol loop
--/ end if;
Per := Per - 1;
end loop;
--/ if not TeleGen2_2d_Bug then
if Per > 2 and then
(Modifiers and Display.Mode_Switch) /= None_X_Key_Button_Mask then
K1 := Display.Key_Syms (Key_Code, 2);
if Per > 3 then
K2 := Display.Key_Syms (Key_Code, 3);
else
K2 := No_Symbol;
end if;
Per := Per - 2;
else
K1 := Display.Key_Syms (Key_Code, 0);
if Per > 1 then
K2 := Display.Key_Syms (Key_Code, 1);
else
K2 := No_Symbol;
end if;
end if;
--/ else
--// if Per > 2 and then
--// (Modifiers and Display.Mode_Switch) /= None_X_Key_Button_Mask then
--// K1 := Display.Key_Syms (TeleGen2_2d_Bug (Key_Code), 2);
--// if Per > 3 then
--// K2 := Display.Key_Syms (TeleGen2_2d_Bug (Key_Code), 3);
--// else
--// K2 := No_Symbol;
--// end if;
--// Per := Per - 2;
--// else
--// K1 := Display.Key_Syms (TeleGen2_2d_Bug (Key_Code), 0);
--// if Per > 1 then
--// K2 := Display.Key_Syms (TeleGen2_2d_Bug (Key_Code), 1);
--// else
--// K2 := No_Symbol;
--// end if;
--// end if;
--//
--/ end if;
if not Modifiers (Shift_Mask) and then
(not Modifiers (Lock_Mask) or else
Display.Lock_Meaning = No_Symbol) then
if Per = 1 or else K2 = No_Symbol then
X_Convert_Case (Display, K1, Lsym, Usym);
Usym := Lsym;
else
Usym := K1;
end if;
elsif not Modifiers (Lock_Mask) or else
Display.Lock_Meaning /= Misc.Xk_Caps_Lock then
if Per = 1 or else K2 = No_Symbol then
X_Convert_Case (Display, K1, Lsym, Usym);
else
Usym := K2;
end if;
else
if Per = 1 or else K2 = No_Symbol then
Sym := K1;
else
Sym := K2;
end if;
X_Convert_Case (Display, Sym, Lsym, Usym);
if not Modifiers (Shift_Mask) and then
(Sym /= K1) and then
((Sym /= Usym) or else (Lsym = Usym)) then
X_Convert_Case (Display, K1, Lsym, Usym);
end if;
end if;
if Usym = Misc.Xk_Void_Symbol then
Key_Sym_Return := No_Symbol;
else
Key_Sym_Return := Usym;
end if;
Status := Successful;
end X_Translate_Key;
--\f
procedure X_Translate_Key_Sym (Display : X_Display;
Symbol : X_Key_Sym;
Modifiers : X_Key_Button_Mask;
Buffer : in out X_String;
Result : out S_Natural;
Status : out X_Status) is
P : X_Key_Trans;
Hi_Bytes : S_Long;
C : S_Long;
begin
if Symbol = No_Symbol then
Result := 0;
Status := Failed;
return;
end if;
----See if symbol is rebound, if so, return that string.
P := Display.Key_Bindings;
while P /= None_X_Key_Trans loop
if (Modifiers and All_Mods) = P.State and then
Symbol = P.Key then
if P.Str'Length > Buffer'Length then
Result := Buffer'Length;
Buffer := P.Str (P.Str'First ..
P.Str'First + Buffer'Length - 1);
else
Result := P.Str'Length;
Buffer (Buffer'First .. Buffer'First + P.Str'Length - 1) :=
P.Str.all;
end if;
Status := Successful;
return;
end if;
P := P.Next;
end loop;
----Try to convert to Latin-1, handling control.
Hi_Bytes := S_Long (Symbol) / 2 ** 8;
if Buffer'Length = 0 or else
Hi_Bytes in 1 .. 16#FE# or else
(Hi_Bytes = 16#FF# and then
not (Symbol in Misc.Xk_Backspace .. Misc.Xk_Clear or else
Symbol = Misc.Xk_Return or else
Symbol = Misc.Xk_Escape or else
Symbol = Latin1.Xk_Space or else
Symbol = Misc.Xk_Tab or else
Symbol = Misc.Xk_Kp_Enter or else
Symbol in Misc.Xk_Kp_Multiply .. Misc.Xk_Kp_9 or else
Symbol = Misc.Xk_Kp_Equal or else
Symbol = Misc.Xk_Delete)) then
Result := 0;
Status := Failed;
return;
end if;
----If X keysym, convert to ascii by grabbing low 7 bits.
if Symbol = Misc.Xk_Kp_Space then
C := S_Long (Latin1.Xk_Space) rem 16#0080#; -- patch encoding botch
elsif Symbol = Latin1.Xk_Hyphen then
C := S_Long (Latin1.Xk_Minus) rem
16#0100#; -- map to equiv character */
elsif Hi_Bytes = 16#FF# then
C := S_Long (Symbol) rem 16#0080#;
else
C := S_Long (Symbol) rem 16#0100#;
end if;
----Only apply Control key if it makes sense, else ignore it.
if Modifiers (Control_Mask) then
if (C >= Character'Pos ('@') and then
C < Character'Pos (Ascii.Del)) or else
C = Character'Pos (' ') then
C := C rem 16#20#;
elsif C = Character'Pos ('2') then
C := 0;
elsif C >= Character'Pos ('3') and then
C <= Character'Pos ('7') then
C := C - (Character'Pos ('3') - Character'Pos (Ascii.Esc));
elsif C = Character'Pos ('8') then
C := Character'Pos (Ascii.Del);
elsif C = Character'Pos ('/') then
C := Character'Pos ('_') rem 16#20#;
end if;
end if;
Buffer (Buffer'First) := X_Character'Val (C);
Result := 1;
Status := Successful;
end X_Translate_Key_Sym;
--\f
procedure X_Lookup_String (Event : X_Event;
Buffer : in out X_String;
Result : out S_Natural;
Key_Symbol : out X_Key_Sym;
Status : out X_Compose_Status) is
Modifiers : X_Key_Button_Mask;
Symbol : X_Key_Sym;
Succ : X_Status;
begin
Status := (Compose_Ptr => None_X_String_Pointer, Chars_Matched => 0);
X_Translate_Key (Event.Display, Event.Key.Key_Code,
Event.Key.State, Modifiers, Symbol, Succ);
if Succ /= Successful then
Key_Symbol := No_Symbol;
Result := 0;
return;
end if;
Key_Symbol := Symbol;
X_Translate_Key_Sym (Event.Display, Symbol, Event.Key.State,
Buffer, Result, Succ);
--We don't care what the Succ is from this.
end X_Lookup_String;
--\f
procedure X_Rebind_Key_Sym (Display : X_Display;
Key_Symbol : X_Key_Sym;
Modifier_List : X_Key_Sym_Array;
Binding : X_String) is
P : X_Key_Trans;
begin
if Display.Key_Syms = null and then not Initialize (Display) then
return;
end if;
P := new X_Key_Trans_Rec;
Lock_Display (Display);
begin
P.Next := Display.Key_Bindings; -- chain onto list
Display.Key_Bindings := P;
P.Str := new X_String'(Binding);
P.Modifiers := new X_Key_Sym_Array'(Modifier_List);
P.Key := Key_Symbol;
Compute_Mask_From_Key_Trans (Display, P);
exception
when others =>
Display.Key_Bindings := P.Next;
Free_X_String_Pointer (P.Str);
Free_X_Key_Sym_List (P.Modifiers);
Free_X_Key_Trans (P);
Unlock_Display (Display);
raise;
end;
Unlock_Display (Display);
end X_Rebind_Key_Sym;
--\f
function X_String_To_Key_Sym (Name : X_String) return X_Key_Sym is
use X_Ks_Info_Map;
Ks : X_Key_Sym := No_Symbol;
Succ : Boolean;
Flags : S_Long;
Map : X_Ks_Info_Map.Map renames X_Lib_Ks_Info_Map;
begin
if Map = None_Map then
Initialize_Ks_Info_Map;
end if;
Find (Map, Name, Ks, Succ);
if Succ then
return Ks;
else
return No_Symbol;
end if;
end X_String_To_Key_Sym;
--\f
procedure X_Refresh_Keyboard_Mapping (Event : X_Event) is
Modifier : Boolean := False;
begin
Lock_Display (Event.Display);
begin
-- X_XX should really only refresh what is necessary, for now, make
-- initialize test fail
if Event.Mapping.Request = Mapping_Keyboard then
if Event.Display.Key_Syms /= null then
Free_X_Key_Sym_List_2d (Event.Display.Key_Syms);
end if;
elsif Event.Mapping.Request = Mapping_Modifier then
Free_X_Modifier_Keymap (Event.Display.Modifier_Map);
Event.Display.Key_Syms :=
null;-- X_XX - looks like astorage leak
Modifier := True;
end if;
exception
when others =>
Unlock_Display (Event.Display);
raise;
end;
Unlock_Display (Event.Display);
if Modifier then
Modifier := Init_Mod_Map (Event.Display);
end if;
end X_Refresh_Keyboard_Mapping;
--\f
function X_Is_Keypad_Key (Key_Symbol : X_Key_Sym) return Boolean is
--#define Is_Keypad_Key(key_symbol) \
-- (((unsigned)(key_symbol) >= XK_KP_Space) &&
-- ((unsigned)(key_symbol) <= XK_KP_Equal))
begin
return Key_Symbol >= Misc.Xk_Kp_Space and then
Key_Symbol <= Misc.Xk_Kp_Equal;
end X_Is_Keypad_Key;
function X_Is_Cursor_Key (Key_Symbol : X_Key_Sym) return Boolean is
--#define Is_Cursor_Key(key_symbol) \
-- (((unsigned)(key_symbol) >= XK_Home) &&
-- ((unsigned)(key_symbol) < XK_Select))
begin
return Key_Symbol >= Misc.Xk_Home and then Key_Symbol < Misc.Xk_Select;
end X_Is_Cursor_Key;
function X_Is_Pf_Key (Key_Symbol : X_Key_Sym) return Boolean is
--#define Is_PF_Key(key_symbol) \
-- (((unsigned)(key_symbol) >= XK_KP_F1) &&
-- ((unsigned)(key_symbol) <= XK_KP_F4))
begin
return Key_Symbol >= Misc.Xk_Kp_F1 and then Key_Symbol <= Misc.Xk_Kp_F4;
end X_Is_Pf_Key;
function X_Is_Function_Key (Key_Symbol : X_Key_Sym) return Boolean is
--#define Is_Function_Key(key_symbol) \
-- (((unsigned)(key_symbol) >= XK_F1) &&
-- ((unsigned)(key_symbol) <= XK_F35))
begin
return Key_Symbol >= Misc.Xk_F1 and then Key_Symbol <= Misc.Xk_F35;
end X_Is_Function_Key;
function X_Is_Misc_Function_Key (Key_Symbol : X_Key_Sym) return Boolean is
--#define Is_Misc_Function_Key(key_symbol) \
-- (((unsigned)(key_symbol) >= XK_Select) &&
-- ((unsigned)(key_symbol) < XK_KP_Space))
begin
return Key_Symbol >= Misc.Xk_Select and then
Key_Symbol < Misc.Xk_Kp_Space;
end X_Is_Misc_Function_Key;
function X_Is_Modifier_Key (Key_Symbol : X_Key_Sym) return Boolean is
--#define Is_Modifier_Key(key_symbol) \
-- (((unsigned)(key_symbol) >= XK_Shift_L) &&
-- ((unsigned)(key_symbol) <= XK_Hyper_R))
begin
return Key_Symbol >= Misc.Xk_Shift_L and then
Key_Symbol <= Misc.Xk_Hyper_R;
end X_Is_Modifier_Key;
--\f
procedure Init_Ks_Info_File is
File : Text_Io.File_Type;
Line : String (1 .. 128);
Len : Natural;
Namef : Natural;
Namel : Natural;
Valuef : Natural;
Valuel : Natural;
Flag : Boolean;
begin
----Open the file, if it exists at all.
begin
Text_Io.Open (File, Text_Io.In_File, X_Key_Sym_Db_File);
exception
when others =>
return;
end;
----Read every line in the file.
while not Text_Io.End_Of_File (File) loop
Text_Io.Get_Line (File, Line, Len);
Namef := 0;
Namel := 0;
Valuef := 0;
Valuel := 0;
----Find the name. The line may be blank or it may be a '!' comment line.
for I in 1 .. Len loop
if Line (I) = '!' then
goto Continue;
elsif Line (I) /= ' ' and then
Line (I) /= Ascii.Ht then
Namef := I;
exit;
end if;
end loop;
if Namef = 0 then
goto Continue;
end if;
----Find the end of the name.
for I in Namef + 1 .. Len loop
if Line (I) = ' ' or else
Line (I) = Ascii.Ht or else
Line (I) = ':' then
Namel := I - 1;
exit;
end if;
end loop;
if Namel = 0 then
goto Bad_Line;
end if;
----Find the beginning of the value. Make sure we have a ':'.
for I in Namel + 1 .. Len loop
if Line (I) = ':' then
if Valuel /= 0 then
goto Bad_Line;
end if;
Valuel := I;
elsif Line (I) /= ' ' and then
Line (I) /= Ascii.Ht then
Valuef := I;
exit;
end if;
end loop;
if Valuef = 0 or else Valuel = 0 then
goto Bad_Line;
end if;
----Find the end of the value. Convert it to a key_sym and put it into the
-- map.
for I in reverse Namef .. Len loop
if Line (I) /= ' ' and then
Line (I) /= Ascii.Ht then
begin
X_Ks_Info_Map.Insert
(X_Lib_Ks_Info_Map,
To_X_String (Line (Namef .. Namel)),
X_Key_Sym'Value ("16#" & Line (Valuef .. I) & "#"),
True);
exception
when others =>
goto Bad_Line;
end;
goto Continue;
end if;
end loop;
----Come here on bad lines.
<<Bad_Line>> null;
X_Report_Error ("XKsInfoDb", "BadLine",
"Xlib; Badly formed line in file %1." & Lf &
"Line: {%2}", To_X_String (X_Key_Sym_Db_File),
To_X_String (Line (1 .. Len)));
----Come here to process the next line.
<<Continue>> null;
end loop;
Text_Io.Close (File);
exception
when others =>
Text_Io.Close (File);
raise;
end Init_Ks_Info_File;
--\f
procedure Init_Ks_Info_Names is
use Xlbt_Key_Defs;
procedure I (M : in X_Ks_Info_Map.Map;
Key : in X_String;
Rt : in X_Key_Sym;
Dups_Ok : in Boolean := False)
renames X_Ks_Info_Map.Insert;
Map : X_Ks_Info_Map.Map renames X_Lib_Ks_Info_Map;
begin
--
-- This list is based on X_Key_Defs.@. Update it when you update that.
--
X_Ks_Info_Map.New_Map (Map);
I (Map, "leftcaret", Apl.Xk_Leftcaret);
I (Map, "rightcaret", Apl.Xk_Rightcaret);
I (Map, "downcaret", Apl.Xk_Downcaret);
I (Map, "upcaret", Apl.Xk_Upcaret);
I (Map, "overbar", Apl.Xk_Overbar);
I (Map, "downtack", Apl.Xk_Downtack);
I (Map, "upshoe", Apl.Xk_Upshoe);
I (Map, "downstile", Apl.Xk_Downstile);
I (Map, "underbar", Apl.Xk_Underbar);
I (Map, "jot", Apl.Xk_Jot);
I (Map, "quad", Apl.Xk_Quad);
I (Map, "uptack", Apl.Xk_Uptack);
I (Map, "circle", Apl.Xk_Circle);
I (Map, "upstile", Apl.Xk_Upstile);
I (Map, "downshoe", Apl.Xk_Downshoe);
I (Map, "rightshoe", Apl.Xk_Rightshoe);
I (Map, "leftshoe", Apl.Xk_Leftshoe);
I (Map, "lefttack", Apl.Xk_Lefttack);
I (Map, "righttack", Apl.Xk_Righttack);
I (Map, "Arabic_comma", Arabic.Xk_Arabic_Comma);
I (Map, "Arabic_semicolon", Arabic.Xk_Arabic_Semicolon);
I (Map, "Arabic_question_mark", Arabic.Xk_Arabic_Question_Mark);
I (Map, "Arabic_hamza", Arabic.Xk_Arabic_Hamza);
I (Map, "Arabic_maddaonalef", Arabic.Xk_Arabic_Maddaonalef);
I (Map, "Arabic_hamzaonalef", Arabic.Xk_Arabic_Hamzaonalef);
I (Map, "Arabic_hamzaonwaw", Arabic.Xk_Arabic_Hamzaonwaw);
I (Map, "Arabic_hamzaunderalef", Arabic.Xk_Arabic_Hamzaunderalef);
I (Map, "Arabic_hamzaonyeh", Arabic.Xk_Arabic_Hamzaonyeh);
I (Map, "Arabic_alef", Arabic.Xk_Arabic_Alef);
I (Map, "Arabic_beh", Arabic.Xk_Arabic_Beh);
I (Map, "Arabic_tehmarbuta", Arabic.Xk_Arabic_Tehmarbuta);
I (Map, "Arabic_teh", Arabic.Xk_Arabic_Teh);
I (Map, "Arabic_theh", Arabic.Xk_Arabic_Theh);
I (Map, "Arabic_jeem", Arabic.Xk_Arabic_Jeem);
I (Map, "Arabic_hah", Arabic.Xk_Arabic_Hah);
I (Map, "Arabic_khah", Arabic.Xk_Arabic_Khah);
I (Map, "Arabic_dal", Arabic.Xk_Arabic_Dal);
I (Map, "Arabic_thal", Arabic.Xk_Arabic_Thal);
I (Map, "Arabic_ra", Arabic.Xk_Arabic_Ra);
I (Map, "Arabic_zain", Arabic.Xk_Arabic_Zain);
I (Map, "Arabic_seen", Arabic.Xk_Arabic_Seen);
I (Map, "Arabic_sheen", Arabic.Xk_Arabic_Sheen);
I (Map, "Arabic_sad", Arabic.Xk_Arabic_Sad);
I (Map, "Arabic_dad", Arabic.Xk_Arabic_Dad);
I (Map, "Arabic_tah", Arabic.Xk_Arabic_Tah);
I (Map, "Arabic_zah", Arabic.Xk_Arabic_Zah);
I (Map, "Arabic_ain", Arabic.Xk_Arabic_Ain);
I (Map, "Arabic_ghain", Arabic.Xk_Arabic_Ghain);
I (Map, "Arabic_tatweel", Arabic.Xk_Arabic_Tatweel);
I (Map, "Arabic_feh", Arabic.Xk_Arabic_Feh);
I (Map, "Arabic_qaf", Arabic.Xk_Arabic_Qaf);
I (Map, "Arabic_kaf", Arabic.Xk_Arabic_Kaf);
I (Map, "Arabic_lam", Arabic.Xk_Arabic_Lam);
I (Map, "Arabic_meem", Arabic.Xk_Arabic_Meem);
I (Map, "Arabic_noon", Arabic.Xk_Arabic_Noon);
I (Map, "Arabic_ha", Arabic.Xk_Arabic_Ha);
I (Map, "Arabic_waw", Arabic.Xk_Arabic_Waw);
I (Map, "Arabic_alefmaksura", Arabic.Xk_Arabic_Alefmaksura);
I (Map, "Arabic_yeh", Arabic.Xk_Arabic_Yeh);
I (Map, "Arabic_fathatan", Arabic.Xk_Arabic_Fathatan);
I (Map, "Arabic_dammatan", Arabic.Xk_Arabic_Dammatan);
I (Map, "Arabic_kasratan", Arabic.Xk_Arabic_Kasratan);
I (Map, "Arabic_fatha", Arabic.Xk_Arabic_Fatha);
I (Map, "Arabic_damma", Arabic.Xk_Arabic_Damma);
I (Map, "Arabic_kasra", Arabic.Xk_Arabic_Kasra);
I (Map, "Arabic_shadda", Arabic.Xk_Arabic_Shadda);
I (Map, "Arabic_sukun", Arabic.Xk_Arabic_Sukun);
I (Map, "Arabic_switch", Arabic.Xk_Arabic_Switch);
I (Map, "Serbian_dje", Cyrillic.Xk_Serbian_Dje);
I (Map, "Macedonia_gje", Cyrillic.Xk_Macedonia_Gje);
I (Map, "Cyrillic_io", Cyrillic.Xk_Cyrillic_Io);
I (Map, "Ukrainian_ie", Cyrillic.Xk_Ukrainian_Ie);
I (Map, "Macedonia_dse", Cyrillic.Xk_Macedonia_Dse);
I (Map, "Ukrainian_i", Cyrillic.Xk_Ukrainian_I);
I (Map, "Ukrainian_yi", Cyrillic.Xk_Ukrainian_Yi);
I (Map, "Cyrillic_je", Cyrillic.Xk_Cyrillic_Je);
I (Map, "Cyrillic_lje", Cyrillic.Xk_Cyrillic_Lje);
I (Map, "Cyrillic_nje", Cyrillic.Xk_Cyrillic_Nje);
I (Map, "Serbian_tshe", Cyrillic.Xk_Serbian_Tshe);
I (Map, "Macedonia_kje", Cyrillic.Xk_Macedonia_Kje);
I (Map, "Byelorussian_shortu", Cyrillic.Xk_Byelorussian_Shortu);
I (Map, "Cyrillic_dzhe", Cyrillic.Xk_Cyrillic_Dzhe);
I (Map, "numerosign", Cyrillic.Xk_Numerosign);
I (Map, "Serbian_DJE", Cyrillic.Xk_Serbian_S_Dje);
I (Map, "Macedonia_GJE", Cyrillic.Xk_Macedonia_S_Gje);
I (Map, "Cyrillic_IO", Cyrillic.Xk_Cyrillic_S_Io);
I (Map, "Ukrainian_IE", Cyrillic.Xk_Ukrainian_S_Ie);
I (Map, "Macedonia_DSE", Cyrillic.Xk_Macedonia_S_Dse);
I (Map, "Ukrainian_I", Cyrillic.Xk_Ukrainian_S_I);
I (Map, "Ukrainian_YI", Cyrillic.Xk_Ukrainian_S_Yi);
I (Map, "Cyrillic_JE", Cyrillic.Xk_Cyrillic_S_Je);
I (Map, "Cyrillic_LJE", Cyrillic.Xk_Cyrillic_S_Lje);
I (Map, "Cyrillic_NJE", Cyrillic.Xk_Cyrillic_S_Nje);
I (Map, "Serbian_TSHE", Cyrillic.Xk_Serbian_S_Tshe);
I (Map, "Macedonia_KJE", Cyrillic.Xk_Macedonia_S_Kje);
I (Map, "Byelorussian_SHORTU", Cyrillic.Xk_Byelorussian_S_Shortu);
I (Map, "Cyrillic_DZHE", Cyrillic.Xk_Cyrillic_S_Dzhe);
I (Map, "Cyrillic_yu", Cyrillic.Xk_Cyrillic_Yu);
I (Map, "Cyrillic_a", Cyrillic.Xk_Cyrillic_A);
I (Map, "Cyrillic_be", Cyrillic.Xk_Cyrillic_Be);
I (Map, "Cyrillic_tse", Cyrillic.Xk_Cyrillic_Tse);
I (Map, "Cyrillic_de", Cyrillic.Xk_Cyrillic_De);
I (Map, "Cyrillic_ie", Cyrillic.Xk_Cyrillic_Ie);
I (Map, "Cyrillic_ef", Cyrillic.Xk_Cyrillic_Ef);
I (Map, "Cyrillic_ghe", Cyrillic.Xk_Cyrillic_Ghe);
I (Map, "Cyrillic_ha", Cyrillic.Xk_Cyrillic_Ha);
I (Map, "Cyrillic_i", Cyrillic.Xk_Cyrillic_I);
I (Map, "Cyrillic_shorti", Cyrillic.Xk_Cyrillic_Shorti);
I (Map, "Cyrillic_ka", Cyrillic.Xk_Cyrillic_Ka);
I (Map, "Cyrillic_el", Cyrillic.Xk_Cyrillic_El);
I (Map, "Cyrillic_em", Cyrillic.Xk_Cyrillic_Em);
I (Map, "Cyrillic_en", Cyrillic.Xk_Cyrillic_En);
I (Map, "Cyrillic_o", Cyrillic.Xk_Cyrillic_O);
I (Map, "Cyrillic_pe", Cyrillic.Xk_Cyrillic_Pe);
I (Map, "Cyrillic_ya", Cyrillic.Xk_Cyrillic_Ya);
I (Map, "Cyrillic_er", Cyrillic.Xk_Cyrillic_Er);
I (Map, "Cyrillic_es", Cyrillic.Xk_Cyrillic_Es);
I (Map, "Cyrillic_te", Cyrillic.Xk_Cyrillic_Te);
I (Map, "Cyrillic_u", Cyrillic.Xk_Cyrillic_U);
I (Map, "Cyrillic_zhe", Cyrillic.Xk_Cyrillic_Zhe);
I (Map, "Cyrillic_ve", Cyrillic.Xk_Cyrillic_Ve);
I (Map, "Cyrillic_softsign", Cyrillic.Xk_Cyrillic_Softsign);
I (Map, "Cyrillic_yeru", Cyrillic.Xk_Cyrillic_Yeru);
I (Map, "Cyrillic_ze", Cyrillic.Xk_Cyrillic_Ze);
I (Map, "Cyrillic_sha", Cyrillic.Xk_Cyrillic_Sha);
I (Map, "Cyrillic_e", Cyrillic.Xk_Cyrillic_E);
I (Map, "Cyrillic_shcha", Cyrillic.Xk_Cyrillic_Shcha);
I (Map, "Cyrillic_che", Cyrillic.Xk_Cyrillic_Che);
I (Map, "Cyrillic_hardsign", Cyrillic.Xk_Cyrillic_Hardsign);
I (Map, "Cyrillic_YU", Cyrillic.Xk_Cyrillic_S_Yu);
I (Map, "Cyrillic_A", Cyrillic.Xk_Cyrillic_S_A);
I (Map, "Cyrillic_BE", Cyrillic.Xk_Cyrillic_S_Be);
I (Map, "Cyrillic_TSE", Cyrillic.Xk_Cyrillic_S_Tse);
I (Map, "Cyrillic_DE", Cyrillic.Xk_Cyrillic_S_De);
I (Map, "Cyrillic_IE", Cyrillic.Xk_Cyrillic_S_Ie);
I (Map, "Cyrillic_EF", Cyrillic.Xk_Cyrillic_S_Ef);
I (Map, "Cyrillic_GHE", Cyrillic.Xk_Cyrillic_S_Ghe);
I (Map, "Cyrillic_HA", Cyrillic.Xk_Cyrillic_S_Ha);
I (Map, "Cyrillic_I", Cyrillic.Xk_Cyrillic_S_I);
I (Map, "Cyrillic_SHORTI", Cyrillic.Xk_Cyrillic_S_Shorti);
I (Map, "Cyrillic_KA", Cyrillic.Xk_Cyrillic_S_Ka);
I (Map, "Cyrillic_EL", Cyrillic.Xk_Cyrillic_S_El);
I (Map, "Cyrillic_EM", Cyrillic.Xk_Cyrillic_S_Em);
I (Map, "Cyrillic_EN", Cyrillic.Xk_Cyrillic_S_En);
I (Map, "Cyrillic_O", Cyrillic.Xk_Cyrillic_S_O);
I (Map, "Cyrillic_PE", Cyrillic.Xk_Cyrillic_S_Pe);
I (Map, "Cyrillic_YA", Cyrillic.Xk_Cyrillic_S_Ya);
I (Map, "Cyrillic_ER", Cyrillic.Xk_Cyrillic_S_Er);
I (Map, "Cyrillic_ES", Cyrillic.Xk_Cyrillic_S_Es);
I (Map, "Cyrillic_TE", Cyrillic.Xk_Cyrillic_S_Te);
I (Map, "Cyrillic_U", Cyrillic.Xk_Cyrillic_S_U);
I (Map, "Cyrillic_ZHE", Cyrillic.Xk_Cyrillic_S_Zhe);
I (Map, "Cyrillic_VE", Cyrillic.Xk_Cyrillic_S_Ve);
I (Map, "Cyrillic_SOFTSIGN", Cyrillic.Xk_Cyrillic_S_Softsign);
I (Map, "Cyrillic_YERU", Cyrillic.Xk_Cyrillic_S_Yeru);
I (Map, "Cyrillic_ZE", Cyrillic.Xk_Cyrillic_S_Ze);
I (Map, "Cyrillic_SHA", Cyrillic.Xk_Cyrillic_S_Sha);
I (Map, "Cyrillic_E", Cyrillic.Xk_Cyrillic_S_E);
I (Map, "Cyrillic_SHCHA", Cyrillic.Xk_Cyrillic_S_Shcha);
I (Map, "Cyrillic_CHE", Cyrillic.Xk_Cyrillic_S_Che);
I (Map, "Cyrillic_HARDSIGN", Cyrillic.Xk_Cyrillic_S_Hardsign);
I (Map, "Greek_ALPHAaccent", Greek.Xk_Greek_S_Alphaaccent);
I (Map, "Greek_EPSILONaccent", Greek.Xk_Greek_S_Epsilonaccent);
I (Map, "Greek_ETAaccent", Greek.Xk_Greek_S_Etaaccent);
I (Map, "Greek_IOTAaccent", Greek.Xk_Greek_S_Iotaaccent);
I (Map, "Greek_IOTAdiaeresis", Greek.Xk_Greek_Iotadiaeresis);
I (Map, "Greek_OMICRONaccent", Greek.Xk_Greek_S_Omicronaccent);
I (Map, "Greek_UPSILONaccent", Greek.Xk_Greek_S_Upsilonaccent);
I (Map, "Greek_UPSILONdieresis", Greek.Xk_Greek_S_Upsilondieresis);
I (Map, "Greek_OMEGAaccent", Greek.Xk_Greek_S_Omegaaccent);
I (Map, "Greek_accentdieresis", Greek.Xk_Greek_Accentdieresis);
I (Map, "Greek_horizbar", Greek.Xk_Greek_Horizbar);
I (Map, "Greek_alphaaccent", Greek.Xk_Greek_Alphaaccent);
I (Map, "Greek_epsilonaccent", Greek.Xk_Greek_Epsilonaccent);
I (Map, "Greek_etaaccent", Greek.Xk_Greek_Etaaccent);
I (Map, "Greek_iotaaccent", Greek.Xk_Greek_Iotaaccent);
I (Map, "Greek_iotadieresis", Greek.Xk_Greek_Iotadieresis);
I (Map, "Greek_iotaaccentdieresis", Greek.Xk_Greek_Iotaaccentdieresis);
I (Map, "Greek_omicronaccent", Greek.Xk_Greek_Omicronaccent);
I (Map, "Greek_upsilonaccent", Greek.Xk_Greek_Upsilonaccent);
I (Map, "Greek_upsilondieresis", Greek.Xk_Greek_Upsilondieresis);
I (Map, "Greek_upsilonaccentdieresis",
Greek.Xk_Greek_Upsilonaccentdieresis);
I (Map, "Greek_omegaaccent", Greek.Xk_Greek_Omegaaccent);
I (Map, "Greek_ALPHA", Greek.Xk_Greek_S_Alpha);
I (Map, "Greek_BETA", Greek.Xk_Greek_S_Beta);
I (Map, "Greek_GAMMA", Greek.Xk_Greek_S_Gamma);
I (Map, "Greek_DELTA", Greek.Xk_Greek_S_Delta);
I (Map, "Greek_EPSILON", Greek.Xk_Greek_S_Epsilon);
I (Map, "Greek_ZETA", Greek.Xk_Greek_S_Zeta);
I (Map, "Greek_ETA", Greek.Xk_Greek_S_Eta);
I (Map, "Greek_THETA", Greek.Xk_Greek_S_Theta);
I (Map, "Greek_IOTA", Greek.Xk_Greek_S_Iota);
I (Map, "Greek_KAPPA", Greek.Xk_Greek_S_Kappa);
I (Map, "Greek_LAMBDA", Greek.Xk_Greek_S_Lambda);
I (Map, "Greek_LAMDA", Greek.Xk_Greek_S_Lamda);
I (Map, "Greek_MU", Greek.Xk_Greek_S_Mu);
I (Map, "Greek_NU", Greek.Xk_Greek_S_Nu);
I (Map, "Greek_XI", Greek.Xk_Greek_S_Xi);
I (Map, "Greek_OMICRON", Greek.Xk_Greek_S_Omicron);
I (Map, "Greek_PI", Greek.Xk_Greek_S_Pi);
I (Map, "Greek_RHO", Greek.Xk_Greek_S_Rho);
I (Map, "Greek_SIGMA", Greek.Xk_Greek_S_Sigma);
I (Map, "Greek_TAU", Greek.Xk_Greek_S_Tau);
I (Map, "Greek_UPSILON", Greek.Xk_Greek_S_Upsilon);
I (Map, "Greek_PHI", Greek.Xk_Greek_S_Phi);
I (Map, "Greek_CHI", Greek.Xk_Greek_S_Chi);
I (Map, "Greek_PSI", Greek.Xk_Greek_S_Psi);
I (Map, "Greek_OMEGA", Greek.Xk_Greek_S_Omega);
I (Map, "Greek_alpha", Greek.Xk_Greek_Alpha);
I (Map, "Greek_beta", Greek.Xk_Greek_Beta);
I (Map, "Greek_gamma", Greek.Xk_Greek_Gamma);
I (Map, "Greek_delta", Greek.Xk_Greek_Delta);
I (Map, "Greek_epsilon", Greek.Xk_Greek_Epsilon);
I (Map, "Greek_zeta", Greek.Xk_Greek_Zeta);
I (Map, "Greek_eta", Greek.Xk_Greek_Eta);
I (Map, "Greek_theta", Greek.Xk_Greek_Theta);
I (Map, "Greek_iota", Greek.Xk_Greek_Iota);
I (Map, "Greek_kappa", Greek.Xk_Greek_Kappa);
I (Map, "Greek_lambda", Greek.Xk_Greek_Lambda);
I (Map, "Greek_lamda", Greek.Xk_Greek_Lamda);
I (Map, "Greek_mu", Greek.Xk_Greek_Mu);
I (Map, "Greek_nu", Greek.Xk_Greek_Nu);
I (Map, "Greek_xi", Greek.Xk_Greek_Xi);
I (Map, "Greek_omicron", Greek.Xk_Greek_Omicron);
I (Map, "Greek_pi", Greek.Xk_Greek_Pi);
I (Map, "Greek_rho", Greek.Xk_Greek_Rho);
I (Map, "Greek_sigma", Greek.Xk_Greek_Sigma);
I (Map, "Greek_finalsmallsigma", Greek.Xk_Greek_Finalsmallsigma);
I (Map, "Greek_tau", Greek.Xk_Greek_Tau);
I (Map, "Greek_upsilon", Greek.Xk_Greek_Upsilon);
I (Map, "Greek_phi", Greek.Xk_Greek_Phi);
I (Map, "Greek_chi", Greek.Xk_Greek_Chi);
I (Map, "Greek_psi", Greek.Xk_Greek_Psi);
I (Map, "Greek_omega", Greek.Xk_Greek_Omega);
I (Map, "Greek_switch", Greek.Xk_Greek_Switch);
I (Map, "hebrew_doublelowline", Hebrew.Xk_Hebrew_Doublelowline);
I (Map, "hebrew_aleph", Hebrew.Xk_Hebrew_Aleph);
I (Map, "hebrew_bet", Hebrew.Xk_Hebrew_Bet);
I (Map, "hebrew_gimel", Hebrew.Xk_Hebrew_Gimel);
I (Map, "hebrew_dalet", Hebrew.Xk_Hebrew_Dalet);
I (Map, "hebrew_he", Hebrew.Xk_Hebrew_He);
I (Map, "hebrew_waw", Hebrew.Xk_Hebrew_Waw);
I (Map, "hebrew_zain", Hebrew.Xk_Hebrew_Zain);
I (Map, "hebrew_chet", Hebrew.Xk_Hebrew_Chet);
I (Map, "hebrew_tet", Hebrew.Xk_Hebrew_Tet);
I (Map, "hebrew_yod", Hebrew.Xk_Hebrew_Yod);
I (Map, "hebrew_finalkaph", Hebrew.Xk_Hebrew_Finalkaph);
I (Map, "hebrew_kaph", Hebrew.Xk_Hebrew_Kaph);
I (Map, "hebrew_lamed", Hebrew.Xk_Hebrew_Lamed);
I (Map, "hebrew_finalmem", Hebrew.Xk_Hebrew_Finalmem);
I (Map, "hebrew_mem", Hebrew.Xk_Hebrew_Mem);
I (Map, "hebrew_finalnun", Hebrew.Xk_Hebrew_Finalnun);
I (Map, "hebrew_nun", Hebrew.Xk_Hebrew_Nun);
I (Map, "hebrew_samech", Hebrew.Xk_Hebrew_Samech);
I (Map, "hebrew_ayin", Hebrew.Xk_Hebrew_Ayin);
I (Map, "hebrew_finalpe", Hebrew.Xk_Hebrew_Finalpe);
I (Map, "hebrew_pe", Hebrew.Xk_Hebrew_Pe);
I (Map, "hebrew_finalzade", Hebrew.Xk_Hebrew_Finalzade);
I (Map, "hebrew_zade", Hebrew.Xk_Hebrew_Zade);
I (Map, "hebrew_qoph", Hebrew.Xk_Hebrew_Goph);
I (Map, "hebrew_resh", Hebrew.Xk_Hebrew_Resh);
I (Map, "hebrew_shin", Hebrew.Xk_Hebrew_Shin);
I (Map, "hebrew_taw", Hebrew.Xk_Hebrew_Taw);
I (Map, "Hebrew_switch", Hebrew.Xk_Hebrew_Switch);
I (Map, "overline", Katakana.Xk_Overline);
I (Map, "kana_fullstop", Katakana.Xk_Kana_Fullstop);
I (Map, "kana_openingbracket", Katakana.Xk_Kana_Openingbracket);
I (Map, "kana_closingbracket", Katakana.Xk_Kana_Closingbracket);
I (Map, "kana_comma", Katakana.Xk_Kana_Comma);
I (Map, "kana_conjunctive", Katakana.Xk_Kana_Conjunctive);
I (Map, "kana_WO", Katakana.Xk_Kana_Wo);
I (Map, "kana_a", Katakana.Xk_Kana_A);
I (Map, "kana_i", Katakana.Xk_Kana_I);
I (Map, "kana_u", Katakana.Xk_Kana_U);
I (Map, "kana_e", Katakana.Xk_Kana_E);
I (Map, "kana_o", Katakana.Xk_Kana_O);
I (Map, "kana_ya", Katakana.Xk_Kana_Ya);
I (Map, "kana_yu", Katakana.Xk_Kana_Yu);
I (Map, "kana_yo", Katakana.Xk_Kana_Yo);
I (Map, "kana_tsu", Katakana.Xk_Kana_Tsu);
I (Map, "prolongedsound", Katakana.Xk_Prolongedsound);
I (Map, "kana_A", Katakana.Xk_Kana_S_A);
I (Map, "kana_I", Katakana.Xk_Kana_S_I);
I (Map, "kana_U", Katakana.Xk_Kana_S_U);
I (Map, "kana_E", Katakana.Xk_Kana_S_E);
I (Map, "kana_O", Katakana.Xk_Kana_S_O);
I (Map, "kana_KA", Katakana.Xk_Kana_Ka);
I (Map, "kana_KI", Katakana.Xk_Kana_Ki);
I (Map, "kana_KU", Katakana.Xk_Kana_Ku);
I (Map, "kana_KE", Katakana.Xk_Kana_Ke);
I (Map, "kana_KO", Katakana.Xk_Kana_Ko);
I (Map, "kana_SA", Katakana.Xk_Kana_Sa);
I (Map, "kana_SHI", Katakana.Xk_Kana_Shi);
I (Map, "kana_SU", Katakana.Xk_Kana_Su);
I (Map, "kana_SE", Katakana.Xk_Kana_Se);
I (Map, "kana_SO", Katakana.Xk_Kana_So);
I (Map, "kana_TA", Katakana.Xk_Kana_Ta);
I (Map, "kana_CHI", Katakana.Xk_Kana_Chi);
I (Map, "kana_TSU", Katakana.Xk_Kana_S_Tsu);
I (Map, "kana_TE", Katakana.Xk_Kana_Te);
I (Map, "kana_TO", Katakana.Xk_Kana_To);
I (Map, "kana_NA", Katakana.Xk_Kana_Na);
I (Map, "kana_NI", Katakana.Xk_Kana_Ni);
I (Map, "kana_NU", Katakana.Xk_Kana_Nu);
I (Map, "kana_NE", Katakana.Xk_Kana_Ne);
I (Map, "kana_NO", Katakana.Xk_Kana_No);
I (Map, "kana_HA", Katakana.Xk_Kana_Ha);
I (Map, "kana_HI", Katakana.Xk_Kana_Hi);
I (Map, "kana_FU", Katakana.Xk_Kana_Fu);
I (Map, "kana_HE", Katakana.Xk_Kana_He);
I (Map, "kana_HO", Katakana.Xk_Kana_Ho);
I (Map, "kana_MA", Katakana.Xk_Kana_Ma);
I (Map, "kana_MI", Katakana.Xk_Kana_Mi);
I (Map, "kana_MU", Katakana.Xk_Kana_Mu);
I (Map, "kana_ME", Katakana.Xk_Kana_Me);
I (Map, "kana_MO", Katakana.Xk_Kana_Mo);
I (Map, "kana_YA", Katakana.Xk_Kana_S_Ya);
I (Map, "kana_YU", Katakana.Xk_Kana_S_Yu);
I (Map, "kana_YO", Katakana.Xk_Kana_S_Yo);
I (Map, "kana_RA", Katakana.Xk_Kana_Ra);
I (Map, "kana_RI", Katakana.Xk_Kana_Ri);
I (Map, "kana_RU", Katakana.Xk_Kana_Ru);
I (Map, "kana_RE", Katakana.Xk_Kana_Re);
I (Map, "kana_RO", Katakana.Xk_Kana_Ro);
I (Map, "kana_WA", Katakana.Xk_Kana_Wa);
I (Map, "kana_N", Katakana.Xk_Kana_N);
I (Map, "voicedsound", Katakana.Xk_Voicedsound);
I (Map, "semivoicedsound", Katakana.Xk_Semivoicedsound);
I (Map, "Kana_switch", Katakana.Xk_Kana_Switch);
I (Map, "space", Latin1.Xk_Space);
I (Map, "exclam", Latin1.Xk_Exclam);
I (Map, "quotedbl", Latin1.Xk_Quotedbl);
I (Map, "numbersign", Latin1.Xk_Numbersign);
I (Map, "dollar", Latin1.Xk_Dollar);
I (Map, "percent", Latin1.Xk_Percent);
I (Map, "ampersand", Latin1.Xk_Ampersand);
I (Map, "apostrophe", Latin1.Xk_Apostrophe);
I (Map, "parenleft", Latin1.Xk_Parenleft);
I (Map, "parenright", Latin1.Xk_Parenright);
I (Map, "asterisk", Latin1.Xk_Asterisk);
I (Map, "plus", Latin1.Xk_Plus);
I (Map, "comma", Latin1.Xk_Comma);
I (Map, "minus", Latin1.Xk_Minus);
I (Map, "period", Latin1.Xk_Period);
I (Map, "slash", Latin1.Xk_Slash);
I (Map, "0", Latin1.Xk_0);
I (Map, "1", Latin1.Xk_1);
I (Map, "2", Latin1.Xk_2);
I (Map, "3", Latin1.Xk_3);
I (Map, "4", Latin1.Xk_4);
I (Map, "5", Latin1.Xk_5);
I (Map, "6", Latin1.Xk_6);
I (Map, "7", Latin1.Xk_7);
I (Map, "8", Latin1.Xk_8);
I (Map, "9", Latin1.Xk_9);
I (Map, "colon", Latin1.Xk_Colon);
I (Map, "semicolon", Latin1.Xk_Semicolon);
I (Map, "less", Latin1.Xk_Less);
I (Map, "equal", Latin1.Xk_Equal);
I (Map, "greater", Latin1.Xk_Greater);
I (Map, "question", Latin1.Xk_Question);
I (Map, "at", Latin1.Xk_At);
I (Map, "A", Latin1.Xk_S_A);
I (Map, "B", Latin1.Xk_S_B);
I (Map, "C", Latin1.Xk_S_C);
I (Map, "D", Latin1.Xk_S_D);
I (Map, "E", Latin1.Xk_S_E);
I (Map, "F", Latin1.Xk_S_F);
I (Map, "G", Latin1.Xk_S_G);
I (Map, "H", Latin1.Xk_S_H);
I (Map, "I", Latin1.Xk_S_I);
I (Map, "J", Latin1.Xk_S_J);
I (Map, "K", Latin1.Xk_S_K);
I (Map, "L", Latin1.Xk_S_L);
I (Map, "M", Latin1.Xk_S_M);
I (Map, "N", Latin1.Xk_S_N);
I (Map, "O", Latin1.Xk_S_O);
I (Map, "P", Latin1.Xk_S_P);
I (Map, "Q", Latin1.Xk_S_Q);
I (Map, "R", Latin1.Xk_S_R);
I (Map, "S", Latin1.Xk_S_S);
I (Map, "T", Latin1.Xk_S_T);
I (Map, "U", Latin1.Xk_S_U);
I (Map, "V", Latin1.Xk_S_V);
I (Map, "W", Latin1.Xk_S_W);
I (Map, "X", Latin1.Xk_S_X);
I (Map, "Y", Latin1.Xk_S_Y);
I (Map, "Z", Latin1.Xk_S_Z);
I (Map, "bracketleft", Latin1.Xk_Bracketleft);
I (Map, "backslash", Latin1.Xk_Backslash);
I (Map, "bracketright", Latin1.Xk_Bracketright);
I (Map, "asciicircum", Latin1.Xk_Asciicircum);
I (Map, "underscore", Latin1.Xk_Underscore);
I (Map, "grave", Latin1.Xk_Grave);
I (Map, "a", Latin1.Xk_A);
I (Map, "b", Latin1.Xk_B);
I (Map, "c", Latin1.Xk_C);
I (Map, "d", Latin1.Xk_D);
I (Map, "e", Latin1.Xk_E);
I (Map, "f", Latin1.Xk_F);
I (Map, "g", Latin1.Xk_G);
I (Map, "h", Latin1.Xk_H);
I (Map, "i", Latin1.Xk_I);
I (Map, "j", Latin1.Xk_J);
I (Map, "k", Latin1.Xk_K);
I (Map, "l", Latin1.Xk_L);
I (Map, "m", Latin1.Xk_M);
I (Map, "n", Latin1.Xk_N);
I (Map, "o", Latin1.Xk_O);
I (Map, "p", Latin1.Xk_P);
I (Map, "q", Latin1.Xk_Q);
I (Map, "r", Latin1.Xk_R);
I (Map, "s", Latin1.Xk_S);
I (Map, "t", Latin1.Xk_T);
I (Map, "u", Latin1.Xk_U);
I (Map, "v", Latin1.Xk_V);
I (Map, "w", Latin1.Xk_W);
I (Map, "x", Latin1.Xk_X);
I (Map, "y", Latin1.Xk_Y);
I (Map, "z", Latin1.Xk_Z);
I (Map, "braceleft", Latin1.Xk_Braceleft);
I (Map, "bar", Latin1.Xk_Bar);
I (Map, "braceright", Latin1.Xk_Braceright);
I (Map, "asciitilde", Latin1.Xk_Asciitilde);
I (Map, "nobreakspace", Latin1.Xk_Nobreakspace);
I (Map, "exclamdown", Latin1.Xk_Exclamdown);
I (Map, "cent", Latin1.Xk_Cent);
I (Map, "sterling", Latin1.Xk_Sterling);
I (Map, "currency", Latin1.Xk_Currency);
I (Map, "yen", Latin1.Xk_Yen);
I (Map, "brokenbar", Latin1.Xk_Brokenbar);
I (Map, "section", Latin1.Xk_Section);
I (Map, "diaeresis", Latin1.Xk_Diaeresis);
I (Map, "copyright", Latin1.Xk_Copyright);
I (Map, "ordfeminine", Latin1.Xk_Ordfeminine);
I (Map, "guillemotleft", Latin1.Xk_Guillemotleft);
I (Map, "notsign", Latin1.Xk_Notsign);
I (Map, "hyphen", Latin1.Xk_Hyphen);
I (Map, "registered", Latin1.Xk_Registered);
I (Map, "macron", Latin1.Xk_Macron);
I (Map, "degree", Latin1.Xk_Degree);
I (Map, "plusminus", Latin1.Xk_Plusminus);
I (Map, "twosuperior", Latin1.Xk_Twosuperior);
I (Map, "threesuperior", Latin1.Xk_Threesuperior);
I (Map, "acute", Latin1.Xk_Acute);
I (Map, "mu", Latin1.Xk_Mu);
I (Map, "paragraph", Latin1.Xk_Paragraph);
I (Map, "periodcentered", Latin1.Xk_Periodcentered);
I (Map, "cedilla", Latin1.Xk_Cedilla);
I (Map, "onesuperior", Latin1.Xk_Onesuperior);
I (Map, "masculine", Latin1.Xk_Masculine);
I (Map, "guillemotright", Latin1.Xk_Guillemotright);
I (Map, "onequarter", Latin1.Xk_Onequarter);
I (Map, "onehalf", Latin1.Xk_Onehalf);
I (Map, "threequarters", Latin1.Xk_Threequarters);
I (Map, "questiondown", Latin1.Xk_Questiondown);
I (Map, "Agrave", Latin1.Xk_S_Agrave);
I (Map, "Aacute", Latin1.Xk_S_Aacute);
I (Map, "Acircumflex", Latin1.Xk_S_Acircumflex);
I (Map, "Atilde", Latin1.Xk_S_Atilde);
I (Map, "Adiaeresis", Latin1.Xk_S_Adiaeresis);
I (Map, "Aring", Latin1.Xk_S_Aring);
I (Map, "AE", Latin1.Xk_S_Ae);
I (Map, "Ccedilla", Latin1.Xk_S_Ccedilla);
I (Map, "Egrave", Latin1.Xk_S_Egrave);
I (Map, "Eacute", Latin1.Xk_S_Eacute);
I (Map, "Ecircumflex", Latin1.Xk_S_Ecircumflex);
I (Map, "Ediaeresis", Latin1.Xk_S_Ediaeresis);
I (Map, "Igrave", Latin1.Xk_S_Igrave);
I (Map, "Iacute", Latin1.Xk_S_Iacute);
I (Map, "Icircumflex", Latin1.Xk_S_Icircumflex);
I (Map, "Idiaeresis", Latin1.Xk_S_Idiaeresis);
I (Map, "ETH", Latin1.Xk_S_Eth);
I (Map, "Ntilde", Latin1.Xk_S_Ntilde);
I (Map, "Ograve", Latin1.Xk_S_Ograve);
I (Map, "Oacute", Latin1.Xk_S_Oacute);
I (Map, "Ocircumflex", Latin1.Xk_S_Ocircumflex);
I (Map, "Otilde", Latin1.Xk_S_Otilde);
I (Map, "Odiaeresis", Latin1.Xk_S_Odiaeresis);
I (Map, "multiply", Latin1.Xk_Multiply);
I (Map, "Ooblique", Latin1.Xk_Ooblique);
I (Map, "Ugrave", Latin1.Xk_S_Ugrave);
I (Map, "Uacute", Latin1.Xk_S_Uacute);
I (Map, "Ucircumflex", Latin1.Xk_S_Ucircumflex);
I (Map, "Udiaeresis", Latin1.Xk_S_Udiaeresis);
I (Map, "Yacute", Latin1.Xk_S_Yacute);
I (Map, "THORN", Latin1.Xk_S_Thorn);
I (Map, "ssharp", Latin1.Xk_Ssharp);
I (Map, "agrave", Latin1.Xk_Agrave);
I (Map, "aacute", Latin1.Xk_Aacute);
I (Map, "acircumflex", Latin1.Xk_Acircumflex);
I (Map, "atilde", Latin1.Xk_Atilde);
I (Map, "adiaeresis", Latin1.Xk_Adiaeresis);
I (Map, "aring", Latin1.Xk_Aring);
I (Map, "ae", Latin1.Xk_Ae);
I (Map, "ccedilla", Latin1.Xk_Ccedilla);
I (Map, "egrave", Latin1.Xk_Egrave);
I (Map, "eacute", Latin1.Xk_Eacute);
I (Map, "ecircumflex", Latin1.Xk_Ecircumflex);
I (Map, "ediaeresis", Latin1.Xk_Ediaeresis);
I (Map, "igrave", Latin1.Xk_Igrave);
I (Map, "iacute", Latin1.Xk_Iacute);
I (Map, "icircumflex", Latin1.Xk_Icircumflex);
I (Map, "idiaeresis", Latin1.Xk_Idiaeresis);
I (Map, "eth", Latin1.Xk_Eth);
I (Map, "ntilde", Latin1.Xk_Ntilde);
I (Map, "ograve", Latin1.Xk_Ograve);
I (Map, "oacute", Latin1.Xk_Oacute);
I (Map, "ocircumflex", Latin1.Xk_Ocircumflex);
I (Map, "otilde", Latin1.Xk_Otilde);
I (Map, "odiaeresis", Latin1.Xk_Odiaeresis);
I (Map, "division", Latin1.Xk_Division);
I (Map, "oslash", Latin1.Xk_Oslash);
I (Map, "ugrave", Latin1.Xk_Ugrave);
I (Map, "uacute", Latin1.Xk_Uacute);
I (Map, "ucircumflex", Latin1.Xk_Ucircumflex);
I (Map, "udiaeresis", Latin1.Xk_Udiaeresis);
I (Map, "yacute", Latin1.Xk_Yacute);
I (Map, "thorn", Latin1.Xk_Thorn);
I (Map, "ydiaeresis", Latin1.Xk_Ydiaeresis);
I (Map, "Aogonek", Latin2.Xk_S_Aogonek);
I (Map, "breve", Latin2.Xk_Breve);
I (Map, "Lstroke", Latin2.Xk_S_Lstroke);
I (Map, "Lcaron", Latin2.Xk_S_Lcaron);
I (Map, "Sacute", Latin2.Xk_S_Sacute);
I (Map, "Scaron", Latin2.Xk_S_Scaron);
I (Map, "Scedilla", Latin2.Xk_S_Scedilla);
I (Map, "Tcaron", Latin2.Xk_S_Tcaron);
I (Map, "Zacute", Latin2.Xk_S_Zacute);
I (Map, "Zcaron", Latin2.Xk_S_Zcaron);
I (Map, "Zabovedot", Latin2.Xk_S_Zabovedot);
I (Map, "aogonek", Latin2.Xk_Aogonek);
I (Map, "ogonek", Latin2.Xk_Ogonek);
I (Map, "lstroke", Latin2.Xk_Lstroke);
I (Map, "lcaron", Latin2.Xk_Lcaron);
I (Map, "sacute", Latin2.Xk_Sacute);
I (Map, "caron", Latin2.Xk_Caron);
I (Map, "scaron", Latin2.Xk_Scaron);
I (Map, "scedilla", Latin2.Xk_Scedilla);
I (Map, "tcaron", Latin2.Xk_Tcaron);
I (Map, "zacute", Latin2.Xk_Zacute);
I (Map, "doubleacute", Latin2.Xk_Doubleacute);
I (Map, "zcaron", Latin2.Xk_Zcaron);
I (Map, "zabovedot", Latin2.Xk_Zabovedot);
I (Map, "Racute", Latin2.Xk_S_Racute);
I (Map, "Abreve", Latin2.Xk_S_Abreve);
I (Map, "Lacute", Latin2.Xk_S_Lacute);
I (Map, "Cacute", Latin2.Xk_S_Cacute);
I (Map, "Ccaron", Latin2.Xk_S_Ccaron);
I (Map, "Eogonek", Latin2.Xk_S_Eogonek);
I (Map, "Ecaron", Latin2.Xk_S_Ecaron);
I (Map, "Dcaron", Latin2.Xk_S_Dcaron);
I (Map, "Dstroke", Latin2.Xk_S_Dstroke);
I (Map, "Nacute", Latin2.Xk_S_Nacute);
I (Map, "Ncaron", Latin2.Xk_S_Ncaron);
I (Map, "Odoubleacute", Latin2.Xk_S_Odoubleacute);
I (Map, "Rcaron", Latin2.Xk_S_Rcaron);
I (Map, "Uring", Latin2.Xk_S_Uring);
I (Map, "Udoubleacute", Latin2.Xk_S_Udoubleacute);
I (Map, "Tcedilla", Latin2.Xk_S_Tcedilla);
I (Map, "racute", Latin2.Xk_Racute);
I (Map, "abreve", Latin2.Xk_Abreve);
I (Map, "lactue", Latin2.Xk_Lacute);
I (Map, "cacute", Latin2.Xk_Cacute);
I (Map, "ccaron", Latin2.Xk_Ccaron);
I (Map, "eogonek", Latin2.Xk_Eogonek);
I (Map, "ecaron", Latin2.Xk_Ecaron);
I (Map, "dcaron", Latin2.Xk_Dcaron);
I (Map, "dstroke", Latin2.Xk_Dstroke);
I (Map, "nacute", Latin2.Xk_Nacute);
I (Map, "ncaron", Latin2.Xk_Ncaron);
I (Map, "odoubleacute", Latin2.Xk_Odoubleacute);
I (Map, "udoubleacute", Latin2.Xk_Udoubleacute);
I (Map, "rcaron", Latin2.Xk_Rcaron);
I (Map, "uring", Latin2.Xk_Uring);
I (Map, "tcedilla", Latin2.Xk_Tcedilla);
I (Map, "abovedot", Latin2.Xk_Abovedot);
I (Map, "Hstroke", Latin3.Xk_S_Hstroke);
I (Map, "Hcircumflex", Latin3.Xk_S_Hcircumflex);
I (Map, "Iabovedot", Latin3.Xk_Iabovedot);
I (Map, "Gbreve", Latin3.Xk_S_Gbreve);
I (Map, "Jcircumflex", Latin3.Xk_S_Jcircumflex);
I (Map, "hstroke", Latin3.Xk_Hstroke);
I (Map, "hcircumflex", Latin3.Xk_Hcircumflex);
I (Map, "idotless", Latin3.Xk_Idotless);
I (Map, "gbreve", Latin3.Xk_Gbreve);
I (Map, "jcircumflex", Latin3.Xk_Jcircumflex);
I (Map, "Cabovedot", Latin3.Xk_S_Cabovedot);
I (Map, "Ccircumflex", Latin3.Xk_S_Ccircumflex);
I (Map, "Gabovedot", Latin3.Xk_S_Gabovedot);
I (Map, "Gcircumflex", Latin3.Xk_S_Gcircumflex);
I (Map, "Ubreve", Latin3.Xk_S_Ubreve);
I (Map, "Scircumflex", Latin3.Xk_S_Scircumflex);
I (Map, "cabovedot", Latin3.Xk_Cabovedot);
I (Map, "ccircumflex", Latin3.Xk_Ccircumflex);
I (Map, "gabovedot", Latin3.Xk_Gabovedot);
I (Map, "gcircumflex", Latin3.Xk_Gcircumflex);
I (Map, "ubreve", Latin3.Xk_Ubreve);
I (Map, "scircumflex", Latin3.Xk_Scircumflex);
I (Map, "kra", Latin4.Xk_Kra);
I (Map, "Rcedilla", Latin4.Xk_S_Rcedilla);
I (Map, "Itilde", Latin4.Xk_S_Itilde);
I (Map, "Lcedilla", Latin4.Xk_S_Lcedilla);
I (Map, "Emacron", Latin4.Xk_S_Emacron);
I (Map, "Gcedilla", Latin4.Xk_S_Gcedilla);
I (Map, "Tslash", Latin4.Xk_S_Tslash);
I (Map, "rcedilla", Latin4.Xk_Rcedilla);
I (Map, "itilde", Latin4.Xk_Itilde);
I (Map, "lcedilla", Latin4.Xk_Lcedilla);
I (Map, "emacron", Latin4.Xk_Emacron);
I (Map, "gcedilla", Latin4.Xk_Gcedilla);
I (Map, "tslash", Latin4.Xk_Tslash);
I (Map, "ENG", Latin4.Xk_S_Eng);
I (Map, "eng", Latin4.Xk_Eng);
I (Map, "Amacron", Latin4.Xk_S_Amacron);
I (Map, "Iogonek", Latin4.Xk_S_Iogonek);
I (Map, "Eabovedot", Latin4.Xk_S_Eabovedot);
I (Map, "Imacron", Latin4.Xk_S_Imacron);
I (Map, "Ncedilla", Latin4.Xk_S_Ncedilla);
I (Map, "Omacron", Latin4.Xk_S_Omacron);
I (Map, "Kcedilla", Latin4.Xk_S_Kcedilla);
I (Map, "Uogonek", Latin4.Xk_S_Uogonek);
I (Map, "Utilde", Latin4.Xk_S_Utilde);
I (Map, "Umacron", Latin4.Xk_S_Umacron);
I (Map, "amacron", Latin4.Xk_Amacron);
I (Map, "iogonek", Latin4.Xk_Iogonek);
I (Map, "eabovedot", Latin4.Xk_Eabovedot);
I (Map, "imacron", Latin4.Xk_Imacron);
I (Map, "ncedilla", Latin4.Xk_Ncedilla);
I (Map, "omacron", Latin4.Xk_Omacron);
I (Map, "kcedilla", Latin4.Xk_Kcedilla);
I (Map, "uogonek", Latin4.Xk_Uogonek);
I (Map, "utilde", Latin4.Xk_Utilde);
I (Map, "umacron", Latin4.Xk_Umacron);
I (Map, "VoidSymbol", Misc.Xk_Void_Symbol);
I (Map, "BackSpace", Misc.Xk_Backspace);
I (Map, "Tab", Misc.Xk_Tab);
I (Map, "Linefeed", Misc.Xk_Linefeed);
I (Map, "Clear", Misc.Xk_Clear);
I (Map, "Return", Misc.Xk_Return);
I (Map, "Pause", Misc.Xk_Pause);
I (Map, "Scroll_Lock", Misc.Xk_Scroll_Lock);
I (Map, "Escape", Misc.Xk_Escape);
I (Map, "Delete", Misc.Xk_Delete);
I (Map, "Multi_key", Misc.Xk_Multi_Key);
I (Map, "Kanji", Misc.Xk_Kanji);
I (Map, "Muhenkan", Misc.Xk_Muhenkan);
I (Map, "Henkan_Mode", Misc.Xk_Henkan_Mode);
I (Map, "Henkan", Misc.Xk_Henkan);
I (Map, "Romaji", Misc.Xk_Romaji);
I (Map, "Hiragana", Misc.Xk_Hiragana);
I (Map, "Katakana", Misc.Xk_Katakana);
I (Map, "Hiragana_Katakana", Misc.Xk_Hiragana_Katakana);
I (Map, "Zenkaku", Misc.Xk_Zenkaku);
I (Map, "Hankaku", Misc.Xk_Hankaku);
I (Map, "Zenkaku_Hankaku", Misc.Xk_Zenkaku_Hankaku);
I (Map, "Touroku", Misc.Xk_Touroku);
I (Map, "Massyo", Misc.Xk_Massyo);
I (Map, "Kana_Lock", Misc.Xk_Kana_Lock);
I (Map, "Kana_Shift", Misc.Xk_Kana_Shift);
I (Map, "Eisu_Shift", Misc.Xk_Eisu_Lock);
I (Map, "Eisu_toggle", Misc.Xk_Eisu_Toggle);
I (Map, "Home", Misc.Xk_Home);
I (Map, "Left", Misc.Xk_Left);
I (Map, "Up", Misc.Xk_Up);
I (Map, "Right", Misc.Xk_Right);
I (Map, "Down", Misc.Xk_Down);
I (Map, "Prior", Misc.Xk_Prior);
I (Map, "Next", Misc.Xk_Next);
I (Map, "End", Misc.Xk_End);
I (Map, "Begin", Misc.Xk_Begin);
I (Map, "Select", Misc.Xk_Select);
I (Map, "Print", Misc.Xk_Print);
I (Map, "Execute", Misc.Xk_Execute);
I (Map, "Insert", Misc.Xk_Insert);
I (Map, "Undo", Misc.Xk_Undo);
I (Map, "Redo", Misc.Xk_Redo);
I (Map, "Menu", Misc.Xk_Menu);
I (Map, "Find", Misc.Xk_Find);
I (Map, "Cancel", Misc.Xk_Cancel);
I (Map, "Help", Misc.Xk_Help);
I (Map, "Break", Misc.Xk_Break);
I (Map, "Mode_switch", Misc.Xk_Mode_Switch);
I (Map, "script_switch", Misc.Xk_Script_Switch);
I (Map, "Num_Lock", Misc.Xk_Num_Lock);
I (Map, "KP_Space", Misc.Xk_Kp_Space);
I (Map, "KP_Tab", Misc.Xk_Kp_Tab);
I (Map, "KP_Enter", Misc.Xk_Kp_Enter);
I (Map, "KP_F1", Misc.Xk_Kp_F1);
I (Map, "KP_F2", Misc.Xk_Kp_F2);
I (Map, "KP_F3", Misc.Xk_Kp_F3);
I (Map, "KP_F4", Misc.Xk_Kp_F4);
I (Map, "KP_Equal", Misc.Xk_Kp_Equal);
I (Map, "KP_Multiply", Misc.Xk_Kp_Multiply);
I (Map, "KP_Add", Misc.Xk_Kp_Add);
I (Map, "KP_Separator", Misc.Xk_Kp_Separator);
I (Map, "KP_Subtract", Misc.Xk_Kp_Subtract);
I (Map, "KP_Decimal", Misc.Xk_Kp_Decimal);
I (Map, "KP_Divide", Misc.Xk_Kp_Divide);
I (Map, "KP_0", Misc.Xk_Kp_0);
I (Map, "KP_1", Misc.Xk_Kp_1);
I (Map, "KP_2", Misc.Xk_Kp_2);
I (Map, "KP_3", Misc.Xk_Kp_3);
I (Map, "KP_4", Misc.Xk_Kp_4);
I (Map, "KP_5", Misc.Xk_Kp_5);
I (Map, "KP_6", Misc.Xk_Kp_6);
I (Map, "KP_7", Misc.Xk_Kp_7);
I (Map, "KP_8", Misc.Xk_Kp_8);
I (Map, "KP_9", Misc.Xk_Kp_9);
I (Map, "F1", Misc.Xk_F1);
I (Map, "F2", Misc.Xk_F2);
I (Map, "F3", Misc.Xk_F3);
I (Map, "F4", Misc.Xk_F4);
I (Map, "F5", Misc.Xk_F5);
I (Map, "F6", Misc.Xk_F6);
I (Map, "F7", Misc.Xk_F7);
I (Map, "F8", Misc.Xk_F8);
I (Map, "F9", Misc.Xk_F9);
I (Map, "F10", Misc.Xk_F10);
I (Map, "F11", Misc.Xk_F11);
I (Map, "L1", Misc.Xk_L1);
I (Map, "F12", Misc.Xk_F12);
I (Map, "L2", Misc.Xk_L2);
I (Map, "F13", Misc.Xk_F13);
I (Map, "L3", Misc.Xk_L3);
I (Map, "F14", Misc.Xk_F14);
I (Map, "L4", Misc.Xk_L4);
I (Map, "F15", Misc.Xk_F15);
I (Map, "L5", Misc.Xk_L5);
I (Map, "F16", Misc.Xk_F16);
I (Map, "L6", Misc.Xk_L6);
I (Map, "F17", Misc.Xk_F17);
I (Map, "L7", Misc.Xk_L7);
I (Map, "F18", Misc.Xk_F18);
I (Map, "L8", Misc.Xk_L8);
I (Map, "F19", Misc.Xk_F19);
I (Map, "L9", Misc.Xk_L9);
I (Map, "F20", Misc.Xk_F20);
I (Map, "L10", Misc.Xk_L10);
I (Map, "F21", Misc.Xk_F21);
I (Map, "R1", Misc.Xk_R1);
I (Map, "F22", Misc.Xk_F22);
I (Map, "R2", Misc.Xk_R2);
I (Map, "F23", Misc.Xk_F23);
I (Map, "R3", Misc.Xk_R3);
I (Map, "F24", Misc.Xk_F24);
I (Map, "R4", Misc.Xk_R4);
I (Map, "F25", Misc.Xk_F25);
I (Map, "R5", Misc.Xk_R5);
I (Map, "F26", Misc.Xk_F26);
I (Map, "R6", Misc.Xk_R6);
I (Map, "F27", Misc.Xk_F27);
I (Map, "R7", Misc.Xk_R7);
I (Map, "F28", Misc.Xk_F28);
I (Map, "R8", Misc.Xk_R8);
I (Map, "F29", Misc.Xk_F29);
I (Map, "R9", Misc.Xk_R9);
I (Map, "F30", Misc.Xk_F30);
I (Map, "R10", Misc.Xk_R10);
I (Map, "F31", Misc.Xk_F31);
I (Map, "R11", Misc.Xk_R11);
I (Map, "F32", Misc.Xk_F32);
I (Map, "R12", Misc.Xk_R12);
I (Map, "R13", Misc.Xk_R13);
I (Map, "F33", Misc.Xk_F33);
I (Map, "F34", Misc.Xk_F34);
I (Map, "R14", Misc.Xk_R14);
I (Map, "F35", Misc.Xk_F35);
I (Map, "R15", Misc.Xk_R15);
I (Map, "Shift_L", Misc.Xk_Shift_L);
I (Map, "Shift_R", Misc.Xk_Shift_R);
I (Map, "Control_L", Misc.Xk_Control_L);
I (Map, "Control_R", Misc.Xk_Control_R);
I (Map, "Caps_Lock", Misc.Xk_Caps_Lock);
I (Map, "Shift_Lock", Misc.Xk_Shift_Lock);
I (Map, "Meta_L", Misc.Xk_Meta_L);
I (Map, "Meta_R", Misc.Xk_Meta_R);
I (Map, "Alt_L", Misc.Xk_Alt_L);
I (Map, "Alt_R", Misc.Xk_Alt_R);
I (Map, "Super_L", Misc.Xk_Super_L);
I (Map, "Super_R", Misc.Xk_Super_R);
I (Map, "Hyper_L", Misc.Xk_Hyper_L);
I (Map, "Hyper_R", Misc.Xk_Hyper_R);
I (Map, "emspace", Publishing.Xk_Emspace);
I (Map, "enspace", Publishing.Xk_Enspace);
I (Map, "em3space", Publishing.Xk_Em3space);
I (Map, "em4space", Publishing.Xk_Em4space);
I (Map, "digitspace", Publishing.Xk_Digitspace);
I (Map, "punctspace", Publishing.Xk_Punctspace);
I (Map, "thinspace", Publishing.Xk_Thinspace);
I (Map, "hairspace", Publishing.Xk_Hairspace);
I (Map, "emdash", Publishing.Xk_Emdash);
I (Map, "endash", Publishing.Xk_Endash);
I (Map, "signifblank", Publishing.Xk_Signifblank);
I (Map, "ellipsis", Publishing.Xk_Ellipsis);
I (Map, "doubbaselinedot", Publishing.Xk_Doubbaselinedot);
I (Map, "onethird", Publishing.Xk_Onethird);
I (Map, "twothirds", Publishing.Xk_Twothirds);
I (Map, "onefifth", Publishing.Xk_Onefifth);
I (Map, "twofifths", Publishing.Xk_Twofifths);
I (Map, "threefifths", Publishing.Xk_Threefifths);
I (Map, "fourfifths", Publishing.Xk_Fourfifths);
I (Map, "onesixth", Publishing.Xk_Onesixth);
I (Map, "fivesixths", Publishing.Xk_Fivesixths);
I (Map, "careof", Publishing.Xk_Careof);
I (Map, "figdash", Publishing.Xk_Figdash);
I (Map, "leftanglebracket", Publishing.Xk_Leftanglebracket);
I (Map, "decimalpoint", Publishing.Xk_Decimalpoint);
I (Map, "rightanglebracket", Publishing.Xk_Rightanglebracket);
I (Map, "marker", Publishing.Xk_Marker);
I (Map, "oneeighth", Publishing.Xk_Oneeighth);
I (Map, "threeeighths", Publishing.Xk_Threeeighths);
I (Map, "fiveeighths", Publishing.Xk_Fiveeighths);
I (Map, "seveneighths", Publishing.Xk_Seveneighths);
I (Map, "trademark", Publishing.Xk_Trademark);
I (Map, "signaturemark", Publishing.Xk_Signaturemark);
I (Map, "trademarkincircle", Publishing.Xk_Trademarkincircle);
I (Map, "leftopentriangle", Publishing.Xk_Leftopentriangle);
I (Map, "rightopentriangle", Publishing.Xk_Rightopentriangle);
I (Map, "emopencircle", Publishing.Xk_Emopencircle);
I (Map, "emopenrectangle", Publishing.Xk_Emopenrectangle);
I (Map, "leftsinglequotemark", Publishing.Xk_Leftsinglequotemark);
I (Map, "rightsinglequotemark", Publishing.Xk_Rightsinglequotemark);
I (Map, "leftdoublequotemark", Publishing.Xk_Leftdoublequotemark);
I (Map, "rightdoublequotemark", Publishing.Xk_Rightdoublequotemark);
I (Map, "prescription", Publishing.Xk_Prescription);
I (Map, "minutes", Publishing.Xk_Minutes);
I (Map, "seconds", Publishing.Xk_Seconds);
I (Map, "latincross", Publishing.Xk_Latincross);
I (Map, "hexagram", Publishing.Xk_Hexagram);
I (Map, "filledrectbullet", Publishing.Xk_Filledrectbullet);
I (Map, "filledlefttribullet", Publishing.Xk_Filledlefttribullet);
I (Map, "filledrighttribullet", Publishing.Xk_Filledrighttribullet);
I (Map, "emfilledcircle", Publishing.Xk_Emfilledcircle);
I (Map, "emfilledrect", Publishing.Xk_Emfilledrect);
I (Map, "enopencircbullet", Publishing.Xk_Enopencircbullet);
I (Map, "enopensquarebullet", Publishing.Xk_Enopensquarebullet);
I (Map, "openrectbullet", Publishing.Xk_Openrectbullet);
I (Map, "opentribulletup", Publishing.Xk_Opentribulletup);
I (Map, "opentribulletdown", Publishing.Xk_Opentribulletdown);
I (Map, "openstar", Publishing.Xk_Openstar);
I (Map, "enfilledcircbullet", Publishing.Xk_Enfilledcircbullet);
I (Map, "enfilledsqbullet", Publishing.Xk_Enfilledsqbullet);
I (Map, "filledtribulletup", Publishing.Xk_Filledtribulletup);
I (Map, "filledtribulletdown", Publishing.Xk_Filledtribulletdown);
I (Map, "leftpointer", Publishing.Xk_Leftpointer);
I (Map, "rightpointer", Publishing.Xk_Rightpointer);
I (Map, "club", Publishing.Xk_Club);
I (Map, "diamond", Publishing.Xk_Diamond);
I (Map, "heart", Publishing.Xk_Heart);
I (Map, "maltesecross", Publishing.Xk_Maltesecross);
I (Map, "dagger", Publishing.Xk_Dagger);
I (Map, "doubledagger", Publishing.Xk_Doubledagger);
I (Map, "checkmark", Publishing.Xk_Checkmark);
I (Map, "ballotcross", Publishing.Xk_Ballotcross);
I (Map, "musicalsharp", Publishing.Xk_Musicalsharp);
I (Map, "musicalflat", Publishing.Xk_Musicalflat);
I (Map, "malesymbol", Publishing.Xk_Malesymbol);
I (Map, "femalesymbol", Publishing.Xk_Femalesymbol);
I (Map, "telephone", Publishing.Xk_Telephone);
I (Map, "telephonerecorder", Publishing.Xk_Telephonerecorder);
I (Map, "phonographcopyright", Publishing.Xk_Phonographcopyright);
I (Map, "caret", Publishing.Xk_Caret);
I (Map, "singlelowquotemark", Publishing.Xk_Singlelowquotemark);
I (Map, "doublelowquotemark", Publishing.Xk_Doublelowquotemark);
I (Map, "cursor", Publishing.Xk_Cursor);
I (Map, "blank", Special.Xk_Blank);
I (Map, "soliddiamond", Special.Xk_Soliddiamond);
I (Map, "checkerboard", Special.Xk_Checkerboard);
I (Map, "ht", Special.Xk_Ht);
I (Map, "ff", Special.Xk_Ff);
I (Map, "cr", Special.Xk_Cr);
I (Map, "lf", Special.Xk_Lf);
I (Map, "nl", Special.Xk_Nl);
I (Map, "vt", Special.Xk_Vt);
I (Map, "lowrightcorner", Special.Xk_Lowrightcorner);
I (Map, "uprightcorner", Special.Xk_Uprightcorner);
I (Map, "upleftcorner", Special.Xk_Upleftcorner);
I (Map, "lowleftcorner", Special.Xk_Lowleftcorner);
I (Map, "crossinglines", Special.Xk_Crossinglines);
I (Map, "horizlinescan1", Special.Xk_Horizlinescan1);
I (Map, "horizlinescan3", Special.Xk_Horizlinescan3);
I (Map, "horizlinescan5", Special.Xk_Horizlinescan5);
I (Map, "horizlinescan7", Special.Xk_Horizlinescan7);
I (Map, "horizlinescan9", Special.Xk_Horizlinescan9);
I (Map, "leftt", Special.Xk_Leftt);
I (Map, "rightt", Special.Xk_Rightt);
I (Map, "bott", Special.Xk_Bott);
I (Map, "topt", Special.Xk_Topt);
I (Map, "vertbar", Special.Xk_Vertbar);
I (Map, "leftradical", Technical.Xk_Leftradical);
I (Map, "topleftradical", Technical.Xk_Topleftradical);
I (Map, "horizconnector", Technical.Xk_Horizconnector);
I (Map, "topintegral", Technical.Xk_Topintegral);
I (Map, "botintegral", Technical.Xk_Botintegral);
I (Map, "vertconnector", Technical.Xk_Vertconnector);
I (Map, "topleftsqbracket", Technical.Xk_Topleftsqbracket);
I (Map, "botleftsqbracket", Technical.Xk_Botleftsqbracket);
I (Map, "toprightsqbracket", Technical.Xk_Toprightsqbracket);
I (Map, "botrightsqbracket", Technical.Xk_Botrightsqbracket);
I (Map, "topleftparens", Technical.Xk_Topleftparens);
I (Map, "botleftparens", Technical.Xk_Botleftparens);
I (Map, "toprightparens", Technical.Xk_Toprightparens);
I (Map, "botrightparens", Technical.Xk_Botrightparens);
I (Map, "leftmiddlecurlybrace", Technical.Xk_Leftmiddlecurlybrace);
I (Map, "rightmiddlecurlybrace", Technical.Xk_Rightmiddlecurlybrace);
I (Map, "topleftsummation", Technical.Xk_Topleftsummation);
I (Map, "botleftsummation", Technical.Xk_Botleftsummation);
I (Map, "topvertsummationconnector",
Technical.Xk_Topvertsummationconnector);
I (Map, "botvertsummationconnector",
Technical.Xk_Botvertsummationconnector);
I (Map, "toprightsummation", Technical.Xk_Toprightsummation);
I (Map, "botrightsummation", Technical.Xk_Botrightsummation);
I (Map, "rightmiddlesummation", Technical.Xk_Rightmiddlesummation);
I (Map, "lessthanequal", Technical.Xk_Lessthanequal);
I (Map, "notequal", Technical.Xk_Notequal);
I (Map, "greaterthanequal", Technical.Xk_Greaterthanequal);
I (Map, "integral", Technical.Xk_Integral);
I (Map, "therefore", Technical.Xk_Therefore);
I (Map, "variation", Technical.Xk_Variation);
I (Map, "infinity", Technical.Xk_Infinity);
I (Map, "nabla", Technical.Xk_Nabla);
I (Map, "approximate", Technical.Xk_Approximate);
I (Map, "similarequal", Technical.Xk_Similarequal);
I (Map, "ifonlyif", Technical.Xk_Ifonlyif);
I (Map, "implies", Technical.Xk_Implies);
I (Map, "identical", Technical.Xk_Identical);
I (Map, "radical", Technical.Xk_Radical);
I (Map, "includedin", Technical.Xk_Includedin);
I (Map, "includes", Technical.Xk_Includes);
I (Map, "intersection", Technical.Xk_Intersection);
I (Map, "union", Technical.Xk_Union);
I (Map, "logicaland", Technical.Xk_Logicaland);
I (Map, "logicalor", Technical.Xk_Logicalor);
I (Map, "partialderivative", Technical.Xk_Partialderivative);
I (Map, "function", Technical.Xk_Function);
I (Map, "leftarrow", Technical.Xk_Leftarrow);
I (Map, "uparrow", Technical.Xk_Uparrow);
I (Map, "rightarrow", Technical.Xk_Rightarrow);
I (Map, "downarrow", Technical.Xk_Downarrow);
end Init_Ks_Info_Names;
--\f
procedure Initialize_Ks_Info_Map is
------------------------------------------------------------------------------
-- Initialize an empty X_Lib_Ks_Info_map. Lock the mutex, init the names,
-- init the site names, unlock the mutex, return.
------------------------------------------------------------------------------
use X_Ks_Info_Map;
begin
----Lock the mutex, then make sure that we really have something to do. We
-- may be the 2nd simultaneous task to attempt this. No need to do it twice.
Lock_Mutex (Mutex);
if X_Lib_Ks_Info_Map /= None_Map then
Unlock_Mutex (Mutex); -- Some other task beat us to it.
return;
end if;
----Init the map, trap exceptions.
begin
Init_Ks_Info_Names;
Init_Ks_Info_File;
exception
when others =>
Unlock_Mutex (Mutex);
X_Report_Exception ("XlibError",
"UnexpException",
"Unexpected exception during: %1" & Lf &
"Exception: %6",
"Initialize_Ks_Info_Map");
return;
end;
----All done.
Unlock_Mutex (Mutex);
end Initialize_Ks_Info_Map;
--\f
end Xlbp_Key;