Advertisement
Guest User

Untitled

a guest
Mar 13th, 2019
346
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.53 KB | None | 0 0
  1. using System;
  2.  
  3. namespace func.brainfuck
  4. {
  5.     public class BrainfuckBasicCommands
  6.     {
  7.         public static int BitShift(IVirtualMachine vm, char symbol)
  8.         {
  9.             switch(symbol)
  10.             {
  11.                 case '+':
  12.                     return (vm.Memory[vm.MemoryPointer] + 1) % 256;
  13.                 case '-':
  14.                     return (vm.Memory[vm.MemoryPointer] + 255) % 256;
  15.                 case '>':
  16.                     return (vm.MemoryPointer + 1) % vm.Memory.Length;
  17.                 default:
  18.                     return (vm.MemoryPointer + vm.Memory.Length - 1) % vm.Memory.Length;
  19.             }
  20.         }
  21.  
  22.         public static void RegisterTo(IVirtualMachine vm, Func<int> read, Action<char> write)
  23.         {
  24.             var characters = "QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm1234567890";
  25.             vm.RegisterCommand('.', b => { write((char)b.Memory[b.MemoryPointer]); });
  26.             vm.RegisterCommand('+', b => {b.Memory[b.MemoryPointer] = (byte)BitShift(vm, '+');});
  27.             vm.RegisterCommand('-', b => {b.Memory[b.MemoryPointer] = (byte)BitShift(vm, '-');});
  28.             vm.RegisterCommand(',', b => { b.Memory[b.MemoryPointer] = (byte)read(); });
  29.             vm.RegisterCommand('>', b => { b.MemoryPointer = BitShift(vm, '>'); });
  30.             vm.RegisterCommand('<', b => { b.MemoryPointer = BitShift(vm, '<'); });
  31.             foreach (var item in characters)
  32.             {
  33.                 vm.RegisterCommand(item, b => { b.Memory[b.MemoryPointer] = (byte)item; });
  34.             }
  35.         }
  36.     }
  37. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement