Functionality is an esoteric programming language written by User:Dominicentek with the goal being having the most functionality as possible.
Instructions
Variable Management
Instruction |
Syntax |
Description
|
var |
<varname> <value> |
Creates a new variable (if not created) and sets a value to it
|
del |
<varname> |
Removes a variable
|
tonum |
<varname> |
Converts a string to a number
|
tostr |
<varname> |
Converts a number to a string
|
Control Flow
Instruction |
Syntax |
Description
|
if |
<value> <operator> <value> |
Executes a code block if the condition is met
|
else |
|
If an IF statement fails, it executes this code block instead
|
loop |
<value> |
Loops code block n times
|
function |
<function name> |
Creates a new function
|
call |
<function name> |
Calls a function
|
while |
<value> <operator> <value> |
Loops code block if the condition is met
|
exit |
|
Exits the program
|
Console IO
Instruction |
Syntax |
Description
|
output |
<value> |
Outputs value to a console
|
input |
<varname> |
Stores console input to a variable
|
Graphical Output
Instruction |
Syntax |
Description
|
initializegfx |
<width> <height> |
Initializes graphical output
|
closegfx |
|
Closes graphical output
|
drawarc |
<x> <y> <width> <height> <start angle> <arc angle> [thickness] |
Draws an arc
|
drawstring |
<x> <y> <value> [fontname] [fontsize] |
Draws a string/number
|
drawline |
<x1> <y1> <x2> <y2> [thickness] |
Draws a line
|
drawoval |
<x> <y> <width> <height> [thickness] |
Draws an oval
|
drawrect |
<x> <y> <width> <height> [thickness] |
Draws a rectangle
|
drawroundrect |
<x> <y> <width> <height> <roundness> [thickness] |
Draws a round rectangle
|
fillarc |
<x> <y> <width> <height> <start angle> <arc angle> |
Fills an arc
|
filloval |
<x> <y> <width> <height> |
Fills an oval
|
fillrect |
<x> <y> <width> <height> |
Fills an rectangle
|
fillroundrect |
<x> <y> <width> <height> <roundness> |
Fills a round rectangle
|
setbg |
<r> <g> <b> |
Sets background color
|
setfg |
<r> <g> <b> [a] |
Sets foreground color
|
String Management (these all begin with string
instruction)
Instruction |
Syntax |
Description
|
substring |
<varname> <value> <begin> <end> |
Gets a substring of a value and stores it to a variable
|
charat |
<varname> <value> <index> |
Gets the character at an index of a value and stores it to a variable
|
length |
<varname> <value> |
Stores length of a value into a variable
|
insert |
<varname> <value> <index> <insertion> |
Inserts a string into another string to an index and stores it to a variable
|
replace |
<varname> <value> <index> <char> |
Replaces a character in a string and stores it to a variable
|
combine |
<varname> <value> <value> |
Combines two values together as a string and stores it to a variable
|
remove |
<varname> <value> <begin> <end> |
Removes a section of a string and stores it into a variable
|
indexof |
<varname> <value> <char> |
Stores the index of a character in a string to a variable
|
tocode |
<varname> <char> |
Converts a char into an ASCII code and stores it to a variable
|
fromcode |
<varname> <value> |
Converts a number to a char based on its ASCII code and stores it to a variable
|
Array Management (these all begin with array
instruction)
Instruction |
Syntax |
Description
|
create |
<array> [capacity] |
Creates a new array
|
delete |
<array> |
Deletes an array
|
subarray |
<dest> <source> <begin> <end> |
Gets a subarray of an array
|
get |
<array> <varname> <index> |
Stores a value from an array into a variable
|
set |
<array> <value> <index> |
Stores a value from a variable into an array
|
length |
<array> <varname> |
Stores the length of an array into a variable
|
insert |
<array> <value> <index> |
Adds a value into an array at specific index
|
add |
<array> <value> |
Adds a value to an array
|
remove |
<array> <index> |
Removes an element at an index
|
indexof |
<array> <varname> <value> |
Stores an index of an element to a variable
|
Filesystem IO
Instruction |
Syntax |
Description
|
fscreatefile |
<path> |
Creates a new file
|
fscreatedir |
<path> |
Creates a new directory
|
fsdelete |
<path> |
Removes a file/directory
|
fscopy |
<source> <dest folder> |
Copies a file/directory
|
fsmove |
<source> <destination> |
Moves a file/directory
|
fsread |
<varname> <path> |
Reads from a file and stores it into a variable
|
fswrite |
<path> <value> |
Writes a string into a file
|
Values support:
- Math expressions (cannot contain space)
x+y
Addition
x-y
Subtraction
x*y
Multiplication
x/y
Division
x%y
Modulo
x^y
Power
x&y
Bitwise AND
x|y
Bitwise OR
x~y
Bitwise XOR
~x
Bitwise REVERSE
!x
Bitwise NOT
x<y
Bitshift to left
x>y
Bitshift to right
- Brackets are also supported
- Number constants
- Variables (getting values from them)
- String constants (have to be in
""
)
Comparsion operators can be:
==
Equal to
!=
Not equal to
<
Less than
>
Greater than
<=
Less than or equal to
>=
Greater than or equal to
Notes
- Code blocks are opened with
[
and closed with ]
- Numbers are 64-bit signed integers
- If a string or array indexof fails, it stores a
-1
Examples
Hello World
output "Hello, World"
Truth Machine
input inp
tonum inp
if inp == 0 [
output 0
]
else [
while 0 == 0 [
output 1
]
]
Brainfuck Interpreter
This proves that this programming language is Turing complete
input code
string length len code
var index 0
array create cells 256
var pointer 0
while index < len [
string charat char code index
if char == "<" [
var pointer pointer-1
if pointer == -1 [
var pointer pointer+1
]
]
if char == ">" [
var pointer pointer+1
if pointer == 256 [
var pointer pointer-1
]
]
if char == "+" [
array get cells value pointer
var value value+1
if value == 256 [
var value value-1
]
array set cells value pointer
]
if char == "-" [
array get cells value pointer
var value value-1
if value == -1 [
var value value+1
]
array set cells value pointer
]
if char == "." [
array get cells value pointer
string fromcode value value
output value
]
if char == "," [
input charinput
if charinput == "" [
var value 10
]
else [
string charat charinput character 0
string tocode value character
]
array set cells value pointer
]
if char == "[" [
array get cells value pointer
if value == 0 [
var i index
var layer 0
while i < len [
string charat code character i
if code == "[" [
var layer layer+1
]
if code == "]" [
var layer layer-1
]
if layer == -1 [
var index i
]
var i i+1
]
]
]
if char == "]" [
array get cells value pointer
if value != 0 [
var i index
var layer 0
while i >= len [
string charat code character i
if code == "]" [
var layer layer+1
]
if code == "[" [
var layer layer-1
]
if layer == -1 [
var index i
]
var i i-1
]
]
]
var index index+1
]
Interpreter
"Maybe one day I will make interpreter for it." Dominicentek (talk) 20:11, 22 August 2021 (UTC)