Official definitions for RCS Fingerprints

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.

"3DSP0x334453503D space manipulation extension(RCS)
"ARRY0x41525259Arrays(RCS)
"BASE"0x42415345I/O for numbers in other bases(RCS)
"BOOL"0x424F4F4CLogic functions(RCS)
"COPT"0x434f5054Command line arguments(RCS)
"CPLI"0x43504C49Complex Integer extension(RCS)
"DATE"0x44415445Date Functions(RCS)
"DIRF"0x44495246Directory functions extension(RCS)
"EMEM"0x454d454dExtended memory(RCS)
"EVAR"0x45564152Environment variables extension(RCS)
"EXEC"0x45584543Various types of k-like execs(RCS)
"FILE"0x46494C45File I/O functions(RCS)
"FING"0x46494e47Operate on single fingerprint semantics(RCS)
"FNGR"0x464E4752Fingerprint management extension(RCS)
"FOBJ"0x464f424aObject Oriented extension(RCS)
"FORK"0x464F524BFork Process(RCS)
"FPDP"0x46504450Double precision floating point(RCS)
"FPRT"0x46505254Formatted print(RCS)
"FPSP"0x46505350Single precision floating point(RCS)
"FIXP"0x46495850Some useful fixed point math functions(RCS)
"FRTH"0x46525448Some common forth commands(RCS)
"ICAL"0x4943414cSome Intercal-like functions(RCS)
"IIPC"0x49495043Inter IP communicaiton extension(RCS)
"IMAP"0x494D4150Instruction remap extension(RCS)
"IMTH"0x494d5448Some integer math functions(RCS)
"INDV"0x494E4456Pointer functions(RCS)
"IPMD"0x49504d44IP dimension modes(RCS)
"LONG"0x4c4f4e47Long Integers(RCS)
"MACR"0x4d414352Macro Extension(RCS)
"MSGQ"0x44d534751SysV IPC Message Queues(RCS)
"MVRS"0x4d565253Multiverse extension(RCS)
"RAND"0x52414e44Random Numbers(RCS)
"REXP"0x52455850Regular Expression Matching(RCS)
"SETS"0x53455453Set operations(RCS)
"SGNE"0x53474e45Extension to SGNL(RCS)
"SMEM"0x534d454dSysV IPC Shared Memory(RCS)
"SMPH"0x534d5048SysV IPC Semaphores(RCS)
"SOCK"0x534F434Btcp/ip socket extension(RCS)
"SORT"0x534f5254Sorting Functions(RCS)
"STCK"0x5354434bStack Manipulation(RCS)
"STRN"0x5354524EString functions(RCS)
"SUBR"0x53554252Subroutine extension(RCS)
"TIME"0x54494D45Time and Date functions(RCS)
"TERM"0x5445524DTerminal extension(RCS)
"TRDS"0x54524453IP travel in time and space(RCS)
"TRGR"0x54524752Triggers(RCS)
"UNIX"0x554e4958Some Unix access functions(RCS)
"WIND"0x57494E44Windows extensions(RCS)

Notes:


"3DSP" 0x33445350
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


"ARRY" 0x41525259
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


"BASE" 0x42415345
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


"BOOL" 0x424F4F4C
A(a b -- r)And
N(a -- r)Not
O(a b -- r)Or
X(a b -- r)Xor


"COPT" 0x434f5054
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


"CPLI" 0x43504C49
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


"DATE" 0x44415445
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)


"DIRF" 0x44495246
C(0gnirts -- )Change directory
M(0gnirts -- )Make a directory
R(0gnirts -- )Remove a directory


"EMEM" 0x454d454d
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


"EVAR" 0x45564152
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)


"EXEC" 0x45584543
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


"FILE" 0x46494C45
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)
mfunction
0read
1write
2append
3read/write
4truncate read/write
5append read/write
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
mfunction
0from beginning
1from current location
2from end
W(h n -- h)Write n bytes from buffer to file

Clarification


"FING" 0x46494e47
X(sem sem -- )Swap two semantics
Y(sem -- )Pop semantic
Z(src dst -- )Push source semantic onto dst


