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