Surface

Surface is an esoteric programming language designed by User:Madk.
==Characteristics==
In Surface, the program's instructions are placed on a 2D grid wrapped around a Klein bottle (not, as intended, a sphere). The instruction pointer wraps according to this geometry.
The 2d memory array is also placed on the surface of a Klein bottle, and the memory pointer wraps according to the geometry.
Pointers wrap on the X axis. When Y bound is reached, the pointer is rotated 180 degrees (so that forward/backward toggles between up/down and left/right between west/east) and X=(X+width/2)%width
==Commands==
 < move the memory pointer left and set the instruction pointer's direction to left (west by default)
 > move the memory pointer right and set the instruction pointer's direction to right (east by default)
 ^ move the memory pointer forward and set the instruction pointer's direction to forward (north by default)
 v move the memory pointer backward and set the instruction pointer's direction to backward (south by default)
 + increment the current memory cell
 - decrement the current memory cell
 o rotate the direction of the instruction pointer clockwise
 e rotate the direction of the instruction pointer counter-clockwise
 c rotate the direction of the instruction pointer clockwise, then become z
 z rotate the direction of the instruction pointer counter-clockwise, then become c
 / reflect the direction of the instruction pointer and become a \
 \ reflect the direction of the instruction pointer and become a /
 ? skip one instruction in the direction the pointer is facing if the current memory cell is <1
 ! skip one instruction in the direction the pointer is facing if the current memory cell is >0
 * skip the quantity of following instructions as specified by the number contained in the current memory cell
 ( set a point to be jumped to by ) and ]
 ) unconditionally move the instruction pointer back to the most recent (
 ] move the instruction pointer back to the most recent ( if the current memory cell is >0
 x do away with the most recently accumulated (
 . output the current memory cell as a character
 : output the current memory cell as a number
 , input the current memory cell as a number
 @ terminate the program
==Computational class==
Given an infinitely large memory and instruction bottle, Surface is Turing-complete because it is possible to reproduce any brainfuck code.
+ - and . are exactly equivalent, while input , is roughly equivalent in function.
 <
becomes
 oo
 ^e
----
 >
becomes
 vo
 ee
----
 [
becomes
 !v(
 
 e
----
 ]
becomes
 oox
 v]
 ?e^
Nested [] are fairly trivial, requiring only that the distance between the first line and the rest be separated by two lines for every set of [] this set is inside.
==Examples==
The examples assume a 32x16 instruction space, which is the size used by the interpreter.
===Hello, world!===
 ++++++++(-v . o]v 
 + e++++v ! ^ v 
 + e+++++++++^ x 
 + - v-(e. 
 + - + ^o 
 + -v]ev 
 + -- ^+ 
 + -- ^o 
 +++.v -e-.+++++++..
 -.^!+ -e-----------
 oo+ -.e+.@ 
 .--o+ .+v .--------
 -+ ++ 
 -+ ++ 
 -+ ++ 
 -+ .+
==External resources==
Download Surface interpreter (This implementation features a 32x16 grid for both instruction space and memory. Anything outside the 32x16 grid originating at the code file's top-left is counted as comments.)
Category:Languages
Category:Cell-based
Category:Two-dimensional languages
Category:Implemented
Category:Turing complete
Category:2011