public void ReadMultilineBuffered()
        {
            var Lines  = new List <string>();
            var Buffer = new char[128];

            using (var Reader = new BinaryTextReader(_TestMultilineInput, Encoding.UTF8))
            {
                while (!Reader.EndOfReader)
                {
                    var  Offset = 0;
                    bool Success;

                    do
                    {
                        Success = Reader.TryReadLine(Buffer.AsSpan(Offset, 4), out var CharsWritten);

                        Offset += CharsWritten;
                    }while (!Success);

                    Lines.Add(Buffer.AsSpan(0, Offset).AsString());
                }
            }

            // TODO: Will this fail on Linux? Maybe if the file is changed from CRLF
            Assert.AreEqual(_TestMultilineOutput, string.Join("\r\n", Lines));
        }
Exemple #2
0
        public void BoolTest()
        {
            var btw = new BinaryTextWriter();

            btw.AddBool(true);
            btw.AddBool(false);
            var btr = new BinaryTextReader(btw.GetOutputString());

            Assert.IsTrue(btr.ReadBool());
            Assert.IsFalse(btr.ReadBool());
        }
        public void ReadToEnd()
        {
            string MyResult;

            using (var Reader = new BinaryTextReader(_TestInput, Encoding.UTF8, false))
            {
                MyResult = Reader.ReadToEnd();
            }

            Assert.AreEqual(_TestOutput, MyResult);
        }
Exemple #4
0
        public void NumberTest()
        {
            var btw = new BinaryTextWriter();

            btw.AddNumber(7, 4);
            btw.AddNumber(1, 10);
            var btr = new BinaryTextReader(btw.GetOutputString());

            Assert.AreEqual(7, btr.ReadNumber(4));
            Assert.AreEqual(1, btr.ReadNumber(10));
        }
Exemple #5
0
        public void StringTest()
        {
            var btw = new BinaryTextWriter();

            btw.AddString("TEST");
            btw.AddString("1.2.3");
            var btr = new BinaryTextReader(btw.GetOutputString());

            Assert.AreEqual("TEST", btr.ReadString(4));
            Assert.AreEqual("1.2.3", btr.ReadString(5));
        }
        public void ReadDetectEncodingUTF8()
        {
            string MyResult;

            using (var Reader = new BinaryTextReader(_TestInput, Encoding.ASCII, true))
            {
                MyResult = Reader.ReadToEnd();
            }

            Assert.AreEqual(_TestOutput, MyResult);
        }
        public void ReadMultilineBufferedSkip()
        {
            var Buffer = new char[4];

            using (var Reader = new BinaryTextReader(_TestMultilineInput, Encoding.UTF8, false, 4))
            {
                while (!Reader.EndOfReader)
                {
                    if (!Reader.TryReadLine(Buffer, out var CharsWritten))
                    {
                        Reader.SkipLine();
                    }
                }
            }
        }
        public void ReadMultiline()
        {
            var Lines = new List <string>();

            using (var Reader = new BinaryTextReader(_TestMultilineInput, Encoding.UTF8))
            {
                while (!Reader.EndOfReader)
                {
                    Lines.Add(Reader.ReadLine());
                }
            }

            // TODO: Will this fail on Linux? Maybe if the file is changed from CRLF
            Assert.AreEqual(_TestMultilineOutput, string.Join("\r\n", Lines));
        }
        // constructor
        public Settings_Old(string str = null)
        {
            if (string.IsNullOrEmpty(str))
            {
                SetDefaults();
                return;
            }

            BinaryTextReader btr;

            try
            {
                btr = new BinaryTextReader(str);
            }
            catch (FormatException)
            {
                throw new FormatException("Config string is not valid.");
            }

            // check version
            int configVer = btr.ReadNumber(10);

            if (configVer != version)
            {
                // convert settings
                SetDefaults();
                switch (configVer)
                {
                case 100:
                    LoadSettings100(btr);
                    break;

                case 110:
                    LoadSettings110(btr);
                    break;

                default:
                    throw new FormatException("Config string is not valid.");
                }
            }
            else
            {
                LoadSettings(btr);
            }
        }
        public void ReadAndResetUTF8()
        {               //****************************************
            string MyResult1, MyResult2;

            //****************************************

            using (var Reader = new BinaryTextReader(_TestInput, Encoding.ASCII, true))
            {
                MyResult1 = Reader.ReadToEnd();

                Reader.Reset();

                MyResult2 = Reader.ReadToEnd();
            }

            Assert.AreEqual(_TestOutput, MyResult1);
            Assert.AreEqual(_TestOutput, MyResult2);
        }
        public void ReadASCII()
        {
            string MyResult;
            string TempOutput;

            using (var RawStream = new MemoryStream(_TestInput))
                using (var Reader = new StreamReader(RawStream, Encoding.ASCII, false))
                {
                    TempOutput = Reader.ReadToEnd();
                }

            using (var Reader = new BinaryTextReader(_TestInput, Encoding.ASCII, false))
            {
                MyResult = Reader.ReadToEnd();
            }

            Assert.AreEqual(TempOutput, MyResult);
        }
