An element in the stack is an unsigned number, 32 bit or larger.
When the cursor reaches a number, it pushes that digit onto the stack.
For example, 123 will end up with a stack of [3, 2, 1]
. (left most is top most)
The '
can be used to enter into numeric mode.
For example, '123'
would give you a stack [123]
.
Use " to enable string mode.
For example, "hello" ends up with
['o', 'l', 'l', 'e', 'h'] = [111, 108, 108, 101, 104]
. (left most is top most)
a
is used to refer to the topmost element popped and
b
to the second topmost element popped.
Symbol | Name | Description |
---|---|---|
+ | Add | b + a |
- | Sub | b - a |
* | Mul | b * a |
/ | Div | b / a |
% | Mod | b % a |
Symbol | Name | Description |
---|---|---|
! | Not | If a == 0, push 1 else push 0 |
` | Grtr | If b > a, push 1 else push 0 |
Symbol | Name | Description |
---|---|---|
^ | DirU | Direction Flow |
> | DirR | Direction Flow |
v | DirD | Direction Flow |
< | DirL | Direction Flow |
? | RndD | Random direction |
_ | H-If | If a==0, go right else left |
| | V-If | If a==0, go down else up |
# | brdg | Jump over next statement |
@ | exit | Exit Program |
[ | bs | Skip til next |
] | be | End skip |
Symbol | Name | Description |
---|---|---|
0 - 9 | Int | Input an integer digit |
" | Str | Toggle string mode |
: | Dup | Push a twice |
\ | Swap | Swap a and b |
$ | Del | Pop and discard $ |
Symbol | Name | Description |
---|---|---|
. | oint | Output a as int |
, | ochr | Output a as char |
& | iint | Input a as int |
~ | ichr | Input a as char |
g | get | a=y, b=x, get (x, y) |
p | put | a=y, b=x, c=v. set (x, y) = v |
S, T, U are reverse strings. The first letter in the string is at the top of the stack.
For example, to pass "hello" as a parameter would be:
0"olleh" = ['h', 'e', 'l', 'l', 'o', 0] = [104, 101, 108, 108, 111, 0]
Symbol | Name | Description |
---|---|---|
M | req | Load module S. Pop 1 on success else 0 |
P | load | Load subprogram S::R and call it a. |
R | rtn | Return to caller |
L | lock | Hide the stack before a certain cell - use to stop bugs overwriting previous program's stack elements. |
Calling P will load the subprogram's canvas into memory. Any changes to the Canvas in one subprogram call will be kept and seen by the next.
See submodule_getput.rf which calls sp_getput.rf
v Program to find the length of a string
> v
v M"str"0 < Load module "str"
v _ 0"rorre"#,:_ @ If failed output error
> v
v P"lstr"0"length"0 < Load str::length, call it l.
> 0"sdlmsdlmsd" l . @ Run l on "sdlmsdlmsd".
str::length
means the subprogram length in the module str.
If the module is a rf module, then there will be some
str/length.rf or stf/length.bf somewhere. If it's a native module,
then there will be some C++ code or some binding somewhere.
Modules are collections of rufunge files.
Each rufunge file is a subprogram.