Deadfish x

Deadfish x is a superset of Jonathan Todd Skinner's Deadfish. There are twice as many commands and uses the XKCD variant.

I (firefly431) will be writing a Python interpreter, but you guys can write whatever you want.

Rules
X (the variable) can only go from 0 to 255. If it goes above or below, it will be set to 0. You can type as many commands as you want on a line, but the prompt will only be shown when you push enter.

Sample Programs
To run these, save them and run them, or just copy and paste. xxcxxxxcxxxxxxxxKDxxcxxxxxxcxKxxxxxxxKKxxxKDxxxxxxxcdddddKDxxxxxxcddddKDxxxcxxcddKddddddddKxxxKddddddKddddddddKDxxxxxxcdddK Prints out "Hello, world!" XUxKCxxcxxxxcCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCU Prints out the entire alphabet.

Python
My interpreter. Put something here if you find a bug.
 * 1) Deadfish x Programming Language
 * 2) By firefly431
 * 3) This is free and unencumbered software released into the public domain.
 * 4) Visit  for the full thing.

x = 0; funcname = ""; curfunc = ""; lastc = ''; functions = {};

q_="i;iyratnrt gatmivpo"; _q=[0, 14, 17, 18, 4, 6, 10, 5, 7, 9, 2, 11, 8, 12, 16, 15, 13, 3, 1]; tar = []; for i in _q: tar.append(q_[i]); tar="".join(tar);

import webbrowser;

def openxkcd(num): webbrowser.open("http://xkcd.com/"+str(num)+"/");

def process(c): #Finite State Machine global x;   global funcname; global curfunc; global lastc; global functions; if x 255: x=0; if (lastc == 'X'): #we are starting a function funcname = c;       print("Function start: "+c); lastc = ''; #so if the name is C or X we don't process it       return; if (lastc == 'C'): #we are executing a function print("Execute function: "+c); lastc = ''; #same thing if (c in functions): for q in functions[c]: #c is taken process(q); else: print("Function '"+c+"' does not exist."); return; if funcname != "" and c != 'C': #We are in a function print("In function"); curfunc += c;       lastc = c;        return; #check commands, function commands pass. if c == "x": x+=1; elif c == "k": print(str(x)); elif c == "c": x*=x; elif c == "d": x-=1; elif c == "X": pass; elif c == "K": print(chr(x),end=""); elif c == "C": if funcname != "": print("End Function"); lastc = ''; #so we don't execute a function functions[funcname] = curfunc; funcname = ""; curfunc = ""; return; elif c == "D": x=0; lastc = c;

def getInput(str = ""): global x;   global tar; if str=="": inp = input(">> "); #change this to raw_input if using python 2.x   else: inp = str; if inp == tar: openxkcd(1061%354); for c in inp: process(c);

import sys; fname = ""; lines = []; if len(sys.argv)>1: fname = sys.argv[1]; if fname != "": try: fp = open(fname,"r"); lines = fp.readlines; fp.close; except: print("Could not open file '"+fname+"'."); if len(lines)>0: for line in lines: getInput(line); else: try: while True: getInput; except KeyboardInterrupt: print("Bye!");

Lua
-- Deadfish x in pure Lua -- By Atenfyr

local functions = {}

function deadfishx(str, tx) local ignore = {} local tx = tx or 0 for i = 1, #str do		if tx 255 then tx = 0 end if not ignore[i] then local instr = str:sub(i, i)			if instr == "x" then tx = tx + 1 elseif instr == "k" then io.write(tx) elseif instr == "c" then tx = tx ^ 2 elseif instr == "d" then tx = tx - 1 elseif instr == "X" then local _, nextC = str:sub(i+2):find("C") nextC = nextC+i+1 for n = i+1, nextC do					ignore[n] = true end functions[str:sub(i+1, i+1)] = str:sub(i+2, nextC) elseif instr == "K" then io.write(string.char(tx)) elseif instr == "C" then ignore[i+1] = true tx = deadfishx(functions[str:sub(i+1, i+1)]:sub(1, -2), tx) elseif instr == "D" then tx = 0 end end end return tx end

-- If it's being loaded as a library (for some reason), then they now have the deadfishx function and the file can be closed if pcall(debug.getlocal, 4, 1) then return end

local q_ = "i;iyratnrt gatmivpo" local _q = {1, 15, 18, 19, 5, 7, 11, 6, 8, 10, 3, 12, 9, 13, 17, 16, 14, 4, 2} local tar = {} for _, i in pairs(_q) do	tar[#tar+1] = q_:sub(i, i) end tar = table.concat(tar, "")

local function openXKCD(n) if package.config:sub(1,1) == "\\" then os.execute('start "" "http:///xkcd.com/' .. n .. '/" >nul 2>&1') else -- I don't want to install Linux so if this breaks Linux users please let me know os.execute("xdg-open http://xkcd.com/" .. n .. "/ &> /dev/null") end end

local x = 0

local tArgs = {...} if tArgs[1] then local open = io.open(tArgs[1], "r") if not open then print("File does not exist!") os.exit end local content = open:read("*a"):gsub("\r\n", ""):gsub("\n", "") open:close deadfishx(content, x)	os.exit end

while true do	io.write(">> ") local cmd = io.read if cmd == tar then openXKCD(1061%354) else x = deadfishx(cmd, x)	end io.write("\n") end