diff --git a/platform.d b/platform.d index 09ca438..c122291 100644 --- a/platform.d +++ b/platform.d @@ -907,16 +907,65 @@ LoadFunction(Library lib, string name) } u8 -InputToChar(Input input) +InputToChar(Input input, bool modified = false) { switch(input) { case Input.Tab: case Input.Enter: - case Input.Space: .. case Input.Tilde: + case Input.Space: { return cast(u8)(input); } + case Input.LeftBracket: + case Input.RightBracket: + case Input.BackSlash: + case Input.Minus: + case Input.Equals: + case Input.Grave: + case Input.Semicolon: + case Input.SingleQuote: + case Input.Comma: + case Input.Period: + case Input.Question: + case Input.Zero: .. case Input.Nine: + { + u32 code = cast(u32)(0xFF & input); + if(!modified) + { + return cast(u8)code; + } + + switch(cast(Input)code) + { + case Input.Zero: return ')'; + case Input.One: return '!'; + case Input.Two: return '@'; + case Input.Three: return '#'; + case Input.Four: return '$'; + case Input.Five: return '%'; + case Input.Six: return '^'; + case Input.Seven: return '&'; + case Input.Eight: return '*'; + case Input.Nine: return '('; + case Input.LeftBracket: return '{'; + case Input.RightBracket: return '}'; + case Input.BackSlash: return '|'; + case Input.Minus: return '_'; + case Input.Equals: return '+'; + case Input.Grave: return '~'; + case Input.Semicolon: return ':'; + case Input.SingleQuote: return '"'; + case Input.Comma: return '<'; + case Input.Period: return '>'; + case Input.Question: return '/'; + default: return 0; + } + } + case Input.a: .. case Input.z: + { + return !modified ? cast(u8)input : cast(u8)(input-32); + } case Input.NumEnter: case Input.NumAsterisk: case Input.NumPlus: @@ -925,9 +974,14 @@ InputToChar(Input input) case Input.NumSlash: case Input.NumZero: .. case Input.NumNine: { - return cast(u8)(input & 0xFF); + u32 code = cast(u32)(input & 0xFF); + return cast(u8)(code); + } + default: + { + u32 code = cast(u32)input; + return code >= 0x20 && code <= 0x7E ? cast(u8)code : 0; } - default: return 0; } } @@ -1343,7 +1397,7 @@ unittest { // Keys u8 ch = InputToChar(Input.NumEight); assert(ch == '8'); - ch = InputToChar(Input.B); + ch = InputToChar(Input.b, true); assert(ch == 'B'); version(linux)