Пример #1
0
        /// <summary>
        /// lese die Daten aus einer MDX-Datei ein
        /// </summary>
        /// <param name="br"></param>
        public void Read(BinaryReaderWriter br)
        {
            br.Seek(0);
            byte[] id = br.ReadBytes(6);

            if (id[0] != 'M' ||
                id[1] != 'i' ||
                id[2] != 'd' ||
                id[3] != 'x' ||
                id[4] != 'd' ||
                id[5] != 0)
            {
                throw new Exception("Keine MDX-Datei.");
            }

            Unknown1 = br.Read2AsUShort();
            Unknown2 = br.Read2AsUShort();

            Count = br.Read4UInt();
            Maps.Clear();
            for (int i = 0; i < Count; i++)
            {
                MapEntry entry = new MapEntry();
                entry.Read(br);
                Maps.Add(entry);
            }
        }
Пример #2
0
 public void Read(BinaryReaderWriter br)
 {
     MapID     = br.Read4UInt();
     ProductID = br.Read2AsUShort();
     FamilyID  = br.Read2AsUShort();
     MapNumber = br.Read4UInt();
 }
Пример #3
0
        public override void ReadHeader(BinaryReaderWriter br)
        {
            base.ReadCommonHeader(br, Type);

            Nod1Nodes.Read(br);
            Flags = br.Read2AsUShort();
            br.ReadBytes(Unknown_0x1F);
            Align           = br.ReadByte();
            Mult1           = br.ReadByte();
            TableARecordLen = br.Read2AsUShort();
            Nod2RoadData.Read(br);
            br.ReadBytes(Unknown_0x2D);
            Nod3BoundaryNodes.Read(br);
            br.ReadBytes(Unknown_0x3B);

            if (Headerlength > 0x3F)
            {
                Nod4HighClassBoundary.Read(br);                  // 0x3F, 8Byte
                for (int i = 0; i < ClassBoundaries.Length; i++) // 0x47, 5*4 Bytes
                {
                    ClassBoundaries[i] = br.Read4Int();
                    if (i > 0)
                    {
                        ClassBoundaries[i] += ClassBoundaries[i - 1];
                    }
                }
                br.ReadBytes(Unknown_0x5B);
                Nod5.Read(br);
                br.ReadBytes(Unknown_0x6F);
                Nod6.Read(br);
                br.ReadBytes(Unknown_0x7B);
            }
        }
Пример #4
0
        public override void ReadHeader(BinaryReaderWriter br)
        {
            base.ReadCommonHeader(br, Type);

            Filesections.ClearSections();

            Codepage = br.Read2AsUShort();
            br.SetEncoding(Codepage);

            SortId1 = br.Read2AsUShort();
            SortId2 = br.Read2AsUShort();
            br.ReadBytes(Unknown_x1B);
            Mdr1 = new DataBlockWithRecordsize(br);
            br.ReadBytes(Unknown_x27);
            Mdr2 = new DataBlockWithRecordsize(br);
            br.ReadBytes(Unknown_x35);
            Mdr3 = new DataBlockWithRecordsize(br);
            br.ReadBytes(Unknown_x43);
            Mdr4 = new DataBlockWithRecordsize(br);
            br.ReadBytes(Unknown_x51);
            Mdr5 = new DataBlockWithRecordsize(br);
            br.ReadBytes(Unknown_x5F);
            Mdr6 = new DataBlockWithRecordsize(br);
            br.ReadBytes(Unknown_x6D);
            Mdr7 = new DataBlockWithRecordsize(br);
            br.ReadBytes(Unknown_x7B);
            Mdr8 = new DataBlockWithRecordsize(br);
            br.ReadBytes(Unknown_x89);
            Mdr9 = new DataBlockWithRecordsize(br);
            br.ReadBytes(Unknown_x97);
            Mdr10 = new DataBlock(br);
            br.ReadBytes(Unknown_xA3);
            Mdr11 = new DataBlockWithRecordsize(br);
            br.ReadBytes(Unknown_xB1);
            Mdr12 = new DataBlockWithRecordsize(br);
            br.ReadBytes(Unknown_xBF);
            Mdr13 = new DataBlockWithRecordsize(br);
            br.ReadBytes(Unknown_xCD);
            Mdr14 = new DataBlockWithRecordsize(br);
            br.ReadBytes(Unknown_xDB);
            Mdr15       = new DataBlock(br);
            Unknown_xE7 = br.ReadByte();
            Mdr16       = new DataBlockWithRecordsize(br);
            br.ReadBytes(Unknown_xF2);
            Mdr17 = new DataBlock(br);
            br.ReadBytes(Unknown_xFE);
            Mdr18 = new DataBlockWithRecordsize(br);
            br.ReadBytes(Unknown_x10C);

            if (Headerlength > 0x110)
            {
                Unknown_x110 = new byte[Headerlength - 0x110];
                br.ReadBytes(Unknown_x110);
            }
        }
