PROGRAM INCLUDE('KEYCODES.CLW'),ONCE MAP Test() ToHex (LONG),STRING ChartoHex (LONG),STRING CodeToHex (LONG),STRING END Hex STRING('0123456789ABCDEF'),PRIVATE CODE Test() RETURN ! ============================================================================= Test PROCEDURE() Q QUEUE,AUTO KChar STRING(4) KCode STRING(32) END Str CSTRING(128) W WINDOW('IMM Entry'),AT(,,180,320),GRAY,IMM,SYSTEM,FONT('Tahoma',9) TOOLBAR,USE(?TB),AT(,,,24) BUTTON('Close'),USE(?Close),AT(4,4,40,16),STD(STD:Close) END ENTRY(@S127),USE(?E),AT(10,10,160,14),IMM LIST,USE(?L),AT(10,30,160,256),FROM(Q),FORMAT('32R(2)M|@S4@256R(2)@S32@') END CODE OPEN (W) ACCEPT CASE EVENT() OF EVENT:NewSelection IF FIELD() = ?E IF RECORDS (Q) = 100 GET (Q, 1) DELETE (Q) END Q.KChar = CharToHex (KEYCHAR()) Q.KCode = CodeToHex (KEYCODE()) ADD (Q) END END END CLOSE (W) FREE (Q) RETURN ! ============================================================================= ToHex PROCEDURE (LONG V) S STRING(4) i UNSIGNED,AUTO CODE i = 4 S[i] = HEX [BAND (V, 0Fh) + 1] V = BSHIFT (V, -4) i -= 1 S[i] = HEX [BAND (V, 0Fh) + 1] V = BSHIFT (V, -4) i -= 1 IF V <> 0 S[i] = HEX [BAND (V, 0Fh) + 1] V = BSHIFT (V, -4) i -= 1 S[i] = HEX [BAND (V, 0Fh) + 1] V = BSHIFT (V, -4) i -= 1 END RETURN S [i + 1 : 4] ! ============================================================================= CharToHex PROCEDURE (LONG V) CODE IF V >= 20h AND V < 7Fh RETURN CHR(V) END RETURN ToHex (V) ! ============================================================================= CodeToHex PROCEDURE (LONG V) S CSTRING(33) CODE IF BAND (V, AltKeyPressed) <> 0 V = BXOR (V, AltKeyPressed) S = 'Alt-' END IF BAND (V, CtrlKeyPressed) <> 0 V = BXOR (V, CtrlKeyPressed) S = S & 'Ctrl-' END IF BAND (V, ShiftKeyPressed) <> 0 V = BXOR (V, ShiftKeyPressed) S = S & 'Shift-' END S = S & CharToHex (V) RETURN S