diff --git a/Utilities.cs b/Utilities.cs
index dddff8d2..e276b160 100644
--- a/Utilities.cs
+++ b/Utilities.cs
@@ -1262,6 +1262,7 @@ namespace DICUI
///
/// String representing all parameters
/// True if it would be valid, false otherwise
+ /// TODO: Refactor this to make it cleaner
public static bool ValidateParameters(string parameters)
{
// The string has to be valid by itself first
@@ -1302,41 +1303,113 @@ namespace DICUI
// Loop through all auxilary flags
for (int i = 4; i < parts.Count; i++)
{
- switch (parts[i])
- {
- case Constants.DisableBeepFlag:
- case Constants.CDD8OpcodeFlag:
- case Constants.CDMCNFlag:
- case Constants.CDAMSFFlag:
- case Constants.CDReverseFlag:
- case Constants.CDMultiSessionFlag:
- case Constants.CDScanSectorProtectFlag:
- case Constants.CDScanAnitModFlag:
- case Constants.CDNoFixSubPFlag:
- case Constants.CDNoFixSubQFlag:
- case Constants.CDNoFixSubRtoWFlag:
- case Constants.CDNoFixSubQLibCryptFlag:
- case Constants.CDNoFixSubQSecuROMFlag:
- // No-op, all of these are single flags
- break;
- case Constants.CDScanFileProtectFlag:
- // TODO: Check if next is a valid number (timeout)
- break;
- case Constants.ForceUnitAccessFlag:
- // TODO: Check next as valid number
- break;
- case Constants.CDAddOffsetFlag:
- // TODO: Check next as valid number
- break;
- case Constants.CDBEOpcodeFlag:
- // TODO: Check next as valid (raw/pack)
- break;
+ switch (parts[i])
+ {
+ case Constants.DisableBeepFlag:
+ case Constants.CDD8OpcodeFlag:
+ case Constants.CDMCNFlag:
+ case Constants.CDAMSFFlag:
+ case Constants.CDReverseFlag:
+ case Constants.CDMultiSessionFlag:
+ case Constants.CDScanSectorProtectFlag:
+ case Constants.CDScanAnitModFlag:
+ case Constants.CDNoFixSubPFlag:
+ case Constants.CDNoFixSubQFlag:
+ case Constants.CDNoFixSubRtoWFlag:
+ case Constants.CDNoFixSubQLibCryptFlag:
+ case Constants.CDNoFixSubQSecuROMFlag:
+ // No-op, all of these are single flags
+ break;
+ case Constants.CDScanFileProtectFlag:
+ // If the next item is a flag, it's good
+ if (parts[i + 1].StartsWith("\\"))
+ {
+ break;
+ }
+ // If the next item isn't a valid number
+ else if (!Int32.TryParse(parts[i + 1], out int sfp1))
+ {
+ return false;
+ }
+ else if (sfp1 < 0)
+ {
+ return false;
+ }
+ i++;
+ break;
+ case Constants.ForceUnitAccessFlag:
+ // If the next item is a flag, it's good
+ if (parts[i + 1].StartsWith("\\"))
+ {
+ break;
+ }
+ // If the next item isn't a valid number
+ else if (!Int32.TryParse(parts[i + 1], out int fua1))
+ {
+ return false;
+ }
+ else if (fua1 < 0)
+ {
+ return false;
+ }
+ i++;
+ break;
+ case Constants.CDAddOffsetFlag:
+ // If the next item isn't a valid number
+ if (!Int32.TryParse(parts[i + 1], out int af1))
+ {
+ return false;
+ }
+ break;
+ case Constants.CDBEOpcodeFlag:
+ // If the next item is a flag, it's good
+ if (parts[i + 1].StartsWith("\\"))
+ {
+ break;
+ }
+ else if (parts[i + 1] != "raw"
+ && (parts[i + 1] != "pack"))
+ {
+ return false;
+ }
+ i++;
+ break;
case Constants.CDC2OpcodeFlag:
- // TODO: Check next (0-4) are valid numbers
- break;
+ for (int j = 1; j < 4; j++)
+ {
+ // If the next item is a flag, it's good
+ if (parts[i + j].StartsWith("\\"))
+ {
+ i += (j - 1);
+ break;
+ }
+ // If the next item isn't a valid number
+ else if (!Int32.TryParse(parts[i + j], out int c2))
+ {
+ return false;
+ }
+ else if (c2 < 0)
+ {
+ return false;
+ }
+ }
+ break;
case Constants.CDSubchannelReadLevelFlag:
- // TODO: Check next as valid number (0-2)
- break;
+ // If the next item is a flag, it's good
+ if (parts[i + 1].StartsWith("\\"))
+ {
+ break;
+ }
+ // If the next item isn't a valid number
+ else if (!Int32.TryParse(parts[i + 1], out int sub))
+ {
+ return false;
+ }
+ else if (sub < 0 || sub > 2)
+ {
+ return false;
+ }
+ break;
default:
return false;
}
@@ -1374,17 +1447,72 @@ namespace DICUI
// No-op, all of these are single flags
break;
case Constants.ForceUnitAccessFlag:
- // TODO: Check next as valid number
- break;
+ // If the next item is a flag, it's good
+ if (parts[i + 1].StartsWith("\\"))
+ {
+ break;
+ }
+ // If the next item isn't a valid number
+ else if (!Int32.TryParse(parts[i + 1], out int fua1))
+ {
+ return false;
+ }
+ else if (fua1 < 0)
+ {
+ return false;
+ }
+ i++;
+ break;
case Constants.CDBEOpcodeFlag:
- // TODO: Check next as valid (raw/pack)
- break;
+ // If the next item is a flag, it's good
+ if (parts[i + 1].StartsWith("\\"))
+ {
+ break;
+ }
+ else if (parts[i + 1] != "raw"
+ && (parts[i + 1] != "pack"))
+ {
+ return false;
+ }
+ i++;
+ break;
case Constants.CDC2OpcodeFlag:
- // TODO: Check next (0-4) are valid numbers
- break;
+ for (int j = 1; j < 4; j++)
+ {
+ // If the next item is a flag, it's good
+ if (parts[i + j].StartsWith("\\"))
+ {
+ i += (j - 1);
+ break;
+ }
+ // If the next item isn't a valid number
+ else if (!Int32.TryParse(parts[i + j], out int c2))
+ {
+ return false;
+ }
+ else if (c2 < 0)
+ {
+ return false;
+ }
+ }
+ break;
case Constants.CDSubchannelReadLevelFlag:
- // TODO: Check next as valid number (0-2)
- break;
+ // If the next item is a flag, it's good
+ if (parts[i + 1].StartsWith("\\"))
+ {
+ break;
+ }
+ // If the next item isn't a valid number
+ else if (!Int32.TryParse(parts[i + 1], out int sub))
+ {
+ return false;
+ }
+ else if (sub < 0 || sub > 2)
+ {
+ return false;
+ }
+ i++;
+ break;
default:
return false;
}
@@ -1429,20 +1557,89 @@ namespace DICUI
// No-op, all of these are single flags
break;
case Constants.ForceUnitAccessFlag:
- // TODO: Check next as valid number
- break;
+ // If the next item is a flag, it's good
+ if (parts[i + 1].StartsWith("\\"))
+ {
+ break;
+ }
+ // If the next item isn't a valid number
+ else if (!Int32.TryParse(parts[i + 1], out int fua1))
+ {
+ return false;
+ }
+ else if (fua1 < 0)
+ {
+ return false;
+ }
+ i++;
+ break;
case Constants.CDScanFileProtectFlag:
- // TODO: Check if next is a valid number (timeout)
- break;
+ // If the next item is a flag, it's good
+ if (parts[i + 1].StartsWith("\\"))
+ {
+ break;
+ }
+ // If the next item isn't a valid number
+ else if (!Int32.TryParse(parts[i + 1], out int sfp1))
+ {
+ return false;
+ }
+ else if (sfp1 < 0)
+ {
+ return false;
+ }
+ i++;
+ break;
case Constants.CDBEOpcodeFlag:
- // TODO: Check next as valid (raw/pack)
- break;
+ // If the next item is a flag, it's good
+ if (parts[i + 1].StartsWith("\\"))
+ {
+ break;
+ }
+ else if (parts[i + 1] != "raw"
+ && (parts[i + 1] != "pack"))
+ {
+ return false;
+ }
+ i++;
+ break;
case Constants.CDC2OpcodeFlag:
- // TODO: Check next (0-4) are valid numbers
- break;
+ for (int j = 1; j < 4; j++)
+ {
+ // If the next item is a flag, it's good
+ if (parts[i + j].StartsWith("\\"))
+ {
+ i += (j - 1);
+ break;
+ }
+ // If the next item isn't a valid number
+ else if (!Int32.TryParse(parts[i + j], out int c2))
+ {
+ return false;
+ }
+ else if (c2 < 0)
+ {
+ return false;
+ }
+ }
+ break;
case Constants.CDSubchannelReadLevelFlag:
- // TODO: Check next as valid number (0-2)
- break;
+ // If the next item is a flag, it's good
+ if (parts[i + 1].StartsWith("\\"))
+ {
+ break;
+ }
+ // If the next item isn't a valid number
+ else if (!Int32.TryParse(parts[i + 1], out int sub))
+ {
+ return false;
+ }
+ else if (sub < 0 || sub > 2)
+ {
+ return false;
+ }
+ i++;
+ break;
default:
return false;
}
@@ -1485,20 +1682,79 @@ namespace DICUI
// No-op, all of these are single flags
break;
case Constants.ForceUnitAccessFlag:
- // TODO: Check next as valid number
- break;
+ // If the next item is a flag, it's good
+ if (parts[i + 1].StartsWith("\\"))
+ {
+ break;
+ }
+ // If the next item isn't a valid number
+ else if (!Int32.TryParse(parts[i + 1], out int fua1))
+ {
+ return false;
+ }
+ else if (fua1 < 0)
+ {
+ return false;
+ }
+ i++;
+ break;
case Constants.CDAddOffsetFlag:
- // TODO: Check next as valid number
- break;
+ // If the next item isn't a valid number
+ if (!Int32.TryParse(parts[i + 1], out int af1))
+ {
+ return false;
+ }
+ break;
case Constants.CDBEOpcodeFlag:
- // TODO: Check next as valid (raw/pack)
- break;
+ // If the next item is a flag, it's good
+ if (parts[i + 1].StartsWith("\\"))
+ {
+ break;
+ }
+ else if (parts[i + 1] != "raw"
+ && (parts[i + 1] != "pack"))
+ {
+ return false;
+ }
+ i++;
+ break;
case Constants.CDC2OpcodeFlag:
- // TODO: Check next (0-4) are valid numbers
- break;
+ for (int j = 1; j < 4; j++)
+ {
+ // If the next item is a flag, it's good
+ if (parts[i + j].StartsWith("\\"))
+ {
+ i += (j - 1);
+ break;
+ }
+ // If the next item isn't a valid number
+ else if (!Int32.TryParse(parts[i + j], out int c2))
+ {
+ return false;
+ }
+ else if (c2 < 0)
+ {
+ return false;
+ }
+ }
+ break;
case Constants.CDSubchannelReadLevelFlag:
- // TODO: Check next as valid number (0-2)
- break;
+ // If the next item is a flag, it's good
+ if (parts[i + 1].StartsWith("\\"))
+ {
+ break;
+ }
+ // If the next item isn't a valid number
+ else if (!Int32.TryParse(parts[i + 1], out int sub))
+ {
+ return false;
+ }
+ else if (sub < 0 || sub > 2)
+ {
+ return false;
+ }
+ i++;
+ break;
default:
return false;
}
@@ -1533,8 +1789,22 @@ namespace DICUI
// No-op, all of these are single flags
break;
case Constants.ForceUnitAccessFlag:
- // TODO: Check next as valid number
- break;
+ // If the next item is a flag, it's good
+ if (parts[i + 1].StartsWith("\\"))
+ {
+ break;
+ }
+ // If the next item isn't a valid number
+ else if (!Int32.TryParse(parts[i + 1], out int fua1))
+ {
+ return false;
+ }
+ else if (fua1 < 0)
+ {
+ return false;
+ }
+ i++;
+ break;
default:
return false;
}
@@ -1559,8 +1829,22 @@ namespace DICUI
// No-op, this is a single flag
break;
case Constants.ForceUnitAccessFlag:
- // TODO: Check next as valid number
- break;
+ // If the next item is a flag, it's good
+ if (parts[i + 1].StartsWith("\\"))
+ {
+ break;
+ }
+ // If the next item isn't a valid number
+ else if (!Int32.TryParse(parts[i + 1], out int fua1))
+ {
+ return false;
+ }
+ else if (fua1 < 0)
+ {
+ return false;
+ }
+ i++;
+ break;
default:
return false;
}