Пример #5
0
 /// <summary>
 /// liest die Blockdaten ein
 /// </summary>
 /// <param name="br"></param>
 public void ReadData(BinaryReaderWriter br)
 {
     Unknown1 = br.Read2AsUShort();
     A        = br.ReadByte();
     Unknown2 = br.Read4UInt();
     Unknown3 = br.Read2AsUShort();
     B        = br.ReadByte();
     Unknown4 = br.Read2AsUShort();
     C        = br.ReadByte();
     Unknown5 = br.Read4UInt();
     D        = br.ReadByte();
     Unknown6 = br.Read2AsUShort();
 }
Пример #6
0
        public TableItem(BinaryReaderWriter br, int iItemlength)
            : this()
        {
            rawtype = br.Read2AsUShort();
            switch (iItemlength)
            {
            case 3: Offset = br.ReadByte(); break;

            case 4: Offset = br.Read2AsUShort(); break;

            case 5: Offset = (int)br.Read3AsUInt(); break;
            }
        }
Пример #7
0
            public void Read(BinaryReaderWriter br)
            {
                Typ = (char)br.ReadByte();
                UInt16 len = br.Read2AsUShort();   // Anzahl der noch folgenden Bytes
                long   end = br.BaseStream.Position + len;

                switch (Typ)
                {
                case 'L': // MapBlock
                    ProductID = br.Read2AsUShort();
                    FamilyID  = br.Read2AsUShort();
                    MapNumber = br.Read4UInt();
                    while (br.BaseStream.Position < end - 9)   // seriesName, mapDescription, areaName
                    {
                        Name.Add(br.ReadString());
                    }
                    Unknown0 = br.Read4UInt();
                    Unknown1 = br.Read4UInt();
                    break;

                case 'P': // ProductBlock
                    ProductID = br.Read2AsUShort();
                    FamilyID  = br.Read2AsUShort();
                    Unknown2  = br.Read2AsUShort();
                    Unknown3  = br.Read2AsUShort();
                    Unknown4  = br.Read2AsUShort();
                    break;

                case 'F': // vereinfachter MapBlock ?
                    ProductID = br.Read2AsUShort();
                    FamilyID  = br.Read2AsUShort();
                    while (br.BaseStream.Position < end)       // description (nur 1x?)
                    {
                        Name.Add(br.ReadString());
                    }
                    break;

                case 'V':
                    while (br.BaseStream.Position < end - 1)
                    {
                        Name.Add(br.ReadString());
                    }
                    Unknown5 = br.ReadByte();
                    break;

                default:

                    break;
                }
            }
Пример #8
0
            /// <summary>
            /// liest die Blockdaten ein
            /// </summary>
            /// <param name="br"></param>
            public new void ReadData(BinaryReaderWriter br)
            {
                base.ReadData(br);

                int readlen = 6 * 4 + Description.Length + 1; // in der Basisklasse gelesen

                Unknown1 = br.Read2AsUShort();
                SubCount = br.Read2AsUShort();

                readlen += 4;

                DataSize.Clear();
                for (int i = 0; i < SubCount; i++)
                {
                    DataSize.Add(br.Read4UInt());
                    readlen += 4;
                }

                if (blh.Length - readlen < 7)
                {
                    return;
                }

                HasCopyright = br.ReadByte();
                Unknown2     = br.ReadByte();
                Unknown3     = br.ReadByte();
                Unknown4     = br.ReadByte();
                Unknown5     = br.ReadByte();
                Unknown6     = br.ReadByte();
                Unknown7     = br.ReadByte();

                readlen += 7;

                Name.Clear();
                for (int i = 0; i < SubCount; i++)
                {
                    Name.Add(br.ReadString());
                    readlen += Name[Name.Count - 1].Length + 1;
                }

                if (blh.Length - readlen < 2)
                {
                    return;
                }

                Unknown8 = br.ReadByte();
                Unknown9 = br.ReadByte();
            }
