Update Doku aus Driversourcen

Change-Id: I455f0813b970151089b3dc1b8d9407eea323cdd1
diff --git a/doc/driver/architectures b/doc/driver/architectures
new file mode 100644
index 0000000..430ee21
--- /dev/null
+++ b/doc/driver/architectures
@@ -0,0 +1,15 @@
+Actively supported and tested architectures:
+- i386
+- x86_64 (work in progress until the release of 3.5.0)
+
+Other architectures can't be tested by us. Many will probably work as well.
+Your mileage may vary, but we encourage you to test it. And please tell us
+about your experiences.
+
+Platforms which require aligned memory access seem to be not used by the users
+of LDMud (e.g. ARM, PowerPC, Sparc). For the sake of code simplicity and/or
+speed some code pieces (bytecode, murmur hash functions) don't care about
+alignment. On these platforms, the driver will probably not work at all right
+now. That can be fixed, but only if needed (there are users) and if the
+potential users support us (e.g. testing).
+
diff --git a/doc/driver/invocation b/doc/driver/invocation
index 5760b46..5cc4800 100644
--- a/doc/driver/invocation
+++ b/doc/driver/invocation
@@ -1,335 +1,365 @@
 NAME
-    driver/invocation
+        driver/invocation
 
 PURPOSE
-    Description of the invocation of the gamedriver, especially of the command
-    arguments. This document describes the commandline version of the driver
-    only; non-commandline versions are platform specific and described in
-    the related documentation.
+        Description of the invocation of the gamedriver, especially of the
+        command arguments. This document describes the commandline version of
+        the driver only; non-commandline versions are platform specific and
+        described in the related documentation.
 
 DESCRIPTION
-    The driver is invoked from the commandline as other normal programs.
-    Neither the current directory nor the directory the executable is in need
-    to be in any special relation the directory of the mudlib. Once the driver
-    is running, it emits two streams of outputs:
+        The driver is invoked from the commandline as other normal programs.
+        Neither the current directory nor the directory the executable is in
+        need to be in any special relation the directory of the mudlib. Once
+        the driver is running, it emits two streams of outputs:
 
-      - driver-related messages on stderr; this unfortunately includes
-        LPC compiler diagnostics
-      - LPC runtime-related messages in the logfile <mudlib>/<host>.parse.log
-        (the name can be changed).
+            - driver-related messages on stderr; this unfortunately includes
+              LPC compiler diagnostics
+            - LPC runtime-related messages in the logfile
+              <mudlib>/<host>.parse.log (the name can be changed).
 
-    It is possible to start the driver without any commandline arguments as
-    suitable defaults are specified at compile time. The invocation syntax
-    is:
+        It is possible to start the driver without any commandline arguments as
+        suitable defaults are specified at compile time. The invocation syntax
+        is:
 
-        driver [options] [<portnumber>]...
+            driver [options] [<portnumber>]...
 
-    <portnumber> the number of the port the driver shall use to accept
-    connections. The maximum number of ports is determined by MAXNUMPORTS
-    in the source file config.h.
+        <portnumber> the number of the port the driver shall use to accept
+        connections. The maximum number of ports is determined by MAXNUMPORTS
+        in the source file config.h.
 
-    The options modify the behaviour of the gamedriver. Some of them are only
-    available if a certain compile-time option was enabled (typically in
-    the source file config.h). The following options are recognized:
+        The options modify the behaviour of the gamedriver. Some of them are
+        only available if a certain compile-time option was enabled (typically
+        in the source file config.h). The following options are recognized:
 
-      -P|--inherit <fd-number>
-        Inherit filedescriptor <fd-number> from the parent process
-        as socket to listen for connections.
-        Only available if compiled with MAXNUMPORTS.
+          -P|--inherit <fd-number>
+            Inherit filedescriptor <fd-number> from the parent process
+            as socket to listen for connections.
+            Only available if compiled with MAXNUMPORTS.
 
-      -u|--udp <portnumber>
-        Specify the <portnumber> for the UDP port, overriding the compiled-in
-        default.
-        Only available if compiled with CATCH_UDP_PORT.
+          -u|--udp <portnumber>
+            Specify the <portnumber> for the UDP port, overriding the
+            compiled-in default.
+            Only available if compiled with CATCH_UDP_PORT.
 
-      -D|--define <macro>[=<text>]
-        Add <macro> (optionally to be expanded to <text>) to the list of
-        predefined macros known by the LPC compiler.
+          -D|--define <macro>[=<text>]
+            Add <macro> (optionally to be expanded to <text>) to the list of
+            predefined macros known by the LPC compiler.
 
-      -E|--eval-cost <ticks>
-        Set the number of <ticks> available for one evaluation thread.
-        If 0, execution is unlimited.
+          -E|--eval-cost <ticks>
+            Set the number of <ticks> available for one evaluation thread.
+            If 0, execution is unlimited.
 
-      -M|--master <filename>
-        Use <filename> for the master object.
+          -M|--master <filename>
+            Use <filename> for the master object.
 
-      -m|--mudlib <pathname>
-        Use <pathname> as the top directory of the mudlib.
+          -m|--mudlib <pathname>
+            Use <pathname> as the top directory of the mudlib.
 
-      --debug-file <filename>
-        Log all debug output in <filename> instead of
-        <mudlib>/<host>.debug.log .
+          --debug-file <filename>
+            Log all debug output in <filename> instead of
+            <mudlib>/<host>.debug.log .
 
-      --hostname <name>
-        Use <name> as hostname instead of what the system says.
+          --hostname <name>
+            Use <name> as hostname instead of what the system says.
 
