package com.cp.brainfuck;public class BrainfuckThread implements Runnable{ private char[] segments; private char[] code; private char[] stack; private BrainfuckWriter out; private int stackIndex; private boolean running; public BrainfuckThread(char[] code, char[] codeSegments, BrainfuckWriter out) { this.segments = codeSegments; this.code = code; this.out = out; stack = new char[32767]; } public void run() { running = true; for (int index = 0; index < code.length && running; index++) { switch (code[index]) { case '<': stackIndex = (stackIndex + (stack.length - 1)) % stack.length; break; case '>': stackIndex = (stackIndex + 1) % stack.length; break; case '+': stack[stackIndex]++; break; case '-': stack[stackIndex]--; break; case '.': out.append(stack[stackIndex]); break; case ',': // can't do this right now // TODO: maybe set up something so the person // who started the script can input data ? break; case '[': if (stack[stackIndex] == 0) index = segments[index]; break; case ']': index = segments[index] - 1; break; default: //ignore } } running = false; } public void halt() { running = false; } public boolean isRunning() { return running; } public BrainfuckWriter getOutput() { return out; }}