Exemple #1
0
        public static void AppendChildNodesOn_Sections(TreeNode tn, GarminCore.Files.File_TDB tdb, NodeContent.NodeType nodetype)
        {
            DeleteDummyChildNode(tn);

            switch (nodetype)
            {
            case NodeContent.NodeType.TDB_Copyright:
                for (int i = 0; i < tdb.Copyright.Segments.Count; i++)
                {
                    AppendNode(tn, NodeContent.NodeType.Index, i, "Segment " + i.ToString());
                }
                break;

            case NodeContent.NodeType.TDB_Tilemap:
                for (int i = 0, idx = 0; i < tdb.BlockHeaderTypList.Count; i++)
                {
                    if (tdb.BlockHeaderTypList[i] == GarminCore.Files.File_TDB.BlockHeader.Typ.Tilemap)
                    {
                        AppendNode(tn, NodeContent.NodeType.Index, idx, "Tilemap " + idx.ToString());
                        idx++;
                    }
                }
                break;
            }
        }
Exemple #2
0
 /// <summary>
 /// liefert das <see cref="GarminFile"/> als <see cref="GarminCore.Files.File_TDB"/>
 /// <para>Falls noch nicht erfolgt, wird die TDB-Datei eingelesen.</para>
 /// <para>Falls <see cref="GarminCore.Files.File_TDB"/> keine TDB-Datei ist, wird null geliefert.</para>
 /// </summary>
 /// <returns></returns>
 public GarminCore.Files.File_TDB GetGarminFileAsTDB()
 {
     GarminCore.Files.File_TDB file = null;
     if (GarminFile == null)
     {
         GarminFile = file = new GarminCore.Files.File_TDB();
         try {
             file.Read(BinaryReader);
         } catch (Exception ex) {
             throw new Exception("Error on reading TDB-File: " + ex.Message);
         }
     }
     else if (GarminFile is GarminCore.Files.File_TDB)
     {
         file = GarminFile as GarminCore.Files.File_TDB;
     }
     return(file);
 }
Exemple #3
0
 /// <summary>
 /// liefert den Datenbereich in der Datei für einen bestimmten Block
 /// </summary>
 /// <param name="tdb"></param>
 /// <param name="tdbblocktype"></param>
 /// <param name="count">0 für den 1. Block dieses Typs, 1 für den 2. usw.</param>
 /// <returns></returns>
 static GarminCore.DataBlock TDBBlock(GarminCore.Files.File_TDB tdb, GarminCore.Files.File_TDB.BlockHeader.Typ tdbblocktype, int count = 0)
 {
     GarminCore.DataBlock block = new GarminCore.DataBlock();
     for (int i = 0; i < tdb.BlockHeaderTypList.Count; i++)
     {
         block.Offset += 3; // Def. des Blockes
         if (tdb.BlockHeaderTypList[i] == tdbblocktype)
         {
             if (count == 0)
             {
                 block.Length = (uint)tdb.BlockLength[i];
                 break;
             }
             count--;
         }
         block.Offset += (uint)tdb.BlockLength[i];
     }
     return(block);
 }