-      --hostaddr <addr>
-        Use <addr> as address of this machine, instead of what the
-        system says.  In particular this address will be used to open
-        the driver ports.
+          --hostaddr <addr>
+            Use <addr> as address of this machine, instead of what the
+            system says. In particular this address will be used to open
+            the driver ports.
 
-      --no-compat
-      --compat
-        Select the mode (plain or compat) of the driver.
-        This choice does not affect the default name of the master object.
+          --no-compat
+          --compat
+            Select the mode (plain or compat) of the driver.
+            This choice does not affect the default name of the master object.
 
-      -d|--debug
-        Generate debug output; repeat the argument for even more output:
-          >= 1: log resets, clean ups, swaps, reception of urgend data,
-                   telnet negotiation states.
-                check_a_lot_of_refcounts() on startup when swapping of
-                   variables is disabled.
-          >= 2: log all add_message()s, name lookup failures, new players.
-          >= 3: progress of garbage collection
-          >= 4: even more junk from garbage collection
+          -d|--debug
+            Generate debug output; repeat the argument for even more output:
+              >= 1: log resets, clean ups, swaps, reception of urgend data,
+                       telnet negotiation states.
+                    check_a_lot_of_refcounts() on startup when swapping of
+                       variables is disabled.
+              >= 2: log all add_message()s, name lookup failures, new players.
+              >= 3: progress of garbage collection
+              >= 4: even more junk from garbage collection
 
-      -c|--list-compiles
-        List the name of every compiled file on stderr.
+          -c|--list-compiles
+            List the name of every compiled file on stderr.
 
-      -e|--no-preload
-        Pass a non-zero argument (the number of occurences of this option)
-        to master->preload(), which usually inhibits all preloads of castles
-        and other objects.
+          -e|--no-preload
+            Pass a non-zero argument (the number of occurrences of this option)
+            to master->preload(), which usually inhibits all preloads of
+            castles and other objects.
 
-      --erq <filename>
-      --erq "<filename> <erq args>"
-        Use <filename> instead of 'erq' as the basename of the ERQ executable.
-        If the name starts with a '/', it is take to be an absolute pathname,
-        otherwise it is interpreted relative to <bindir>. If not specified,
-        'erq' is used as the executable name.
+          --erq <filename>
+          --erq "<filename> <erq args>"
+            Use <filename> instead of 'erq' as the basename of the ERQ
+            executable. If the name starts with a '/', it is take to be an
+            absolute pathname, otherwise it is interpreted relative to
+            <bindir>. If not specified, 'erq' is used as the executable name.
 
-        By enclosing the argument value in quotes, it is possible to pass
-        arguments (e.g. --execdir) to the erq. These arguments however must
-        not contain embedded spaces.
+            By enclosing the argument value in quotes, it is possible to pass
+            arguments (e.g. --execdir) to the erq. These arguments however must
+            not contain embedded spaces.
 
-      -N|--no-erq
-        Don't start the erq demon (if it would be started at all).
+          -N|--no-erq
+            Don't start the erq demon (if it would be started at all).
 
-      --alarm-time <seconds>
-        Set the granularity of call_out() and heartbeat timing. Minimum
-        value is 1.
+          --alarm-time <seconds>
+            Set the granularity of call_out() and heartbeat timing. Minimum
+            value is 1.
 
-      --heart-interval <seconds>
-        Set the interval between two heartbeats. Minimum value is 1.
+          --heart-interval <seconds>
+            Set the interval between two heartbeats. Minimum value is 1.
 
-      --sync-heart
-        All heartbeats occur at the same time (modulo granularity).
-      
-      --async-heart
-        Heartbeats occur when they are due (modulo granularity).
+          --sync-heart
+            All heartbeats occur at the same time (modulo granularity).
 
-      -t|--no-heart
-        Disable heartbeats and call_outs.
+          --async-heart
+            Heartbeats occur when they are due (modulo granularity).
 
-      -f|--funcall <word>
-        The lfun master->flag() is called with <word> as argument before the
-        gamedriver accepts netword connections.
+          -t|--no-heart
+            Disable heartbeats and call_outs.
 
-      --regexp pcre | traditional
-        Select the default regexp package.
+          -f|--funcall <word>
+            The lfun master->flag() is called with <word> as argument before
+            the gamedriver accepts netword connections.
 
-      --max-array <size>
-        The maximum number of elements an array can hold.
-        Set to 0, arrays of any size are allowed.
+          --regexp pcre | traditional
+            Select the default regexp package.
 
-      --max-mapping <size>
-        The maximum number of elements a mapping can hold.
-        Set to 0, mappings of any size are allowed.
+          --max-array <size>
+            The maximum number of elements an array can hold.
+            Set to 0, arrays of any size are allowed.
 
-      --max-mapping-keys <size>
-        The maximum number of entries a mapping can hold.
-        Set to 0, mappings of any size are allowed.
+          --max-mapping <size>
+            The maximum number of elements a mapping can hold.
+            Set to 0, mappings of any size are allowed.
 
-      --max-callouts <size>
-        The maximum number of callouts at one time.
-        Set to 0, any number is allowed.
+          --max-mapping-keys <size>
+            The maximum number of entries a mapping can hold.
+            Set to 0, mappings of any size are allowed.
 
-      --max-bytes <size>
-        The maximum number of bytes one read_bytes()/write_bytes() call
-        can handle.
-        Set to 0, reads and writes of any size are allowed.
+          --max-callouts <size>
+            The maximum number of callouts at one time.
+            Set to 0, any number is allowed.
 
