void StringOperations()
{
_opCode = ReadByte();
switch (_opCode & 0x1F)
{
case 1:
{
// loadstring
var id = GetVarOrDirectByte(OpCodeParameter.Param1);
_strings[id] = ReadCharacters();
}
break;
case 2:
{
// copy string
var idA = GetVarOrDirectByte(OpCodeParameter.Param1);
var idB = GetVarOrDirectByte(OpCodeParameter.Param2);
_strings[idA] = new byte[_strings[idB].Length];
Array.Copy(_strings[idB], _strings[idA], _strings[idB].Length);
}
break;
case 3:
{
// Write Character
var id = GetVarOrDirectByte(OpCodeParameter.Param1);
var index = GetVarOrDirectByte(OpCodeParameter.Param2);
var character = GetVarOrDirectByte(OpCodeParameter.Param3);
_strings[id][index] = (byte)character;
}
break;
case 4:
{
// Get string char
GetResult();
var id = GetVarOrDirectByte(OpCodeParameter.Param1);
var b = GetVarOrDirectByte(OpCodeParameter.Param2);
var result = b < _strings[id].Length && b >= 0 ? _strings[id][b] : 0;
SetResult(result);
}
break;
case 5:
{
// New String
var id = GetVarOrDirectByte(OpCodeParameter.Param1);
var size = GetVarOrDirectByte(OpCodeParameter.Param2);
_strings[id] = new byte[size];
}
break;
default:
throw new NotImplementedException();
}
}