This page contains the official definitions of RCS-defined fingerprints. Where there are discrepencies between this page and the Rc/Funge-98 manual then this page is to be considered the authority.
"3DSP | 0x33445350 | 3D space manipulation extension | (RCS) |
"ARRY | 0x41525259 | Arrays | (RCS) |
"BASE" | 0x42415345 | I/O for numbers in other bases | (RCS) |
"BOOL" | 0x424F4F4C | Logic functions | (RCS) |
"COPT" | 0x434f5054 | Command line arguments | (RCS) |
"CPLI" | 0x43504C49 | Complex Integer extension | (RCS) |
"DATE" | 0x44415445 | Date Functions | (RCS) |
"DIRF" | 0x44495246 | Directory functions extension | (RCS) |
"EMEM" | 0x454d454d | Extended memory | (RCS) |
"EVAR" | 0x45564152 | Environment variables extension | (RCS) |
"EXEC" | 0x45584543 | Various types of k-like execs | (RCS) |
"FILE" | 0x46494C45 | File I/O functions | (RCS) |
"FING" | 0x46494e47 | Operate on single fingerprint semantics | (RCS) |
"FNGR" | 0x464E4752 | Fingerprint management extension | (RCS) |
"FOBJ" | 0x464f424a | Object Oriented extension | (RCS) |
"FORK" | 0x464F524B | Fork Process | (RCS) |
"FPDP" | 0x46504450 | Double precision floating point | (RCS) |
"FPRT" | 0x46505254 | Formatted print | (RCS) |
"FPSP" | 0x46505350 | Single precision floating point | (RCS) |
"FIXP" | 0x46495850 | Some useful fixed point math functions | (RCS) |
"FRTH" | 0x46525448 | Some common forth commands | (RCS) |
"ICAL" | 0x4943414c | Some Intercal-like functions | (RCS) |
"IIPC" | 0x49495043 | Inter IP communicaiton extension | (RCS) |
"IMAP" | 0x494D4150 | Instruction remap extension | (RCS) |
"IMTH" | 0x494d5448 | Some integer math functions | (RCS) |
"INDV" | 0x494E4456 | Pointer functions | (RCS) |
"IPMD" | 0x49504d44 | IP dimension modes | (RCS) |
"LONG" | 0x4c4f4e47 | Long Integers | (RCS) |
"MACR" | 0x4d414352 | Macro Extension | (RCS) |
"MSGQ" | 0x44d534751 | SysV IPC Message Queues | (RCS) |
"MVRS" | 0x4d565253 | Multiverse extension | (RCS) |
"RAND" | 0x52414e44 | Random Numbers | (RCS) |
"REXP" | 0x52455850 | Regular Expression Matching | (RCS) |
"SETS" | 0x53455453 | Set operations | (RCS) |
"SGNE" | 0x53474e45 | Extension to SGNL | (RCS) |
"SMEM" | 0x534d454d | SysV IPC Shared Memory | (RCS) |
"SMPH" | 0x534d5048 | SysV IPC Semaphores | (RCS) |
"SOCK" | 0x534F434B | tcp/ip socket extension | (RCS) |
"SORT" | 0x534f5254 | Sorting Functions | (RCS) |
"STCK" | 0x5354434b | Stack Manipulation | (RCS) |
"STRN" | 0x5354524E | String functions | (RCS) |
"SUBR" | 0x53554252 | Subroutine extension | (RCS) |
"TIME" | 0x54494D45 | Time and Date functions | (RCS) |
"TERM" | 0x5445524D | Terminal extension | (RCS) |
"TRDS" | 0x54524453 | IP travel in time and space | (RCS) |
"TRGR" | 0x54524752 | Triggers | (RCS) |
"UNIX" | 0x554e4958 | Some Unix access functions | (RCS) |
"WIND" | 0x57494E44 | Windows extensions | (RCS) |
Notes:
A | (V3a V3b -- V3) | Add two 3d vectors |
B | (V3a V3b -- V3) | Subtract two 3d vectors |
C | (V3a V3b -- V3) | Cross porduct of two vectors |
D | (V3a V3b -- n) | Dot product of two vector |
L | (V3 -- n) | Length of vector |
M | (V3a V3b -- V3) | Multiply two 3d vectors |
N | (V3 -- V3) | Normalize vector (sets length to 1) |
P | (Vdm Vsm -- ) | Copy a matrix |
R | (Va axis ang -- ) | Generate a rotation matrix |
S | (Va V3 -- ) | Generate a scale matrix |
T | (Va V3 -- ) | Generate a translation matrix |
U | (V3 -- V3 V3) | Duplicate vector on top of stack |
V | (V3 -- x y) | Map 3d point to 2d view |
X | (V3 Vam -- V3) | Transform a vector using transformation matrix |
Y | (Vdm Vam Vam -- ) | Multiply two matrices |
Z | (n V3 -- V3) | Scale a vector |
A | (Va n x -- Va) | Store to single dimension array |
B | (Va x -- Va n) | Retrieve from single dimension array |
C | (Va n x y -- Va) | Store to two dimension array |
D | (Va x y -- Va n) | Retrieve from two dimension array |
E | (Va n x y z -- Va) | Store to three dimension array |
F | (Va x y z -- Va n) | Retrieve from three dimension array |
G | ( -- n) | Get maximum dimensions allowed |
B | (n -- ) | Ouptut top of stack in binary |
H | (n -- ) | Ouptut top of stack in hex |
I | (b -- n) | Read input in specified base |
N | (n b -- ) | Output n in base b |
O | (n -- ) | Ouptut top of stack in octal |
A | (a b -- r) | And |
N | (a -- r) | Not |
O | (a b -- r) | Or |
X | (a b -- r) | Xor |
A | ( -- 0gnirts ... ) | Push all command line arguments on stack |
C | ( -- n) | Get count of command line arguments |
G | (n -- 0gnirts) | Get specified command line argument on stack |
S | (0gnirts -- 0gnirts) | Get argument with specified switch |
A | (ar ai br bi -- r i) | Add two complex integers |
D | (ar ai br bi -- r i) | Divide two complex integers |
M | (ar ai br bi -- r i) | Multiply two complex integers |
O | (r i -- ) | Output a complex number |
S | (ar ai br bi -- r i) | Subtract two complex integers |
V | (r i -- n) | Absolute value of a complex integer |
A | (y m d days -- y m d) | Add days to date |
C | (jd -- y m d) | Convert julian day to calendar date |
D | (y1 m1 d1 y2 m2 d2 -- days) | Days between dates |
J | (y m d -- jd) | Calendar date to julian day |
T | (y d -- y m d) | Year/day-of-year to full date |
W | (y m d -- d) | Day of week (0=monday) |
Y | (y m d -- d) | Day of year (0=Jan 1) |
C | (0gnirts -- ) | Change directory |
M | (0gnirts -- ) | Make a directory |
R | (0gnirts -- ) | Remove a directory |
A | (size -- hnd) | Allocate memory |
F | (hnd -- ) | Free memory |
G | (hnd n addr --) | Get bytes from memory |
P | (.. hnd n addr --) | Put bytes into memory |
R | (hnd size -- ) | Reallocate memory |
G | (0gnirts -- 0gnirts) | Get value of an environment variable |
N | ( -- n ) | Get number of environment variables |
P | (0gnirts --) | Put a value into the environemnt (form: name=value) |
V | (n -- 0gnirts) | Get n'th environmnt variable (form: name=value) |
A | (V n -- ) | Execute command at vector n times from current location, IP will be pointed at the A |
B | (V n -- ) | Like A but IP will be reset each iteration |
G | (V --) | Set position of IP to vector |
K | (n -- ) | what k should have been, will skip following instruction if it is the iterated one |
R | (n --) | Like K but IP is reset after each iteration |
X | (cmd n --) | execute command on stack n times |
C | (h --) | Close a file | ||||||||||||||
D | (0gnirts -- ) | Delete specified file | ||||||||||||||
G | (h -- h 0gnirts b) | Read string from file (like c fgets) | ||||||||||||||
L | (h -- h n) | Get location of file pointer | ||||||||||||||
O | (Va m 0gnirts -- h) | Open a file (Va=i/o buffer)
| ||||||||||||||
P | (h 0gnirts -- h) | Write string to file (like c fputs) | ||||||||||||||
R | (h n -- h) | Read n bytes from file to buffer | ||||||||||||||
S | (h m n -- h) | Seek to position n in file
| ||||||||||||||
W | (h n -- h) | Write n bytes from buffer to file |
X | (sem sem -- ) | Swap two semantics |
Y | (sem -- ) | Pop semantic |
Z | (src dst -- ) | Push source semantic onto dst |
A | ( -- ) | Set ( and ) to work in absolute mode |
B | ( -- fp 1) | Create a Blank extension on top of stack (all entries are set to transparent). The standard fingerprint id for this copy will be 0xFFFFFFFF. This is useful to create a customized extension containing pieces from many others. |
C | (new n old o -- ) | Copy instruction 'old' in fingerprint 'o' to instruction 'new' in fingerprint 'n' |
D | (inst n-- ) | Delete an instruction from fingerprint with id n |
F | (fp -- n) | Get current id for specified fingerprint fp is a 1 cell version, like from the ) command |
K | (n -- ) | Kill extension at selected position in fingerprint stack |
N | ( -- n) | Get number of fingerprints loaded |
O | ( -- ) | Return ( and ) to the official functions |
R | ( -- ) | Set ( and ) to work in roll mode |
S | ( -- ) | Set ( and ) to work in swap mode |
T | (fp n -- ) | Tag stack entry n with new fingerprint fp |
X | (n n -- ) | Exchange the positions of two fingerprints in the stack |
All instructions on failure act like r. |
The fingerprint stack and fingerprint ids as used by this extension: The fingerprint stack consists of all loaded fingerprints. When a fingerprint is loaded it is pushed onto this stack. When an A-Z instruction is executed the tos of this stack is the first searched for the command, and then on downwards through the stack, if the bottom is hit, then an r command will be executed. For most all commands in this extension, the fingerprint id is actually the position on the fingerprint stack. The top has id 0, the second id 1, and so on. So, if you were to execute "'A1D" This would delete the 'A' command from the extension sitting on the second position on the fingerprint stack. | ||||
Absolute Mode: In absolute mode, the ( and ) instructions take on new meanings:
| ||||
Roll Mode: In roll mode, the ( and ) instructions take on new meanings:
| ||||
Swap Mode:
In swap mode, the ( and ) instructions take on new meanings:
| ||||
Note:
|
D | (ref -- ) | Destruct an object |
I | (0gnirts -- ref) | Instantiate an object |
M | (nargs ref meth -- ret) | Call an object method |
N | (ref -- 0gnirts) | Get object name |
T | ( -- pid flg) | Fork new process |
A | (a b -- n) | Add two double precision fp numbers |
B | (n -- n) | Sin of double precision fp number |
C | (n -- n) | Cosin of double precision fp number |
D | (a b -- n) | Divide two double precision fp numbers |
E | (n -- n) | Arcsin of double precision fp number |
F | (n -- n) | Convert integer to floating point |
G | (n -- n) | Arctangent of double precision fp number |
H | (n -- n) | Arccosin of double precision fp number |
I | (n -- n) | Convert floating point to integer |
K | (n -- n) | Natural logarithm of double precision fp number |
L | (n -- n) | Base 10 logarithm of double precision fp number |
M | (a b -- n) | Multiply two double precision fp numbers |
N | (n -- n) | Negate double precision fp number |
P | (n -- ) | Print a floating point number |
Q | (n -- n) | Double precision square root |
R | (0gnirts -- n) | Convert ascii number to floating point |
S | (a b -- n) | Subtract two double precision fp numbers |
T | (n -- n) | Tangent of double precision fp number |
V | (n -- n) | Absolute value of double precision fp number |
X | (n -- n) | Exponential of double precision fp number (e**n) |
Y | (x y -- n) | Raise x to the power of y |
D | (fmt fh fl -- 0gnirts) | Format FPDP type number |
F | (fmt f -- 0gnirts) | Format FPSP type number |
I | (fmt i -- 0gnirts) | Format an integer |
L | (fmt h l -- 0gnirts) | Format a long integer |
S | (fmt 0gnirts -- 0gnirts) | Format a string |
A | (a b -- n) | Add two single precision fp numbers |
B | (n -- n) | Sin of single precision fp number |
C | (n -- n) | Cosin of single precision fp number |
D | (a b -- n) | Divide two single precision fp numbers |
E | (n -- n) | Arcsin of single precision fp number |
F | (n -- n) | Convert integer to floating point |
G | (n -- n) | Arctangent of single precision fp number |
H | (n -- n) | Arccosin of single precision fp number |
I | (n -- n) | Convert floating point to integer |
K | (n -- n) | Natural logarithm of single precision fp number |
L | (n -- n) | Base 10 logarithm of single precision fp number |
M | (a b -- n) | Multiply two single precision fp numbers |
N | (n -- n) | Negate single precision fp number |
P | (n -- ) | Print a floating point number |
Q | (n -- n) | Single precision square root |
R | (0gnirts -- n) | Convert ascii number to floating point |
S | (a b -- n) | Subtract two single precision fp numbers |
T | (n -- n) | Tangent of single precision fp number |
V | (n -- n) | Absolute value of single precision fp number |
X | (n -- n) | Exponential of single precision fp number (e**n) |
Y | (x y -- n) | Raise x to the power of y |
A | (a b -- a and b) | And |
B | (n -- arccos(b)) | Find arccosin of tos |
C | (n -- cos(b)) | Find cosin of tos |
D | (n -- rnd(n)) | RanDom number |
I | (n -- sin(b)) | Find sin of tos |
J | (n -- arcsin(b)) | Find arcsin of tos |
N | (a -- 0-a) | Negate |
O | (a b -- a or b) | Or |
P | (a -- a*pi) | Multiply by pi |
Q | (a -- sqrt(a)) | Square root |
R | (a b -- a**b) | Raise a to the power of b |
S | (n -- n) | Replace tos with sign of tos |
T | (n -- tan(b)) | Find tangent of tos |
U | (n -- arctan(b) | Find arctangent of tos |
V | (n -- n) | Absolute value of tos |
X | (a b -- a xor b) | Xor |
D | ( .. -- .. n) | Push depth of stack to tos |
L | ( .. n -- .. n) | Forth Roll command |
O | (a b -- a b a) | Forth Over command |
P | (.. n -- .. n) | Forth Pick command |
R | (a b c -- b c a) | Forth Rot command |
A | (a -- r) | Unary AND |
F | (n -- ) | Forget entries from nexting stack |
I | (a b -- r) | Interleave a $ b |
N | (Va -- ) | Jump to new location |
O | (a -- r) | Unary OR |
R | (n -- ) | Resume |
S | (a b -- r) | Select a ~ b |
X | (a -- r) | Unary XOR |
A | ( -- n) | Get ancestors unique id |
D | ( -- ) | Go Dormant until stack is manipulated by another ip |
G | (i -- n) | Get the top value of another ip's stack (pop) |
I | ( -- n) | Get ip's own unique id |
L | (i -- n) | Look at top stack value of another ip |
P | (n i -- ) | Put a value onto another ip's stack |
C | ( -- ) | Clear all instruction remaps |
M | (new old -- ) | Remap an instruction |
O | (n -- ) | Return instruction n to its old function |
A | (.. n -- r) | Average |
B | (n -- r) | Absolute value |
C | (n -- r) | Multiply by 100 |
D | (n -- r) | Decrease towards zero |
E | (n -- r) | Multiply by 10,000 |
F | (n -- r) | Factorial |
G | (n -- r) | Sign |
H | (n -- r) | Multiply by 1,000 |
I | (n -- r) | Increase away from zero |
L | (n c -- r) | Shift n left c times |
N | (.. n -- r) | Minimum value |
R | (n c -- r) | Shift n right c times |
S | (.. n -- r) | Sum |
T | (n -- r) | Multiply by 10 |
U | (n -- ) | Unsigned print |
X | (.. n -- r) | Maximum value |
Z | (n -- r) | Negate |
G | (Vp - n) | Pointer get number |
P | (n Vp -- ) | Pointer put number |
V | (Va -- V) | Pointer get vector |
W | (V Va --) | Pointer put vector |
B | ( -- ) | Run in BeFunge mode |
D | ( -- ) | Run in default mode for VM |
Q | ( -- d) | Query for mode IP is running in |
T | ( -- ) | Run in TreFunge mode |
U | ( -- ) | Run in UneFunge mode |
A | (ah al bh bl -- rh rl) | Addition |
B | (ah al -- rh rl) | Absolute value |
D | (ah al bh bl -- rh rl) | Division |
E | (n -- rh rl) | Sign extend single to long |
L | (ah al n -- rh rl) | Shift left n times |
M | (ah al bh bl -- rh rl) | Multiplication |
N | (ah al -- rh rl) | Negate |
O | (ah al bh bl -- rh rl) | Modulo |
P | (ah al -- ) | |
R | (ah al n -- rh rl) | Shift right n times |
S | (ah al bh bl -- rh rl) | Subraction |
Z | (0gnirts -- rh rl) | Ascii to long |
A-Y | ( -- ) | Execute specified macro |
Z | (V -- ) | Specify where macro block is located |
A | - | like _ but affects the macro pointer instead of the IP |
B | - | Move IP backwards |
E | - | Change macro delta to 1,0,0 |
F | - | Move IP forwards |
G | - | Get next macro cell onto stack |
I | - | like | but affects the macro pointer instead of the IP |
J | - | like j but affects the macro pointer instead of the IP |
L | - | like [ but affects the macro pointer instead of the IP |
N | - | Change macro delta to 0,-1,0 |
R | - | like ] but affects the macro pointer instead of the IP |
S | - | Change macro delta to 0,1,0 |
T | - | like # but affects the macro pointer instead of the IP |
W | - | Change macro delta to -1,0,0 |
G | (key flags -- id) | Get message queue identifier |
K | (id -- ) | Kill message queue |
R | (n mtyp id flags -- .. n t) | Receive message to stack |
S | (.. n mtyp id flags -- ) | Send bytes on stack as message |
T | (id -- nmsg maxsize) | Get message system info |
4096 | - IPC_CREAT | - Create if id does not exist |
8192 | - IPC_EXCL | - Open in exclusive mode |
16384 | - IPC_PRIVATE | - Create private |
low 9 bits are Unix standard access permissions |
1 | - IPC_NOWAIT | - Do not block if no messages available |
2 | - MSG_NOERROR | - Truncate too-long message instead of error |
1 | - IPC_NOWAIT | - Do not block if message queue full |
1 | - EACCESS | - A message queue exists for key, but no permission to access |
2 | - EEXIST | - Message queue exist when IPC_CREAT and IPC_EXCL are both specified |
3 | - ENOENT | - No mesage queue exists for key and IPC_CREAT was not specified |
4 | - ENOMEM | - Not enough memory |
5 | - ENOSPC | - Message queue needs to be create but no more message queues allowed |
6 | - EFAULT | - Address for IPC_SET or IPC_STAT not accessable |
7 | - EINVAL | - Invalid value for cmd or id |
8 | - EPERM | - No permissions to perform action |
9 | - EAGAIN | - A blocking condition was created and IPC_NOWAIT was specified |
10 | - EIDRM | - Message queue was removed |
11 | - EINTR | - Sleeping on a full message queue, the process caught a signal |
12 | - E2BIG | - Message size greater than specified maximum |
13 | - ENOMSG | - IPC_NOWAIT was specifed and no message of the required type was available |
B | (0gnirts flgs lng dim -- ) | Big-Bang, create another universe |
C | ( -- n) | Number of existing universes |
F | (0gnirts Vd Vs Vsz -- ) | Copy funge-space from another universe |
G | (0gnirts Vpos Vdlt -- ) | Go to another universe |
J | (0gnirts -- ) | Jump to another universe |
N | ( -- 0gnirts) | Get name of current universe |
P | (0gnirts Vd Vs Vsz -- ) | Copy funge-space to another universe |
0 | - Default |
0 | - Default |
1 | - Unefunge |
2 | - Befunge |
3 | - Trefunge |
n | - Other funges |
0 | - Default |
1 | - Funge/93 |
2 | - Funge/98 |
3 | - Funge/108 |
I | (n -- r) | Integer random number 0 <= r < n |
M | ( -- max) | Maximum allowed integer range |
R | ( -- r) | FPSP random number 0 <= r < 1 |
S | (n -- ) | Reseed rng with n |
T | ( -- ) | Reseed rng with system timer or other source |
C | (0gnirts flags -- ) | Compile a regular expression |
E | (0gnirts flags -- results) | Execute regular expression on string |
F | ( -- ) | Free compiled regex buffer |
1 | - REG_EXTENDED | - use posix extended regular expressions |
2 | - REG_ICASE | - ignore case |
4 | - REG_NOSUB | - Do not retrieve submatches |
8 | - REG_NEWLINE | - match any characters do not match newlines |
1 | - REG_NOTBOL | - beginning of line always fails |
2 | - REG_NOTEOL | - end of line always fails |
1 | - REG_BADBR | - Invalid use of back reference |
2 | - REG_BADPAT | - Invalid use of pattern operators |
3 | - REG_BADRPT | - Invalid use of repitition operators |
4 | - REG_EBRACE | - Unmatched brace |
5 | - REG_EBRACK | - Unmatched bracket |
6 | - REG_ECOLLATE | - Invalid collating element |
7 | - REG_ECTYPE | - Invalid character class name |
8 | - REG_EEND | - Non-specific error |
9 | - REG_EESCAPE | - Trailing backslash |
10 | - REG_EPAREN | - Unmatched parenthesis |
11 | - REG_ERANGE | - Invalid use of range operator |
12 | - REG_ESIZE | - Compiled pattern too large |
13 | - REG_ESPACE | - Regex routines ran out of memory |
14 | - REG_ESUBREG | - Invalid backreference to subexpression |
A | (set v -- set) | Add value to set |
C | (set -- set n) | Get count of items in set |
D | (set -- set set) | Duplicate set on stack |
G | (Vdlt Vsrc -- set) | Get set from Funge-space |
I | (seta setb -- seta setb setr) | Instersection of sets |
M | (set v -- set r) | r=0 if v is not member of set, else r=1 |
P | (set -- set) | Print a set |
R | (set v -- set) | Remove value from set |
S | (seta setb -- seta setb setr) | Subtract setb from seta |
U | (seta setb -- seta setb setr) | Union of sets |
W | (set Vdlt Vdst -- set) | Write set to Funge-space |
X | (seta setb -- setb seta) | Swap two sets |
Z | (set -- ) | Drop set from stack |
A | (sec -- old) | Set alarm |
I | ( -- pid) | Get PID of current process |
L | (sec -- ) | Sleep |
P | ( -- ) | Pause until signal |
S | (s -- ) | Send signal to self |
T | ( -- ) | Abort |
G | (key size flags -- id) | Get shared memory segment |
K | (id -- ) | Remove shared memory segment |
R | (n addr id flags -- ..) | Read bytes from shared memory |
T | (id -- size) | Get shared memory info |
W | (.. n addr id flags -- ) | Write bytes to shared memory |
4096 | - IPC_CREATE | - Create segment if it does not exist |
8192 | - IPC_EXCL | - Open for exclusive use |
16384 | - IPC_PRIVATE | - Create private |
Low 9 bits are Unix pattern permisssions |
1 | - SHM_RDONLY | - Attach segment readonly |
1 | - SHM_RDONLY | - Attach segment readonly |
1 | - EACCES | - User does not have permission to access |
2 | - EEXIST | - IPC_CREAT|IPC_EXCL was specified and sement exists |
3 | - EFAULT | - Address is not accessable |
4 | - EIDRM | - Shared memory segment was removed |
5 | - EINVAL | - id is not a valid id |
6 | - ENFILE | - System limit on open files has been reached |
7 | - EOVERFLOW | - |
8 | - ENOENT | - No segment exists for key and IPC_CREAT was not specified |
9 | - ENOMEM | - No memory could be allocated |
10 | - ENOSPC | - All possible shared memory IDs have been taken |
11 | - EPERM | - No permissions |
A | (sem id flags -- id) | Allocate semaphore |
D | (sem id flags -- id) | De-allocate semaphore |
G | (key nsems flags -- id) | Get a semaphore set |
K | (id -- ) | Remove a semaphore set |
M | (op sem id n -- ) | Multiple semaphore operations |
N | (sem id -- z n) | Get number of processes waiting on semaphore |
R | (sem id -- n) | Read semaphore value |
W | (v sem id -- ) | Write semaphore value |
Z | (sem id -- ) | Wait for zero semaphore |
1 | - IPC_NOWAIT | - Do not block |
2 | - SEM_UNDO | - Undo operation on program exit |
4096 | - IPC_CREATE | - Create if it does not exist |
8192 | - IPC_EXCL | - Open for exclusive use |
16384 | - IPC_PRIVATE | - Create a private semaphore set |
Low 9 bits are Unix pattern permisssions |
1 | - E2BIG | - Value was too large |
2 | - EACCESS | - Semaphore exists but no access allowed |
3 | - EAGAIN | - Operation could not go through with IPC_NOWAIT specified |
4 | - EEXIST | - IPC_CREAT|IPC_EXCL were specified and semaphore exists |
5 | - EFAULT | - Address isn't accessible |
6 | - EFBIG | - Invalid semaphore number |
7 | - EIDRM | - Semaphore set was removed |
8 | - EINTR | - Sleeping on a wait queue and process receives a signal |
9 | - EINVAL | - Semaphore set does not exist |
10 | - ENOENT | - No semaphore set exists and IPC_CREAT was not specified |
11 | - ENOMEM | - Not enough memory to create new semaphore set |
12 | - ENOSPC | - Maximum semaphore limit has been reached |
13 | - EPERM | - Insuficient privileges to execute command |
14 | - ERANGE | - Semaphore value exceeded allowed count |
A | (s -- prt addr s) | Accept a connection |
B | (s ct prt addr -- ) | Bind a socket |
C | (s ct prt addr -- ) | Open a connection |
I | (0gnirts -- addr) | Convert an ascii ip address to a 32 bit address |
K | (s -- ) | Kill a connection |
L | (n s -- ) | Set a socket to listening mode (n=backlog size) |
O | (n o s -- ) | Set socket option |
R | (V l s -- bytes) | Receive from a socket, |
S | (pf typ pro -- s) | Create a socket |
W | (V l s -- retcode) | Write to a socket |
note: All functions act as r on failure | |
addr: | 32 bit destination address |
ct: | 1=AF_UNIX 2=AF_INET |
o: | 1=SO_DEBUG 2=SO_REUSEADDR 3=SO_KEEPALIVE 4=SO_DONTROUTE 5=SO_BROADCAST 6=OOBINLINE |
pf: | 1=PF_UNIX 2=PF_INET |
prt: | Port to connect to |
s: | Socket identifier |
typ: | 1=SOCK_DGRAM 2=SOCK_STREAM |
pro: | 1=tcp 2=udp |
V: | Vector to io buffer |
B | (Va Vld Vbd w n -- ) | Sort block in funge-space |
F | (Va Vd n -- ) | Sort funge-space |
K | (.. n -- ..) | Sort stack |
S | (Va Vld Vsd w n -- ) | Sort strings |
B | (v n -- v ..) | Bury v value n deep into the stack |
C | (.. -- cnt) | Get count of items on stack |
D | (.. n -- ..) | Duplicate top n stack items |
G | (n Vdlt Vsrc -- ..) | Read n stack entires from Funge-Space |
K | (st en -- ..) | Push block of stack cells on top |
N | (.. n -- ..) | Reverse n items on stack |
P | (.. -- ..) | Print contents of stack, non-destructive |
R | (.. -- ..) | Reverse all items on stack |
S | (a b -- a a b) | Duplicate second on stack |
T | (a b c -- b a c) | Swap second and third items on stack |
U | (n -- n r) | Drop items from stack until n is found |
W | (n Vdlt Vsrc -- ) | Write n stack entires to Funge-Space |
Z | (0string -- 0gnirts) | Reverse 0 terminated string on stack |
A | (0gnirts 0gnirts -- 0gnirts) | Append bottom string to upper string |
C | (0gnirts 0gnirts -- n) | Compare strings |
D | (0gnirts --) | Display a string |
F | (0gnirts 0gnirts -- 0gnirts) | Search for bottom string in upper string |
G | (Va -- 0gnirts) | Get string from specified position |
I | ( -- 0gnirts) | Input a string |
L | (0gnirts n -- 0gnirts) | Leftmost n characters of string |
M | (0gnirts s n -- 0gnirts) | n characters starting at position s |
N | (0gnirts -- 0gnirts n) | Get length of string |
P | (0gnirts Va -- ) | Put string at specified position |
R | (0gnirts n -- 0gnirts) | Rightmost n characters of string |
S | (n -- 0gnirts) | String representation of a number |
V | (0gnirts -- n) | Retreive value from string |
A | ( -- ) | Set absolute mode |
C | (Va n -- Va Vd .. ) | Call a subroutine |
J | (Va -- ) | Jump to another location |
O | ( -- ) | Set Relative mode |
R | (Va Vd .. n -- ..) | Return from subroutine |
D | ( -- n) | Day of Month |
F | ( -- n) | Day since First of year |
G | ( -- ) | Set time functions to GMT |
H | ( -- n) | Hours |
L | ( -- ) | Set time functions to local time (default) |
M | ( -- n) | Minutes |
O | ( -- n) | Month (1=January) |
S | ( -- n) | Seconds |
W | ( -- n) | Day of Week (1=Sunday) |
Y | ( -- n) | Year |
C | ( -- ) | Clear the screen |
D | ( n -- ) | Move cursor down n lines |
G | (x y -- ) | Put cursor at position x,y (home is 0,0) |
H | ( -- ) | Move cursor to home |
L | ( -- ) | Clear to end of line |
S | ( -- ) | Clear to end of screen |
U | ( n -- ) | Move cursor up n lines |
C | ( -- ) | Continue normal time |
D | (V -- ) | Set absolute destination space coordinates |
E | (V -- ) | Set relative destination space corrdinates |
G | ( -- n) | Get current time point |
I | ( -- ) | Set inverse settings |
J | ( -- ) | Initiate a jump |
P | ( -- n) | Maximum distance in the past ip can jump to |
R | ( -- ) | Reset all tardis controls to default |
S | ( -- ) | Stop time |
T | (n -- ) | Set absolute destination time |
U | (n -- ) | Set relative destination time |
V | (V -- ) | Set destination vector |
Notes to time travelling ips: |
Usage of time travel can be very punishing on the performance of the funge interpreter. If travel is performed to the past, the interpreter must be capable of reproducing all conditions that existed at the destination time, which includes all ips, stacks, and funge space cells. Some interpreters may only store time snapshots from only so far back (The furthest point in the past that can be jumped to can be determined with the P command). The RCS interpreter essentially reruns from point 0 and therefore all points in time can be jumped to (note: this can be quite time consuminmg if the destination time point is tens or hundreds of thousands of instructions from time point 0). |
Time travel into the future is not quite so punishing. The ip that time travels will merely be frozen until time catches up with it, at which point it will continue to execute. |
Time travel into the past has the following consequences:
|
When Multiple IPs Time Travel: |
In order to decrease the work on the interpreter, it is not necessary for the interpreter to remember future events. In other words when an ip travels back in time, everything occuring after the time point of destination need not recur if it does not occur in the further course of the program. When IPs time travel, only those ips that are currently in funge space at the time of arrival (either normally or from time travelling) will exist. Any ips that time travelled to a point later in time will not recur, unless the original time travel for these ips recur. Here are two examples to illustrate this point: |
Example 1: Ip#1 travels back in time and arrives to time point 100, Ip#2 travels back to point 150. At point 150 the time travelled copies of both ips will exist. |
Example 2: Ip#1 travels back in time and arrives to time point 150, Ip#2 travels back to point 100. At the point where ip#2 arrives, ip#1 has not yet arrived and therefore does not exist, it will also not exist when time point 150 arrives, only when the original jump for Ip#1 occurs, will history again be rewritten. |
Tardis Operators Manual: |
|
Stopping Time: |
An ip that issues a <S>top time command freezes the time counter. All other ips will be frozen until a <C>ontinue time command is executed. During the time that time is stopped, only the ip that executed the S command will continue to run. For the purposes of time travel, the time used while time is stopped does not actually exist, and therefore cannot be jumped to. In other words everything the ip does is considered to have taken no time. If an ip that stops time is terminated, time will be continued |
A-Y | ( -- ) | Activate a trigger |
Z | (V -- ) | Specify where trigger table is located |
A | (id -- ) | Set effective uid |
B | (id -- ) | Set effective gid |
C | (0gnirts uid gid -- ) | Change owner of a file |
D | ( -- 0gnirts) | Get domain name of host |
E | ( -- id) | Get effective uid |
G | ( -- id) | Get real gid |
H | ( -- id) | Get host id |
K | (mask -- old) | Set umask |
M | (0gnirts mode -- ) | Change file access |
N | ( -- 0gnirts) | Get host name |
P | ( -- id) | Get process id |
R | ( -- id) | Get effective gid |
S | (id -- ) | Set uid |
T | (id -- ) | Set gid |
U | ( -- id) | Get real uid |
B | (x1 y1 width height h -- ) | Draw a box | ||||||||||||||
C | (h -- ) | Close GC | ||||||||||||||
D | (h -- ) | Drop (lower) Window | ||||||||||||||
E | (h -- ) | Call event checker | ||||||||||||||
I | (Va e h -- ) | Install event handler
| ||||||||||||||
F | (r g b h -- ) | Change foreground color | ||||||||||||||
K | (h -- ) | Kill a window | ||||||||||||||
L | (x1 y1 x2 y2 h -- ) | Draw a line | ||||||||||||||
M | (x y h -- ) | Move a window | ||||||||||||||
O | (h -- ) | Open GC | ||||||||||||||
P | (x y h -- ) | Draw a point | ||||||||||||||
R | (h -- ) | Raise Window | ||||||||||||||
S | (x y h -- ) | resize a window | ||||||||||||||
T | (0gnirts x y h --) | Draw text in a window | ||||||||||||||
W | (x y w h -- h) | Open a window | ||||||||||||||
Y | (h -- ) | Copy back-buffer to screen |