Пример #9
0
        /// <summary>
        /// liest einen Tabelleneintrag ein
        /// </summary>
        /// <param name="br"></param>
        /// <param name="offset_len">Länge des Speicherbereichs für den Offset in Byte</param>
        /// <param name="baseheight_len">Länge des Speicherbereichs für die Basishöhe in Byte</param>
        /// <param name="diff_len">Länge des Speicherbereichs in Byte</param>
        /// <param name="extraBytes">wenn größer 0, dann 1 zusätzliches Byte</param>
        public void Read(BinaryReaderWriter br, int offset_len = 3, int baseheight_len = 2, int diff_len = 2, int type_len = 1)
        {
            switch (offset_len)
            {
            case 1:
                Offset = br.ReadByte();
                break;

            case 2:
                Offset = br.Read2AsUShort();
                break;

            case 3:
                Offset = br.Read3AsUInt();
                break;

            case 4:
                Offset = br.Read4UInt();
                break;
            }

            switch (baseheight_len)
            {
            case 1:
                Baseheight = br.ReadByte();
                break;

            case 2:
                Baseheight = br.Read2AsShort();
                break;
            }

            switch (diff_len)
            {
            case 1:
                Diff = br.ReadByte();
                break;

            case 2:
                Diff = br.Read2AsUShort();
                break;
            }

            if (type_len > 0)
            {
                Type = br.ReadByte();
            }
        }
Пример #10
0
        /// <summary>
        /// liest den allgemeinen Header ab <see cref="HeaderOffset"/> ein
        /// <para>Ist der eingelesene Typ nicht der erwartete Typ, wird eine Exception ausgelöst.</para>
        /// </summary>
        /// <param name="br"></param>
        /// <param name="expectedtyp">Extension des erwarteten Typs z.B. 'LBL', sonst null</param>
        protected void ReadCommonHeader(BinaryReaderWriter br, string expectedtyp = null)
        {
            br.Seek(HeaderOffset);

            Headerlength = br.Read2AsUShort();

            GarminTyp = br.ReadString(10);    // z.B. "GARMIN RGN"
            if (GarminTyp.Length != 10 ||
                GarminTyp.Substring(0, 7) != "GARMIN ")
            {
                throw new Exception("Das ist kein Garmin-SUB-File.");
            }

            if (!string.IsNullOrEmpty(expectedtyp) &&
                GarminTyp.Substring(7) != expectedtyp)
            {
                throw new Exception("Das ist nicht der erwartete Dateityp (" + expectedtyp + ").");
            }

            Unknown_0x0C = br.ReadByte();

            Locked = br.ReadByte();

            try {
                CreationDate = new DateTime(br.Read2AsShort(),
                                            br.ReadByte(), // "echter" Monat
                                            br.ReadByte(),
                                            br.ReadByte(),
                                            br.ReadByte(),
                                            br.ReadByte());
            } catch { // Datum/Uhrzeit nicht erkannt
            }
        }
Пример #11
0
        public void Read(BinaryReaderWriter br)
        {
            blocks.Clear();

            // 0x0
            Used = br.ReadByte() == 0x01;

            // 0x01
            Name = br.ReadString(8);

            // 0x09
            Typ = br.ReadString(3);

            // 0x0c
            Filesize = br.Read4UInt();

            // 0x10
            Flag = br.ReadByte();

            // 0x11
            Part = br.ReadByte();

            // 0x12
            Unknown = br.ReadBytes(14);

            // 0x20
            for (int i = 0; i < MaxBlockNumberCount; i++)
            {
                UInt16 no = br.Read2AsUShort();
                if (no != 0xffff)
                {
                    blocks.Add(no);
                }
            }
        }
