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.