ALAGUF
From Esolang
ALAGUF is a language made by User:iconmaster.
It is an acronym for At Last, A Greatly Useful Funge.
It is a fungeoid that is designed to be easy to use and yet powerful.
[edit] Syntax
The program starts at the last '0' it finds in the program, going Right. It uses stacks to save data. There is also a StackStack, which is used to contain multiple stacks. There are two data types: Numbers and Strings. It skips any spaces or letters. The possible commands are as follows:
< Go Left. > Go Right. ^ Go Up. v Go Down. ' Anything between two ' characters are pushed onto the stack as a number. " Anything between two " characters are pushed onto the stack as a string. + Basic Stack Commands: → Increment the stack's top value. ← Decrement the stack's top value. ↑ Pushes 0 onto th stack. ↓ Pops the top value off the stack. - Basic stack mods: → Rotate the stack once to the left. ← Rotate the stack once to the right. ↑ copy the top value on the stack. ↓ clear all values on the stack. * Math: → Subtracts the two top values and pushes it onto the stack. ← Adds the two top values and pushes it onto the stack. ↑ Multiplies the two top values and pushes it onto the stack. ↓ Divides the two top values and pushes it onto the stack. ( starts a loop. ) loops back if the top value is not 0. ! ends the program. = Boolean commands: → pops the two top values and pushes 1 if they are equal, or 0 if they are not. ← pops the two top values and pushes 0 if they are equal, or 1 if they are not. ↑ pops the two top values and pushes 1 if the first is less than the second, or 0 if they are not. ↓ pops the two top values and pushes 1 if the first is greater than the second, or 0 if they are not. & StackStack Commands: → Delete the current stack in the StackStack. ← Insert a blank stack below the current stack in the StackStack. ↑ Move up one in the StackStack. ↓ Move down one in the StackStack. @ Output Setup: → Decrements the x display pointer. ← Increments the x display pointer. ↑ Decrements the y display pointer. ↓ Increments the y display pointer. # I/0: → Pushes the character pointed to by the display pointer on the screen. ← Pops the top value off the stack and displays it at the place pointed to by the Display Pointer. ↑ Pushes the current key pressed. Returns 0 if no key is pressed. ↓ Asks the user for a string, and pushes the user's input. $ Bridge. % Logic: → Pops two values, performs boolean AND on them, and pushes the result. ← Pops two values, performs boolean OR on them, and pushes the result. ↑ Pops two values, performs boolean XOR on them, and pushes the result. ↓ performs boolean NOT on the top value of the stack. ? More Math: → Pops two values, divides them, and pushes the remainder. ← Substring. ↑ Pops two values, does an exponant on them, and pushes the result. ↓ Negates the top value on the stack. / rotates clockwise. \ rotates counter-clockwise. _ goes up if the top value is 0, goes down otherwise. | goes Left if the top value is 0, goes Right otherwise. ` Files (well, mostly): → Sets the top value to either a string or a number, depending on the var's type. ← Saves a file. The top value is the file's name, the second is the value to be stored. ↑ Loads a file. The top value is the file's name. ↓ Pushes a 1 if the file specified by the top value exists, 0 otherwise. 1 Pushing: → Changes the top value between an ASCII character and its number. ← Pushes the size of the stack. ↑ Pushes the number of stacks in the StackStack. ↓ Push your currnet position. 2 Misc screen ops: → Pushes the x display pointer. ← Pushes the y diaplay pointer. ↑ Pops a value, and sets the x display pointer to it. ↓ Pops a value, and sets the y display pointer to it. 3 More StackStack Ops: → Move the current stack down one in the stackstack. ← Move the current stack up one in the stackstack. ↑ Pops the top value and pushes it onto the stack above it in the StackStack. ↓ Pops the top value and pushes it onto the stack below it in the StackStack. 4 Misc: → Pops a value and pushes a 1 if the value is a string, 0 otherwise. ← Pops a value and pushes a 0 if the value is a string, 1 otherwise. ↑ Pushes the StackStack pointer (what stack you are using in the StackStack.). ↓ Like Inserting a Stack (See & going left), but it copies it. 5 Clears the screen. 6 Waits for a key. 7 Sets the x display pointer to 1.
Note that the commands with four arrows next to them are direction-dependant commands; what they do depends on the direction they are going in.
[edit] Examples
99 Bottles of beer on the wall
>#" bottles"#v
- v'1'<
0'98'(+^ 2
@
v"no reeb fo"<
>#'1'v
2
@
>"the wall,"#v
v '11' <
5v> #" bottles"#v
> v
22
^< v'1' <
-
>^ 2
@
v" reeb fo"<
>#'1'v >v
2 22
>'11'^>5v
v"ekat uoy"<
>#'1'v
2
@
>"pass it"#v
v'1'<
2
@
v",dnuora"<
>#'11'5v>v>v
22 -
>^>^
v +<
>#v
v"selttob "<
>#'1'v
2
@
> v
v"no reeb fo"+<
>#'1'v
2
@
>"the wall!"#'11'v
v <v <
>5v 22
v+< ^<
>)!
[edit] Resources
The author has made an interpreter for the TI-89, but has not uploaded it yet.

