Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
		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);
		}
Esempio n. 4
0
        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;
		}
Esempio n. 6
0
 internal ScriptExpression(StructureValueCollection values, ushort index, StringTableReader stringReader)
 {
     Load(values, index, stringReader);
 }
Esempio n. 7
0
 internal ScriptExpression(StructureValueCollection values, ushort index, StringTableReader stringReader, int stringTableSize)
 {
     Load(values, index, stringReader, stringTableSize);
 }
Esempio n. 8
0
        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;
        }