1
0

Fix XON/XOFF

This commit is contained in:
otya128
2016-12-09 18:45:34 +09:00
parent 463556954a
commit a04536335b
3 changed files with 49 additions and 13 deletions

View File

@@ -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);
}
}

View File

@@ -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;

View File

@@ -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