Exemple #12
0
        // constructor
        public Settings(string config = null)
        {
            SetDefaults();

            if (string.IsNullOrEmpty(config))
            {
                return;
            }

            BinaryTextReader btr;

            try
            {
                btr = new BinaryTextReader(config);
            }
            catch (FormatException)
            {
                throw new FormatException("Config string is not valid.");
            }

            // check version
            int    major     = btr.ReadNumber(4);
            int    minor     = btr.ReadNumber(4);
            int    patch     = btr.ReadNumber(4);
            string configVer = $"{major}.{minor}.{patch}";

            // convert settings
            switch (configVer)
            {
            case "1.4.0":
                LoadSettings(btr);
                break;

            case "1.3.0":
            case "1.3.1":
            case "1.3.2":
                LoadSettings_1_3_2(btr);
                break;

            default:
                throw new FormatException("Config string is not valid.");
            }
        }
        private void LoadSettings(BinaryTextReader btr)
        {
            // items
            randomAbilities = btr.ReadBool();
            randomTanks     = btr.ReadBool();

            // excluded items
            excludedItems = new List <int>();
            for (int i = 0; i < 100; i++)
            {
                bool excluded = btr.ReadBool();
                if (excluded)
                {
                    excludedItems.Add(i);
                }
            }

            gameCompletion      = (GameCompletion)btr.ReadNumber(2);
            iceNotRequired      = btr.ReadBool();
            plasmaNotRequired   = btr.ReadBool();
            noPBsBeforeChozodia = btr.ReadBool();
            chozoStatueHints    = btr.ReadBool();
            infiniteBombJump    = btr.ReadBool();
            wallJumping         = btr.ReadBool();

            // palettes
            tilesetPalettes = btr.ReadBool();
            enemyPalettes   = btr.ReadBool();
            beamPalettes    = btr.ReadBool();
            hueMinimum      = btr.ReadNumber(8);
            hueMaximum      = btr.ReadNumber(8);

            // misc
            enableItemToggle     = btr.ReadBool();
            obtainUnkItems       = btr.ReadBool();
            hardModeAvailable    = btr.ReadBool();
            pauseScreenInfo      = btr.ReadBool();
            removeCutscenes      = btr.ReadBool();
            removeNorfairVine    = btr.ReadBool();
            removeVariaAnimation = btr.ReadBool();
            skipSuitless         = btr.ReadBool();
        }
        public void Read()
        {
            var MyResult = new StringBuilder();

            using (var Reader = new BinaryTextReader(_TestInput, Encoding.UTF8, false))
            {
                for (; ;)
                {
                    var MyChar = Reader.Read();

                    if (MyChar == -1)
                    {
                        break;
                    }

                    MyResult.Append(char.ConvertFromUtf32(MyChar));
                }
            }

            Assert.AreEqual(_TestOutput, MyResult.ToString());
        }
        public void ReadBlock([Values(8, 16, 32, 64, 128)] int capacity)
        {
            var MyResult = new StringBuilder();
            var MyBuffer = new char[capacity];

            using (var Reader = new BinaryTextReader(_TestInput, Encoding.UTF8, false))
            {
                for (; ;)
                {
                    var CharsRead = Reader.ReadBlock(MyBuffer, 0, capacity);

                    if (CharsRead == 0)
                    {
                        break;
                    }

                    MyResult.Append(MyBuffer, 0, CharsRead);
                }
            }

            Assert.AreEqual(_TestOutput, MyResult.ToString());
        }
        public void ReadDetectEncodingUTF8NoBOM()
        {
            string MyResult;

            byte[] TempInput;

            using (var RawStream = new MemoryStream())
            {
                using (var Writer = new StreamWriter(RawStream, new UTF8Encoding(false)))
                {
                    Writer.Write(_TestOutput);
                }

                TempInput = RawStream.ToArray();
            }

            using (var Reader = new BinaryTextReader(TempInput, Encoding.UTF8, true))
            {
                MyResult = Reader.ReadToEnd();
            }

            Assert.AreEqual(_TestOutput, MyResult);
        }
        public void ReadDetectEncodingUnicode([Values(false, true)] bool bigEndian)
        {
            string MyResult;

            byte[] TempInput;

            using (var RawStream = new MemoryStream())
            {
                using (var Writer = new StreamWriter(RawStream, new UnicodeEncoding(bigEndian, true)))
                {
                    Writer.Write(_TestOutput);
                }

                TempInput = RawStream.ToArray();
            }

            using (var Reader = new BinaryTextReader(TempInput, Encoding.ASCII, true))
            {
                MyResult = Reader.ReadToEnd();
            }

            Assert.AreEqual(_TestOutput, MyResult);
        }
