Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- namespace func.brainfuck
- {
- public class BrainfuckBasicCommands
- {
- public static int BitShift(IVirtualMachine vm, char symbol)
- {
- switch(symbol)
- {
- case '+':
- return (vm.Memory[vm.MemoryPointer] + 1) % 256;
- case '-':
- return (vm.Memory[vm.MemoryPointer] + 255) % 256;
- case '>':
- return (vm.MemoryPointer + 1) % vm.Memory.Length;
- default:
- return (vm.MemoryPointer + vm.Memory.Length - 1) % vm.Memory.Length;
- }
- }
- public static void RegisterTo(IVirtualMachine vm, Func<int> read, Action<char> write)
- {
- var characters = "QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm1234567890";
- vm.RegisterCommand('.', b => { write((char)b.Memory[b.MemoryPointer]); });
- vm.RegisterCommand('+', b => {b.Memory[b.MemoryPointer] = (byte)BitShift(vm, '+');});
- vm.RegisterCommand('-', b => {b.Memory[b.MemoryPointer] = (byte)BitShift(vm, '-');});
- vm.RegisterCommand(',', b => { b.Memory[b.MemoryPointer] = (byte)read(); });
- vm.RegisterCommand('>', b => { b.MemoryPointer = BitShift(vm, '>'); });
- vm.RegisterCommand('<', b => { b.MemoryPointer = BitShift(vm, '<'); });
- foreach (var item in characters)
- {
- vm.RegisterCommand(item, b => { b.Memory[b.MemoryPointer] = (byte)item; });
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement