Fix XON/XOFF
This commit is contained in:
@@ -2023,6 +2023,9 @@ class SetX : Code
|
||||
}
|
||||
override void execute(VM vm)
|
||||
{
|
||||
vm.petitcomputer.setX(func, value);
|
||||
if (value)
|
||||
vm.petitcomputer.xon(func);
|
||||
else
|
||||
vm.petitcomputer.xoff(func);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -893,7 +893,7 @@ class Parser
|
||||
return null;
|
||||
}
|
||||
auto arg = std.uni.toUpper(token.value.stringValue);
|
||||
if (arg != "MOTION" && arg != "EXPAD" && arg != "MIC" && arg != "WIIU")
|
||||
if (arg != "MOTION" && arg != "EXPAD" && arg != "MIC" && (uname == "XOFF" || (arg != "WIIU" && arg != "3DS" && arg != "COMPAT")))
|
||||
{
|
||||
syntaxError();
|
||||
return null;
|
||||
|
||||
@@ -1236,35 +1236,68 @@ class PetitComputer
|
||||
{
|
||||
return page >= 0 && page < 6;
|
||||
}
|
||||
enum XMode
|
||||
{
|
||||
_3DS,
|
||||
COMPAT,
|
||||
WIIU,
|
||||
}
|
||||
struct X
|
||||
{
|
||||
bool motion;
|
||||
bool expad;
|
||||
bool mic;
|
||||
bool wiiU;
|
||||
XMode mode;
|
||||
}
|
||||
X x;
|
||||
public void setX(wstring func, bool value)
|
||||
public void xoff(wstring func)
|
||||
{
|
||||
if (func == "WIIU")
|
||||
if (func == "MIC")
|
||||
{
|
||||
x.wiiU = value;
|
||||
}
|
||||
else if (func == "MIC")
|
||||
{
|
||||
x.mic = value;
|
||||
x.mic = false;
|
||||
}
|
||||
else if (func == "EXPAD")
|
||||
{
|
||||
x.expad = value;
|
||||
x.expad = false;
|
||||
}
|
||||
else if (func == "MOTION")
|
||||
{
|
||||
x.motion = value;
|
||||
x.motion = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
std.stdio.stderr.writefln("Unknown %s %s", value ? "XON" : "XOFF", func);
|
||||
std.stdio.stderr.writefln("Unknown XOFF %s", func);
|
||||
}
|
||||
}
|
||||
public void xon(wstring func)
|
||||
{
|
||||
if (func == "WIIU")
|
||||
{
|
||||
x.mode = XMode.WIIU;
|
||||
}
|
||||
else if (func == "3DS")
|
||||
{
|
||||
x.mode = XMode._3DS;
|
||||
}
|
||||
else if (func == "COMPAT")
|
||||
{
|
||||
x.mode = XMode.COMPAT;
|
||||
}
|
||||
else if (func == "MIC")
|
||||
{
|
||||
x.mic = true;
|
||||
}
|
||||
else if (func == "EXPAD")
|
||||
{
|
||||
x.expad = true;
|
||||
}
|
||||
else if (func == "MOTION")
|
||||
{
|
||||
x.motion = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
std.stdio.stderr.writefln("Unknown XON %s", func);
|
||||
}
|
||||
}
|
||||
//プチコン内部表現はRGB5_A1
|
||||
|
||||
Reference in New Issue
Block a user