Exemple #18
0
        private void LoadSettings_1_3_2(BinaryTextReader btr)
        {
            // items
            bool randAbilities = btr.ReadBool();
            bool randTanks     = btr.ReadBool();

            if (randAbilities && randTanks)
            {
                AbilitySwap = Swap.GlobalPool;
                TankSwap    = Swap.GlobalPool;
            }
            else if (randAbilities)
            {
                AbilitySwap = Swap.LocalPool;
            }
            else if (randTanks)
            {
                TankSwap = Swap.LocalPool;
            }

            if (btr.ReadBool())
            {
                NumItemsRemoved = btr.ReadNumber(7);
            }
            if (SwapOrRemoveItems)
            {
                Completion          = (GameCompletion)btr.ReadNumber(2);
                IceNotRequired      = btr.ReadBool();
                PlasmaNotRequired   = btr.ReadBool();
                NoPBsBeforeChozodia = btr.ReadBool();
                ChozoStatueHints    = btr.ReadBool();
                InfiniteBombJump    = btr.ReadBool();
                WallJumping         = btr.ReadBool();
            }

            // locations
            if (btr.ReadBool())
            {
                int count = btr.ReadNumber(7);
                for (int i = 0; i < count; i++)
                {
                    int      locNum = btr.ReadNumber(7);
                    ItemType item   = (ItemType)btr.ReadNumber(5);
                    CustomAssignments[locNum] = item;
                }
            }

            // enemies
            RandoEnemies = btr.ReadBool();

            // palettes
            TilesetPalettes = btr.ReadBool();
            EnemyPalettes   = btr.ReadBool();
            BeamPalettes    = btr.ReadBool();
            if (RandomPalettes)
            {
                if (btr.ReadBool())
                {
                    HueMinimum = btr.ReadNumber(8);
                }
                if (btr.ReadBool())
                {
                    HueMaximum = btr.ReadNumber(8);
                }
            }

            // misc
            EnableItemToggle    = btr.ReadBool();
            ObtainUnkItems      = btr.ReadBool();
            HardModeAvailable   = btr.ReadBool();
            PauseScreenInfo     = btr.ReadBool();
            RemoveCutscenes     = btr.ReadBool();
            SkipSuitless        = btr.ReadBool();
            SkipDoorTransitions = btr.ReadBool();
        }
