Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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!
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement