public ScriptTable LoadScripts(IReader reader) { StructureValueCollection values = LoadScriptTag(reader, _scnrTag); ulong strSize = values.GetInteger("script string table size"); var result = new ScriptTable(); var stringReader = new StringTableReader(); result.Scripts = LoadScripts(reader, values); result.Globals = LoadGlobals(reader, values); if (values.HasInteger("script syntax table size")) { result.Expressions = LoadSyntax(reader, values, stringReader); } else { result.Expressions = LoadExpressions(reader, values, stringReader); } CachedStringTable strings = LoadStrings(reader, values, stringReader); foreach (ScriptExpression expr in result.Expressions.Where(e => (e != null))) { expr.ResolveStrings(strings); } return(result); }
private ScriptExpressionTable LoadSyntax(IReader reader, StructureValueCollection values, StringTableReader stringReader) { var stringsSize = (int)values.GetInteger("script string table size"); var tableSize = (int)values.GetInteger("script syntax table size"); uint tableAddress = (uint)values.GetInteger("script syntax table address"); long expand = _expander.Expand(tableAddress); StructureLayout headerLayout = _buildInfo.Layouts.GetLayout("script syntax table header"); StructureValueCollection[] headerEntry = TagBlockReader.ReadTagBlock(reader, 1, expand, headerLayout, _metaArea); int count = (int)headerEntry[0].GetInteger("element count"); StructureLayout layout = _buildInfo.Layouts.GetLayout("script syntax table element"); StructureValueCollection[] entries = TagBlockReader.ReadTagBlock(reader, count, expand + headerLayout.Size, layout, _metaArea); var result = new ScriptExpressionTable(); result.AddExpressions(entries.Select((e, i) => new ScriptExpression(e, (ushort)i, stringReader, stringsSize))); foreach (ScriptExpression expr in result.Where(expr => expr != null)) { expr.ResolveReferences(result); } return(result); }
private void Load(StructureValueCollection values, ushort index, StringTableReader stringReader) { Index = new DatumIndex((ushort) values.GetInteger("datum index salt"), index); Opcode = (ushort) values.GetInteger("opcode"); ReturnType = (short) values.GetInteger("value type"); Type = (ScriptExpressionType) values.GetInteger("expression type"); _nextIndex = new DatumIndex(values.GetInteger("next expression index")); _stringTableOffset = (int) values.GetIntegerOrDefault("string table offset", 0); Value = values.GetInteger("value"); LineNumber = (short) values.GetIntegerOrDefault("source line", 0); stringReader.RequestString(_stringTableOffset); }
private void Load(StructureValueCollection values, ushort index, StringTableReader stringReader) { Index = new DatumIndex((ushort)values.GetInteger("datum index salt"), index); Opcode = (ushort)values.GetInteger("opcode"); ReturnType = (short)values.GetInteger("value type"); Type = (ScriptExpressionType)values.GetInteger("expression type"); _nextIndex = new DatumIndex(values.GetInteger("next expression index")); _stringTableOffset = (int)values.GetIntegerOrDefault("string table offset", 0); Value = values.GetInteger("value"); LineNumber = (short)values.GetIntegerOrDefault("source line", 0); stringReader.RequestString(_stringTableOffset); }
public ScriptTable LoadScripts(IReader reader) { StructureValueCollection values = LoadTag(reader); var result = new ScriptTable(); var stringReader = new StringTableReader(); result.Scripts = LoadScripts(reader, values); result.Globals = LoadGlobals(reader, values); result.Expressions = LoadExpressions(reader, values, stringReader); CachedStringTable strings = LoadStrings(reader, values, stringReader); foreach (ScriptExpression expr in result.Expressions.Where(e => (e != null))) expr.ResolveStrings(strings); return result; }
internal ScriptExpression(StructureValueCollection values, ushort index, StringTableReader stringReader) { Load(values, index, stringReader); }
internal ScriptExpression(StructureValueCollection values, ushort index, StringTableReader stringReader, int stringTableSize) { Load(values, index, stringReader, stringTableSize); }
private CachedStringTable LoadStrings(IReader reader, StructureValueCollection values, StringTableReader stringReader) { int stringsSize = (int)values.GetInteger("script string table size"); if (stringsSize == 0) { return(new CachedStringTable()); } uint tableAddr = (uint)values.GetInteger("script string table address"); long expand = _expander.Expand(tableAddr); int tableOffset = _metaArea.PointerToOffset(expand); var result = new CachedStringTable(); stringReader.ReadRequestedStrings(reader, tableOffset, result); return(result); }
private CachedStringTable LoadStrings(IReader reader, StructureValueCollection values, StringTableReader stringReader) { var stringsSize = (int) values.GetInteger("script string table size"); if (stringsSize == 0) return new CachedStringTable(); var result = new CachedStringTable(); int tableOffset = _metaArea.PointerToOffset(values.GetInteger("script string table address")); stringReader.ReadRequestedStrings(reader, tableOffset, result); return result; }
private ScriptExpressionTable LoadExpressions(IReader reader, StructureValueCollection values, StringTableReader stringReader) { var count = (int) values.GetInteger("number of script expressions"); uint address = values.GetInteger("script expression table address"); StructureLayout layout = _buildInfo.Layouts.GetLayout("script expression entry"); StructureValueCollection[] entries = ReflexiveReader.ReadReflexive(reader, count, address, layout, _metaArea); var result = new ScriptExpressionTable(); result.AddExpressions(entries.Select((e, i) => new ScriptExpression(e, (ushort) i, stringReader))); foreach (ScriptExpression expr in result.Where(expr => expr != null)) expr.ResolveReferences(result); return result; }