-      --max-file <size>
-        The maximum number of bytes one read_file()/write_file() call
-        can handle.
-        Set to 0, reads and writes of any size are allowed.
+          --max-bytes <size>
+            The maximum number of bytes one read_bytes()/write_bytes() call
+            can handle.
+            Set to 0, reads and writes of any size are allowed.
 
-      --max-thread-pending <size>\n"
-        The maximum number of bytes to be kept pending by the socket write
-        thread.
-        Set to 0, an unlimited amount of data can be kept pending.
+          --max-file <size>
+            The maximum number of bytes one read_file()/write_file() call
+            can handle.
+            Set to 0, reads and writes of any size are allowed.
 
-        This option is ignored if pthreads are not used.
+          --max-thread-pending <size>\n"
+            The maximum number of bytes to be kept pending by the socket write
+            thread.
+            Set to 0, an unlimited amount of data can be kept pending.
 
-      --cleanup-time <time>
-        The idle time in seconds for an object before the driver tries to
-        clean it up. It should be substantially longer than the reset time.
-        A time <= 0 disables the cleanup mechanism.
+            This option is ignored if pthreads are not used.
+
+          --cleanup-time <time>
+            The idle time in seconds for an object before the driver tries to
+            clean it up. It should be substantially longer than the reset time.
+            A time <= 0 disables the cleanup mechanism.
+
+          --reset-time <time>
+            The time in seconds before an object is reset. A time <= 0 disables
+            the reset mechanism.
+
+          -s <time>  | --swap-time <time>
+          -s v<time> | --swap-variables <time>
+            Time in seconds before an object (or its variables) are swapped
+            out. A time less or equal 0 disables swapping.
+
+          -s f<name> | --swap-file <name>
+            Swap into file '<name>' instead of '<mudlib>/LP_SWAP.<host>'.
+
+          -s c       | --swap-compact
+            Reuse free space in the swap file immediately.
+            Giving this option results in smaller, but also more fragmented
+            swapfiles, and the swap performance may degrade.
 
-      --reset-time <time>
-        The time in seconds before an object is reset. A time <= 0 disables
-        the reset mechanism.
+          --hard-malloc-limit <size>
+            Restrict total memory allocation to <size> bytes.
+            A <size> of 0 or 'unlimited' removes any restriction.
 
-      -s <time>  | --swap-time <time>
-      -s v<time> | --swap-variables <time>
-        Time in seconds before an object (or its variables) are swapped out.
-        A time less or equal 0 disables swapping.
+          --soft-malloc-limit <size>
+            This value gives a soft limit of the allocated memory (kind of low
+            watermark). If this value is exceeded, the driver will call
+            low_memory() in the master to inform the mudlib about the
+            (potentially) developing low memory situation.
+            A <size> of 0 or 'unlimited' removes this threshold.
 
-      -s f<name> | --swap-file <name>
-        Swap into file <name> instead of <mudlib>/LP_SWAP.<host> .
+          --min-malloc <size>
+          --min-small-malloc <size>
+            Determine the sizes for the explicit initial large resp. small
+            chunk allocation. A size of 0 disables the explicit initial
+            allocations.
 
-      -s c       | --swap-compact
-        Reuse free space in the swap file immediately.
-        Giving this option results in smaller, but also more fragmented
-        swapfiles, and the swap performance may degrade.
+          -r u<size> | --reserve-user <size>
+          -r m<size> | --reserve-master <size>
+          -r s<size> | --reserve-system <size>
+            Reserve <size> amount of memory for user/master/system allocations
+            to be held until main memory runs out.
 
-      --max-malloc <size>
-        Restrict total memory allocations to <size> bytes.
-        A <size> of 0 or 'unlimited' removes any restriction.\n"
+          --filename-spaces
+          --no-filename-spaces
+            Allow/disallow the use of spaces in filenames.
 
-      --min-malloc <size>
-      --min-small-malloc <size>
-        Determine the sizes for the explicite initial large resp. small chunk
-        allocation. A size of 0 disables the explicite initial allocations.
+          --strict-euids
+          --no-strict-euids
+            Enable/disable the enforced use of euids.
 
-      -r u<size> | --reserve-user <size>
-      -r m<size> | --reserve-master <size>
-      -r s<size> | --reserve-system <size>
-        Reserve <size> amount of memory for user/master/system allocations to
-        be held until main memory runs out.
+          --share-variables
+          --init-variables
+            Select how clones initialize their variables:
+              - by sharing the current values of their blueprint
+              - by initializing them afresh (using __INIT()).
 
-      --filename-spaces
-      --no-filename-spaces
-        Allow/disallow the use of spaces in filenames.
+          --pidfile <filename>\n"
+            Write the pid of the driver process into <filename>.\n"
 
-      --strict-euids
-      --no-strict-euids
-        Enable/disable the enforced use of euids.
+          --tls-key <pathname>
+            Use <pathname> as the x509 keyfile, default is 'key.pem'.
+            If relative, <pathname> is interpreted relative to <mudlib>.
 
-      --share-variables
-      --init-variables
-        Select how clones initialize their variables:
-          - by sharing the current values of their blueprint
-          - by initializing them afresh (using __INIT()).
+          --tls-cert <pathname>
+            Use <pathname> as the x509 certfile, default is 'cert.pem'.
+            If relative, <pathname> is interpreted relative to <mudlib>.
 
-      --pidfile <filename>\n"
-        Write the pid of the driver process into <filename>.\n"
+          --tls-crlfile <pathname>
+            Use <pathname> as the filename holding your certificate revocation
+            lists. If relative, <pathname> is interpreted relative to <mudlib>.
 
