KeyCharsImpl.mesa
Copyright Ó 1992 by Xerox Corporation. All rights reserved.
Christian Jacobi, March 23, 1992 3:10 pm PST
Willie-s, March 19, 1992 1:05 pm PST
DIRECTORY Ascii, KeyChars, KeyCharsBackdoor, KeySymsKB, KeyTypes, IntToIntTab;
KeyCharsImpl:
CEDAR
PROGRAM
IMPORTS IntToIntTab
EXPORTS KeyChars, KeyCharsBackdoor =
BEGIN OPEN KeyChars, KeyCharsBackdoor;
ks2c: IntToIntTab.Table ~ IntToIntTab.Create[100];
c2ks: REF ARRAY CHAR OF KeySym ~ NEW[ARRAY CHAR OF KeySym ¬ ALL[[0]]];
AdditionalChar:
PUBLIC PROC [keySym: KeyTypes.KeySym, char:
CHAR] = {
IF c2ks[char]=0 THEN c2ks[char] ¬ keySym;
[] ¬ IntToIntTab.Insert[ks2c, LOOPHOLE[keySym], ORD[char]];
};
CharFromKeySym:
PUBLIC
PROC [keySym: KeySym]
RETURNS [char:
CHAR ¬ 0c] = {
IF keySym.val>=32
AND keySym.val<=127
THEN char ¬ VAL[keySym.val]
ELSE {
val: INT; found: BOOL;
[found, val] ¬ IntToIntTab.Fetch[ks2c, keySym];
IF found AND val>=0 AND val<256 THEN char ¬ VAL[val];
};
};
KeySymFromChar:
PUBLIC
PROC [char:
CHAR]
RETURNS [keySym: KeySym] = {
keySym ¬ c2ks[char];
};
Init:
PROC [] = {
FOR i: BYTE IN [32..127] DO c2ks[VAL[i]] ¬ [i] ENDLOOP;
AdditionalChar[KeySymsKB.BS, Ascii.BS];
AdditionalChar[KeySymsKB.TAB, Ascii.TAB];
AdditionalChar[KeySymsKB.LF, Ascii.LF];
AdditionalChar[KeySymsKB.CR, Ascii.CR];
AdditionalChar[KeySymsKB.ESC, Ascii.ESC];
AdditionalChar[KeySymsKB.LeftArrow, '¬];
AdditionalChar[KeySymsKB.UpArrow, '];
AdditionalChar[KeySymsKB.DownArrow, '¯];
AdditionalChar[KeySymsKB.RightArrow, '®];
};
Init[];
END.