Added public files
Roughly added all public files. Probably missed some, though.
diff --git a/doc/efun/parse_command b/doc/efun/parse_command
new file mode 100644
index 0000000..83b7731
--- /dev/null
+++ b/doc/efun/parse_command
@@ -0,0 +1,132 @@
+OPTIONAL
+SYNOPSIS
+ int parse_command (string cmd, object env, string fmt, mixed &var, ...)
+ int parse_command (string cmd, object* arr, string fmt, mixed &var, ...)
+
+DESCRIPTION
+ parse_command() is basically a spiffed up sscanf operating
+ on word basis and targeted at recognizing object descriptions from
+ command strings.
+
+ The efun takes the command string <cmd> and the object(s) <env>/<arr>
+ and tries to match it against the format string <fmt>. Successfully
+ matched elements are assigned to the variables <var>.... The result
+ from the efun is 1 if the command could be fully matched, and 0
+ otherwise.
+
+ If the objects are given as a single object <env>, the efun matches
+ against the given object and all objects contained therein. Otherwise,
+ if the objects are given as an array <arr> of objects, the efun
+ matches only against the given objects.
+
+ The format string <fmt> consists of words, syntactic markers, and
+ %-directives for the values to parse and return in the variables.
+ A typical example is " 'get' / 'take' %i " or
+ " 'spray' / 'paint' [paint] %i ". The elements in detail are:
+
+ 'word': obligatory text
+ [word]: optional text
+ / : Alternative marker
+ %o : Single item, object
+ %s : Any text
+ %w : Any word
+ %p : One of a list of prepositions.
+ If the variable associated with %p is used to pass
+ a list of words to the efun, the matching will take
+ only against this list.
+ %l : non-compat: Living objects
+ compat: a single living object
+ %i : Any objects
+ %d : Number >= 0, or when given textual: 0-99.
+
+ A <word> in this context is any sequence of characters not containing
+ a space. 'living objects' are searched by calls to the (simul)efuns
+ find_player() and find_living(): both functions have to accept a name
+ as argument and return the object for this name, or 0 if there
+ is none.
+
+ The results assigned to the variables by the %-directives are:
+
+ %o : returns an object
+ %s : returns a string of words
+ %w : returns a string of one word
+ %p : if passed empty: a string
+ if passed as array of words: var[0] is the matched word
+ %i : returns an array with the following content:
+ [0]: int: the count/number recognized in the object spec
+ > 0: a count (e.g. 'three', '4')
+ < 0: an ordinal (e.g. 'second', 'third')
+ = 0: 'all' or a generic plural such as 'apples'
+ [1..]: object: all(!) objects matching the item description.
+ In the <env> form this may be the whole
+ recursive inventory of the <env> object.
+ It is up to the caller to interpret the recognized numeral
+ and to apply it on the list of matched objects.
+ %l : non-compat: as %i, except that only living objects are
+ returned.
+ compat: as %o, except that only a living object is returned.
+
+ %i (and non-compat-%l) match descriptions like 'three red roses',
+ 'all nasty bugs' or 'second blue sword'.
+
+ Note: Patterns of type: "%s %w %i" might not work as one would expect.
+ %w will always succeed so the arg corresponding to %s will always be
+ empty.
+
+ To make the efun useful it must have a certain support from the
+ mudlib: it calls a set of functions in objects to get the
+ information it needs to parse a string.
+
+ 1. string *parse_command_id_list()
+ Normal singular names of the object.
+
+ 2. string *parse_command_plural_id_list() - optional
+ Plural forms of the names returned by 1.
+ If this function doesn't exist, the parser tries to pluralize
+ the names returned by 1.
+
+ 3. string *parse_command_adjectiv_id_list() - optional
+ All adjectives associated with this object.
+
+ All names and adjectives may consist of several words separated
+ by spaces.
+
+ These functions should exist in all objects and are therefore best
+ put into a mandatory inherit file (e.g. /std/object.c).
+
+ In addition the master object may offer the same functions to provide
+ reasonable defaults (like 'thing' as generic singular name):
+
+ string *parse_command_id_list()
+ - Would normally return: ({ "one", "thing" })
+
+ string *parse_command_plural_id_list()
+ - Would normally return: ({ "ones", "things", "them" })
+
+ string *parse_command_adjectiv_id_list()
+ - Would normally return ({ "iffish" })
+
+ Two additional functions in the master object provide the default
+ list of prepositions (needed for %p) and the single 'all' word:
+
+ string *parse_command_prepos_list()
+ - Would normally return: ({ "in", "on", "under", "behind",
+ "beside" })
+
+ string parse_command_all_word()
+ - Would normally return: "all"
+
+
+ int parse_command(string, object|object*, string, destargs...)
+
+
+EXAMPLE
+ object *items;
+ parse_command( "take apple",environment(this_player())
+ , " 'get' / 'take' %i ",items);
+
+HISTORY
+ LDMud 3.3.258 removed the compat-mode parse_command().
+
+SEE ALSO
+ sscanf(E)