示例#1
0
        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);
        }
示例#2
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}");
                }
            }
        }
示例#3
0
        /// <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));
        }
示例#5
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,
            });
        }