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)