-      --tls-key <pathname>
-          Use <pathname> as the x509 keyfile, default is 'key.pem'.
-          If relative, <pathname> is interpreted relative to <mudlib>.
+          --tls-crldirectory <pathname>
+            Use <pathname> as the directory where your certificate revocation
+            lists reside. If relative, <pathname> is interpreted relative to
+            <mudlib>.
 
-      --tls-cert <pathname>
-         Use <pathname> as the x509 certfile, default is 'cert.pem'.
-         If relative, <pathname> is interpreted relative to <mudlib>.
+          --tls-trustfile <pathname>
+            Use <pathname> as the filename holding your trusted PEM
+            certificates. If relative, <pathname> is interpreted relative to
+            <mudlib>.
 
-      --tls-trustfile <pathname>
-        Use <pathname> as the filename holding your trusted PEM certificates.
-        If relative, <pathname> is interpreted relative to <mudlib>.
+          --tls-trustdirectory <pathname>
+            Use <pathname> as the directory where your trusted
+            PEM certificates reside, default is '/etc/ssl/certs'.
+            If relative, <pathname> is interpreted relative to <mudlib>.
 
-      --tls-trustdirectory <pathname>
-        Use <pathname> as the directory where your trusted
-        PEM certificates reside, default is '/etc/ssl/certs'.
-        If relative, <pathname> is interpreted relative to <mudlib>.
+          --wizlist-file <filename>
+          --no-wizlist-file
+            Read and save the wizlist in the named file (always interpreted
+            relative the mudlib); resp. don't read or save the wizlist.
 
-      --wizlist-file <filename>
-      --no-wizlist-file
-        Read and save the wizlist in the named file (always interpreted
-        relative the mudlib); resp. don't read or save the wizlist.
+          --gcollect-outfd <filename>|<num>
+            Garbage collector output (like a log of all reclaimed memory
+            blocks) is sent to <filename> (or inherited fd <num>) instead of
+            stderr. Only available if compiled with MALLOC_smalloc.
 
-      --gcollect-outfd <filename>|<num>
-        Garbage collector output (like a log of all reclaimed memory blocks)
-        is sent to <filename> (or inherited fd <num>) instead of stderr.
-        Only available if compiled with MALLOC_smalloc.
+          --y|--yydebug
+            Enable debugging of the LPC compiler.
+            Only available if compiled with YYDEBUG.
 
-      --y|--yydebug
-        Enable debugging of the LPC compiler.
-        Only available if compiled with YYDEBUG.
+          --randomdevice <filename>
+            Chooses the source of the seed for the random number generator.
+            Default is /dev/urandom, Fall-back if <filename> is not readable
+            is the system clock. If you want to seed the PRNG with a specific
+            seed, you can use a filename with the seed and give it here instead
+            of using --random-seed. (Note: the last one of --randominit and
+            --random-seed wins!)
 
-      --random-seed <num>
-        Seed value for the random number generator. If not given, the
-        driver chooses a seed value on its own.
-        This option is for debugging.
+          --random-seed <num>
+            Seed value for the random number generator. If not given, the
+            driver chooses a seed value on its own.
+            This option is for debugging.
 
-      --check-state <lvl>
-        Perform a regular simplistic check of the virtual machine according
-        to <lvl>:
-          = 0: no check
-          = 1: once per backend loop
-          = 2: at various points in the backend loop
-        Only available if compiled with DEBUG.
+          --check-state <lvl>
+            Perform a regular simplistic check of the virtual machine according
+            to <lvl>:
+              = 0: no check
+              = 1: once per backend loop
+              = 2: at various points in the backend loop
+            Only available if compiled with DEBUG.
 
-      --check-refcounts
-        Every backend cycle, all refcounts in the system are checked.
-        SLOW! Only available if compiled with DEBUG.
+          --check-refcounts
+            Every backend cycle, all refcounts in the system are checked.
+            SLOW! Only available if compiled with DEBUG.
 
-      --gobble-descriptors <num>
-        <num> (more) filedescriptors are used up. You'll know when you need it.
-        Only available if compiled with DEBUG.
+          --gobble-descriptors <num>
+            <num> (more) filedescriptors are used up. You'll know when you need
+            it. Only available if compiled with DEBUG.
 
-      --check-strings
-        Every backend cycle, all shared strings in the system are checked.
-        SLOW! Only available if compiled with DEBUG and CHECK_STRINGS.
+          --check-strings
+            Every backend cycle, all shared strings in the system are checked.
+            SLOW! Only available if compiled with DEBUG and CHECK_STRINGS.
 
-      -V|--version
-        Print the version of the driver and exit.
+          -V|--version
+            Print the version of the driver and exit.
 
-      --options
-        Print the version and compilation options of the driver and exit.
+          --options
+            Print the version and compilation options of the driver and exit.
 
-      -h|-?|--help
-        Display a command help and exit.
+          -h|-?|--help
+            Display a command help and exit.
 
-      --longhelp
-        Display a long command help and exit.
+          --longhelp
+            Display a long command help and exit.
 
-      --args <filename>
-        The driver reads and parses the given file and treats its contents
-        as if given on the commandline right where the --args option
-        occured. The file itself can again contain --args options.
+          --args <filename>
+            The driver reads and parses the given file and treats its contents
+            as if given on the commandline right where the --args option
+            occurred. The file itself can again contain --args options.
 
 
-DESCRIPTION -- Argument Parser
-    The parser analyses the commandline arguments given with the driver
-    invocation and distinguishes 'options', which start with a '-', from
-    proper arguments. Options are further distinguished by their name and
-    may take an additional value. In general, options and arguments can be
-    givein in any order.
+DESCRIPTION
+        -- Argument Parser
+        The parser analyses the commandline arguments given with the driver
+        invocation and distinguishes 'options', which start with a '-', from
+        proper arguments. Options are further distinguished by their name and
+        may take an additional value. In general, options and arguments can be
+        given in any order.
 