Exemple #19
0
        private void LoadSettings(BinaryTextReader btr)
        {
            // items
            AbilitySwap = (Swap)btr.ReadNumber(2);
            TankSwap    = (Swap)btr.ReadNumber(2);
            if (btr.ReadBool())
            {
                NumItemsRemoved = btr.ReadNumber(7);
                if (btr.ReadBool())
                {
                    NumAbilitiesRemoved = btr.ReadNumber(4);
                }
            }
            if (SwapOrRemoveItems)
            {
                Completion          = (GameCompletion)btr.ReadNumber(2);
                IceNotRequired      = btr.ReadBool();
                PlasmaNotRequired   = btr.ReadBool();
                NoPBsBeforeChozodia = btr.ReadBool();
                ChozoStatueHints    = btr.ReadBool();
                InfiniteBombJump    = btr.ReadBool();
                WallJumping         = btr.ReadBool();
            }

            // locations
            if (btr.ReadBool())
            {
                int count = btr.ReadNumber(7);
                for (int i = 0; i < count; i++)
                {
                    int      locNum = btr.ReadNumber(7);
                    ItemType item   = (ItemType)btr.ReadNumber(5);
                    CustomAssignments[locNum] = item;
                }
            }

            // enemies
            RandoEnemies = btr.ReadBool();

            // palettes
            TilesetPalettes = btr.ReadBool();
            EnemyPalettes   = btr.ReadBool();
            SamusPalettes   = btr.ReadBool();
            BeamPalettes    = btr.ReadBool();
            if (RandomPalettes)
            {
                if (btr.ReadBool())
                {
                    HueMinimum = btr.ReadNumber(8);
                }
                if (btr.ReadBool())
                {
                    HueMaximum = btr.ReadNumber(8);
                }
            }

            // music
            MusicChange = (Change)btr.ReadNumber(2);
            if (MusicChange != Change.Unchanged)
            {
                MusicRooms  = (Swap)btr.ReadNumber(2);
                MusicBosses = (Swap)btr.ReadNumber(2);
                MusicOthers = (Swap)btr.ReadNumber(2);
            }

            // misc
            EnableItemToggle    = btr.ReadBool();
            ObtainUnkItems      = btr.ReadBool();
            HardModeAvailable   = btr.ReadBool();
            PauseScreenInfo     = btr.ReadBool();
            RemoveCutscenes     = btr.ReadBool();
            SkipSuitless        = btr.ReadBool();
            SkipDoorTransitions = btr.ReadBool();
        }
        public void TempTest()
        {
            using var RawEventFile = File.Open(@"C:\Development\Resources\Zenith\Events 134.log", FileMode.Open);

            using var RawReader   = new StreamBufferReader(RawEventFile);
            using var EventReader = new BinaryTextReader(RawReader);

            var EventBuffer        = new char[128];
            var TotalRecords       = 0;
            var LastSequenceNumber = 1L;
            var TimeStamp          = DateTimeOffset.MinValue;
            var IsStatus           = false;

            while (!EventReader.EndOfReader)
            {
                var Offset = 0;

                // Decode the start of the next line into the buffer. It should be more than sufficiently large for the header
                if (!EventReader.TryReadLine(EventBuffer.AsSpan(Offset), out var CharsWritten))
                {
                    EventReader.SkipLine();                     // We don't need the rest of the line data, no sense copying it
                }
                var Line = EventBuffer.AsSpan(0, CharsWritten);

                if (Line.IsEmpty)
                {
                    continue;
                }

                // Find the first SequenceNumber:DateTimeUtc:Type:Data divider
                var Divider = Line.IndexOf(':');

                if (Divider == -1)
                {
                    continue;
                }

                // Process the sequence number
                if (!long.TryParse(Line.Slice(0, Divider), NumberStyles.None, CultureInfo.InvariantCulture, out var SequenceNumber))
                {
                    continue;
                }

                TotalRecords++;
                LastSequenceNumber = SequenceNumber;
                IsStatus           = false;

                // Find the next divider (end of DateTimeUtc)
                var NextDivider = Line.Slice(++Divider).IndexOf(':');

                if (NextDivider == -1)
                {
                    continue;
                }

                if (!DateTimeOffset.TryParseExact(Line.Slice(Divider, NextDivider), "yyyyMMddHHmmssfff", CultureInfo.InvariantCulture, DateTimeStyles.None, out var NewTimeStamp))
                {
                    continue;
                }

                TimeStamp = NewTimeStamp;

                Divider += NextDivider + 1;

                // Next divider (end of Type)
                NextDivider = Line.Slice(Divider).IndexOf(':');

                var Type = Line.Slice(Divider, NextDivider);

                // Check if it's a Status event
                IsStatus = Type.SequenceEqual("Status");
            }
        }