Exemple #4
0
        /// <summary>
        /// Knoten für eine logische oder physische Datei anhängen
        /// </summary>
        /// <param name="tn"></param>
        /// <param name="tre">wenn null, wird das Objekt erzeugt</param>
        /// <param name="binreader"></param>
        public static void AppendChildNodes(TreeNode tn, GarminCore.Files.File_TDB tdb, GarminCore.BinaryReaderWriter binreader)
        {
            DeleteDummyChildNode(tn);
            bool TilemapNodeExist = false;

            for (int i = 0; i < tdb.BlockHeaderTypList.Count; i++)
            {
                switch (tdb.BlockHeaderTypList[i])
                {
                case GarminCore.Files.File_TDB.BlockHeader.Typ.Copyright:
                    AppendNode(AppendNode(tn, NodeContent.NodeType.TDB_Copyright, tdb, "Copyright"));
                    break;

                case GarminCore.Files.File_TDB.BlockHeader.Typ.Crc:
                    AppendNode(tn, NodeContent.NodeType.TDB_Crc, tdb, "Crc");
                    break;

                case GarminCore.Files.File_TDB.BlockHeader.Typ.Description:
                    AppendNode(tn, NodeContent.NodeType.TDB_Description, tdb, "Description");
                    break;

                case GarminCore.Files.File_TDB.BlockHeader.Typ.Header:
                    AppendNode(tn, NodeContent.NodeType.TDB_Header, tdb, "Header");
                    break;

                case GarminCore.Files.File_TDB.BlockHeader.Typ.Overviewmap:
                    AppendNode(tn, NodeContent.NodeType.TDB_Overviewmap, tdb, "Overviewmap");
                    break;

                case GarminCore.Files.File_TDB.BlockHeader.Typ.Tilemap:
                    if (!TilemapNodeExist)
                    {
                        AppendNode(AppendNode(tn, NodeContent.NodeType.TDB_Tilemap, tdb, "Tilemaps"));
                        TilemapNodeExist = true;
                    }
                    break;

                default:
                    AppendNode(tn, NodeContent.NodeType.TDB_Unknown, tdb, "Unknown");
                    break;
                }
            }
        }
