This is a graphing calculator--- although it is not optimized for drawing lines. It applies a function that the user provides to each pixel and sets the color of the pixel to the result, usually ending in a gradient of sorts. The syntax of the functions is similar to that of UNIX's dc command--- reverse polish notation. For example, (3 + 4) would be written as 3 4 +. All symbols (numbers, variables, and operators) are separated by spaces, and read left-to-right. The command used to display the thumbnail is this: x y 50 / / which would be equal to the expression x / (y / 50) the color is determined by the final value in the stack, the list that holds each value and evaluates them. numbers and variables simply add themselves to the stack, while operators replace the last value, replace the last two values, or delete the last value and based on what it was perform a more complex operation on the stack List of recognized symbols: numbers ( add the number to the stack) x (add the x value of the pixel, from 0 to 481 left to right, to the stack), y (add the y value of the pixel, from 1 to 360 bottom to top, to the stack), + (adds the last two values in the stack and replaces them with the answer), - (subtracts the last value from the second to last value and replaces them with the answer), / (divides the second to last value by the last value and replaces them with the answer), * (multiplies the last two values and replaces them with the answer), ^ (takes the second to last value and raises it to the power of the last value, replacing both with the answer), % (divides the second to last value by the last value and replaces both with the remainder), = (if the last two values are equal, replace them with 1. Otherwise, replace them with 0), > (if the second to last value is greater than the last value, replace both with 1, otherwise replace them both with 0), < (if the second to last value is less than the last value, replace them with 1, otherwise replace them with 0), | (if the second to last value in the stack is a nonzero number, return it, otherwise return the last value), & (if the second to last value in the stack is 0, return it, otherwise return the last), ~ (replaces the last value in the stack with the largest integer less than or equal to it, using the floor() function), _ (replaces the last value with its absolute value) @ (gets the item an amount of steps back equal to the last value and replaces the last value with it) $ (goes back a number of arguments in the initial command equal to the last value in the stack. For instance, "3 1 2 + 3 = 7 * $ 100" would append 3, 1 and 2 to the stack, add 1 and two to get 3, append 3, check the equality of 3 and 3, multiply the true expression (1) by 7 to get 7, then go back by 7, to the 2. from there, it would append 2, add that to the three still in the stack to get 5, and then go back by 0 because the equality was not true, ending with the argument of 100. You can also use it with negative values to skip arguments. I do not recommend using this unless you need turing-completeness.) % (removes the item a number of steps back equal to the last value in the stack, 1 will remove the last value--- so it will delete the last 2 values instead.) fun functions: x 240 - x 240 - * y 180 - y 180 - * + 1 2 / ^ --- prints concentric circles with condition result1 & result2 | you can implement if gates by messing around with $ and comparison operators you can make if gates whoa! that's a lot of words! did you read all of that?
. unix's dc command that's about it