UCanCode
UCanCode is a programming language created in 2021 for Windows Poop Edition 3.0, an operating system by CrapOS. Out of context, Windows PE is a series of fake operating system simulators created by User:Viba, who also created UCanCode. The original implementation transpiles code into Lua and runs it. The language consists primarily of commands that are structured almost like plain English, and are influenced by Scratch.
The name 'UCanCode' is "a blatant lie, as you will almost certainly not succeed in writing a program in UCanCode. We don't feel like changing the name to 'UCantCode', so you're just gonna have to deal with this."
Overview
A program consists of a sequence of commands separated by newlines. Each command follows a specific structure, which arguments may be substituted into (eg. A is B plus C
). An argument is frequently a variable name, but might also be a constant in some commands. When describing commands on this page, A B C will refer to arguments that represent variable names, while X will refer to arguments representing constants. A variable name consists of alphanumeric characters. A constant also consists of alphanumeric characters, but may sometimes consist of a sequence of characters enclosed by quotation marks.
Consider the following code:
a is 2 b is 3 c is a plus b write c
A is X
is a command that assigns the constant X to the variable A. In this code, 2
and 3
are assigned to the variables a
and b
respectively. The line c is a plus b
is actually it's own command, as opposed to just being A is X
where X is substituted for an expression; this command will compute the sum of the values of a
and b
and store it in the variable c
. Finally, write c
outputs the variable c
. (Specifically, in the original Windows Poop Edition implementation, write A
will display text in a window at whatever position the "pen" is currently set to, which is 0,0 by default.)
Starting with UCanCode version 1.1, a line starting with #
is a comment.
Implementation Drawbacks
The original implementation included in Windows PE 3 and Windows PE 4 does not properly handle lines with surrounding whitespace, eg. tabulation. However, version 1.1 of the UCanCode runtime, which fixes this issue, was included in the Public Beta 7.0 release of Windows PE 5.
Another issue with the original version of the UCanCode runtime is that arithmetic commands would internally store their results as numbers instead of strings, which causes so many horrible bugs that I have no idea how this wasn't discovered for so long. This was also fixed in version 1.1 of the runtime.
Commands
Indices start from 1.
Syntax | Description |
---|---|
A is X |
Set the value of variable A to constant X. X may be a sequence of characters enclosed in quotation marks (allowing strings containing non-alphanumeric characters). |
A is the value of B |
Set the value of variable A to the value of variable B. |
A is a list |
Declare variable A as an empty list. |
add A to B |
Append A to list B. |
insert A into position B of C |
Insert A into position B of list C. |
replace item A of B with C |
Set the value of the item at position A of list B with C. |
remove item A from B |
Remove the item at position A from list B. |
A is the item at position B of C |
Store the item at position B of list C into A. |
A is B plus C |
Add B to C and store the result in A. |
A is B minus C |
Subtract B and C and store the result in A. |
A is B times C |
Multiply B and C and store the result in A. |
A is B divided by C |
Divide B and C and store the result in A. |
A is B modulo C |
Modulo B and C and store the result in A. |
A is whether B equals C |
Set A to "true" if B equals C, "false" otherwise. |
A is whether B is more than C |
Set A to "true" if B is greater than C, "false" otherwise. |
A is whether B is less than C |
Set A to "true" if B is less than C, "false" otherwise. |
A is whether B is at least C |
Set A to "true" if B is greater than or equal to C, "false" otherwise. |
A is whether B is at most C |
Set A to "true" if B is less than or equal to C, "false" otherwise. |
A is whether B and C are true |
Set A to "true" if both B and C are "true", "false" otherwise. |
A is whether B or C is true |
Set A to "true" if either B or C is "true", "false" otherwise. |
A is whether B is false |
Set A to "true" if B is "false", "false" otherwise. |
A is B joined with C |
Concatenate B and C and store the result in A. |
A is the length of B |
Store the length of B into A. |
A is the letter at position B of C |
Store the character at position B of C into A. |
A is a random number between B and C |
Generate a random number between B and C, and store the result in A. |
if A is true |
Branch if A equals "true". |
elseif A is true |
Branch if A equals "true" and the previous branch didn't execute. |
else |
Branch if none of the preceding "if" branches executed. |
while A is true |
Loop branch while A equals "true". |
when program loads |
Defines a block of code that runs when the program first starts. |
when program updates |
Defines a block of code that runs every frame to update the program state. Executes before when program draws .
|
when program draws |
Defines a block of code that runs every frame to draw the screen. Executes after when program updates .
|
when button X is clicked |
Defines a block of code that runs when the button with identifier X is clicked. |
when prompt X is answered |
Defines a block of code that runs when the user has submitted a response to the text input prompt with identifier X. The variable answer is set to the response.
|
when mouse is clicked |
Defines a block of code that runs when the left mouse button is clicked. |
when the X key is pressed |
Defines a block of code that runs when the key with code X is pressed. (In the original implementation, the key codes are the same as the key strings used in LÖVE). |
end |
End branch or code block. |
move to A B |
Sets the X and Y position of the "pen" to A and B. (The pen is at 0,0 by default, which would be the top-left corner of the window in the original implementation.) |
change x by A |
Changes the X position of the pen by A. |
change y by A |
Changes the Y position of the pen by A. |
write A |
Displays text A at the current pen position. |
draw button X that says A |
Displays button with identifier X and text B at the current pen position. |
ask A with id X |
Request text input from the user with prompt A and identifier X. Note that this does not pause execution of the program (the code block defined by when prompt X is answered will be run when the user finishes inputting text.)
|
show message box that says A |
Shows a Windows Poop Edition message box with text A and an "OK" button to close it. |
set color to A B C |
Sets the RGB value of the pen's current color to A B C (0-255). The pen color is 0,0,0 by default. |
draw rectangle with size A B |
Draws a rectangle at the current pen position with width A and height B. |
draw image A with size B C |
Draws an image from the Windows Poop Edition filepath A at the current pen position with width B and height C. |
A is the time since the program started |
Stores the current value of the timer into A. Contrary to the command's name, the timer may be reset at any time during the program's execution using reset the timer
|
reset the timer |
Resets the value of the timer to 0. |
define A |
Defines variable A as a block of code that may be executed later. |
do A |
Executes the block of code at A. |
A is whether the mouse is down |
Set A to "true" if the left mouse button is currently pressed, "false" otherwise. |
A is whether the X key is down |
Set A to "true" if the key with code X is pressed, "false" otherwise. |
A is the x position of the mouse |
Stores the current x position of the mouse into A. (In the original implementation, this position is relative to the window, as opposed to the entire screen.) |
A is the y position of the mouse |
Stores the current y position of the mouse into A. (In the original implementation, this position is relative to the window, as opposed to the entire screen.) |
Examples
Hello world
when program loads hello is "Hello, world!" end when program draws write hello end
Truth machine
when program loads 0 is 0 1 is 1 output is "" prompt is "Enter 0 or 1" ask prompt with id p end when prompt p is answered c is whether answer equals 0 if c is true output is 0 end c is whether answer equals 1 if c is true output is 1 end when program updates l is the letter at position 1 of output c is whether l equals 1 if c is true output is output joined with 1 end end when program draws write output end
move.ucc
This program is included in the "Sample Files" folder in Windows Poop Edition 3.0. It displays a black square which may be moved using the arrow keys.
when program loads x is 0 y is 0 0 is 0 dx is 0 speed is 5 rsize is 40 instructions is "Use the arrow keys to move the square!!!\nWARNING: there will likely be lag. probably because UCanCode is so TERRIBLE" end define move x is x plus dx y is y plus dy end when program updates up is whether the up key is down down is whether the down key is down left is whether the left key is down right is whether the right key is down dx is 0 dy is 0 if up is true dy is 0 minus speed end if down is true dy is the value of speed end if left is true dx is 0 minus speed end if right is true dx is the value of speed end do move end when program draws move to x y draw rectangle with size rsize rsize move to 0 0 write instructions end
External links
- Windows Poop Edition 3, the OS simulator for which UCanCode was developed which includes the canonical implementation. (Later versions also include UCanCode.)