Пример #12
0
 public void Read(BinaryReaderWriter br, UInt16 recordlen)
 {
     if (recordlen >= 0x3C)
     {
         SpecType      = br.ReadByte();
         No            = br.ReadByte();
         PointsHoriz   = br.Read4Int();
         PointsVert    = br.Read4Int();
         LastRowHeight = br.Read4Int();
         LastColWidth  = br.Read4Int();
         Unknown12     = br.Read2AsShort();
         MaxIdxHoriz   = br.Read4Int();
         MaxIdxVert    = br.Read4Int();
         Structure     = br.Read2AsShort();
         short tmp = br.Read2AsShort(); // SubtileTableitemSize: ergibt sich schon aus Structure
         PtrSubtileTable    = br.Read4UInt();
         PtrHeightdata      = br.Read4UInt();
         west               = br.Read4Int();
         north              = br.Read4Int();
         pointDistanceVert  = br.Read4Int();
         pointDistanceHoriz = br.Read4Int();
         MinHeight          = br.Read2AsShort();
         MaxHeight          = br.Read2AsUShort();
     }
 }
Пример #13
0
        public override void ReadHeader(BinaryReaderWriter br)
        {
            base.ReadCommonHeader(br, Type);

            br.ReadBytes(Unknown_0x15);

            // die Header- also Sub-Dateianfänge einlesen
            for (int i = 0; i < SubHeaderOffsets.Length; i++)
            {
                SubHeaderOffsets[i] = br.Read4UInt();
            }

            if (Headerlength > 0x35)
            {
                Unknown_0x35 = br.ReadBytes(Headerlength - 0x35);
            }

            // echte Sub-Dateiheaderlängen aus dem jeweiligen Sub-Datei-Header einlesen
            for (int i = 0; i < SubHeaderOffsets.Length; i++)
            {
                if (SubHeaderOffsets[i] != 0)
                {
                    br.Seek(SubHeaderOffsets[i]);
                    SubHeaderLength[i] = br.Read2AsUShort();
                }
                else
                {
                    SubHeaderLength[i] = 0;
                }
            }

            // Subdateiheaderdistanzen berechnen
            // - bei SubHeaderOffsets==0 ist auch SubHeaderDistance==0 weil der Header ungültig ist
            // - beim letzten SubHeader ist SubHeaderDistance==uint.MaxValue, da es nicht anders geht
            for (int i = 0; i < SubHeaderOffsets.Length; i++)
            {
                if (SubHeaderOffsets[i] > 0 &&
                    i < SubHeaderOffsets.Length - 1)
                {
                    // nächsten gültigen Subheader suchen
                    int j = SubHeaderOffsets.Length;
                    for (j = i + 1; j < SubHeaderOffsets.Length; j++)
                    {
                        if (SubHeaderOffsets[j] >= SubHeaderOffsets[i] + SubHeaderLength[i])
                        {
                            break;
                        }
                    }
                    if (j < SubHeaderOffsets.Length)
                    {
                        SubHeaderDistance[i] = SubHeaderOffsets[j] - SubHeaderOffsets[i];
                    }
                }
                else
                {
                    SubHeaderDistance[i] = uint.MaxValue;
                }
            }
        }
Пример #14
0
        public override void ReadHeader(BinaryReaderWriter br)
        {
            base.ReadCommonHeader(br, Type);

            Flags          = br.Read4UInt();
            ZoomlevelCount = br.Read2AsUShort();
            br.ReadBytes(Unknown_0x1B);
            ZoomlevelRecordSize = br.Read2AsUShort();
            PtrZoomlevel        = br.Read4UInt();

            if (Headerlength == 0x29)
            {
                br.ReadBytes(Unknown_0x25);
            }
            else
            {
                Unknown_0x25 = br.ReadBytes(Headerlength - 0x25);
            }
        }
Пример #15
0
            public void Read(BinaryReaderWriter br)
            {
                byte b = 0;

                try {
                    b  = br.ReadByte();
                    ID = (Typ)b;
                } catch {
                    throw new Exception("Unbekannter Block-Typ: 0x" + b.ToString("X"));
                }

                Length = br.Read2AsUShort();
            }
