protected override Statement VerbOps()
{
var subOp = ReadByte();
if (subOp == 0x96)
{
return new BinaryExpression(CurrentVerb, Operator.Assignment, Pop()).ToStatement();
}
var verb = (Expression)CurrentVerb;
switch (subOp)
{
case 0x97: // SO_VERB_NEW New verb
verb = new MethodInvocation(new MemberAccess(verb, "New"));
break;
case 0x98: // SO_VERB_DELETE Delete verb
verb = new MethodInvocation(new MemberAccess(verb, "Delete"));
break;
case 0x99: // SO_VERB_NAME Set verb name
{
var name = ReadCharacters();
verb = new MethodInvocation(new MemberAccess(verb, "SetName")).AddArgument(name);
}
break;
case 0x9A: // SO_VERB_AT Set verb (X,Y) placement
{
var y = Pop();
var x = Pop();
verb = new MethodInvocation(new MemberAccess(verb, "At")).AddArguments(x, y);
}
break;
case 0x9B: // SO_VERB_ON Turn verb on
verb = new MethodInvocation(new MemberAccess(verb, "On"));
break;
case 0x9C: // SO_VERB_OFF Turn verb off
verb = new MethodInvocation(new MemberAccess(verb, "Off"));
break;
case 0x9D: // SO_VERB_COLOR Set verb color
verb = new MethodInvocation(new MemberAccess(verb, "Color")).AddArgument(Pop());
break;
case 0x9E: // SO_VERB_HICOLOR Set verb highlighted color
verb = new MethodInvocation(new MemberAccess(verb, "HilightedColor")).AddArgument(Pop());
break;
case 0xA0: // SO_VERB_DIMCOLOR Set verb dimmed (disabled) color
verb = new MethodInvocation(new MemberAccess(verb, "DimColor")).AddArgument(Pop());
break;
case 0xA1: // SO_VERB_DIM
verb = new MethodInvocation(new MemberAccess(verb, "Dim"));
break;
case 0xA2: // SO_VERB_KEY Set keypress to associate with verb
verb = new MethodInvocation(new MemberAccess(verb, "Key")).AddArgument(Pop());
break;
case 0xA3: // SO_VERB_IMAGE Set verb image
{
var b = Pop();
var a = Pop();
verb = new MethodInvocation(new MemberAccess(verb, "SetImage")).AddArguments(a, b);
}
break;
case 0xA4: // SO_VERB_NAME_STR Set verb name
{
var a = Pop();
verb = new MethodInvocation(new MemberAccess(verb, "Name")).AddArguments(a, ReadCharacters());
}
break;
case 0xA5: // SO_VERB_CENTER Center verb
verb = new MethodInvocation(new MemberAccess(verb, "Center"));
break;
case 0xA6: // SO_VERB_CHARSET Choose charset for verb
verb = new MethodInvocation(new MemberAccess(verb, "Charset")).AddArgument(Pop());
break;
case 0xA7: // SO_VERB_LINE_SPACING Choose linespacing for verb
verb = new MethodInvocation(new MemberAccess(verb, "LineSpacing")).AddArgument(Pop());
break;
default:
throw new NotSupportedException(string.Format("VerbOps: default case {0}", subOp));
}
return verb.ToStatement();
}