MUF Cheat-Sheet
I'm still in the process of hypertexting this document. Until I'm done,
here's the flat ASCII version. -- Telzey
The MUF Cheat-Sheet, as seen by Sammael (Arthur, The., etc)
-or-
Reference manual for MUCK Forth ("MUF") -terse
v2.2fb4.0 July 29, 1990
ENTERING EDITING MODE
@program <program name> (creates a new program if none match)
@edit <program name or number>
EDITING COMMANDS
<number> i insert before <number>
. exit insert mode
c compile
<number1> <number2> l list
<number1> <number2> d delete
<letter> <letter> a show macros (abridged)
<letter> <letter> s show macros (long)
<program#> v view program header
<program#> p list prog's public functs.
h help on edit mode
u uncompile
q quit editor mode
COMPILER DIRECTIVES
$echo <string> Echos <string> during compile
$define <defname> <defin.> $enddef Defines <defname> to <defin.>
$def <defname> <defin.> Same, but stops at end of line
$undef <defname> Undefines <defname>
$include <obj> Load $defines from <obj>
$ifdef <defname>[<comparison>] Starts $ifdef clause.
$ifndef <defname>[<comparison>] Starts $ifndef clause.
$else Compile if $if[n]def failed.
$endif Marks end of $if[n]def clause
note: __version is a standard $define, containing the server version.
STRUCTURES
A function has the format of
: <funcname> <instruction> [<instruction> ... ] ;
If-then statements use the structure
<comparisons> if <cmds_if_true> [else <cmds_if_false>] then
Loops can use two different structures.
begin
<instructions>
<comparisons>
until (repeats loop until comparison is true)
begin
<instructions>
repeat (repeat loop)
Both types of loops can contain as many of the following as needed.
<comparison> while (if comparison is false, exit the loop)
break (exit the loop. Often used inside if-thens)
continue (go to the start of the loop. used in if-thens)
PRIMITIVE TERMINOLOGY
v type variable
d type dbref
i type int (boolean)
s type string
a type address (word)
SYNTAX
( ... ) commments
: begin user-def word
; end user-def word
var <VARNAME> variable declaration
lvar <VARNAME> local variable declaration.
public <FUNCNAME> declares a function public.
checkargs ( s -- ) checks stack against 's' arg. desc.
if ( i -- )
else ( -- )
then ( -- )
begin ( -- ) defines the beginning of loops.
while ( i -- ) break out of loop if value is false
break ( -- ) break out of loop.
continue ( -- ) jump to beginning of loop.
until ( i -- ) ends begin-until. repeats if false.
repeat ( -- ) ends begin-repeat. jumps to begin.
jmp ( a -- ) jumps execution to given address.
exit ( -- ) exit the current subroutine.
abort ( s -- ) stop MUF prog w/ given error mesg.
execute ( a -- ??? ) call a given subroutine by address.
call ( d -- ??? ) call remote program
or ( d s -- ??? ) call public function in remote prog
preempt ( -- ) stops multitasking.
background ( -- ) starts multitasking, no blocking.
foreground ( -- ) starts multitasking, blocking user
input for that user.
sleep ( i -- ) pause the program for i seconds
fork ( -- i ) forks off BG muf process. Returns
pid to parent and 0 to child.
queue ( i d s -- i ) queue event to run prog d after i
seconds with s on the stack.
Returns pid of queued process.
kill ( i -- ) kills process of given pid.
ispid? ( i -- i ) processID -- process_exists?
pop ( x -- )
dup ( x -- x x )
swap ( x y -- y x )
over ( x y -- x y x )
rot ( x y z -- y z x )
rotate ( ni ... n1 i -- n(i-1) ... n1 ni )
pick ( ni ... n1 i -- n1 ni )
put ( ni ... n1 x i -- x ... n1 )
! ( x v -- ) store value x in var v.
value may be any type data
@ ( v -- x ) fetch value x from var v
atoi ( s -- i ) string --> integer
intostr ( i -- s ) integer || dbref --> string
dbref ( i -- d ) integer --> dbref
int ( x -- i ) VAR || object --> integer
variable ( i -- v ) integer --> VAR ref
+ - * / % ( i1 i2 -- i )
< > = <= >= ( i1 i2 -- i )
strcmp,
stringcmp ( s1 s2 -- i ) strcmp == case sens.
stringpfx ( s1 s2 -- i ) return 0 if s2 is prefix of s1
strncmp ( s1 s2 n -- i ) compares only n letters
number? ( s -- i )
dbcmp ( d1 d2 -- i )
and or ( i1 i2 -- i )
not ( i -- i' )
strlen ( s -- i )
strcat ( s1 s2 -- s )
instr ( s1 s2 -- i ) finds s2 in s1. 0 if !found
strcut ( s i -- s1 s2 ) cuts string at pos. i
explode ( s1 s2 -- ... i ) s2 is the partition, len >0
subst ( s1 s2 s3 -- s ) string, replacement, tobesub
pronoun_sub ( d s -- s' ) does % subs a la osucc/ofail
read ( -- s )
notify ( d s -- ) player, message
notify_except ( d1 d2 s -- ) place, player, message
notify_exclude (s dn..d1 i dr-- ) Send s to all players in room
dr except for the i players
listed in d1 through dn.
pennies ( d -- i )
addpennies ( d i -- ) player, pennies
random ( -- i )
getpropval ( d s -- i ) zero if none
getpropstr ( d s -- s ) "" if none
addprop ( d s1 s2 i -- ) ignores i unless s2 is ""
remove_prop ( d s -- )
desc, name, succ,
fail, drop, osucc,
ofail, odrop: ( d -- s ) retrieve message
setname, setdesc,
setsucc, setfail,
setdrop, setosucc,
setofail: ( d s -- ) set message
player?, thing?,
room?, program?,
exit?, ok?: ( d -- i ) boolean
location ( d -- d' )
owner ( d -- d' )
moveto ( d1 d2 -- ) moves d1 to d2
set ( d s -- ) object, string (flag)
flag? ( d s -- i ) object, string -- boolean
mlevel ( d -- i ) object -- mucker level.
match ( s -- d ) thing, dbref (#-1 = NOTHING,
#-2 = AMBIGUOUS, #-3 = HOME)
rmatch ( d s -- d ) object, thing, dbref
part_pmatch ( s -- d ) partial name -- dbref
copyobj ( d -- d' ) returns dbref of new object
contents ( d -- ... i ) returns stack of dbrefs and i
time ( -- i i i) seconds, minutes, hours
date ( -- i i i) monthday, month, year
systime ( -- i ) system time in secs since
00:00 1/1/70 GMT
timesplit ( i -- 8 ints) sec, m, hr, dy, mnth, yr, wkdy, yrdy
timefmt ( s i -- s ) format, systime -- timestring
gmtoffset ( -- s ) seconds offset from GMT time.
setlink ( d d -- ) object, dest
setown ( d d -- ) object, newowner
newobject ( d s -- d ) location, name -- new objref
newroom ( d s -- d ) parent, name -- new objref
newexit ( d s -- d ) attached-to, name -- new objref
recycle ( d -- ) item to recycle
stats ( d -- 7 ints) owner -- totalowned, #rooms, #exits,
#things, #programs, #players,
#garbage.
int? ( ? -- i ) is top stack item an integer?
string? ( ? -- i ) is top stack item a string?
dbref? ( ? -- i ) is top stack item a dbref?
nextprop ( d s -- s ) object, propname -- next propname
propdir? ( d s -- i ) object, propname--is it a propdir?
awake? ( d -- i ) player -- number of connections
online ( -- dN ... d1 N ) all connected players w/ count
concount ( -- i ) # of connections to the server
condbref ( i -- d ) connection number -- player
conidle ( i -- i ) conn. # -- idle time in secs
contime ( i -- i ) conn. # -- online time in secs
conhost ( i -- s ) conn. # -- hostname
conboot ( i -- ) connection number
connotify ( i s -- ) connection number, string
condescr ( i -- i ) connection# -- descriptor#
descrcon ( i -- i ) descriptor# -- connection#
nextdescr ( i -- i ) descriptor# -- next descriptor#
descriptors ( d -- ix..i1 i ) plyr -- descriptors... count
bitor ( i i -- i ) int, int -- bitwise or result
bitxor ( i i -- i ) int, int -- bitwise exclusive-or
bitand ( i i -- i ) int, int -- bitwise and result
bitshift ( i i -- i ) int, #bits -- bitwise shift
version ( -- s ) Version String
depth ( -- i ) stack depth
dbtop ( -- d ) top of database + 1 item.
prog ( -- d ) this program's dbref
trig ( -- d ) a secure form of trigger @
caller ( -- d ) the program that called this one.
force ( d s -- ) player, force string
localvar ( i -- l ) local var num -- localvar
locked? ( d d -- i ) player, object -- is object locked?
getlockstr ( d -- s ) object -- lockstring
setlockstr ( d s -- i ) object, lockstr -- successful?
toupper ( s -- s ) uppercases all letters in the string
tolower ( s -- s ) lowercases all letters in the string
instring ( s s -- i ) case insensitive version of instr
rinstring ( s s -- i ) case insensitive version of rinstr
striplead ( s -- s ) Strip leading spaces from string.
striptail ( s -- s ) Strip tail spaces from string.
strip ( s -- s ) Basically 'striplead striptail'
unparseobj ( d -- s ) object -- name-and-flags-string.
smatch ( s s -- i ) string, smatch string -- matched?
envpropstr ( d s -- d s ) startobj, propname -- obj strval
LIBRARIES
How to use a library:
1) Use "@register lib" to list what libraries exist.
2) Use "@view $lib/<libraryname>" to list the docs on that library.
3) When you've found the library and the function you want, then all
you have to do in your program is, at the beginning of it,
$include $lib/<libraryname>
then just use the function name to invoke it later in your program
and it will run as if it were a function in your program.
How to make a library:
1) create a program with several useful generic subroutines.
2) DOCUMENT those subroutines in a commented out header in the prog.
3) @set <program>=_docs:<command to list those DOCS you made>
4) make sure that all the functions are declared PUBLIC.
5) Make sure the program is set LINK_OK.
6) Globally register the program with the @register command with a
prefix of "lib/". ie: @reg lib-strings=lib/strings
7) Set up the interface for each function on the program. To do this,
you will need to set properties on the program in the form
_defs/<callname>:"$<libname>" match "<funcname>" call
where <callname> is the name that you want to have people use to
invoke it in their programs, <libname> is the registered name you
gave it (ie: lib/strings), and <funcname> is the actual name of
the function in the program. Example:
@set lib-strings=_defs/.split:"$lib/strings" match "split" call
8) You're done!
Return to the TinyMUCK Page
Page created by Telzey, and maintained by Tugrik d'Itichi.
Comments/Questions/Flames
to: FMPages@furry.com