Пример #16
0
            public void Read(BinaryReaderWriter br)
            {
                Headerlength = br.Read2AsUShort();
                Id1          = br.Read2AsUShort();
                Id2          = br.Read2AsUShort();
                Codepage     = br.Read2AsUShort();
                br.SetEncoding(Codepage);

                br.ReadBytes(Unknown1);
                br.ReadBytes(Unknown2);
                CharTabBlock.Read(br);
                br.ReadBytes(Unknown3);
                ExpansionsBlock.Read(br);
                br.ReadBytes(Unknown4);
                CharTabOffset = br.Read4UInt();
                br.ReadBytes(Unknown5);

                if (Headerlength > 0x34)
                {
                    Unknown6 = new byte[Headerlength - 0x34];
                    br.ReadBytes(Unknown6);
                }
            }
Пример #17
0
                public void Read(BinaryReaderWriter br)
                {
                    byte b = br.ReadByte();

                    CopyrightCode = CopyrightCodes.Unknown;
                    try {
                        CopyrightCode = (CopyrightCodes)b;
                    } catch { }

                    b         = br.ReadByte();
                    WhereCode = WhereCodes.Unknown;
                    try {
                        WhereCode = (WhereCodes)b;
                    } catch { }

                    ExtraProperties = br.Read2AsUShort();

                    Copyright = br.ReadString();
                }
Пример #18
0
        public void Read(BinaryReaderWriter br)
        {
            // 0x0
            /* Before you can look at an IMG file, you must XOR it with the XOR byte (the first byte in the file). Some maps are not XOR’d (the first byte is 0x00). */
            br.XOR = XOR = br.ReadByte();

            // 0x01
            br.ReadBytes(Unknown_x01);

            // 0x0a
            UpdateMonth = br.ReadByte();
            // 0x0b
            _UpdateYear = br.ReadByte();

            // 0x0c
            br.ReadBytes(Unknown_x0c);

            // 0x0e
            // Mapsource flag, 1 - file created by Mapsource, 0 - Garmin map visible in Basecamp and Homeport
            MapsourceFlag = br.ReadByte();

            /* 0x0f sum % 256
             * The checksum at 0xF is calculated by summing all bytes, save for the checksum byte itself, in the
             * map file and then multiplying by -1. The lowest byte in this product becomes the checksum byte
             * at 0xF. Note that this checksum is apparently not validated by MapSource, since you can modify
             * the contents of IMG files directly with a hex editor and they will still work even if the checksum
             * is not updated. */
            Checksum = br.ReadByte();

            // 0x10
            string tmp = Encoding.ASCII.GetString(br.ReadBytes(SIGNATURE.Length));

            if (tmp != SIGNATURE)
            {
                throw new Exception("Das ist keine Garmin-IMG-Datei.");
            }

            // 0x16
            br.ReadBytes(Unknown_x16);    // (Size of each FAT, in sectors, for FAT12/16; 0 for FAT32 )

            // 0x18
            SectorsPerTrack = br.Read2AsUShort();
            // 0x1a
            HeadsPerCylinder = br.Read2AsUShort();
            // 0x1c
            Cylinders = br.Read2AsUShort();

            // 0x1e
            br.ReadBytes(Unknown_x1e);

            // 0x39
            CreationDate = new DateTime(br.Read2AsUShort(),
                                        br.ReadByte(),
                                        br.ReadByte(),
                                        br.ReadByte(),
                                        br.ReadByte(),
                                        br.ReadByte());

            // 0x40
            _HeadSectors = br.ReadByte();

            // 0x41
            tmp = Encoding.ASCII.GetString(br.ReadBytes(MAPFILEIDENTIFIER.Length));
            if (tmp != MAPFILEIDENTIFIER)
            {
                throw new Exception("Das ist keine Garmin-IMG-Datei.");
            }

            // 0x47
            br.ReadBytes(Unknown_x47);

            // 0x49
            Description1 = Encoding.ASCII.GetString(br.ReadBytes(20));

            // 0x5d
            HeadsPerCylinder2 = br.Read2AsUShort();
            // 0x5f
            SectorsPerTrack2 = br.Read2AsUShort();

            // 0x61

            /* Most notable are the two byte values (at 0x61 and 0x62, here named as E1 and E2) which are
             * used to set the block size for the file. They represent powers of two, and the block size is set via
             * the formula 2E1+E2 . E1 appears to always be 0x09, setting the minimum block size to 512 bytes. */
            BlocksizeExp1 = br.ReadByte();
            // 0x62
            BlocksizeExp2 = br.ReadByte();

            // 0x63
            Blocks4Img = br.Read2AsUShort();

            // 0x65
            Description2 = Encoding.ASCII.GetString(br.ReadBytes(30));

            // 0x83
            br.ReadBytes(Unknown_x83);

            // "partition table"

            // 0x1bf
            StartHeadNumber4Partition = br.ReadByte();
            // 0x1c0
            StartSectorNumber4Partition = br.ReadByte();
            // 0x1c1
            StartCylinderNumber4Partition = br.ReadByte();

            // 0x1c2
            Systemtyp = br.ReadByte();

            // 0x1c3
            LastHeadNumber4Partition = br.ReadByte();
            // 0x1c4
            LastSectorNumber4Partition = br.ReadByte();
            // 0x1c5
            LastCylinderNumber4Partition = br.ReadByte();

            // 0x1c6
            RelativeSectors = br.Read4UInt();
            // 0x1ca
            LastSectorNumber4IMG = br.Read4UInt();

            // 0x1ce
            br.ReadBytes(Unknown_x1ce);

            // 0x1fe
            if (br.Read2AsUShort() != BOOTSIGNATURE)
            {
                throw new Exception("Das ist keine Garmin-IMG-Datei.");
            }

            // 0x200
            Unknown_x200 = new byte[(_HeadSectors - 1) * SECTOR_BLOCKSIZE];
            br.ReadBytes(Unknown_x200);
        }