-    Options are recognized in two forms. In the short form the option must
-    be given as a single '-' followed by a single letter. In the long form,
-    options start with '--' followed by a string of arbitrary length. The
-    short options are case sensitive, the long options aren't.
-    Most options can be specified in both the short and long form, but that
-    is not mandatory. Examples: '-r' and '--recursive'.
+        Options are recognized in two forms. In the short form the option must
+        be given as a single '-' followed by a single letter. In the long
+        form, options start with '--' followed by a string of arbitrary length.
+        The short options are case sensitive, the long options aren't. Most
+        options can be specified in both the short and long form, but that is
+        not mandatory. Examples: '-r' and '--recursive'.
 
-    If an option takes a value, it must follow the option immediately after
-    a separating space or '='. Additionally, the value for a short option
-    may follow the option without separator. Examples are: '-fMakefile',
-    '-f Makefile', '--file=Makefile' and '--file Makefile'.
+        If an option takes a value, it must follow the option immediately after
+        a separating space or '='. Additionally, the value for a short option
+        may follow the option without separator. Examples are: '-fMakefile',
+        '-f Makefile', '--file=Makefile' and '--file Makefile'.
 
-    Short options may be collated into one argument, e.g. '-rtl', but
-    of these only the last may take a value.
+        Short options may be collated into one argument, e.g. '-rtl', but
+        of these only the last may take a value.
 
-    The option '--' marks the end of options. All following command arguments
-    are considered proper arguments even if they start with a '-' or '--'.
+        The option '--' marks the end of options. All following command
+        arguments are considered proper arguments even if they start with a '-'
+        or '--'.
 
-    The arguments are usually taken from the commandline; but the parser
-    is also able to read them from a textfiles, which can be nested. The
-    content of the textfiles is broken down into words delimited by whitespace,
-    which are then treated as given on the commandline at the place where
-    the instruction to read the textfile stood.
+        The arguments are usually taken from the commandline; but the parser
+        is also able to read them from a textfiles, which can be nested. The
+        content of the textfiles is broken down into words delimited by
+        whitespace, which are then treated as given on the commandline at the
+        place where the instruction to read the textfile stood.
 
-    The file parser recognizes simple double-quoted strings, which must be
-    contained on a single line. Additionally, the '#' character given by
-    itself is a comment marker - everthing after the '#' until the end
-    of the current line is ignored.
+        The file parser recognizes simple double-quoted strings, which must be
+        contained on a single line. Additionally, the '#' character given by
+        itself is a comment marker - everthing after the '#' until the end
+        of the current line is ignored.
 
 HISTORY
-    LDMud 3.2.9 added the --max-thread-pending, --hostname,
-      --hostaddr, --args and --random-seed options.
-    LDMud 3.2.10 added the --filename-spaces options.
-    LDMud 3.3.378 added --share-variables, --init-variables.
-    LDMud 3.3.475/3.2.11 added --tls-key, --tls-cert.
-    LDMud 3.3.672/3.2.11 added --tls-trustfile, --tls-trustdirectory.
-    LDMud 3.3.677 added --max-mapping-keys.
+        LDMud 3.2.9 added the --max-thread-pending, --hostname,
+            --hostaddr, --args and --random-seed options.
+        LDMud 3.2.10 added the --filename-spaces options.
+        LDMud 3.3.378 added --share-variables, --init-variables.
+        LDMud 3.3.475/3.2.11 added --tls-key, --tls-cert.
+        LDMud 3.3.672/3.2.11 added --tls-trustfile, --tls-trustdirectory.
+        LDMud 3.3.677 added --max-mapping-keys.
+        LDMud 3.3.714/3.2.15 added --tls-crlfile, --tls-crldirectory.
+        LDMud 3.3.x added --randominit.
diff --git a/doc/driver/limitations b/doc/driver/limitations
new file mode 100644
index 0000000..1504238
--- /dev/null
+++ b/doc/driver/limitations
@@ -0,0 +1,82 @@
+This file contains a collection of non-configurable limits:
+
+Program properties
+==================
+* maximum program length: 1 MB (1048575 Bytes)
+  This is defined by FUNSTART_MASK in exec.h, which is the maximum offset
+  (address) of a functions code within the program block (relativ to the
+  beginning). Changing it involves changing funflag_t and probably other
+  stuff.
+
+* maximum number of programs: 2^32-1
+  The unique program ID number is a int32. It is incremented for each compiled
+  program. If it reaches zero (after wrapping to negative values) the
+  compiler or swapper calls renumber_programs(), which recycles numbers from
+  old programs.
+  (exec.h, prolang.y, swap.c, ...)
+
+* maximum number of functions in a program: 65534
+  The lookup table for function indexes holding the offsets of the function in
+  the functions tables is unsigned short.
+  The types of function arguments are stored in program_s.argument_types,
+  which is index by the unsigned short programs_s.type_start. 65535 has a
+  special meaning. Some code relies that this is unsigned short.
+  (exec.h, ...)
+  program_s.num_function_names and num_functions are unsigned short as well.
+
+* maximum length of switch: 256k (262143 Bytes)
+  Limited by BREAK_ADDRESS_MASK and CONTINUE_ADDRESS_MASK?
+
+* maximum offset for branches: 32765 (0x7ffd)
+  (prolang.y)
+
+* number of virtual variables: 256
+* number of global variables: 65536 (F_IDENTIFIER16)
+* number of local variables: 256 (F_PUSH_LOCAL_VARIABLE_LVALUE)
+* number of context variables: 256 (Should be consistent with local
+  variables, MAX_LOCAL applies to both. 16 bit opcodes are not used yet.)
+
+* max number of struct members: 255
+  (exec.h, ...)
+
+* max number of structs per program: usually 32767 (short)
+
+
+Hash tables
+===========
+* maximum size of the hash table for identifiers (ITABLE): 32768
+  The hashes of identifiers are signed short which are in most cases 16 bit
+  wide integers (lex.h, lex.c, ...)
+
+* maximum size of the hash table for objects (OTABLE): 65536
+* maximum size of the hash table for shared strings (HTABLE): 65536
+  The hashes are of type unsigned short which are in most cases 16 bit
+  wide integers.
+
+
+Objects
+=======
+* maximum clone ID number: 2^32-1
+  Not a real limitation, after that the driver starts checking if
+  blueprint name + #cloneid are unique.
+
+
+Memory management
+=================
+* max. size of single large block in slaballo.c and smalloc.c:
+  0x07ffffff (134217727, defined by M_MASK)
+
+
+Language
+========
+* maximum number of simul-efuns: 2048
+  Only values 0xf800-0xffff in .x.closure_type of
+  a T_CLOSURE svalue are reserved for simul-efuns.
+  F_SIMUL_EFUN however takes a short int, so there 65536
+  simul-efuns would be possible.
+
+* maximum number of python efuns: 2048
+  Only values 0xe800-0xefff in .x.closure_type of
+  a T_CLOSURE svalue are reserved for python efuns.
+  F_PYTHON_EFUN however takes a short int, so there 65536
+  python efuns would be possible.
diff --git a/doc/driver/predefined b/doc/driver/predefined
index 17a7eb0..8d46e67 100644
--- a/doc/driver/predefined
+++ b/doc/driver/predefined
@@ -1,130 +1,138 @@
 NAME
