Beispiel #1
0
        private void Run(string[] args)
        {
            var serviceResolver = new ServiceResolver();
            var logger          = serviceResolver.GetService <ILogger>();

            if (args.Length == 0)
            {
                Console.WriteLine("Usage: MBBSDatabase [view|convert] [files]");
            }

            var convert = (args[0] == "convert");

            foreach (string s in args.Skip(1))
            {
                BtrieveFile file = new BtrieveFile();
                try
                {
                    file.LoadFile(logger, s);
                    if (convert)
                    {
                        using var processor = new BtrieveFileProcessor();
                        processor.CreateSqliteDB(Path.ChangeExtension(s, ".DB"), file);
                    }
                }
                catch (Exception e)
                {
                    logger.Error(e, $"Failed to load Btrieve file {s}: {e.Message}\n{e.StackTrace}");
                }
            }
        }
Beispiel #2
0
        public void LoadsFile()
        {
            var serviceResolver = new ServiceResolver();

            var btrieve = new BtrieveFile();

            btrieve.LoadFile(serviceResolver.GetService <ILogger>(), _modulePath, "MBBSEMU.DAT");

            Assert.Equal(4, btrieve.KeyCount);
            Assert.Equal(4, btrieve.Keys.Count);
            Assert.Equal(74, btrieve.RecordLength);
            Assert.Equal(90, btrieve.PhysicalRecordLength);
            Assert.Equal(512, btrieve.PageLength);
            Assert.Equal(5, btrieve.PageCount);
            Assert.False(btrieve.LogKeyPresent);
            Assert.False(btrieve.VariableLengthRecords);

            Assert.Single(btrieve.Keys[0].Segments);
            Assert.Single(btrieve.Keys[1].Segments);
            Assert.Single(btrieve.Keys[2].Segments);
            Assert.Single(btrieve.Keys[3].Segments);


            btrieve.Keys[0].PrimarySegment.Should().BeEquivalentTo(
                new BtrieveKeyDefinition()
            {
                Number     = 0,
                Attributes = EnumKeyAttributeMask.Duplicates | EnumKeyAttributeMask.UseExtendedDataType,
                DataType   = EnumKeyDataType.Zstring,
                Offset     = 2,
                Length     = 32,
                Segment    = false,
            });
            btrieve.Keys[1].PrimarySegment.Should().BeEquivalentTo(
                new BtrieveKeyDefinition()
            {
                Number     = 1,
                Attributes = EnumKeyAttributeMask.Modifiable | EnumKeyAttributeMask.UseExtendedDataType,
                DataType   = EnumKeyDataType.Integer,
                Offset     = 34,
                Length     = 4,
                Segment    = false,
            });
            btrieve.Keys[2].PrimarySegment.Should().BeEquivalentTo(
                new BtrieveKeyDefinition()
            {
                Number     = 2,
                Attributes = EnumKeyAttributeMask.Duplicates | EnumKeyAttributeMask.Modifiable | EnumKeyAttributeMask.UseExtendedDataType,
                DataType   = EnumKeyDataType.Zstring,
                Offset     = 38,
                Length     = 32,
                Segment    = false,
            });
            btrieve.Keys[3].PrimarySegment.Should().BeEquivalentTo(
                new BtrieveKeyDefinition()
            {
                Number     = 3,
                Attributes = EnumKeyAttributeMask.UseExtendedDataType,
                DataType   = EnumKeyDataType.AutoInc,
                Offset     = 70,
                Length     = 4,
                Segment    = false,
            });
        }