Letterbox
Letterbox is an esoteric programming language created in 2018 by Christopher Natcharian. Its structure is based on Assembly, and its interpreter is built in Python. All names of both variables and functions in the language are one letter long.
Variables
Letterbox programs manipulate a bank of 26 variables (a.k.a. registers, for those familiar with Assembly). Each is labeled as a lowercase letter from a to z and each is set to 0 by default. No other variables can be declared. Letterbox is case-sensitive, and uppercase letters are not variable names. Each variable can hold a single number, which can be an integer or a decimal, positive or negative. They can also technically hold strings (as the language is built over Python) but this implementation is buggy at best.
Functions
A Letterbox function call generally looks like Abc
. A is the name of the function we are calling while b and c are two variables we are passing in as arguments. No whitespace is allowed between these characters, as spaces are what separate Letterbox statements. All Letterbox function names are singular uppercase English letters. Variables are considered "true" if their value is nonzero, and "false" if their value is zero.
Following are the four types of Letterbox function formats:
Simple Functions
A simple function follows the format Ab...
, where A is the function name and b... are one or more variable arguments.
Function Name | Form | Description |
---|---|---|
Print (P) | Pa | Prints the contents of variable a. |
Store (S) | Sa4 | Stores the value 4 in variable a. Any numerical value can be stored. |
Copy (C) | Cab | Copies the contents of a into b. |
Reset (R) | Ra | Resets variable a to 0. Using uppercase A as an argument resets all variables. |
Negate (N) | Na | Boolean negation. If a is non-zero, sets it to 0. If a is 0, sets it to 1. |
Copy (C) | Cab | Copies the contents of a into b. |
Compound Functions
Since there are only 26 possible simple function names in Letterbox, some functions have been combined into one in order to save letters for other functions that might possibly be implemented in the future. These take the form AXb...
, where A is the function name, X is a key letter that specifies what operation the function will perform, and b... are the variable arguments of the function.
Function Name | Form | Key Letters (X) | Description |
---|---|---|---|
Math (M) | MXabc | A, S, M, D, E, G, L | Performs a mathematical operation on b and c and stores the result in a.
Operations: add, subtract, multiply, divide, equal to, greater than, less than |
Boolean (B) | BXabc | E, A, O, X | Performs a boolean operation on b and c and stores the result in a. This result will always be 0 (false) or 1 (true).
Operations: equal to, and, or, xor (exclusive or) |
Get (G) | GXa | I, S | Pauses execution, gets input from the user of a certain type, and stores the value in a
Input Types: integer (I), string (S) |
Prefixes
Prefix functions are functions that take in other functions as arguments. They take the general form AbF...
where A is the function name, b is a variable argument, and F... is another function call, which can have its own arguments after it.
Function Name | Form | Description |
---|---|---|
Loop (L) | LaF | Repeatedly executes function F, repeating a times. |
If (I) | IaF | If a is true (nonzero), executes function F. Otherwise, does nothing. |
Strings
For ease of I/O, Letterbox has some (albeit limited) string shortcuts. A string manipulator function has the form A:string
where A is the function name, and everything after the colon (:) is the string you wish to pass in.
NOTE: No spaces are allowed in strings, because whitespace is not allowed within function calls. In lieu of this, Letterbox treats underscores (_) in strings as spaces.
Function Name | Form | Description |
---|---|---|
Print (P) | P:string | Prints "string" (without the quotes). If the string contains underscores, they will be printed as spaces. |
Store (S) | Sa:string | Saves "string" to variable a. |
Programs
A valid Letterbox program is a series of function calls separated by spaces and/or line breaks. Each line of input will have its own line of output, so place your line breaks carefully.
Comments can also be placed in programs. Anything that comes after a ! character on a single line is ignored by the interpreter.
Example Programs
Hello World
! This program prints "Hello world" P:Hello_world
Mathematics
This program increments a twice and prints the result.
Sa0 Sb1 Sc2 LcMAaab Pa ! This program should print out 2.
User Input
This program asks the user for their name, greets them, then asks their age, and responds differently whether the user is 20 or more years old.
P:What's_your_name? GSa P:Hi_there, Pa P:How_old_are_you? GIb Sc20 MGdbc IdP:Wow,_you're_old! Nd IdP:Well,_you're_still_young!
References
Letterbox Python source code: https://github.com/CNatcharian/letterbox