-    predefined - predefined #defines by the parser
+        predefined - predefined #defines by the parser
 
 DESCRIPTION
-    Several preprocessor macros are pre#defined by the parser,
-    to provide information about parser version, compile time
-    options and parser invocation options:
+        Several preprocessor macros are pre#defined by the parser,
+        to provide information about parser version, compile time
+        options and parser invocation options:
 
-      LPC3            : always defined.
-      __LDMUD__       : always defined.
-      __EUIDS__       : always (for compatibility).
-      COMPAT_FLAG     : defined if the driver runs in compat mode.
-      __COMPAT_MODE__ : ditto
-      __STRICT_EUIDS__: defined if strict euid usage is enforced.
-      __FILENAME_SPACES__: defined if filenames may contain spaces.
+        LPC3                       : always defined.
+        __LDMUD__                  : always defined.
+        __EUIDS__                  : always (for compatibility).
+        COMPAT_FLAG                : defined if the driver runs in compat mode.
+        __COMPAT_MODE__            : ditto
+        __STRICT_EUIDS__           : defined if strict euid usage is enforced.
+        __FILENAME_SPACES__        : defined if filenames may contain spaces.
 
-      __MASTER_OBJECT__ : the name of the master object (in compat mode
-                          without leading '/').
-      __FILE__          : the name of the compiled file (in compat mode
-                          without leading '/').
-      __LINE__          : the current line number.
-      __FUNCTION__      : the current function name.
-      __DIR__           : the directory path of the compiled file (in
-                          compat mode without leading '/').
-      __PATH__(n)       : the directory path of the compiled file without
-                          the <n> trailing elements (in compat mode without
-                          leading '/').
-      __VERSION__       : the version string of the driver.
-      __VERSION_MAJOR__ : the major version number of the driver.
-      __VERSION_MINOR__ : the minor version number of the driver.
-      __VERSION_MICRO__ : the micro version number of the driver.
-      __VERSION_PATCH__ : the patchlevel of the driver; a 0 here means
-                          'no patchlevel'.
-      __VERSION_COMMITID__ : the commit ID of the source of the driver 
-                             (attention: it might be <unknown>, if the driver
-                              was not compiled from a git repository)
-      __VERSION_LOCAL__ : the (optional) LOCAL_LEVEL, the user has defined.
+        __MASTER_OBJECT__          : the name of the master object (in compat
+                                     mode without leading '/').
+        __FILE__                   : the name of the compiled file (in compat
+                                     mode without leading '/').
+        __LINE__                   : the current line number.
+        __FUNCTION__               : the current function name.
+        __DIR__                    : the directory path of the compiled file
+                                     (in compat mode without leading '/').
+        __PATH__(n)                : the directory path of the compiled file
+                                     without the <n> trailing elements (in
+                                     compat mode without leading '/').
+        __VERSION__                : the version string of the driver.
+        __VERSION_MAJOR__          : the major version number of the driver.
+        __VERSION_MINOR__          : the minor version number of the driver.
+        __VERSION_MICRO__          : the micro version number of the driver.
+        __VERSION_PATCH__          : the patchlevel of the driver; a 0 here
+                                     means 'no patchlevel'.
+        __VERSION_COMMITID__       : the commit ID of the source of the driver
+                                     (attention: it might be <unknown>, if the
+                                     driver was not compiled from a git
+                                     repository)
+        __VERSION_LOCAL__          : the (optional) LOCAL_LEVEL, the user has
+                                     defined.
 
