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}"); } } }
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, }); }