Пример #19
0
 public NTTableItem(BinaryReaderWriter br)
 {
     v1 = br.Read2AsUShort();
     v2 = br.Read2AsUShort();
 }
Пример #20
0
        public override void ReadHeader(BinaryReaderWriter br)
        {
            base.ReadCommonHeader(br, Type);

            if (Unknown_0x0C != 0x01) // Bedeutung unklar
            {
                throw new Exception("Das ist keine Garmin-TYP-Datei.");
            }

            Headertyp htyp = Headertyp.Unknown;

            Codepage = br.Read2AsUShort();
            // Infos zu den Datenblöcken für POI, Polyline und Polygon einlesen (Offset, Länge)
            // (eigentlich uninteressant, da auf die Daten über die entsprechenden Tabellen zugegriffen wird)
            PointDatablock.Read(br);
            PolylineDatablock.Read(br);
            PolygoneDatablock.Read(br);

            FamilyID  = br.Read2AsUShort();
            ProductID = br.Read2AsUShort();

            // Infos zu den Tabellen für POI, Polyline und Polygon einlesen (Offset, Länge, Länge der Tabelleneinträge)
            PointTableBlock             = new TypDataBlockWithRecordsize(br);
            PolylineTableBlock          = new TypDataBlockWithRecordsize(br);
            PolygoneTableBlock          = new TypDataBlockWithRecordsize(br);
            PolygoneDraworderTableBlock = new TypDataBlockWithRecordsize(br);

            htyp = Headertyp.Standard;

            // ev. kommt noch NT-Zeugs
            if (Headerlength > 0x5b) // Extra icons
            {
                htyp = Headertyp.Type_6E;

                // spez. Daten für NT1-Punkte
                NT_PointTableBlock = new TypDataBlockWithRecordsize(br);
                nt_unknown_0x65    = br.ReadByte();        // sollte wohl immer 0x1F sein (?), auch 0x0D
                NT_PointDatablock.Read(br);

                if (Headerlength > 0x6e)         // Extra POI Labels
                {
                    htyp = Headertyp.Type_9C;

                    nt_unknown_0x6E = br.Read4UInt();     // 0
                    NT_PointLabelblock.Read(br);          // Block-Offset und -Länge
                    nt_unknown_0x7A = br.Read4UInt();     // 6    Datensatzlänge?
                    nt_unknown_0x7E = br.Read4UInt();     // 0x1B
                    NT_LabelblockTable1.Read(br);
                    nt_unknown_0x8A = br.Read4UInt();     // 6
                    nt_unknown_0x8E = br.Read4UInt();     // 0x1B
                    NT_LabelblockTable2.Read(br);
                    nt_unknown_0x9A = br.Read2AsUShort(); // 0x12

                    if (Headerlength > 0x9C)              // Indexing a selection of POIs
                    {
                        htyp = Headertyp.Type_A4;

                        br.ReadBytes(nt_unknown_0x9C); // scheint nochmal der gleiche Datenblock wie LabelblockTable2 zu sein

                        if (Headerlength > 0xA4)       // Active Routing
                        {
                            htyp = Headertyp.Type_AE;

                            br.ReadBytes(nt_unknown_0xA4);

                            if (Headerlength > 0xAE)
                            {
                                htyp = Headertyp.Unknown;

                                nt_unknown_0xA4 = br.ReadBytes(Headerlength - (int)br.Position); // Rest einlesen
                            }
                        }
                    }
                }
            }
            _HeaderTyp = htyp;
        }