+        __DOMAIN_NAME__            : the domain the host is part of.
+        __HOST_IP_NUMBER__         : the hosts IP number (as a string).
+        __HOST_NAME__              : the full hostname.
+        __MAX_RECURSION__          : the max count of nested function calls
+                                     (this is config.h:MAX_USER_TRACE).
+        __MAX_EVAL_COST__          : the max evaluation cost.
+        __RESET_TIME__             : default interval time between object
+                                     resets.
+        __CLEANUP_TIME__           : default interval time between object
+                                     cleanups.
+        __ALARM_TIME__             : the configured timing granularity.
+        __HEART_BEAT_INTERVAL__    : the configured heartbeat time.
+        __SYNCHRONOUS_HEART_BEAT__ : defined if synchronous heartbeats are
+                                     enabled.
+        __MAX_COMMAND_LENGTH__     : the maximum length a command can have.
+        __EFUN_DEFINED__(name)     : if the efun 'name' exists, this
+                                     macro evaluates to " 1 ", else to " 0 ".
+        __DRIVER_LOG__             : the name of the default debug.log file
+                                     (within the mudlib); undefined if a
+                                     different name has been specified on the
+                                     commandline.
+        __WIZLIST__                : the name of the (mudlib) file from where
+                                     the driver read the initial WIZLIST
+                                     information. It is undefined if the driver
+                                     was configured to not read the
+                                     information.
 
-      __DOMAIN_NAME__    : the domain the host is part of.
-      __HOST_IP_NUMBER__ : the hosts IP number (as a string).
-      __HOST_NAME__      : the full hostname.
-      __MAX_RECURSION__  : the max count of nested function calls
-                           (this is config.h:MAX_USER_TRACE).
-      __MAX_EVAL_COST__  : the max evaluation cost.
-      __RESET_TIME__     : default interval time between object resets.
-      __CLEANUP_TIME__   : default interval time between object cleanups.
-      __ALARM_TIME__     : the configured timing granularity.
-      __HEART_BEAT_INTERVAL__: the configured heartbeat time.
-      __SYNCHRONOUS_HEART_BEAT__: defined if synchronous heartbeats are
-                           enabled.
-      __MAX_COMMAND_LENGTH__: the maximum length a command can have.
-      __EFUN_DEFINED__(name) : if the efun 'name' exists, this
-                               macro evaluates to " 1 ", else to " 0 ".
-      __DRIVER_LOG__     : the name of the default debug.log file (within
-                           the mudlib); undefined if a different name
-                           has been specified on the commandline.
-      __WIZLIST__        : the name of the (mudlib) file from where the
-                           driver read the initial WIZLIST information.
-                           It is undefined if the driver was configured
-                           to not read the information.
-      __MAX_MALLOC__     : the internal upper limit for total memory
-                           usage.
-      __INT_MAX__        : the largest integer number
-      __INT_MIN__        : the smallest integer number
-      __FLOAT_MAX__      : the largest (positive) float number
-      __FLOAT_MIN__      : the smallest (positive) float number
+        __MAX_MALLOC__             : the internal upper limit for total memory
+                                     usage.
+        __INT_MAX__                : the largest integer number.
+        __INT_MIN__                : the smallest integer number.
+        __FLOAT_MAX__              : the largest (positive) float number.
+        __FLOAT_MIN__              : the smallest (positive) float number.
 
-      __LPC_NOSAVE__     : always defined
-      __LPC_STRUCTS__    : defined when struct support is enabled.
-                           Once structs are fully supported, this macro
-                           will always be defined.
-      __LPC_INLINE_CLOSURES__: defined when the 'real' inline closures
-                           are enabled.
-      __LPC_ARRAY_CALLS__: call_other()s on arrays of objects enabled.
-      __BOOT_TIME__      : the time() the driver was started.
+        __LPC_NOSAVE__             : always defined.
+        __LPC_STRUCTS__            : always defined.
+        __LPC_INLINE_CLOSURES__    : always defined.
+        __LPC_ARRAY_CALLS__        : always defined.
+        __BOOT_TIME__              : the time() the driver was started.
 
-    If the ERQ is supported, the following macros are defined:
+        If the ERQ is supported, the following macros are defined:
 
-      __ERQ_MAX_SEND__  : the max size of the send buffer
-      __ERQ_MAX_REPLY__ : the max size of the reply buffer
+        __ERQ_MAX_SEND__           : the max size of the send buffer.
+        __ERQ_MAX_REPLY__          : the max size of the reply buffer.
 
-    The following macros are defined if their associated package
-    has been compiled into the driver:
+        The following macros are defined if their associated package
+        has been compiled into the driver:
 
