Пример #1
0
 public static Token ReadToken(int start)
 {
     int thiscount = DebugCounter;
     DebugCounter++;
     Token res = new Token();
     res.text = "";
     res.raw = new byte[1];
     res.stop = true;
     Token newTok;
     if (start >= memsize)
         return res;
     byte t = memory[start];
     int end = start;
     if (t <= 0x60)
         switch (t)
         {
             case EX_LocalVariable: //0x00
                 newTok = ReadLocalVar(start);
                 newTok.stop = false;
                 end = start + newTok.raw.Length;
                 res = newTok;
                 break;
             case EX_DefaultVariable: //0x02
             case EX_InstanceVariable: //0x01
                 newTok = ReadInstanceVar(start);
                 newTok.stop = false;
                 end = start + newTok.raw.Length;
                 res = newTok;
                 break;
             case EX_Return: //0x04
                 newTok = ReadReturn(start);
                 newTok.stop = false;
                 end = start + newTok.raw.Length;
                 res = newTok;
                 break;
             case EX_Switch: //0x05
                 newTok = ReadSwitch(start);
                 newTok.stop = false;
                 end = start + newTok.raw.Length;
                 res = newTok;
                 break;
             case EX_Jump: //0x06
                 newTok = ReadJump(start);
                 newTok.stop = false;
                 end = start + newTok.raw.Length;
                 res = newTok;
                 break;
             case EX_JumpIfNot: //0x07
                 newTok = ReadJumpIfNot(start);
                 newTok.stop = false;
                 end = start + newTok.raw.Length;
                 res = newTok;
                 break;
             case EX_Assert: // 0x09
                 newTok = ReadAssert(start);
                 newTok.stop = false;
                 end = start + newTok.raw.Length;
                 res = newTok;
                 break;
             case EX_Case: // 0x0A
                 newTok = ReadCase(start);
                 newTok.stop = false;
                 end = start + newTok.raw.Length;
                 res = newTok;
                 break;
             case EX_Nothing: // 0x0B
                 newTok = ReadNothing(start);
                 newTok.stop = false;
                 end = start + newTok.raw.Length;
                 res = newTok;
                 break;
             case EX_LabelTable: //0x0C
                 newTok = ReadLableTable(start);
                 newTok.stop = false;
                 end = start + newTok.raw.Length;
                 res = newTok;
                 break;
             case EX_EatReturnValue: // 0x0E
                 newTok = ReadEatReturn(start);
                 newTok.stop = false;
                 end = start + newTok.raw.Length;
                 res = newTok;
                 break;
             case EX_Let://0x0F
             case EX_LetBool: //0x14
             case EX_LetDelegate: //0x44
                 newTok = ReadLet(start);
                 newTok.stop = false;
                 end = start + newTok.raw.Length;
                 res = newTok;
                 break;
             case EX_ArrayElement: // 0x1A
             case EX_DynArrayElement: // 0x10
                 newTok = ReadDynArrayElement(start);
                 newTok.stop = false;
                 end = start + newTok.raw.Length;
                 res = newTok;
                 break;
             case EX_New: //0x11
                 newTok = ReadNew(start);
                 newTok.stop = false;
                 end = start + newTok.raw.Length;
                 res = newTok;
                 break;
             case EX_Metacast: // 0x13
                 newTok = ReadMetacast(start);
                 newTok.stop = false;
                 end = start + newTok.raw.Length;
                 res = newTok;
                 break;
             case EX_EndParmValue: // 0x15
                 newTok = ReadEndParmVal(start);
                 newTok.stop = false;
                 end = start + newTok.raw.Length;
                 res = newTok;
                 break;
             case EX_EndFunctionParms: // 0x16
                 newTok = ReadEndFuncParm(start);
                 newTok.stop = false;
                 end = start + newTok.raw.Length;
                 res = newTok;
                 break;
             case EX_Self: //  0x17
                 newTok = ReadSelf(start);
                 newTok.stop = false;
                 end = start + newTok.raw.Length;
                 res = newTok;
                 break;
             case EX_Skip: // 0x18
                 newTok = ReadSkip(start);
                 newTok.stop = false;
                 end = start + newTok.raw.Length;
                 res = newTok;
                 break;
             case EX_ClassContext://0x12
             case EX_Context: // 0x19
                 newTok = ReadContext(start);
                 newTok.stop = false;
                 end = start + newTok.raw.Length;
                 res = newTok;
                 break;
             case EX_VirtualFunction: // 0x1B
                 newTok = ReadVirtualFunc(start);
                 newTok.stop = false;
                 end = start + newTok.raw.Length;
                 res = newTok;
                 break;
             case EX_FinalFunction: // 0x1C
                 newTok = ReadFinalFunc(start);
                 newTok.stop = false;
                 end = start + newTok.raw.Length;
                 res = newTok;
                 break;
             case EX_IntConst: // 0x1D
                 newTok = ReadIntConst(start);
                 newTok.stop = false;
                 end = start + newTok.raw.Length;
                 res = newTok;
                 break;
             case EX_FloatConst: // 0x1E
                 newTok = ReadStatFloat(start);
                 newTok.stop = false;
                 end = start + newTok.raw.Length;
                 res = newTok;
                 break;
             case EX_StringConst: //0x1F
                 newTok = ReadStringConst(start);
                 newTok.stop = false;
                 end = start + newTok.raw.Length;
                 res = newTok;
                 break;
             case EX_ObjectConst: // 0x20
                 newTok = ReadObjectConst(start);
                 newTok.stop = false;
                 end = start + newTok.raw.Length;
                 res = newTok;
                 break;
             case EX_NameConst: // 0x21
                 newTok = ReadNameConst(start);
                 newTok.stop = false;
                 end = start + newTok.raw.Length;
                 res = newTok;
                 break;
             case EX_RotationConst: // 0x22
                 newTok = ReadRotatorConst(start);
                 newTok.stop = false;
                 end = start + newTok.raw.Length;
                 res = newTok;
                 break;
             case EX_VectorConst: // 0x23
                 newTok = ReadVectorConst(start);
                 newTok.stop = false;
                 end = start + newTok.raw.Length;
                 res = newTok;
                 break;
             case EX_IntConstByte: // 0x2C
             case EX_ByteConst: //0x24
                 newTok = ReadByteConst(start);
                 newTok.stop = false;
                 end = start + newTok.raw.Length;
                 res = newTok;
                 break;
             case EX_IntZero: // 0x25
                 newTok = ReadZero(start);
                 newTok.stop = false;
                 end = start + newTok.raw.Length;
                 res = newTok;
                 break;
             case EX_IntOne: //0x26
                 newTok = ReadIntOne(start);
                 newTok.stop = false;
                 end = start + newTok.raw.Length;
                 res = newTok;
                 break;
             case EX_True: // 0x27
                 newTok = ReadTrue(start);
                 newTok.stop = false;
                 end = start + newTok.raw.Length;
                 res = newTok;
                 break;
             case EX_False: // 0x28
                 newTok = ReadFalse(start);
                 newTok.stop = false;
                 end = start + newTok.raw.Length;
                 res = newTok;
                 break;
             case EX_NativeParm: //0x29
                 newTok = ReadNativeParm(start);
                 newTok.stop = false;
                 end = start + newTok.raw.Length;
                 res = newTok;
                 break;
             case EX_NoObject: // 0x2A
                 newTok = ReadNone(start);
                 newTok.stop = false;
                 end = start + newTok.raw.Length;
                 res = newTok;
                 break;
             case EX_BoolVariable: // 0x2D
                 newTok = ReadBoolExp(start);
                 newTok.stop = false;
                 end = start + newTok.raw.Length;
                 res = newTok;
                 break;
             case EX_DynamicCast: // 0x2E
                 newTok = ReadDynCast(start);
                 newTok.stop = false;
                 end = start + newTok.raw.Length;
                 res = newTok;
                 break;
             case EX_Iterator: //0x2F
                 newTok = ReadIterator(start);
                 newTok.stop = false;
                 end = start + newTok.raw.Length;
                 res = newTok;
                 break;
             case EX_IteratorPop: // 0x30
                 newTok = ReadIterPop(start);
                 newTok.stop = false;
                 end = start + newTok.raw.Length;
                 res = newTok;
                 break;
             case EX_IteratorNext: //0x31
                 newTok = ReadIterNext(start);
                 newTok.stop = false;
                 end = start + newTok.raw.Length;
                 res = newTok;
                 break;
             case EX_StructCmpEq: // 0x32
                 newTok = ReadCompareStructs(start, "==");
                 newTok.stop = false;
                 end = start + newTok.raw.Length;
                 res = newTok;
                 break;
             case EX_StructCmpNe: // 0x33
                 newTok = ReadCompareStructs(start, "!=");
                 newTok.stop = false;
                 end = start + newTok.raw.Length;
                 res = newTok;
                 break;
             case EX_StructMember: //0x35
                 newTok = ReadStruct(start);
                 newTok.stop = false;
                 end = start + newTok.raw.Length;
                 res = newTok;
                 break;
             case EX_DynArrayLength: //0x36
                 newTok = ReadDynArrayLen(start);
                 newTok.stop = false;
                 end = start + newTok.raw.Length;
                 res = newTok;
                 break;
             case EX_GlobalFunction: // 0x37
                 newTok = ReadGlobalFunc(start);
                 newTok.stop = false;
                 end = start + newTok.raw.Length;
                 res = newTok;
                 break;
             case EX_PrimitiveCast: //0x38
                 newTok = ReadPrimitiveCast(start);
                 newTok.stop = false;
                 end = start + newTok.raw.Length;
                 res = newTok;
                 break;
             case EX_DynArrayInsert: // 0x39
                 newTok = ReadArrayArg2(start, "Insert", false);
                 newTok.stop = false;
                 end = start + newTok.raw.Length;
                 res = newTok;
                 break;
             case EX_ByteToInt: // 0x3A
                 newTok = ReadByteToInt(start);
                 newTok.stop = false;
                 end = start + newTok.raw.Length;
                 res = newTok;
                 break;
             case EX_EqualEqual_DelDel: // 0x3B
                 newTok = ReadEqual(start);
                 newTok.stop = false;
                 end = start + newTok.raw.Length;
                 res = newTok;
                 break;
             case EX_NotEqual_DelDel: // 0x3C
                 newTok = ReadCompareDel(start, "!=");
                 newTok.stop = false;
                 end = start + newTok.raw.Length;
                 res = newTok;
                 break;
             case EX_EqualEqual_DelFunc: // 0x3D
                 newTok = ReadCompareDel2(start, "==");
                 newTok.stop = false;
                 end = start + newTok.raw.Length;
                 res = newTok;
                 break;
             case EX_EmptyDelegate: // 0x3F
                 newTok = ReadEmptyDel(start);
                 newTok.stop = false;
                 end = start + newTok.raw.Length;
                 res = newTok;
                 break;
             case EX_DynArrayRemove: // 0x40
                 newTok = ReadArrayArg2(start, "Remove", false);
                 newTok.stop = false;
                 end = start + newTok.raw.Length;
                 res = newTok;
                 break;
             case EX_DelegateFunction: // 0x42
                 newTok = ReadDelFunc(start);
                 newTok.stop = false;
                 end = start + newTok.raw.Length;
                 res = newTok;
                 break;
             case EX_DelegateProperty: // 0x43
                 newTok = ReadDelegateProp(start);
                 newTok.stop = false;
                 end = start + newTok.raw.Length;
                 res = newTok;
                 break;
             case EX_Conditional: // 0x45
                 newTok = ReadConditional(start);
                 newTok.stop = false;
                 end = start + newTok.raw.Length;
                 res = newTok;
                 break;
             case EX_DynArrayFind:// 0x46
                 return ReadArrayArg(start, "Find");
             case EX_DynArrayFindStruct: //0x47
                 return ReadArrayArg2(start, "Find", true);
             case EX_LocalOutVariable: //0x48
                 newTok = ReadLocOutVar(start);
                 newTok.stop = false;
                 end = start + newTok.raw.Length;
                 res = newTok;
                 break;
             case EX_DefaultParmValue: // 0x49
                 newTok = ReadDefaultParmVal(start);
                 newTok.stop = false;
                 end = start + newTok.raw.Length;
                 res = newTok;
                 break;
             case EX_EmptyParmValue: //0x4A                    
                 newTok = ReadEmptyParm(start);
                 newTok.stop = false;
                 end = start + newTok.raw.Length;
                 res = newTok;
                 break;
             case EX_InstanceDelegate: // 0x4B
                 newTok = ReadInstDelegate(start);
                 newTok.stop = false;
                 end = start + newTok.raw.Length;
                 res = newTok;
                 break;
             case 0x4F:
                 newTok = Read4FAdd(start);
                 newTok.stop = false;
                 end = start + newTok.raw.Length;
                 res = newTok;
                 break;
             case EX_GoW_DefaultValue: //0x50
                 newTok = ReadGoWVal(start);
                 newTok.stop = false;
                 end = start + newTok.raw.Length;
                 res = newTok;
                 break;
             case EX_InterfaceContext:// 0x51
                 newTok = ReadInterfaceContext(start);
                 newTok.stop = false;
                 end = start + newTok.raw.Length;
                 res = newTok;
                 break;
             case EX_InterfaceCast: // 0x52
                 newTok = ReadUnkn1(start);
                 newTok.stop = false;
                 end = start + newTok.raw.Length;
                 res = newTok;
                 break;
             case EX_EndOfScript:    //0x53                    
                 newTok = ReadEndOfScript(start);
                 newTok.stop = true;
                 end = start + newTok.raw.Length;
                 res = newTok;
                 break;
             case EX_DynArrayAdd: // 0x54
                 newTok = ReadAdd(start);
                 newTok.stop = false;
                 end = start + newTok.raw.Length;
                 res = newTok;
                 break;
             case EX_DynArrayAddItem: //0x55
                 newTok = ReadArrayArg(start, "Add");
                 newTok.stop = false;
                 end = start + newTok.raw.Length;
                 res = newTok;
                 break;
             case EX_DynArrayRemoveItem: //0x56
                 newTok = ReadArrayArg(start, "Remove");
                 newTok.stop = false;
                 end = start + newTok.raw.Length;
                 res = newTok;
                 break;
             case EX_DynArrayInsertItem: //0x57
                 newTok = ReadArrayArg(start, "Insert");
                 newTok.stop = false;
                 end = start + newTok.raw.Length;
                 res = newTok;
                 break;
             case EX_DynArrayIterator: // 0x58
                 newTok = ReadDynArrayItr(start);
                 newTok.stop = false;
                 end = start + newTok.raw.Length;
                 res = newTok;
                 break;
             case EX_Unkn15: // 0x59
                 newTok = ReadUnkn15(start);
                 newTok.stop = false;
                 end = start + newTok.raw.Length;
                 res = newTok;
                 break;
             case EX_Unkn14: // 0x5A
                 newTok = ReadUnkn14(start);
                 newTok.stop = false;
                 end = start + newTok.raw.Length;
                 res = newTok;
                 break;
             case EX_Unkn1: // 0x5E
                 newTok = ReadUnkn1b(start);
                 newTok.stop = false;
                 end = start + newTok.raw.Length;
                 res = newTok;
                 break;
             case EX_Unkn2: // 0x5B
             case EX_Unkn5: // 0x5C                                    
             case EX_Unkn9: // 0x5D
             case EX_Unkn10: // 0x5F
             case EX_Unkn11: // 0x60
                 newTok = ReadUnkn1(start);
                 newTok.stop = false;
                 end = start + newTok.raw.Length;
                 res = newTok;
                 break;
             default:
                 newTok = ReadUnknown(start);
                 newTok.stop = true;
                 end = start + newTok.raw.Length;
                 res = newTok;
                 break;
         }
     else
     {
         switch (t)
         {
             case EX_Unkn3: //0x61
                 newTok = ReadUnkn3(start);
                 newTok.stop = false;
                 end = start + newTok.raw.Length;
                 res = newTok;
                 break;
             case EX_Unkn4: //0x62
                 newTok = ReadUnkn4(start);
                 newTok.stop = false;
                 end = start + newTok.raw.Length;
                 res = newTok;
                 break;
             case EX_Unkn8: //0x63
                 newTok = ReadUnkn8(start);
                 newTok.stop = false;
                 end = start + newTok.raw.Length;
                 res = newTok;
                 break;
             case EX_Unkn7: //0x64
                 newTok = ReadUnkn7(start);
                 newTok.stop = false;
                 end = start + newTok.raw.Length;
                 res = newTok;
                 break;
             case EX_Unkn6: //0x65
                 newTok = ReadUnkn6(start);
                 newTok.stop = false;
                 end = start + newTok.raw.Length;
                 res = newTok;
                 break;
             case EX_Unkn12: // 0x6A
                 newTok = ReadUnkn12(start);
                 newTok.stop = false;
                 end = start + newTok.raw.Length;
                 res = newTok;
                 break;
             case EX_Unkn13: // 0x6E
                 newTok = ReadUnkn13(start);
                 newTok.stop = false;
                 end = start + newTok.raw.Length;
                 res = newTok;
                 break;
             default:
                 if (t < 0x70)
                 {
                     newTok = ReadExtNative(start);
                     newTok.stop = false;
                     end = start + newTok.raw.Length;
                     res = newTok;
                 }
                 else
                 {
                     newTok = ReadNative(start);
                     newTok.stop = false;
                     end = start + newTok.raw.Length;
                     res = newTok;
                 }
                 break;
         }
     }
     DbgMsg msg = new DbgMsg();
     msg.msg = "Read token[0x" + t.ToString("X") + "] at 0x" + (start + 32).ToString("X") + ": \"" + res.text + "\" STOPTOKEN:" + res.stop + "\n";
     msg.count = thiscount;
     _debug.Add(msg);
     return res;
 }
Пример #2
0
 public int AddDbgMsg( DbgMsg msg )
 {
     messages.Add( tokenCounter, msg );
     return tokenCounter++;
 }