Exemple #5
0
        /// <summary>
        /// Funktion für alle Datei-Infos
        /// </summary>
        /// <param name="info"></param>
        /// <param name="hex"></param>
        /// <param name="firsthexadr"></param>
        /// <param name="filedata"></param>
        /// <param name="nodetype">"Thema" der Info</param>
        /// <param name="idx">wenn größer oder gleich 0, dann der Index auf ein Objekt einer Tabelle</param>
        /// <param name="tn"></param>
        public static void SectionAndIndex(StringBuilder info, out byte[] hex, out long firsthexadr, NodeContent.Content4File filedata, NodeContent.NodeType nodetype, int idx, TreeViewData tvd)
        {
            GarminCore.Files.File_TDB tdb = filedata.GetGarminFileAsTDB();
            int hexlen = 0;

            firsthexadr = 0;
            hex         = null;
            GarminCore.DataBlock block;

            switch (nodetype)
            {
            case NodeContent.NodeType.TDB_Header:
                block       = TDBBlock(tdb, GarminCore.Files.File_TDB.BlockHeader.Typ.Header);
                firsthexadr = block.Offset;
                hexlen      = (int)block.Length;

                info.AppendLine("ProductID             (2 Byte): " + DecimalAndHexAndBinary(tdb.Head.ProductID));
                info.AppendLine("FamilyID              (2 Byte): " + DecimalAndHexAndBinary(tdb.Head.FamilyID));
                info.AppendLine("TDBVersion            (2 Byte): " + DecimalAndHexAndBinary(tdb.Head.TDBVersion));
                info.AppendLine("MapSeriesName         (" + (tdb.Head.MapSeriesName.Length + 1).ToString() + " Byte): '" + tdb.Head.MapSeriesName + "'");
                info.AppendLine("ProductVersion        (2 Byte): " + DecimalAndHexAndBinary(tdb.Head.ProductVersion));
                info.AppendLine("MapFamilyName         (" + (tdb.Head.MapFamilyName.Length + 1).ToString() + " Byte): '" + tdb.Head.MapFamilyName + "'");
                if (tdb.Head.TDBVersion >= 407)
                {
                    info.AppendLine("Unknown1              (1 Byte): " + DecimalAndHexAndBinary(tdb.Head.Unknown1));
                    info.AppendLine("MaxCoordbits4Overview (1 Byte): " + DecimalAndHexAndBinary(tdb.Head.MaxCoordbits4Overview));
                    info.AppendLine("Unknown2              (1 Byte): " + DecimalAndHexAndBinary(tdb.Head.Unknown2));
                    info.AppendLine("Unknown3              (1 Byte): " + DecimalAndHexAndBinary(tdb.Head.Unknown3));
                    info.AppendLine("Unknown4              (1 Byte): " + DecimalAndHexAndBinary(tdb.Head.Unknown4));
                    info.AppendLine("Unknown5              (1 Byte): " + DecimalAndHexAndBinary(tdb.Head.Unknown5));
                    info.AppendLine("Unknown6              (1 Byte): " + DecimalAndHexAndBinary(tdb.Head.Unknown6));
                    info.AppendLine("Unknown7              (1 Byte): " + DecimalAndHexAndBinary(tdb.Head.Unknown7));
                    info.AppendLine("Unknown8              (1 Byte): " + DecimalAndHexAndBinary(tdb.Head.Unknown8));
                    info.AppendLine("Unknown9              (1 Byte): " + DecimalAndHexAndBinary(tdb.Head.Unknown9));
                    info.AppendLine("HighestRoutable       (1 Byte): " + DecimalAndHexAndBinary(tdb.Head.HighestRoutable));
                    info.AppendLine("Unknown10             (1 Byte): " + DecimalAndHexAndBinary(tdb.Head.Unknown10));
                    info.AppendLine("Unknown11             (1 Byte): " + DecimalAndHexAndBinary(tdb.Head.Unknown11));
                    info.AppendLine("Unknown12             (1 Byte): " + DecimalAndHexAndBinary(tdb.Head.Unknown12));
                    info.AppendLine("Unknown13             (1 Byte): " + DecimalAndHexAndBinary(tdb.Head.Unknown13));
                    info.AppendLine("Unknown14             (1 Byte): " + DecimalAndHexAndBinary(tdb.Head.Unknown14));
                    info.AppendLine("Unknown15             (1 Byte): " + DecimalAndHexAndBinary(tdb.Head.Unknown15));
                    info.AppendLine("Unknown16             (1 Byte): " + DecimalAndHexAndBinary(tdb.Head.Unknown16));
                    info.AppendLine("Unknown17             (1 Byte): " + DecimalAndHexAndBinary(tdb.Head.Unknown17));
                    info.AppendLine("Unknown18             (1 Byte): " + DecimalAndHexAndBinary(tdb.Head.Unknown18));
                    info.AppendLine("Unknown19             (1 Byte): " + DecimalAndHexAndBinary(tdb.Head.Unknown19));
                    info.AppendLine("Unknown20             (1 Byte): " + DecimalAndHexAndBinary(tdb.Head.Unknown20));
                    info.AppendLine("Unknown21             (1 Byte): " + DecimalAndHexAndBinary(tdb.Head.Unknown21));
                    info.AppendLine("Unknown22             (1 Byte): " + DecimalAndHexAndBinary(tdb.Head.Unknown22));
                    info.AppendLine("Unknown23             (1 Byte): " + DecimalAndHexAndBinary(tdb.Head.Unknown23));
                    info.AppendLine("Unknown24             (1 Byte): " + DecimalAndHexAndBinary(tdb.Head.Unknown24));
                    info.AppendLine("Unknown25             (1 Byte): " + DecimalAndHexAndBinary(tdb.Head.Unknown25));
                    info.AppendLine("Unknown26             (1 Byte): " + DecimalAndHexAndBinary(tdb.Head.Unknown26));
                    info.AppendLine("Unknown27             (1 Byte): " + DecimalAndHexAndBinary(tdb.Head.Unknown27));
                    info.AppendLine("Unknown28             (1 Byte): " + DecimalAndHexAndBinary(tdb.Head.Unknown28));
                    info.AppendLine("CodePage              (4 Byte): " + DecimalAndHexAndBinary(tdb.Head.CodePage));
                    info.AppendLine("Unknown29             (4 Byte): " + DecimalAndHexAndBinary(tdb.Head.Unknown29));
                    info.AppendLine("Routable              (1 Byte): " + DecimalAndHexAndBinary(tdb.Head.Routable));
                    info.AppendLine("HasProfileInformation (1 Byte): " + DecimalAndHexAndBinary(tdb.Head.HasProfileInformation));
                    info.AppendLine("HasDEM                (1 Byte): " + DecimalAndHexAndBinary(tdb.Head.HasDEM));
                    if (tdb.Head.TDBVersion >= 411)
                    {
                        info.AppendLine("Unknown30             (1 Byte): " + DecimalAndHexAndBinary(tdb.Head.Unknown30));
                        info.AppendLine("Unknown31             (1 Byte): " + DecimalAndHexAndBinary(tdb.Head.Unknown31));
                        info.AppendLine("Unknown32             (1 Byte): " + DecimalAndHexAndBinary(tdb.Head.Unknown32));
                        info.AppendLine("Unknown33             (1 Byte): " + DecimalAndHexAndBinary(tdb.Head.Unknown33));
                        info.AppendLine("Unknown34             (1 Byte): " + DecimalAndHexAndBinary(tdb.Head.Unknown34));
                        info.AppendLine("Unknown35             (1 Byte): " + DecimalAndHexAndBinary(tdb.Head.Unknown35));
                        info.AppendLine("Unknown36             (1 Byte): " + DecimalAndHexAndBinary(tdb.Head.Unknown36));
                        info.AppendLine("Unknown37             (1 Byte): " + DecimalAndHexAndBinary(tdb.Head.Unknown37));
                        info.AppendLine("Unknown38             (1 Byte): " + DecimalAndHexAndBinary(tdb.Head.Unknown38));
                        info.AppendLine("Unknown39             (1 Byte): " + DecimalAndHexAndBinary(tdb.Head.Unknown39));
                        info.AppendLine("Unknown40             (1 Byte): " + DecimalAndHexAndBinary(tdb.Head.Unknown40));
                        info.AppendLine("Unknown41             (1 Byte): " + DecimalAndHexAndBinary(tdb.Head.Unknown41));
                        info.AppendLine("Unknown42             (1 Byte): " + DecimalAndHexAndBinary(tdb.Head.Unknown42));
                        info.AppendLine("Unknown43             (1 Byte): " + DecimalAndHexAndBinary(tdb.Head.Unknown43));
                        info.AppendLine("Unknown44             (1 Byte): " + DecimalAndHexAndBinary(tdb.Head.Unknown44));
                        info.AppendLine("Unknown45             (1 Byte): " + DecimalAndHexAndBinary(tdb.Head.Unknown45));
                        info.AppendLine("Unknown46             (1 Byte): " + DecimalAndHexAndBinary(tdb.Head.Unknown46));
                        info.AppendLine("Unknown47             (1 Byte): " + DecimalAndHexAndBinary(tdb.Head.Unknown47));
                        info.AppendLine("Unknown48             (1 Byte): " + DecimalAndHexAndBinary(tdb.Head.Unknown48));
                        info.AppendLine("Unknown49             (1 Byte): " + DecimalAndHexAndBinary(tdb.Head.Unknown49));
                    }
                }
                break;

            case NodeContent.NodeType.TDB_Copyright:
                block       = TDBBlock(tdb, GarminCore.Files.File_TDB.BlockHeader.Typ.Copyright);
                firsthexadr = block.Offset;
                hexlen      = (int)block.Length;
                if (idx < 0)
                {
                    info.AppendLine("Segmente: " + tdb.Copyright.Segments.Count.ToString());
                }
                else
                {
                    GarminCore.Files.File_TDB.SegmentedCopyright.Segment segment = tdb.Copyright.Segments[idx];
                    info.AppendLine("CopyrightCode   (1 Byte): " + segment.CopyrightCode.ToString() + " / " + DecimalAndHexAndBinary((byte)segment.CopyrightCode));
                    info.AppendLine("WhereCode       (1 Byte): " + segment.WhereCode.ToString() + " / " + DecimalAndHexAndBinary((byte)segment.WhereCode));
                    info.AppendLine("ExtraProperties (2 Byte): " + DecimalAndHexAndBinary(segment.ExtraProperties));
                    info.AppendLine("Copyright       (" + (segment.Copyright.Length + 1).ToString() + " Byte): '" + segment.Copyright + "'");
                    for (int i = 0; i < tdb.Copyright.Segments.Count && i < idx; i++)
                    {
                        firsthexadr += (uint)(4 + tdb.Copyright.Segments[i].Copyright.Length + 1);
                    }
                    hexlen = 4 + segment.Copyright.Length + 1;
                }
                break;

            case NodeContent.NodeType.TDB_Crc:
                block       = TDBBlock(tdb, GarminCore.Files.File_TDB.BlockHeader.Typ.Crc);
                firsthexadr = block.Offset;
                hexlen      = (int)block.Length;
                info.AppendLine("Unknown1 (2 Byte): " + DecimalAndHexAndBinary(tdb.Crc.Unknown1));
                info.AppendLine("A        (1 Byte): " + DecimalAndHexAndBinary(tdb.Crc.A));
                info.AppendLine("Unknown2 (4 Byte): " + DecimalAndHexAndBinary(tdb.Crc.Unknown2));
                info.AppendLine("Unknown3 (2 Byte): " + DecimalAndHexAndBinary(tdb.Crc.Unknown3));
                info.AppendLine("B        (1 Byte): " + DecimalAndHexAndBinary(tdb.Crc.B));
                info.AppendLine("Unknown4 (2 Byte): " + DecimalAndHexAndBinary(tdb.Crc.Unknown4));
                info.AppendLine("C        (1 Byte): " + DecimalAndHexAndBinary(tdb.Crc.C));
                info.AppendLine("Unknown5 (4 Byte): " + DecimalAndHexAndBinary(tdb.Crc.Unknown5));
                info.AppendLine("D        (1 Byte): " + DecimalAndHexAndBinary(tdb.Crc.D));
                info.AppendLine("Unknown6 (2 Byte): " + DecimalAndHexAndBinary(tdb.Crc.Unknown6));
                break;

            case NodeContent.NodeType.TDB_Description:
                block       = TDBBlock(tdb, GarminCore.Files.File_TDB.BlockHeader.Typ.Description);
                firsthexadr = block.Offset;
                hexlen      = (int)block.Length;
                info.AppendLine("Unknown1       (1 Byte): " + DecimalAndHexAndBinary(tdb.Mapdescription.Unknown1));
                info.AppendLine("Mapdescription (" + (tdb.Mapdescription.Text.Length + 1).ToString() + " Byte): '" + tdb.Mapdescription.Text + "'");
                break;

            case NodeContent.NodeType.TDB_Overviewmap:
                block       = TDBBlock(tdb, GarminCore.Files.File_TDB.BlockHeader.Typ.Overviewmap);
                firsthexadr = block.Offset;
                hexlen      = (int)block.Length;
                info.AppendLine("Mapnumber       (4 Byte): " + DecimalAndHexAndBinary(tdb.Overviewmap.Mapnumber));
                info.AppendLine("ParentMapnumber (4 Byte): " + DecimalAndHexAndBinary(tdb.Overviewmap.ParentMapnumber));
                info.AppendLine("North           (4 Byte): " + DecimalAndHexAndBinary(tdb.Overviewmap.north) + "; " + tdb.Overviewmap.North.ToString() + "°");
                info.AppendLine("East            (4 Byte): " + DecimalAndHexAndBinary(tdb.Overviewmap.east) + "; " + tdb.Overviewmap.East.ToString() + "°");
                info.AppendLine("South           (4 Byte): " + DecimalAndHexAndBinary(tdb.Overviewmap.south) + "; " + tdb.Overviewmap.South.ToString() + "°");
                info.AppendLine("West            (4 Byte): " + DecimalAndHexAndBinary(tdb.Overviewmap.west) + "; " + tdb.Overviewmap.West.ToString() + "°");
                info.AppendLine("Description     (" + (tdb.Overviewmap.Description.Length + 1).ToString() + " Byte): '" + tdb.Overviewmap.Description + "'");
                break;

            case NodeContent.NodeType.TDB_Tilemap:
                if (idx < 0)
                {
                    info.AppendLine("Tilemaps: " + tdb.Tilemap.Count);
                }
                else
                {
                    block       = TDBBlock(tdb, GarminCore.Files.File_TDB.BlockHeader.Typ.Tilemap, idx);
                    firsthexadr = block.Offset;
                    hexlen      = (int)block.Length;

                    int readlen = 0;
                    GarminCore.Files.File_TDB.TileMap tilemap = tdb.Tilemap[idx];
                    info.AppendLine("Mapnumber       (4 Byte): " + DecimalAndHexAndBinary(tilemap.Mapnumber));
                    info.AppendLine("ParentMapnumber (4 Byte): " + DecimalAndHexAndBinary(tilemap.ParentMapnumber));
                    info.AppendLine("North           (4 Byte): " + DecimalAndHexAndBinary(tilemap.north) + "; " + tilemap.North.ToString() + "°");
                    info.AppendLine("East            (4 Byte): " + DecimalAndHexAndBinary(tilemap.east) + "; " + tilemap.East.ToString() + "°");
                    info.AppendLine("South           (4 Byte): " + DecimalAndHexAndBinary(tilemap.south) + "; " + tilemap.South.ToString() + "°");
                    info.AppendLine("West            (4 Byte): " + DecimalAndHexAndBinary(tilemap.west) + "; " + tilemap.West.ToString() + "°");
                    readlen += 6 * 4;
                    info.AppendLine("Description     (" + (tilemap.Description.Length + 1).ToString() + " Byte): '" + tilemap.Description + "'");
                    readlen += tilemap.Description.Length + 1;
                    info.AppendLine("Unknown1        (2 Byte): " + DecimalAndHexAndBinary(tilemap.Unknown1));
                    info.AppendLine("SubCount        (2 Byte): " + DecimalAndHexAndBinary(tilemap.SubCount));
                    info.AppendLine("Size:");
                    for (int i = 0; i < tilemap.DataSize.Count; i++)
                    {
                        info.AppendLine("                (4 Byte): " + DecimalAndHexAndBinary(tilemap.DataSize[i]));
                    }
                    readlen += 2 * 2 + tilemap.DataSize.Count * 4;
                    if (block.Length - readlen >= 7)
                    {
                        info.AppendLine("HasCopyright    (1 Byte): " + DecimalAndHexAndBinary(tilemap.HasCopyright));
                        info.AppendLine("Unknown2        (1 Byte): " + DecimalAndHexAndBinary(tilemap.Unknown2));
                        info.AppendLine("Unknown3        (1 Byte): " + DecimalAndHexAndBinary(tilemap.Unknown3));
                        info.AppendLine("Unknown4        (1 Byte): " + DecimalAndHexAndBinary(tilemap.Unknown4));
                        info.AppendLine("Unknown5        (1 Byte): " + DecimalAndHexAndBinary(tilemap.Unknown5));
                        info.AppendLine("Unknown6        (1 Byte): " + DecimalAndHexAndBinary(tilemap.Unknown6));
                        info.AppendLine("Unknown7        (1 Byte): " + DecimalAndHexAndBinary(tilemap.Unknown7));
                        readlen += 7;
                        if (block.Length - readlen > 0)
                        {
                            info.AppendLine("Name:");
                            for (int i = 0; i < tilemap.Name.Count; i++)
                            {
                                info.AppendLine("                (" + (tilemap.Name[i].Length + 1).ToString() + " Byte): '" + tilemap.Name[i] + "'");
                            }
                            if (block.Length - readlen >= 2)
                            {
                                info.AppendLine("Unknown8        (8 Byte): " + DecimalAndHexAndBinary(tilemap.Unknown8));
                                info.AppendLine("Unknown9        (9 Byte): " + DecimalAndHexAndBinary(tilemap.Unknown9));
                            }
                        }
                    }
                }
                break;

            case NodeContent.NodeType.TDB_Unknown:
                block       = TDBBlock(tdb, GarminCore.Files.File_TDB.BlockHeader.Typ.Unknown);
                firsthexadr = block.Offset;
                hexlen      = (int)block.Length;
                break;

            default:
                info.AppendLine("internal error: no info for nodetype '" + nodetype.ToString() + "'");
                break;
            }

            if (hexlen > 0)
            {
                hex = HexRange(firsthexadr, filedata.BinaryReader, hexlen);
            }
        }