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; }
public int AddDbgMsg( DbgMsg msg ) { messages.Add( tokenCounter, msg ); return tokenCounter++; }