protected override void ReadTableMeta(FileStream stream)
        {
            _tableCount = new ByteWord(_tableCountAddr);
            _tableStart = new ByteWord(_tableStartAddr);

            _tableCount.ReadFromFile(stream);
            _tableStart.ReadFromFile(stream);

            int current = BitConverter.ToInt32(_tableStart.GetBytes(), 0);
            int count   = BitConverter.ToInt32(_tableCount.GetBytes(), 0);

            Console.Out.WriteLine("Entry count: " + count);

            for (int i = 0; i < count; i++)
            {
                MxeIndexEntry e = new MxeIndexEntry(GetRealAddress(current));
                e.ReadEntry(stream);
                _indexes.Add(e.GetIndex(), e);

                current += _tableStart.Length * 4;
            }

            Dictionary <string, MxeEntryType> dts = DiscoverTypes(stream);

            RefreshOtherTypesToDiscoveredType(dts);
        }
        protected bool ReadCsvFile(FileInfo fi)
        {
            Console.Out.WriteLine("Reading in CSV data from [" + fi.FullName + "]...");
            int    end          = fi.Name.LastIndexOf('-');
            int    start        = fi.Name.IndexOf('-');
            string type         = fi.Name.Remove(end).Substring(start + 1);
            string countStr     = fi.Name.Remove(start);
            int    count        = -1;
            bool   foundAChange = false;

            if (!Int32.TryParse(countStr, out count))
            {
                Console.Out.WriteLine(String.Format(CSV_OPEN_NAME_ERROR, fi.FullName));
                return(false);
            }

            try
            {
                using (var stream = new StreamReader(fi.FullName))
                {
                    int    lineNum = 0;
                    string line    = stream.ReadLine();
                    if (line != null)
                    {
                        lineNum++;
                        List <string> headers = GetCsvHeaders(line);

                        while ((line = stream.ReadLine()) != null)
                        {
                            lineNum++;
                            string[] info    = line.Split(',');
                            int      indexId = -1;
                            if (!Int32.TryParse(info[0], out indexId))
                            {
                                Console.Out.WriteLine(String.Format(CSV_PARSE_ERROR, fi.FullName, lineNum));
                                continue;
                            }
                            if (!_indexes.ContainsKey(indexId))
                            {
                                Console.Out.WriteLine(String.Format(CSV_MATCH_ERROR, fi.FullName, indexId));
                                continue;
                            }
                            List <string> data = info.ToList();
                            data.RemoveAt(0);
                            data.RemoveAt(0);

                            MxeIndexEntry index = _indexes[indexId];
                            if (!index.GetVmTitle().Equals(type))
                            {
                                Console.Out.WriteLine(String.Format(CSV_MATCH_TITLE_ERROR, fi.FullName, lineNum, index.GetVmTitle(), type));
                                continue;
                            }
                            if (!index.GetTypeCode().Equals(count))
                            {
                                Console.Out.WriteLine(String.Format(CSV_MATCH_SIZE_ERROR, fi.FullName, lineNum, index.GetTypeCode(), count));
                                continue;
                            }
                            if (!headers.Count.Equals(data.Count))
                            {
                                Console.Out.WriteLine(String.Format(CSV_MATCH_COUNT_ERROR, fi.FullName, lineNum, headers.Count, data.Count));
                                continue;
                            }
                            foundAChange = index.ReadCsvLineData(headers, data) || foundAChange;
                        }
                    }

                    stream.Close();
                }
            }
            catch (Exception exc)
            {
                Console.Out.WriteLine(exc.ToString());
            }

            return(foundAChange);
        }