$building_utils [building(#21)] -- verbs useful for building
$byte_utils [Byte Quota Utilities(#80)] -- quota manipulation
$code_utils [code(#59)] -- parsing and manipulating verb code
$command_utils [Generic Utilities Package(#56)] -- reporting matching errors to the player
$gender_utils [Gender_Utilities(#41)] -- managing gendered objects
$ghblu_utils [ghblu(#14)] -- generic biglist manipulation
$list_utils [list_utilities(#55)] -- list manipulation
$lock_utils [lock utilities(#53)] -- key expression manipulation
$match_utils [matching utilities(#51)] -- matching manipulation
$math_utils [Math Utilities(#27)] -- matemathic manipulation
$object_utils [object utilities(#52)] -- object information (inheritance/location hierarchy, verb/property lists)
$perm_utils [Generic Utilities Package(#42)] -- permissions
$sequence_utils [sequence utilities(#34)] -- sequence manipulation
$set_utils [Set Utilities(#28)] -- set manipulation
$string_utils [string(#20)] -- string manipulation
$time_utils [time utilities(#43)] -- time (numeric and verbal) manipulation
$trig_utils -- trigonometric and other numerical utilities

NNTP (#75)
Object Quota Utilities(#83)
Temp_Inutils (#815)
webMOO code utilities(#6653)
$wiz_utils (#25)

	Portuguese_utils(#3516)	|
	Cpdee Utilities(#530)	|
	CPDEE_Time_utils(#8040)	|
	Msg_Inutils(#1161)	==>		no permission to read
	ANSI Utilities(#3539)	|
	VRML Utilities(#4597)	|

B

===== help $building_utils ===========================
building (#21):
----

building (#21) [ readable ]
	Owned by ScarFace (#2).
		Child of Generic Utilities Package (#79).
  
  
#21:audit_object_category       #21:do_audit_item           #21:"do_audit do_prospectus"
#21:make_exit                   #21:object_audit_string     #21:parse_names
#21:recreate                    #21:set_names               #21:size_string
#21:transfer_ownership(useless)

Verbs useful for building. For a complete description of a given verb, do `help $building_utils:verbname'.

make_exit(spec,source,dest[,don't-really-create]) => a new exit spec is an exit-spec as described in `help @dig'

set_names(object, spec) - sets name and aliases for an object

parse_names(spec) => list of {name, aliases} in both of these, spec is of the form <name>[[,:]<alias>,<alias>,...] (as described in `help @rename')

recreate(object, newparent) - effectively recycle and recreate object as a child of newparent


help #21:do_audit Information about building(#21):do_audit/do_prospectus
----
:do_audit(who, start, end, match) audit who, with objects from start to end that match 'match'
:do_prospectus(...) same, but with verb counts
help #21:make_exit Information about building(#21):make_exit
----
make_exit(spec, source, dest[, use-$recycler-pool [, kind]]) Uses $recycler by default; supplying fourth arg as 0 suppresses this. Optional 5th arg gives a parent for the object to be created (i.e., distinct from $exit) Returns the object number as a list if successful, 0 if not.
help #21:object_audit_string Information about building(#21):object_audit_string
----
:object_audit_string(object [,prospectus-style])
help #21:parse_names Information about building(#21):parse_names
----
$building_utils:parse_names(spec)
Return {name, {alias, alias, ...}} from name,alias,alias or name:alias,alias
help #21:recreate Information about building(#21):recreate
----
:recreate(object,newparent) -- effectively recycle and recreate the specified object as a child of parent. Returns true if successful.
help #21:set_names Information about building(#21):set_names
----
$building_utils:set_names(object, spec)
help #21:transfer_ownership(useless) Information about building(#21):transfer_ownership(useless)
----
transfer_ownership(object, oldowner, newowner)
Transfer ownership of object from oldowner to newowner.

===== help $byte_utils ==============================
Byte Quota Utilities (#80):
----

Byte Quota Utilities (#80) [ readable ]
	Owned by Hacker (#37).
		Child of Generic Utilities Package (#79).
#80:adjust_quota_for_programmer #80:all_characters #80:bi_create
#80:can_peek#80:can_touch #80:charge_quota
#80:"creation_permitted verb_addition_permitted property_addition_permitted" #80:disable_create#80:display_quota
#80:display_quota_summary#80:do_breakdown #80:do_summary
#80:enable_create#80:get_quota #80:get_size_quota
#80:init_for_core#80:initialize_quota #80:measurement_task
#80:measurement_task(old)#80:"object_bytes object_size" #80:object_overhead_bytes
#80:parse_create_args #80:preliminary_reimburse_quota #80:property_overhead_bytes
#80:quota_remaining#80:recent_object_bytes #80:reimburse_quota
#80:set_quota#80:summarize_one_user #80:value_bytes
#80:verb_overhead_bytes

Verbs a user might want to call from a program:

 :bi_create                     -- built-in create() call, takes same args.

 :get_quota(who)                -- just get the raw size_quota property
 :display_quota(who)            -- prints to player the quota of who.
              If caller_perms() controls who, include any secondary characters.
Called by @quota.
 :get_size_quota(who [allchars]) -- return the quota of who, if allchars flag set,
              add info from all secondary chars, if caller_perms() permits.
 :value_bytes(value)                -- computes the size of the value.
 :object_bytes(object)              -- computes the size of the object and caches it.
 :recent_object_bytes(object, days) -- computes and caches the size of object only if
              cached value more than days old.  Returns cached value.
 :do_summary(user)                  -- prints out the results of summarize-one-user.
 :summarize_one_user(user)          -- summarizes and caches space usage for user.
              See verb help for details.
Verbs the system calls:
 :"creation_permitted verb_addition_permitted property_addition_permitted"(who)
                                   -- returns true if who is permitted to build.
 :initialize_quota(who)            -- sets quota for newly created players
 :adjust_quota_for_programmer(who) -- empty; might add more quota to newly @progged player.
 :enable_create(who)               -- sets .ownership_quota to 1
 :disable_create(who)              -- sets .ownership_quota back to -1000 to prohibit create()
 :charge_quota(who, object)        -- subtract the size of object from who's quota.
Manipulates the #-unmeasured if what is not currently measured.

Called by $wiz_utils:set_owner.

 :reimburse_quota(who, object) -- add the size of object to who's quota. 
  Ditto.
 :preliminary_reimburse_quota(who, object) -- Because the set_owner is done
  *after* an object has been turned into $garbage, ordinary reimbursement fails.
  So we use this verb  in the $recycler.
 :set_quota(who, howmuch)
 :quota_remaining(who) 
 :display_quota_summary -- internal, called by display quota
keys See help @measure and help @quota for the command line verbs.

Porter's notes: If you are planning on porting this system to another MOO, here are the things to grab in addition to @dumping all of $quota_utils:

The following verbs have been changed on $prog:
@prop*erty @verb @copy (@add-alias @copy-move as well)

The following verbs have been changed on $wiz:
@programmer @quotaThe following verbs have been changed on $wiz_utils:
set_programmer set_owner make_player

The following verbs have been changed on $builder:
@quota _create

This verb probably should have gone on $builder. @measure

The followig verbs have been changed on $recycler _recycle _create setup_toad

The following verb has been changed on $login:
create

And don't forget $alt_quota_utils, which has the object based implementation.


help #80:can_peek Information about Byte Quota Utilities(#80):can_peek
----
Alterado por Moro(#1500) em 25/3/97, extraido do LambdaCore 1.8.0
@measure breakdown -> #80:do_breakdown -> #80:can_peek => E_PERM Erro: $hacker nao controla player. Solucao: $hacker e' dono de #80.
return $perm_utils:controls(args[1], args[2]);
help #80:charge_quota Information about Byte Quota Utilities(#80):charge_quota
----
Charge args[1] for the quota required to own args[2]
help #80:creation_permitted Information about Byte Quota Utilities(#80):creation_permitted/verb_addition_permitted /property_addition_permitted
----
Here's the tricky one. Collect all the user's characters' cached usage data and total quotas. Compare same. If usage bigger than quotas, return 0.
Else, add up the total number of objects that haven't been measured recently. If greater than the allowed, return 0. Else, reluctantly, return 1.
help #80:get_size_quota Information about Byte Quota Utilities(#80):get_size_quota
----
Return args[1]'s quotas. second arg of 1 means add all second chars.
help #80:object_bytes Information about Byte Quota Utilities(#80):object_bytes/object_size
----
Algorithm: Base object takes up 13 words plus length of name. (builtin props?)
Each verb takes up 5 words overhead, plus length of its name, plus size of its code.

Each property definition takes up 1 word plus length of property name, plus each property on the object takes up 4 words. (Or, 5 per defined prop, 4 per inherited prop)
Note: each word is four bytes.


help #80:parse_create_args Information about Byte Quota Utilities(#80):parse_create_args
----
This figures out who is gonna own the stuff @create does. If one arg, return caller_perms(). If two args, then if caller_perms().wizard, args[2].
help #80:preliminary_reimburse_quota Information about Byte Quota Utilities(#80):preliminary_reimburse_quota
----
This does the reimbursement work of the recycler, since we ignore $garbage in ordinary reimbursement.
help #80:quota_remaining Information about Byte Quota Utilities(#80):quota_remaining
----
This wants to only be called by a wizard cuz I'm lazy. This is just for @second-char anyway.
help #80:recent_object_bytes Information about Byte Quota Utilities(#80):recent_object_bytes
----
:recent_object_bytes(x, n) -- return object size of x, guaranteed to be no more than n days old. N defaults to this.cycle_days.
help #80:reimburse_quota Information about Byte Quota Utilities(#80):reimburse_quota
----
reimburse args[1] for the quota required to own args[2]
If it is a $garbage, then if who = $hacker, then we mostly ignore everything. Who cares what $hacker's quota looks like.
help #80:set_quota Information about Byte Quota Utilities(#80):set_quota
----
Set args[1]'s quota to args[2]
help #80:summarize_one_user Information about Byte Quota Utilities(#80):summarize_one_user
----
Summarizes total space usage by one user (args[1]). Optional second argument is a flag to say whether to re-measure all objects for this user; specify the number of seconds out of date you are willing to accept. If negative, will only re-measure objects which have no recorded data. Returns a list of four values:
total : total measured space in bytes
uncounted : Number of objects that were not counted because they aren't descendents of #1
zeros : Number of objects which have been created too recently to have any measurement data at all (presumably none if re-measuring) most-out-of-date : the time() the oldest actual measurement was taken object-thereof: the object who had this time()'d measurement

C

===== help $code_utils ==============================
code (#59):
----

code (#59) [ readable ]
	Owned by Hacker (#37).
		Child of Generic Utilities Package (#79).
#59:1 #59:argstr #59:corify_object
#59:_egrep_verb_code #59:_egrep_verb_code_all #59:error_name
#59:eval_d #59:explain_verb_syntax #59:find_callable_verb_named
#59:find_last_verb_named #59:find_verbs_containing #59:_find_verbs_containing
#59:find_verbs_matching #59:_find_verbs_matching #59:find_verb_named
#59:_fix_preps #59:format_traceback #59:_format_traceback_frame
#59:full_prep #59:get_prep #59:_grep_verb_code
#59:_grep_verb_code_all #59:help_db_list #59:help_db_search
#59:inside_quotes #59:old_callers #59:parse_argspec
#59:_parse_audit_args #59:parse_propref #59:parse_verbref
#59:prepositions #59:set_verb_documentation #59:show_object
#59:short_prep #59:show_property #59:show_verbdef
#59:show_who_listing #59:substitute #59:task_owner
#59:task_valid #59:toerr #59:tonum
#59:toobj #59:verb_all_frames #59:verb_frame
#59:verb_documentation #59:verb_loc*ation #59:verbname_match
#59:verbname_match(new) #59:verb_or_property
#59:"verb_p*erms verb_permi*ssions"
#59:verb_usage
parse_propref("foo.bar")  => {"foo","bar"} (or 0 if arg. isn't a property ref.)
parse_verbref("foo:bar")  => {"foo","bar"} (or 0 if arg. isn't a verb ref.)
parse_argspec("any","in","front","of","this","baz"...)
                          => {{"any", "in front of", "this"},{"baz"...}} 
                                           (or string if args don't parse)

tonum(string)             => number (or E_TYPE if string is not a number)
toobj(string)             => object (or E_TYPE if string is not an object)
toerr(number or string)   => error value (or 1 if out of range or unrecognized)
error_name(error value)   => name of error (e.g., error_name(E_PERM) => "E_PERM")

verb_perms()              => the current task_perms (as set by set_task_perms()).
verb_location()           => the object where the current verb is defined.
verb_frame()              => callers()-style frame for the current verb.
verb_all_frames()         => entire callers() stack including current verb.
verb_documentation([object,verbname])
                          => documentation at beginning of verb code, if any
                          -- default is the calling verb

   Preposition routines

prepositions()                          => full list of
prepostionsfull_prep ("in")             => "in/inside/into"
short_prep("into")                      => "in"
short_prep("in/inside/into")            => "in"
get_prep  ("off", "of", "the", "table") => {"off of", "the", "table"}

   Verb routines

verbname_match (fullname,name)             => can `name' be used to call `fullname'
find_verb_named          (object,name[,n]) => verb number or -1 if not found
find_callable_verb_named (object,name[,n]) => verb number or -1 if not found 
find_verbs_containing (pattern[,object|objlist])

   Verbs that do the actual dirty work for @show:

show_object  (object)
show_property(object,propname)
show_verbdef (object,verbname)

   Dirty work for explain_syntax

explain_verb_syntax(thisname,verbname,@verbargs)

   A random but useful verb
   
verb_or_property(object,name[,@args]) => result of verb or property call,
                                         or E_PROPNF

help #59:1 Information about code(#59):1
----
Do not remove this verb! This is an auxiliary verb for :eval_d().
help #59:argstr Information about code(#59):argstr
----
:argstr(verb,args[,argstr]) => what argstr should have been.
Recall that the command line is parsed into a sequence of words; `verb' is assigned the first word, `args' is assigned the remaining words, and argstr is assigned a substring of the command line, which *should* be the one starting first nonblank character after the verb, but is instead (because the parser is BROKEN!) the one starting with the first nonblank character after the first space in the line, which is not necessarily after the verb.
Clearly, if the verb contains spaces --- which can happen if you use backslashes and quotes --- this loses, and argstr will then erroneously have extra junk at the beginning. This verb, given verb, args, and the actual argstr, returns what argstr should have been.
help #59:corify_object Information about code(#59):corify_object
----
:corify_object(object) => string representing object usually just returns tostr(object), but in the case of objects that have corresponding #0 properties, return the appropriate $-string.
help #59:_egrep_verb_code_all Information about code(#59):_egrep_verb_code_all
----
:_egrep_verb_code(regexp,object,verbname) => list of lines number returns list of all lines matching regexp in object:verbname code
help #59:_egrep_verb_code Information about code(#59):_egrep_verb_code
----
:_egrep_verb_code(regexp,object,verbname) => 0 or line number returns line number of first line matching regexp in object:verbname code
help #59:error_name Information about code(#59):error_name
----
error_name(E_FOO) => "E_FOO"
help #59:eval_d Information about code(#59):eval_d
----
:eval_d(code...) => {compiled?,result} This works exactly like the builtin eval() except that the code is evaluated as if the d flag were unset.
help #59:find_callable_verb_named Information about code(#59):find_callable_verb_named
----
:find_callable_verb_named(object,name[,n])
returns the *number* of the first verb on object that matches the given name and has the x flag set. optional argument n, if given, starts the search with verb n, causing the first n verbs (0..n-1) to be ignored. -1 is returned if no verb is found.
This routine does not find inherited verbs.
help #59:find_last_verb_named Information about code(#59):find_last_verb_named
----
:find_last_verb_named(object,name[,n])
returns the *number* of the last verb on object matching the given name. optional argument n, if given, starts the search with verb n-1, causing verbs (n..length(verbs(object))) to be ignored. 0 is returned if no verb is found.
This routine does not find inherited verbs.
help #59:find_verb_named Information about code(#59):find_verb_named
----
:find_verb_named(object,name[,n])
returns the *number* of the first verb on object matching the given name. optional argument n, if given, starts the search with verb n, causing the first n verbs (1..n-1) to be ignored. 0 is returned if no verb is found.
This routine does not find inherited verbs.
help #59:find_verbs_containing Information about code(#59):find_verbs_containing
----
$code_utils:find_verbs_containing(pattern[,object|object-list])

Print (to player) the name and owner of every verb in the database whose code contains PATTERN as a substring. Optional second argument limits the search to the specified object or objects.

Because it searches the entire database, this function may suspend the task several times before returning.


help #59:_find_verbs_containing Information about code(#59):_find_verbs_containing
----
:_find_verbs_containing(pattern,object)
number of verbs in object with code having a line containing pattern prints verbname and offending line to player
help #59:find_verbs_matching Information about code(#59):find_verbs_matching
----
$code_utils:find_verbs_matching(pattern[,object|object-list])

Print (to player) the name and owner of every verb in the database whose code has a substring matches the regular expression PATTERN. Optional second argument limits the search to the specified object or objects.

Because it searches the entire database, this function may suspend the task several times before returning.


help #59:_find_verbs_matching Information about code(#59):_find_verbs_matching
----
:_find_verbs_matching(regexp,object)
number of verbs in object with code having a line matching regexp prints verbname and offending line to player
help #59:_fix_preps Information about code(#59):_fix_preps
----
:_fix_preps() updates the properties on this having to do with prepositions.
_fix_preps should be called whenever we detect that a new server version has been installed.
help #59:format_traceback Information about code(#59):format_traceback
----
Usage: :format_traceback(exception)

format a traceback like the server does, given output from the exception handling traceback value or callers(line numbers)


help #59:_format_traceback_frame Information about code(#59):_format_traceback_frame
----
Usage: :_format_traceback_frame(frame)
help #59:get_prep Information about code(#59):get_prep
----
:get_prep(@args) extracts the prepositional phrase from the front of args, returning a list consisting of the preposition (or "", if none) followed by the unused args.
:get_prep("in","front","of",...) => {"in front of",...}
:get_prep("inside",...) => {"inside",...}
:get_prep("frabulous",...} => {"", "frabulous",...}
help #59:_grep_verb_code_all Information about code(#59):_grep_verb_code_all
----
:_grep_verb_code_all(pattern,object,verbname) => list of lines returns list of lines on which pattern occurs in code for object:verbname
help #59:_grep_verb_code Information about code(#59):_grep_verb_code
----
:_grep_verb_code(pattern,object,verbname) => line number or 0 returns line number on which pattern occurs in code for object:verbname
help #59:help_db_list Information about code(#59):help_db_list
----
:help_db_list([player]) => list of help dbs in the order that they are consulted by player
help #59:help_db_search Information about code(#59):help_db_search
----
:help_db_search(string,dblist) searches each of the help db's in dblist for a topic matching string.
Returns {db,topic} or {$ambiguous_match,{topic...}} or {}
help #59:inside_quotes Information about code(#59):inside_quotes
----
See if the end of the string passed as args[1] ends 'inside' a doublequote. Used by $code_utils:substitute.
help #59:parse_argspec Information about code(#59):parse_argspec
----
:parse_arg_spec(@args)
attempts to parse the given sequence of args into a verb_arg specification returns {verb_args,remaining_args} if successful.
e.g., :parse_arg_spec("this","in","front","of","any","foo"..)
=> {{"this","in front of","any"},{"foo"..}}
returns a string error message if parsing fails.
help #59:_parse_audit_args Information about code(#59):_parse_audit_args
----
Parse [from <start>] [to <end>] [for <name>].
Takes a series of strings, most likely @args with dobjstr removed.
Returns a list {NUM start, NUM end, STR name}, or {} if there is an error.
help #59:parse_propref Information about code(#59):parse_propref
----
$code_utils:parse_propref(string) Parses string as a MOO-code property reference, returning {object-string, prop-name-string} for a successful parse and false otherwise. It always returns the right object-string to pass to, for example, this-room:match_object.
help #59:parse_verbref Information about code(#59):parse_verbref
----
$code_utils:parse_verbref(string) Parses string as a MOO-code verb reference, returning {object-string, verb-name-string} for a successful parse and false otherwise. It always returns the right object-string to pass to, for example, this-room:match_object().
help #59:set_verb_documentation Information about code(#59):set_verb_documentation
----
:set_verb_documentation(object,verbname,text) changes documentation at beginning of verb code text is either a string or a list of strings returns a non-1 value if anything bad happens...
help #59:short_prep Information about code(#59):short_prep
----
:short_prep(p) => shortest preposition equivalent to p p may be a single word or one of the strings returned by verb_args().
help #59:substitute Information about code(#59):substitute
----
$code_utils:substitute(string,subs) => new line
Subs are a list of lists, {{"target","sub"},{...}...}
Substitutes targets for subs in a delimited string fashion, avoiding substituting anything inside quotes, e.g. player:tell("don't sub here!")
help #59:show_who_listing Information about code(#59):show_who_listing
----
:show_who_listing(players[,more_players])
prints a listing of the indicated players.
For players in the first list, idle/connected times are shown if the player is logged in, otherwise the last_disconnect_time is shown. For players in the second list, last_disconnect_time is shown, no matter whether the player is logged in.
help #59:task_valid Information about code(#59):task_valid
----
task_valid(NUM id)
Return true iff there is currently a valid task with the given id.
help #59:toerr Information about code(#59):toerr
----
toerr(n), toerr("E_FOO"), toerr("FOO") => E_FOO.
help #59:tonum Information about code(#59):tonum
----
:tonum(number as string) => number
help #59:toobj Information about code(#59):toobj
----
:toobj(objectid as string) => objectid
help #59:verb_all_frames Information about code(#59):verb_all_frames
----
returns {this:verb_frame(), @callers()}.
help #59:verb_documentation Information about code(#59):verb_documentation
----
:verb_documentation([object,verbname]) => documentation at beginning of verb code, if any default is the calling verb
help #59:verb_frame Information about code(#59):verb_frame
----
returns the callers() frame for the current verb.
help #59:verb_location Information about code(#59):verb_loc*ation
----
returns the object where the current verb is defined.
help #59:verbname_match Information about code(#59):verbname_match
----
:verbname_match(fullverbname,name) => TRUE iff `name' is a valid name for a verb with the given `fullname'
help #59:verbname_match(new) Information about code(#59):verbname_match(new)
----
:verbname_match(fullverbname,name) => TRUE iff `name' is a valid name for a verb with the given `fullname'
help #59:verb_or_property Information about code(#59):verb_or_property
----
verb_or_property(<obj>, <name> [, @<args>])
Looks for a callable verb or property named <name> on <obj>. If <obj> has a callable verb named <name> then return <obj>:(<name>)(@<args>).
If <obj> has a property named <name> then return <obj>.(<name>). Otherwise return E_PROPNF.
N.B.: a verb returning E_VERBNF will act like an undefined verb.
help #59:verb_perms Information about code(#59):verb_p*erms/verb_permi*ssions
----
returns the permissions of the current verb (either the owner or the result of the most recent set_task_perms()).
help #59:verb_usage Information about code(#59):verb_usage
----
:verb_usage([object,verbname]) => usage string at beginning of verb code, if any default is the calling verb