-      __IDNA__ :      support for IDNA
-      __IPV6__ :      support for IP v.6
-      __MYSQL__ :     support for mySQL
-      __PGSQL__ :     support for PostgreSQL
-      __SQLITE__ :    support for SQLite 3.
-      __XML_DOM__ :   support for XML parsing.
-      __JSON__ :      support for JSON parsing/serializing.
-      __MCCP__:       support for MCCP http://www.randomly.org/projects/MCCP
-      __ALISTS__:     support for alists
-      __PCRE__:       support for PCRE
-      __TLS__:        support for TLS (internal)
-      __GNUTLS__:     if __TLS__: TLS support provided by GnuTLS.
-      __OPENSSL__:    if __TLS__: TLS support provided by OpenSSL.
-      __GCRYPT__:     cryptographic routines provided by libgcrypt.
-      __DEPRECATED__: support for obsolete and deprecated efuns.
-
+        __IDNA__                   : support for IDNA.
+        __IPV6__                   : support for IP v.6.
+        __MYSQL__                  : support for mySQL.
+        __PGSQL__                  : support for PostgreSQL.
+        __SQLITE__                 : support for SQLite 3.
+        __XML_DOM__                : support for XML parsing.
+        __MCCP__                   : support for MCCP.
+                                     http://www.randomly.org/projects/MCCP
+        __ALISTS__                 : support for alists.
+        __PCRE__                   : support for PCRE (always defined).
+        __TLS__                    : support for TLS (internal).
+        __GNUTLS__                 : if __TLS__: TLS support provided by
+                                     GnuTLS.
+        __OPENSSL__                : if __TLS__: TLS support provided by
+                                     OpenSSL.
+        __GCRYPT__                 : cryptographic routines provided by
+                                     libgcrypt.
+        __DEPRECATED__             : support for obsolete and deprecated efuns.
 
 HISTORY
-    3.2.1 added __DOMAIN_NAME__, __HOST_IP_NUMBER__, __HOST_NAME__,
-        __MAX_RECURSION__, __EFUN_DEFINED__().
-    3.2.5 added __COMPAT_MODE__, __NATIVE_MODE__, __EUIDS__,
-        __ERQ_MAX_SEND__ and __ERQ_MAX_REPLY__.
-    3.2.6 added __MAX_EVAL_COST__.
-    3.2.7 added __STRICT_EUIDS__ and made __EUIDS__ standard.
-    3.2.8 added __IPV6__, __LPC_NOSAVE__, __DIR__, __PATH__().
-    3.2.9 added __LDMUD__, __MYSQL__, __DEPRECATED__, __VERSION_MAJOR__,
-         __VERSION_MINOR__, __VERSION_MICRO__, __VERSION_PATCH__,
-         __INT_MAX__, __INT_MIN__, __FLOAT_MIN__, __FLOAT_MAX__,
-        __CATCH_EVAL_COST__, __MASTER_EVAL_COST__, __RESET_TIME__,
-        __CLEANUP_TIME__, __DRIVER_LOG__, and __WIZLIST__.
-    3.2.10 added __MAX_MALLOC__, __MSDOS_FS__, __LPC_ARRAY_CALLS__
-        and __FILENAME_SPACES__.
-    3.3 made __LPC_NOSAVE__ always defined and added __ALISTS__,
-        __MCCP__, __LPC_STRUCTS__, __LPC_INLINE_CLOSURES__, __PGSQL__,
-        __PTHREADS__, __TLS__, __BOOT_TIME__, __ALARM_TIME__,
-        __HEART_BEAT_INTERVAL__, __SYNCHRONOUS_HEART_BEAT__, and __PCRE__.
-    3.3.713 added __IDNA__, __SQLITE__.
-    3.3.714 added __OPENSSL__, __GNUTLS__.
-    3.3.718 added __XML_DOM__.
-    3.3.719 removed __PTHREADS__, AMIGA, MSDOS_FS, __BEOS__  
-		    and added __GCRYPT__.
-    3.3.721 added __FUNCTION__.
+        3.2.1 added __DOMAIN_NAME__, __HOST_IP_NUMBER__, __HOST_NAME__,
+            __MAX_RECURSION__, __EFUN_DEFINED__().
+        3.2.5 added __COMPAT_MODE__, __NATIVE_MODE__, __EUIDS__,
+            __ERQ_MAX_SEND__ and __ERQ_MAX_REPLY__.
+        3.2.6 added __MAX_EVAL_COST__.
+        3.2.7 added __STRICT_EUIDS__ and made __EUIDS__ standard.
+        3.2.8 added __IPV6__, __LPC_NOSAVE__, __DIR__, __PATH__().
+        3.2.9 added __LDMUD__, __MYSQL__, __DEPRECATED__, __VERSION_MAJOR__,
+            __VERSION_MINOR__, __VERSION_MICRO__, __VERSION_PATCH__,
+            __INT_MAX__, __INT_MIN__, __FLOAT_MIN__, __FLOAT_MAX__,
+            __CATCH_EVAL_COST__, __MASTER_EVAL_COST__, __RESET_TIME__,
+            __CLEANUP_TIME__, __DRIVER_LOG__, and __WIZLIST__.
+        3.2.10 added __MAX_MALLOC__, __MSDOS_FS__, __LPC_ARRAY_CALLS__
+            and __FILENAME_SPACES__.
+        3.3 made __LPC_NOSAVE__ always defined and added __ALISTS__,
+            __MCCP__, __LPC_STRUCTS__, __LPC_INLINE_CLOSURES__, __PGSQL__,
+            __PTHREADS__, __TLS__, __BOOT_TIME__, __ALARM_TIME__,
+            __HEART_BEAT_INTERVAL__, __SYNCHRONOUS_HEART_BEAT__, and __PCRE__.
+        3.3.713 added __IDNA__, __SQLITE__.
+        3.3.714 added __OPENSSL__, __GNUTLS__.
+        3.3.718 added __XML_DOM__.
+        3.3.719 removed __PTHREADS__, AMIGA, MSDOS_FS, __BEOS__
+            and added __GCRYPT__.
+        3.3.721 added __FUNCTION__.
+        3.5.0 changed __LPC_STRUCTS__, __LPC_INLINE_CLOSURES__,
+            __LPC_ARRAY_CALLS__ to be always on.
+            removed __ALISTS__
 
 SEE ALSO
-    pragma(LPC), preprocessor(LPC)
+        pragma(LPC), preprocessor(LPC)