Beispiel #1
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);
                }
            }
        }
Beispiel #2
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;
                }
            }
Beispiel #3
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
            }
        }
Beispiel #4
0
 void Decode_DescriptionBlock(BinaryReaderWriter br, DataBlock block)
 {
     if (br != null && block != null && block.Length > 0)
     {
         br.Seek(block.Offset);
         Description = br.ReadString((int)block.Length);
     }
 }
Beispiel #5
0
 /// <summary>
 /// liest die Blockdaten ein
 /// </summary>
 /// <param name="br"></param>
 public void ReadData(BinaryReaderWriter br)
 {
     Mapnumber       = br.Read4UInt();
     ParentMapnumber = br.Read4UInt();
     north           = br.Read4Int();
     east            = br.Read4Int();
     south           = br.Read4Int();
     west            = br.Read4Int();
     Description     = br.ReadString();
 }
Beispiel #6
0
 void Decode_Copyright(BinaryReaderWriter br, DataBlock block)
 {
     Copyright.Clear();
     if (br != null)
     {
         br.Seek(block.Offset);
         while (br.Position < block.Offset + block.Length)
         {
             Copyright.Add(br.ReadString());
         }
     }
 }
Beispiel #7
0
 protected string GetNTLabel(BinaryReaderWriter br, uint offset)
 {
     br.Seek(NT_PointLabelblock.Offset + offset);
     return(br.ReadString());
     //List<char> chars = new List<char>();
     //char c;
     //do {
     //   c = br.ReadChar();
     //   if (c != 0x0) chars.Add(c);
     //} while (c != 0x0);
     //return new string(chars.ToArray());
 }
Beispiel #8
0
        public Text(BinaryReaderWriter br)
            : this()
        {
            Language = (LanguageCode)br.ReadByte();
            Txt      = br.ReadString(0, Encoding.Default);

            //List<char> chars = new List<char>();
            //char c;
            //do {
            //   c = br.ReadChar();
            //   if (c != 0x0)
            //      chars.Add(c);
            //} while (c != 0x0);
            //Txt = new string(chars.ToArray());
        }
Beispiel #9
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();
            }
Beispiel #10
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();
                }
Beispiel #11
0
 /// <summary>
 /// liest die Blockdaten ein
 /// </summary>
 /// <param name="br"></param>
 public void ReadData(BinaryReaderWriter br)
 {
     Unknown1 = br.ReadByte();
     Text     = br.ReadString();
 }
Beispiel #12
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();
                    }
                }
            }