"FNGR" 0x464E4752
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:
(  A number is popped of off the stack, this numbers is the fingerprint id (stack position) of what should be considered the top of stack. It does not actually move anything, it only changes where the instruction search starts. Extensions on the stack above the selected one will not be searched whereas the selected and donward will still be searched. Executing "0(" will return the search to the top of the fingerprint stack.
)  A number is popped of off the stack, this number specifies which fingerprint is to be copied over the top of the current top of stack. The extenstion that is currently on the top of the fingerprint stack will be deleted amd the selected one takes its place. The selected entry also remains in its original stack position, only a copy is made. The search point is then reset to the top of the fingerprint stack. Unlike the ( command, this will allow all other stack entries to be searched.
Roll Mode:
In roll mode, the ( and ) instructions take on new meanings:
(  A number is popped off the data stack and is used to roll the fingerprint stack. The item at the selected entry is removed and moved to the top of stack, while all other entries are moved down. This operates like the forth "roll" command.
)  This works like (, but the roll is reversed. The top of stack is moved to the selected position while all other entries are moved up. This operates like the forth "-roll" command.
Swap Mode: In swap mode, the ( and ) instructions take on new meanings:
(  A number is popped from the data stack. This specifies which entry in the fingerprint stack is to be swapped with the top of the fingerprint stack.
)  This command uses no arguments from the data stack. It merely swaps the top two entries on the fingerprint stack
Note:
  • In all modes, on failure ( and ) will act like r.
  • When FNGR is loaded the fingerprint stack does NOT act like the spec, Instead there is a single fingerprint stack and unloading a fingerprint will remove the semantics for that fingerprint and not the semantics assigned to the various commands of the unloaded fingerprint. When FNGR is unloaded then the ( and ) commands will work like the official specs.


"FOBJ" 0x464f424a
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


"FORK" 0x4464F524B
T( -- pid flg)Fork new process

Clarification


"FPDP" 0x46504450
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


"FPRT" 0x46505254
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


"FPSP" 0x46505350
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


"FIXP" 0x4649585
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


"FRTH" 0x46525448
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

Clarification


"ICAL" 0x4943414c
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


"IIPC" 0x49495043
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


"IMAP" 0x494D4150
C( -- )Clear all instruction remaps
M(new old -- )Remap an instruction
O(n -- )Return instruction n to its old function
Clarification


"IMTH" 0x494d5448
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


"INDV" 0x494E4456
G(Vp - n)Pointer get number
P(n Vp -- )Pointer put number
V(Va -- V)Pointer get vector
W(V Va --)Pointer put vector

Clarification


"IPMD" 0x49504d44
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


"LONG" 0x4c4f4e47
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 -- )Print
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


"MACR" 0x4d414352
A-Y( -- )Execute specified macro
Z(V -- )Specify where macro block is located


"MSGQ" 0x4d534751
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

Clarification


"MVRS" 0x4d565253
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

B Flags:
0- Default
dim:
0- Default
1- Unefunge
2- Befunge
3- Trefunge
n- Other funges
lng:
0- Default
1- Funge/93
2- Funge/98
3- Funge/108
Defaults:
Defaults are the creating universe's flags, dimensions, and language


"RAND" 0x52414e44
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


"REXP" 0x52455850
C(0gnirts flags -- )Compile a regular expression
E(0gnirts flags -- results)Execute regular expression on string
F( -- )Free compiled regex buffer

Clarification


"SETS" 0x53455453
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


"SGNE" 0x53474E45
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


"SMEM" 0x534d454d
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

Clarification


"SMPH" 0x534d5048
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

Clarification


"SOCK" 0x534F434B
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
Clarification


"SORT" 0x534f5254
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


"STCK" 0x5354434b
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


"STRN" 0x5354524E
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

Clarification


"SUBR" 0x53554252
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

Clarification


"TIME" 0x54494D45
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


"TERM" 0x5445524D
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


"TRDS" 0x54524453
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:
  1. It is not possible to travel further back than time point 0. Attempts to travel beyond the beginning will leave the ip at time point 0.
  2. The original ip will still be born as per normal. example. If ip #2 is born at time 100 and then performs a jump at time 200 to time 50, ip #2 will be born again at time 100, and there will now be 2 of them (the newly born ip #2 in addition to the one that jumped) When the newly born ip #2 reaches the time it jumped (time point 200) it will cease to exist, it will not perform another jump into the past, the original ip #2 however can still jump. If the new ip #2 performs a time jump earlier than when the original jumped, the original will cease to exist.
  3. An ip travelling in the past can kill its parent prior to its own birth, and will still exist.
  4. A time travelling ip will retain its memory, in other words, its stack will be the same after the jump as before. Also, unless the jump also included a space jump, the location will be the same physical space coodinates as when it jumped.
  5. An ip that perfroms a time jump without a space jump will execute the next instruction as if it had never jumped.
  6. An ip that performs a space jump (with or without a time jump) will first execute the instruction it jumped to.
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:
  1. Before attempting any jumps, the ip's tardis should be reset to clear out any unwanted coordinates.
  2. There are three coordinate settings: Space coordinates, vector after jump, and destination time. Any coordinate that is not set will remain at the last setting, or at default if the tardis is reset.
  3. Default coordinates are the current time, space, and vector.
  4. Absolute coordinates are based from time point 0, and space 0,0,0.
  5. Relative coordinates are based from the point the jump is actually made.
  6. All tardis coordinates are retained following a jump.
  7. The I command will set the tardis for the last source jump point.
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


"TRGR" 0x54524752
A-Y( -- )Activate a trigger
Z(V -- )Specify where trigger table is located

Clarification


"UNIX" 0x554e4958
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


"WIND" 0x57494E44
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
efunction
1- Mouse Down
2- Mouse Up
3- Mouse Motion
4- Key Pressed
5- Expose
6- Configuration
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