private BtrieveFile CreateBtrieveFile() { var btrieveFile = new BtrieveFile() { RecordLength = RECORD_LENGTH, FileName = $"{RANDOM.Next() % 100_000_000}.DAT", RecordCount = 3, }; var key = new BtrieveKey(); key.Segments.Add(new BtrieveKeyDefinition() { Number = 0, Attributes = EnumKeyAttributeMask.UseExtendedDataType | EnumKeyAttributeMask.Duplicates, DataType = EnumKeyDataType.Zstring, Offset = 0, Length = 32, Segment = false, }); btrieveFile.Keys.Add(0, key); btrieveFile.Records.Add(new BtrieveRecord(1, CreateRecord("ABC", 1))); btrieveFile.Records.Add(new BtrieveRecord(2, CreateRecord("ABC", 2))); btrieveFile.Records.Add(new BtrieveRecord(3, CreateRecord("abc", 3))); btrieveFile.Records.Add(new BtrieveRecord(4, CreateRecord("abc", 4))); btrieveFile.Records.Add(new BtrieveRecord(5, CreateRecord("test", 5))); btrieveFile.Records.Add(new BtrieveRecord(6, CreateRecord("yyz", 6))); return(btrieveFile); }
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}"); } } }
/// <summary> /// Sets the current btrieve file (BB value) based on btrieveFile /// </summary> protected void AllocateBB(BtrieveFile btrieveFile, ushort maxRecordLength) { var btrieve = new BtrieveFileProcessor() { FullPath = Path.Combine(mbbsModule.ModulePath, btrieveFile.FileName) }; var connectionString = "Data Source=acs.db;Mode=Memory"; btrieve.CreateSqliteDBWithConnectionString(connectionString, btrieveFile); majorbbs.AllocateBB(btrieve, maxRecordLength, Path.GetFileName(btrieve.FullPath)); }
/// <summary> /// Sets the current btrieve file (BB value) based on btrieveFile /// </summary> protected void AllocateBB(BtrieveFile btrieveFile, ushort maxRecordLength) { var btrieve = new BtrieveFileProcessor() { FullPath = Path.Combine(mbbsModule.ModulePath, btrieveFile.FileName) }; var connectionString = BtrieveFileProcessor.GetDefaultConnectionStringBuilder("acs.db"); connectionString.Mode = SqliteOpenMode.Memory; btrieve.CreateSqliteDBWithConnectionString(connectionString, btrieveFile); majorbbs.AllocateBB(btrieve, maxRecordLength, Path.GetFileName(btrieve.FullPath)); }
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, }); }