public static KeyValuePair <string, string> ExecuteProgram(string binFilePatch)
        {
            var binFile = File.Open(binFilePatch, FileMode.Open);


            var result = new StringBuilder();
            var errors = new StringBuilder();

            using (var br = new BinaryReader(binFile))
            {
                while (br.PeekChar() > -1)
                {
                    var intCommand = br.ReadInt32();
                    var bitCommand = BitArrayExtension.IntToBitArr(intCommand);

                    var commandResult = RunCommand(bitCommand, false);
                    result.Append(commandResult.Key);
                    errors.Append(commandResult.Value);
                }
            }

            binFile.Dispose();

            return(new KeyValuePair <string, string>(result.ToString(), errors.ToString()));
        }
Beispiel #2
0
        public NumberCommand Mod() //14
        {
            var firstOperand  = GetOperand(1);
            var secondOperand = GetOperand(2);

            var resultInt = firstOperand.ToInt() % secondOperand.ToInt();
            var result    = BitArrayExtension.IntToBitArr(resultInt, OperandSize);

            SetOperand(3, result);

            return(new NumberCommand(_command));
        }
Beispiel #3
0
        private static BitArray OperatorToBit(string strOperator)
        {
            var index = OperationsName.IndexOf(strOperator);

            if (index < 0)
            {
                throw new CompilerException(strOperator, "Incorrect operator");
            }

            var bitOperator = BitArrayExtension.IntToBitArr(index, OperatorSize);

            return(bitOperator);
        }
Beispiel #4
0
        private static BitArray OperandToBit(string part)
        {
            var isCorrect = int.TryParse(part, out var intpart);

            if (!isCorrect)
            {
                throw new CompilerException(part, "Operand is not number");
            }
            if (intpart < 0 || intpart >= 512)
            {
                throw new CompilerException(part, "Operand value out of range");
            }

            var result = BitArrayExtension.IntToBitArr(intpart, OperandSize);

            return(result);
        }
        public void CreateBlockReplacementRules(int bitsCount, int seed)
        {
            var itemsCount = (int)Math.Pow(2, bitsCount);
            var rnd        = new Random(seed);

            var values = new List <int>(Enumerable.Range(0, (int)Math.Pow(2, bitsCount)));

            for (var i = 0; i < itemsCount; i++)
            {
                var position = rnd.Next(0, values.Count);
                var num      = values[position];
                values.RemoveAt(position);

                _encryptTable.Add(BitArrayExtension.GetBitArray(i, bitsCount).ToStr(),
                                  BitArrayExtension.GetBitArray(num, bitsCount).ToBoolArray());
                _decryptTable.Add(BitArrayExtension.GetBitArray(num, bitsCount).ToStr(),
                                  BitArrayExtension.GetBitArray(i, bitsCount).ToBoolArray());
            }
        }
Beispiel #6
0
        public NumberCommand FindMaxDivider() //19
        {
            var firstOperand = GetOperand(1);
            var num          = firstOperand.ToInt();
            var divider      = 0;

            for (var i = 0; i < 10; i++)
            {
                if (num % (int)Math.Pow(2, i) == 0)
                {
                    divider = i;
                }
            }

            var result = BitArrayExtension.IntToBitArr(divider, OperandSize);

            SetOperand(3, result);

            return(new NumberCommand(_command));
        }
Beispiel #7
0
        public static string DecodeBinFile(string patch)
        {
            var binFile = File.Open(patch, FileMode.Open);

            var result = new StringBuilder();

            using (var br = new BinaryReader(binFile))
            {
                while (br.PeekChar() > -1)
                {
                    var byteCommand = br.ReadInt32();
                    var command     = new NumberCommand(BitArrayExtension.IntToBitArr(byteCommand));

                    result.Append(command + ";\n");
                }
            }

            binFile.Dispose();

            return(result.ToString());
        }