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())); }
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)); }
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); }
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()); } }
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)); }
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()); }