fix InputToChar

This commit is contained in:
Matthew 2025-09-17 04:00:01 +10:00
parent 4b4fabcfe5
commit 984eab8e1e

View File

@ -907,16 +907,65 @@ LoadFunction(Library lib, string name)
} }
u8 u8
InputToChar(Input input) InputToChar(Input input, bool modified = false)
{ {
switch(input) switch(input)
{ {
case Input.Tab: case Input.Tab:
case Input.Enter: case Input.Enter:
case Input.Space: .. case Input.Tilde: case Input.Space:
{ {
return cast(u8)(input); 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.NumEnter:
case Input.NumAsterisk: case Input.NumAsterisk:
case Input.NumPlus: case Input.NumPlus:
@ -925,9 +974,14 @@ InputToChar(Input input)
case Input.NumSlash: case Input.NumSlash:
case Input.NumZero: .. case Input.NumNine: 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 { // Keys
u8 ch = InputToChar(Input.NumEight); u8 ch = InputToChar(Input.NumEight);
assert(ch == '8'); assert(ch == '8');
ch = InputToChar(Input.B); ch = InputToChar(Input.b, true);
assert(ch == 'B'); assert(ch == 'B');
version(linux) version(linux)