Пример #21
0
 /// <summary>
 /// liest die Blockdaten
 /// </summary>
 /// <param name="br"></param>
 public new void Read(BinaryReaderWriter br)
 {
     Offset     = br.Read4UInt();
     Recordsize = br.Read2AsUShort();
     Length     = br.Read4UInt();
 }
Пример #22
0
            /// <summary>
            /// liest die Blockdaten (Segmente) ein
            /// </summary>
            /// <param name="br"></param>
            public void ReadData(BinaryReaderWriter br)
            {
                ProductID      = br.Read2AsUShort();
                FamilyID       = br.Read2AsUShort();
                TDBVersion     = br.Read2AsUShort();
                MapSeriesName  = br.ReadString();
                ProductVersion = br.Read2AsUShort();
                MapFamilyName  = br.ReadString();

                if (TDBVersion >= 407)
                {
                    Unknown1 = br.ReadByte();
                    MaxCoordbits4Overview = br.ReadByte();
                    Unknown2              = br.ReadByte();
                    Unknown3              = br.ReadByte();
                    Unknown4              = br.ReadByte();
                    Unknown5              = br.ReadByte();
                    Unknown6              = br.ReadByte();
                    Unknown7              = br.ReadByte();
                    Unknown8              = br.ReadByte();
                    Unknown9              = br.ReadByte();
                    HighestRoutable       = br.ReadByte();
                    Unknown10             = br.ReadByte();
                    Unknown11             = br.ReadByte();
                    Unknown12             = br.ReadByte();
                    Unknown13             = br.ReadByte();
                    Unknown14             = br.ReadByte();
                    Unknown15             = br.ReadByte();
                    Unknown16             = br.ReadByte();
                    Unknown17             = br.ReadByte();
                    Unknown18             = br.ReadByte();
                    Unknown19             = br.ReadByte();
                    Unknown20             = br.ReadByte();
                    Unknown21             = br.ReadByte();
                    Unknown22             = br.ReadByte();
                    Unknown23             = br.ReadByte();
                    Unknown24             = br.ReadByte();
                    Unknown25             = br.ReadByte();
                    Unknown26             = br.ReadByte();
                    Unknown27             = br.ReadByte();
                    Unknown28             = br.ReadByte();
                    CodePage              = br.Read4UInt();
                    Unknown29             = br.Read4UInt();
                    Routable              = br.ReadByte();
                    HasProfileInformation = br.ReadByte();
                    HasDEM = br.ReadByte();

                    if (TDBVersion >= 411)
                    {
                        Unknown30 = br.ReadByte();
                        Unknown31 = br.ReadByte();
                        Unknown32 = br.ReadByte();
                        Unknown33 = br.ReadByte();
                        Unknown34 = br.ReadByte();
                        Unknown35 = br.ReadByte();
                        Unknown36 = br.ReadByte();
                        Unknown37 = br.ReadByte();
                        Unknown38 = br.ReadByte();
                        Unknown39 = br.ReadByte();
                        Unknown40 = br.ReadByte();
                        Unknown41 = br.ReadByte();
                        Unknown42 = br.ReadByte();
                        Unknown43 = br.ReadByte();
                        Unknown44 = br.ReadByte();
                        Unknown45 = br.ReadByte();
                        Unknown46 = br.ReadByte();
                        Unknown47 = br.ReadByte();
                        Unknown48 = br.ReadByte();
                        Unknown49 = br.ReadByte();
                    }
                }
            }