ldmud-3.3.719/
ldmud-3.3.719/doc/
ldmud-3.3.719/doc/efun.de/
ldmud-3.3.719/doc/efun/
ldmud-3.3.719/doc/man/
ldmud-3.3.719/doc/other/
ldmud-3.3.719/mud/
ldmud-3.3.719/mud/heaven7/
ldmud-3.3.719/mud/lp-245/
ldmud-3.3.719/mud/lp-245/banish/
ldmud-3.3.719/mud/lp-245/doc/
ldmud-3.3.719/mud/lp-245/doc/examples/
ldmud-3.3.719/mud/lp-245/doc/sefun/
ldmud-3.3.719/mud/lp-245/log/
ldmud-3.3.719/mud/lp-245/obj/Go/
ldmud-3.3.719/mud/lp-245/players/lars/
ldmud-3.3.719/mud/lp-245/room/death/
ldmud-3.3.719/mud/lp-245/room/maze1/
ldmud-3.3.719/mud/lp-245/room/sub/
ldmud-3.3.719/mud/lp-245/secure/
ldmud-3.3.719/mud/sticklib/
ldmud-3.3.719/mud/sticklib/src/
ldmud-3.3.719/mudlib/deprecated/
ldmud-3.3.719/mudlib/uni-crasher/
ldmud-3.3.719/pkg/
ldmud-3.3.719/pkg/debugger/
ldmud-3.3.719/pkg/diff/
ldmud-3.3.719/pkg/misc/
ldmud-3.3.719/src/
ldmud-3.3.719/src/autoconf/
ldmud-3.3.719/src/ptmalloc/
ldmud-3.3.719/src/util/
ldmud-3.3.719/src/util/erq/
ldmud-3.3.719/src/util/indent/hosts/next/
ldmud-3.3.719/src/util/xerq/
ldmud-3.3.719/src/util/xerq/lpc/
ldmud-3.3.719/src/util/xerq/lpc/www/
ldmud-3.3.719/test/generic/
ldmud-3.3.719/test/inc/
ldmud-3.3.719/test/t-0000398/
ldmud-3.3.719/test/t-0000548/
ldmud-3.3.719/test/t-030925/
ldmud-3.3.719/test/t-040413/
ldmud-3.3.719/test/t-041124/
ldmud-3.3.719/test/t-language/
This file lists all changes made to the game driver in all glory detail.
See the file HISTORY for a user-oriented summary of all the changes.

30-May-2009 (LDMud Team)  (3.3.719)
  - Created snapshot.

29-May-2009 (Gnomi)
  - (call_out.c) Preserve the order of call_out()s.
  - (mudlib/deprecated/hash.c) Added sefuns md5() and sha1().
  - (configure) Added a bunch of quotation marks.

28-May-2009 (Zesstra)
  - Added sefun cat(), updated documentation of cat().
    To reduce the workload of our users we supply implementations of
    deprecated and removed efuns. This time: the deprecated efun cat().
    (mudlib/deprecated/*)
  - Removed a configure check for ancient gcc on AIX.
  - Added checks to configure for the volatile keyword and VLAs.
  - Check the compiler for support of -fwrapv and enable if supported (enables
    a fully defined overflow/wrap behaviour of signed integers (#635).
  - Support for using mmap() to get memory from the system (slaballoc):
    sbrk() and brk() are obsoleted and some systems (like Darwin) don't have a
    working implementation anymore. If sbrk/brk() are not usable, but mmap()
    is available, use mmap() for mapping anonymous memory which we then use.
    If mmap() is not available, use the old fallback (system malloc()).
    Changed some precompiler checks for SBRK_OK, which should be
    REPLACE_MALLOC. (#640)
    (slaballoc.c, xalloc.c, configure.in)
  - Support for using mmap() to get memory from the system (smalloc). (#640)
    (smalloc.c)
  - Removed amalloc/afree(), MALLOC_ALIGN and MEM_ALIGN.
    Our amalloc() had errors and never worked as intended. As the driver does
    not need more alignment than guaranteed by the allocators, amalloc() was
    removed (see commit log for details).
    (xalloc.c, slabmalloc.c, smalloc.c, sysmalloc.c, xptmalloc.c)

27-May-2009 (Gnomi)
  - (ed.c, comm.c) Put ed sessions into the input_to list of interactive
    objects, so now they have a common noecho and prompt handling. (Bug #522)
  - (call_out.c, backend.c) Corrected the timing of call_outs from inside
    a heartbeat. (Bug #375)
  - (comm.c) Allow sending \0 with binary_message(). (Bug #71)
  - (comm.c) Enable IAC quoting by default, allow enabling '\0'
    and disabling '\n' in connection charsets.

26-May-2009 (Fuchur)
  - (ed.c) Fix bogus reference increment in clear_ed_buffer_refs()

26-May-2009 (Zesstra)
  - (func_spec) Marked efun cat() as deprecated. (#637)

19-May-2009 (Gnomi)
  - (prolang.y, interpret.c) Corrected the handling of implicit context
    variables in nested inline closures and allowed the initializers
    of explicit context variables to reference other explicit context
    variables. (Bug #631)
  - (main.c, comm.c) Set the close-on-exec-flag on open file descriptors,
    so they are not passed to erq. (Bug #629)
  - (pkg-tls.h, pkg-openssl.c, pkg-gnutls.c, main.c, configure)
    Allow TLS to be deactivated per default or command line. (Bug #479)

18-May-2009 (Gnomi)
  - (pkg-xml2.c, arraylist.c, configure) Added support for XML parsing
    using libxml2. (Bug #538, thanks, Bardioc!)
  - (interpret.c) Ignore any arguments passed to a variable closure
    instead of throwing an error. (Bug #612)

12-May-2009 (Fuchur)
  - (object.c) compile fix for !USE_NEW_INLINES
  - (prolang.y) forbid accessing closure arguments from within the
    closure's context.
  - (prolang.y) Fix infinite loop when redefining a closure argument
    in its closure's context.

11-May-2009 (Gnomi)
  - (sprintf.c) Don't rely on overflow, as gcc optimizes away overflow checks.

10-May-2009 (Zesstra)
  - (smalloc.c, slaballoc.) Replaced SINT by GRANULARITY
    The define SINT was ill-named. All occurences were renamed to GRANULARITY
    which describes the semantics of the define much better and it is now
    defined as being sizeof(word_t).
    Additionally, MEM_ALIGN is now defined as being the same as GRANULARITY.
  - (xalloc.c) Replaced define by enum.
    The defines for the header fields of memory blocks were replaced by an enum.
    Additionally a comment about word_t is added.
  - (xalloc.c) Fixed syntactial errors in pre-compiler statements.
    Because MEM_ALIGN is now a sizeof() expression, it can't be used in
    conditional compilation. Replaced them by real if() (which are eliminated
    by the compiler because their expression is constant).
  - (object.c) Fixed buffer overflow in save_svalue() (#634)
    save_svalue() used PRIx16 to print the exponent of a float. Unfortunately,
    on some systems PRIx16 is %x, although int16_t is a short. This causes a
    signed conversion (which keeps the value) and then 0xffffffff is written.
    Even if the buffer is large enough, upon restore with SCNx16 (%hx) a wrong
    value would be restored. *args*
    Additionally all sprintf(), which write into number_buffer were replaced
    by snprintf().

06-May-2009 (Zesstra)
  - (hosts/) The hosts/ directory was removed.
    Removed the whole hosts/ directory because it wasn't maintained for a long
    time and most of the systems were anyway dead for a long time (#625).
    This removed --enable-use-system-crypt as well (#624).
  - Removed checks and special code for OS2 and __EMX__.
  - Removed check for MSDOS.
  - Removed checks and special code for __BEOS__.
  - Removed checks and special code for AMIGA.
  - Removed checks and work-arounds for very old gcc compilers (2.x, <3.2).
  - Removed checks and special code for SunOS4 (The last release of SunOS4
    was in 1994.)
  - Removed checks and special code for Ultrix.
  - Removed MSDOS filesystem semantics (Checks for MSDOS_FS and special
    behaviour (e.g. \\ as path separator).
  - (prolang.y) Another fix in insert_pop_value().
    In case of F_NUMBER was the operation itself not taken into account.
    Replaced hard-coded numbers by the appropriate sizeof() in all other cases
    as well.

05-May-2009 (Zesstra)
  - (prolang.y)
    Fix inconsistent F_NUMBER generation (#628).
    The compiler generates F_NUMBER at more than one places. ins_number()
    only writes a int32 into the bytecode, all the other places write a p_int,
    which interpret.c expects.
    The patch adds ins_p_int(), upd_p_int() and read_p_int().
    ins_number() now calls ins_p_int() upon generating the F_NUMBER instruction.
    Additionally upon storing a number (L_NUMBER) and in the unary '-'
    upd_p_int() is called instead of a direct memcpy(). (memcpy() is a bit
    faster, but I think it is much more risky to forget a place to change...)
  - (prolang.y) Fixed insert_pop_value().
    insert_pop_value() removes the last value from the stack. If possible, it
    patches the code to prevent that value from being computed at all (by
    removing the last expression). Unfortunately the function assumed that all
    operations have no data following in the bytecode. This patches changes it
    and enabled optimization/removal of operations with data.

05-May-2009 (Gnomi)
  - (lex.c, efuns.c) Improved numeric overflow detection. (Bug #630)
  - (pkg-gnutls.c) Don't abort on EINTR or EWOULDBLOCK.

04-May-2009 (Zesstra)
  - (efuns.c, efuns.h, func_spec, string_spec, doc/, mudlib/)
    Added new efun: configure_driver() and documentation.
    configure_driver() will configure variuous aspects of the driver at run-time.
    The first settings available is now the soft and hard memory limits.
  - (smalloc.c, slaballoc.c, sysmalloc.c, xptmalloc.c)
    Added soft and hard memory limits in output of then 'malloc' command.
  - (object.c)
    Fix for float corruption in restore_svalue().
    We use 32 bit mantissas and 16 bit exponents for our floats. Ensure to
    write and read fixed-width types in save_svalue() and restore_svalue().
    Fixes #627, where restore_svalue() interpreted the 16bit integer for the
    exponent as 32bit integer, resulting in data corruption if the exponent
    was negative.
  - (svalue.h)
    The defines READ_DOUBLE, SPLIT_DOUBLe and STORE_DOUBLE were exchanged
    by static inline functions.
    STORE_DOUBLE_USED is not needed anymore and defined empty.
    Additionally, SPLIT_DOUBLE returns now the mantissa as p_int instead of long.
  - (interpret.c)
    The compiler stores float literals with PUT_INT32 and PUT_SHORT. Reading
    them from the bytecode was done by memcpy(). Some conditional compilation
    was required to read the correct datatypes. This patch implements an old
    TODO and makes F_FLOAT use the LOAD_INT32 and LOAD_SHORT macros from
    bytecode.h.

19-Apr-2009 (Gnomi)
  - (pkg-tls.c) Set this_interactive() when executing the callback
    after handshaking and print the prompt afterwards, so it looks the
    same as a normal logon() call.
  - (closure.c, interpret.c) New opcodes F_CALL_CLOSURE and F_POP_SECOND
    for calling more complicated closures like lambda, inherited lfun
    and context closures from within a lambda closure. (Bug #613)

16-Apr-2009 (Gnomi)
  - (comm.c, interpret.c, doc/) Made the maximum write buffer size
    configurable per interactive via a new efun configure_interactive.
    New optional driver hook H_MSG_DISCARDED to inform the master about
    discarded messages and send a custom error message to the interactive.
    Already compressed packages wont be discarded (Bug #297).

15-Apr-2009 (Gnomi)
  - (pkg-gnutls.c) Support for older versions of libgnutls.
  - (port.h, object.c)
    Savefiles are written in binary mode, if the host system supports any
      such notion (O_BINARY exists). Additionally, they are read as binary
      as well, if it is supported. (Note: POSIX conforming systems do not
      distinguish between 'text' and 'binary' modes, this is only relevant
      to Cygwin.)

14-Apr-2009 (Gnomi)
  - (doc/driver/predefined) Corrected description of __PATH__(n).
  - (mk-patchlevel.h) Call version.sh in the current directory.
  - (interpret.c) The size of big switch structures was miscalculated
    on LP64 platforms. (t-0000622.c)

12-Apr-2009 (Gnomi)
  - (efuns.c, pkg-openssl.c, pkg-gcrypt.c) Moved hash() and hmac()
    from pkg-openssl.c to efuns.c and implemented them also using
    libgcrypt or the internal MD5 and SHA1 routines (bug #52).
  - (efuns.c) fixed a memory leak in hash() and hmac().
  - (efuns.c) hash() now costs 10 ticks per iteration.
  - (efuns.c) sha1() calculated wrong hash values with multiple
    interations.
  - (doc/efun) Marked md5() and sha1() as obsoleted by hash().
  - (pkg-openssl.c) Don't set a just queried client CA again. (Bug #583)

10-Apr-2009 (Gnomi)
  - (pkg-gnutls.c) Implemented tls_refresh_certs and tls_check_certificate
    with GnuTLS.

09-Apr-2009 (Gnomi)
  - (interpret.c) Wrongly calculated the jump offset of the default
    label in big switches due to a sign error (maybe #622).
  - (exec.h) Another value for NAME_CROSS_DEFINED so that it doesn't
    conflict with FUNSTART_MASK (large programs could hit that bit).

08-Apr-2009 (Gnomi)
  - (pkg-tls.c) Set command_giver when executing the callback
    after handshaking (Bug #499).

07-Apr-2009 (Gnomi)
  - (pkg-tls.h) Corrected the definition of tls_check_certificate.
  - (pkg-gnutls.h, pkg-openssl.h) Forgot an include.
  - (main.c) Removed a superfluous pointer dereference.

21-Mar 2009 (Gnomi)
  - (pkg-tls.c, pkg-openssl.c, pkg-gnutls.c) Separated code for GnuTLS
    and OpenSSL.

15-Mar-2009 (Fuchur)
  - (test/inc/deep_eq.inc)
    Implement deep equality for the testsuite.
  - (test/t-efuns.c)
    Add a few tests for map().
  - (array.c, strfuns.c, structs.c, efuns.c, doc/efun[.de]/map[.de])
    Implement map(*, mapping, idx). (#367)

12-Mar 2009 (Zesstra)
  - (slaballoc.c, smalloc.c)
    Fixed a bug in esbrk() during memory allocation, where SINT
    (sizeof(word_t)) was not taken into account in the calculation of a block
    size, leading to crashes afterwards. (#611)
  - (efuns.c)
    Fixed an off-by-one buffer overflow in v_sha1(). Actually removed the \0
    written after the buffer, because it was not needed.

10-Mar 2009 (Zesstra)
  - (pkg-idna.c)
    Fixed the evaluation of the arguments of f_idna_stringprop() and removed a
    memory leak, because the argument string was not free'd. Additionally
    avoided to put a return value on the stack in case of an error (#498)

03-Mar-2009 (Zesstra)
  - (actions.c, configure.in, config.h.in, lex.c)
    Made the maximum length of commands configurable.
      COMMAND_FOR_OBJECT_BUFSIZE was renamed to MAX_COMMAND_LENGTH and
      made configurable at compile time via the --max-command-length, 
      defaulting to 1000.
    Added a permanent define __MAX_COMMAND_LENGTH__

28-Feb-2009 (Zesstra)
  - (xalloc.c|h, smalloc.c, main.c, lex.c, slaballoc.c, backend.c,
      string_spec, mudlib/sys/rtlimits.h, src/settings*, doc/master/)
    Renamed --max-malloced to --hard-malloc-limit and  MAX_MALLOCED to
    HARD_MALLOC_LIMIT_DEFAULT and changed the mud configurations.
    Introduced a --soft-malloc-limit/SOFT_MALLOC_LIMIT_DEFAULT
    Added set_* and get_memory_limit() and related constants for managing the
    memory limits
    Added check_for_soft_malloc_limit() to check the soft memory limit
    Added notify_lowmemory_condition() to call low_memory() in the mudlib master
    Added calls to notify_lowmemory_condition() and
      check_for_soft_malloc_limit() in the ba ckend cycle
    Added documentation for new memory limit and low_memory().
    
27-Feb-2009 (Fuchur)
  - (settings/default)
    Sync options with configure.
  - (autoconf/configure.in)
    Don't replace unspecified defaults by 'no' anymore.
    Fix some quoting issues.
    Add help messages for all custom options.
    Remove a few unused options.

15-Feb-2009 (Zesstra)
  - (port.c)
    Check results of gmtime() and localtime() and return NULL, if NULL is
    returned.
  - (efuns.c)
    Check results of gmtime(), localtime(), time_fstring() and utime_string()
    for being NULL and raise a runtime error. (#587)
  - (test/inc/testarry.inc, test/t-mantis.c)
    Added tests for the efuns affected by bug #587.
    Added an test flag TF_DONTCHECKERROR for tests which must not crash the
    driver but may cause a runtime error or not.

31-Jan-2009 (Fuchur)
  - (test/run.sh, test/t-0000604.sh)
    Add Test for #604

31-Jan-2009 (Zesstra)
  - Fixed german manpage for unique_array() which contained german and english.

30-Jan-2009 (Fuchur)
  - (main.c)
    Fix bug building erq_args, which could cause memory corruption. (#604)

29-Jan-2009 (Gnomi)
  - (access_check.c, comm.c, main.c)
    Made access control a runtime option.

28-Jan-2009 (Gnomi)
  - (backend.c)
    !-escaped commands are treated specially even
    if the player object doesn't have an environment.
  - (comm.c)
    Correctly detect if input_to() was called more than once
    in the same execution thread (Bug #535).

27-Jan-2009 (Gnomi)
  - (xalloc.c)
    realloc() should also consider the xalloc overhead, when
      assessing the available space.
  - (main.c)
    Corrected --longhelp output of TLS options.
  - (comm.c, configure)
    Removed support for write threads.

18-Jan-2009 (Zesstra)
  - (pkg-mysql.c)
    Fixed corrupted results of db_conv_string(). (#602).

17-Jan-2009 (Zesstra)
  - (efuns.c)
    Relaxed syntax check in v_trim() to allow a 0 as <ch> for trimming 
      "\0" (#473)

17-Jan-2009 (Fuchur)
  - (efuns.c, func_spec, mudlib/sys/debug_info.h, doc/efun/debug_info,
    doc/efun.de/debug_info.de)
    use debug_info instead of new get_eval_number() efun.
  - (efuns.c, func_spec, interpret.c, interpret.h, doc/efuns/get_eval_number,
    doc/efuns.de/get_eval_number.de)
    add get_eval_number efun.
  - (backend.c, comm.c, interpret.c, object.c)
    call mark_(start|end)_evaluation() in various places (#476)
  - (prolang.y)
    check return value of verify_declared() - fixes a crash in t-language

17-Jan-2009 (Gnomi)
  - (object.c)
    Save_object without a filename removed one too many elements
    from the stack. (Bug #595)
  
16-Jan-2009 (Zesstra)
  - (config.h.in, lex.c)
    Enforce the possible value range for ITABLE_SIZE (256 - SHRT_MAX/32768).
      Fixes issues of not finding identifiers in the table if the table is to
      large. (#558)
    Updated documentation in config.h.in to reflect this.
    Corrected the manpages for read_file(). (#592)

14-Jan-2009 (Gnomi)
  - (comm.c, pkg-mccp.c, configure)
    Use of write buffers without the need for threads.
  - (object.c)
    Made restore_value reentrant. (Bug #548)
  - (prolang.y)
    Removed useless code.
  
14-Jan-2009 (Zesstra)
  - (doc/driver/limitations)
    Started to assemble a list of non-configurable limits - to be extended...
  - (exec.h, object.c, closure.c, interpret.c)
    Changed some code defines from exec.h to static functions and
      constants to an enum.
    Introducing a properly typed CROSSDEF_NAME_OFFSET() solves crash on LP64
      platforms in functionlist(). (#559)
    Renamed SEARCH_FUNCTION_INHERIT to search_function_inherit and return the
      pointer to the inherit structure.
  - (smalloc.c)
    Fixed some warnings about wrong format specifiers reported by Bardioc.

13-Jan-2009 (Zesstra)
  - (simulate.c)
    Reallowed empty object names (/.c) (#525)

12-Jan-2009 (Lars Duening)  (3.3.718)
  - Created snapshot.

06 Jan 2009 (Fuchur)
  - (util/xerq/erq.c, util/xerq/defs.h)
    Remove dependency on the driver's random number generator - the
    libc one should serve us just fine.

04-Jan 2009 (Zesstra)
  - (interpret.c, interpret.h)
    Changed ASSIGN_EVAL_COST to a static inline function assign_eval_cost_inl()
      and use it consistently in interpret.c.
    Changed MAX_SHIFT to a static const.
  - (mstrings.h, mstrings.c, strfuns.c)
    Changed some code defines to static inline functions.
    Renamed the variables mstr_tabled and mstr_untabled to mstr_tabled_count
      and mstr_untabled_count. (They had the same name as the old defines which
      are now functions).
    Removed unused and now superfluous ref_mstring_safe, mstring_ref(),
      deref_mstring_safe, mstring_deref(), because ref_mstring() and
      deref_mstring() can now handle arguments with side-effects.
    Added some casts to remove the const from const arguments when passing them
    off to get_txt(). (Don't worry, it is only cosmetic and temporary.)
  - (random.h, random.c, main.c, autoconf/configure.in, config.h.in, efuns.c,
      random/*)
    Exchanged the Mersenne Twister (pseudo random number generator) by the
      SIMD-oriented Fast Mersenne Twister (SFMT) to support random numbers up
      to 2^63-1 on 64 bit platforms:
      http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/SFMT/
      Additionally, the period length can be configured now. The SFMT
      faciliates a better equidistribution and a faster recovery from a
      0-excess state as well. (Bug #527)
    Added the possibility to seed the PRNG from arbitrary files or devices by
      using the commandline option --randomdevice. The default device is
      /dev/urandom. If that is not readable, the driver falls back to seed the
      PRNG with the system time.

03-Jan 2009 (Zesstra)
  - (efuns.c, efuns.h, func_spec)
    Extended present_clone() to optionally search for the <n>th object in the
    environment.
  - (port.h)
    Cleaned up handling of gcc attributes (Assumption: gcc < 3 are out of use
      now), added __attribute__ define which evaluates to nothing if gcc is
      not used.
  - (make_func.y)
    Added NORETURN attribute to yyerror() and fatal()
    Changed fatal() from int to void.
  - (closure.c, interpret.c, simulate.h )
    Added NORETURN attribute to lambda_cerror(), lambda_cerrorl(),
    stack_overflow(), throw_error(), 
  - (port.h, main.h, comm.c, strfuns.h, closure.c)
    Added the format attributes to: time_fstring(), strbuf_addf(),
      vdebug_message(), comm_fatal(), lambda_cerror(), lambda_cerrorl()
  - (xalloc.h)
    Added the warn_unused_result attribute to xalloc_traced(),
      rexalloc_traced(), pxalloc_traced(), prexalloc_traced().
  - (mregex.c, mstrings.c, simulate.c)
    Fixed some wrong format specifiers which gcc found after using the format
    attribute on strbuf_addf().

30-Dec 2008 (Zesstra)
  - (array.h, comm.c, smalloc.c, slaballoc.c, xptmalloc.c, xalloc.c,
      sprintf.c)
    Changed some code defines and pre-compiler constants to static inline
    functions and enums (partially from Largo, thanks!)

26-Dec 2008 (Zesstra)
  - (object.c)
    Fixes a forgotten increment of a ref count in f_rename_object().
    
24-Dec 2008 (Gnomi)
  - (ed.c)
    The reference count of the filename and the exit function
    wasn't cleared in a GC. (Bug #398)
  - (prolang.y)
    Switch now explicitly expects case/default statements in the switch
    block and puts the non-case statements afterwards into their own
    block scope. (Bug #584)
  
15-Dec 2008 (Zesstra)
  - (object.c)
    Fixed potential crashes in rename_object() and replace_program() due to
    stack overflows. (Bug #581)

14-Dec 2008 (Gnomi)
  - (src/interpret.c, src/autoconf/*)
    Added option to show the evaluation costs in the stacktrace.
  - (src/pkg-iksemel.c, many files)
    Added support for XML parsing with iksemel. (Bug #538, thanks, Bardioc!)
            (Zesstra)
  - (efuns.c)
    Fixed potential crashes due to stack overflows in process_string(),
    regexplode(), regexp() and present_clone(). (Bug #578)
  - (interpret.h, interpret.c, efuns.c, mudlib/sys/debug_info.h,
    doc/efun/debug_info, doc/efuns.de/debug_info.de)
    Added control_stack_depth() to determine the number of frames on the
    control stack and added flag DIT_CURRENT_DEPTH to
    debug_info(DINFO_TRACE,...).
  - (interpret.c)
    Replaced call to exit() by a call to fatal() in asster_master_ob_loaded()
    to allow core dumpes to be written in cases when the master object could
    not be loaded and there is no destructed master as well. (Bug #570).
  - (simulate.c)
    Fixed potential crash due to stack overflow in load_object(). (Bug #580).

13-Dec 2008 (Zesstra)
  - (pkg-mysql.c)
    Allocate temporary memory for the temporary string in f_db_conv_string()
    on the heap, because the string is user supplied and calling the
    function with a large string may cause a crash due to stack overflow.
    (Bug #582)
  - (efuns.c, strfuns.c)
    Corrected format specifiers in errorf() calls.

12-Dec 2008 (Zesstra)
  - (port.h, port.c, efuns.h, efuns.c, func_spec, gcollect.c)
       added mkime(), an efun which converts a date/time information as
       returned by local_time() to a unix timestamp (integer value).
       added strftime(), an efun which converts a timestamp to a formatted
       string using a format string with a variety of format specifiers.
       changed caching behavious for ctime(): cache is now in the efun, not in
       port.c which spares the driver to search for the shared string and
       saves about 85% of execution time in case of cache hits. Removed
       caching in case of millisecond precision as cache hits are rather
       unlikely.
       Added handlers for the garbage collection which take care of the cache
       for ctime().
   - (main.c)
       use also locale defined in LC_TIME.

04-Oct 2008 (Zesstra)
  - (object.c)
    Allocate memory for the filename in f_save_object() and f_restore_object()
    on the heap instead of the stack. Use the generic error handler in
    save_object() and the already existing one in restore_object() to free the
    buffer in case of errors. Minor changes in error handling in
    f_restore_object() by pushing the handler earlier onto the stack and using
    it more often. Fixes crash with large filenames. (Bug #576)
  - (comm.c)
    Allocate memory for temporary buffers in send_erq() and send_udp() on the
    heap and not on the stack. Fixes crashes with large arguments. (Bug #577)

26-Sep 2008 (Zesstra)
  - (interpret.c, interpret.h)
    Changed return type of push_error_handler() to svalue_t *.
    Added a simple generic error handler structure for holding a single
      buffer, an error handling function for freeing the buffer and a function
      for allocating memory on the heap and simultaneously pushing the
      corresponding error handler onto the value stack.
  - (efuns.c)
    removed unneeded cast.
  - (efuns.c, pkg-sqlite.c)
    Used new return value of push_error_handler().
  - (backend.c)
    added missing initializers to some statistic_t variables.
  - (strfuns.c)
    x_filter_string(): 
      Removed crash in efun filter() due to stack overflow in case of very
      large strings. (Bug #575)
      Don't return a 0 as result if memory for the result could not be 
      allocated due to an out-of-memory condition.

21-Sep 2008 (Zesstra)
  - (actions.c)
    f_execute_command(): added length of command to error message 'command too
      long'
    Corrected format specifiers
  - (comm.c)
    Corrected format specifiers
    interactive_cleanup(): removed variable e
    add_message(): fixed a potential crash due to a buffer overflow on the
      stack using vsnprint() instead of vsprintf() (and spared the client a
      comm_fatal()).
    f_binary_message(): replaced a fatal() by an errorf() if a string could
      not be allocated. Replaced the error message text as well, because that
      is not a stack overflow (memory for the string is allocated on heap).
  - (xalloc.h)
    Corrected format specifiers.
  - (object.c)
    Corrected format specifiers, removed unneeded casts.
    free_prog(): added refcount, program address and program name to message
      for fatal() in case of negativ refcounts
    v_function_exists(): changed flags to p_int.
    save_array(), register_array(), register_mapping_filter(): changed i to 
      p_int
    restore_svalue(): removed variable tmp while restoring a float.
  - (efuns.c, mapping.c, prolang.y, simulate.c, structs.c, object.c, dumpstat.c)
    Corrected format specifiers
  - (interpret.c, heartbeat.c, simulate.c, call_out.c, comm.c, actions.c,
     backend.c)
      secure_call_lambda(), apply_master_ob(), secure_apply_ob(),
      push_error_context(), errorf(), call_heart_beat(), call_out(),
      replace_program_lambda_adjust(), call_function_interactive(),
      execute_command(), process_objects(): 
      take the address for rt_context from the rt member of the struct
      error_recovery_info, not from the beginning of the struct. Removes
      compiler warning "dereferencing type-punned pointer will break
      strict-aliasing rules".
  - (structs.c)
    struct_t_unique_name(): sprintf -> snprintf
  - (dumpstat.c)
    dumpstat(): length of buffer given to strftime() was one too short.

19-Sep 2008 (Zesstra)
  - (slaballoc.c)
    Changed malloc_increment_size_calls, malloc_increment_size_success,
    malloc_increment_size_total, num_avl_nodes to 'unsigned long' instead of
    'long', they were anyway already printed as unsigned.
    check_free_block(): added some details to an error message.
    Added missing initializers to INIT_SLABENTRY, dummy and dummy2
    mem_dump_extdata(): changed i to unsigned int (removed a warning
      concerning comparison between signed and unsigned types).
  - (interpret.c, lex.c)
    Corrected two format specifier.

18-Sep 2008 (Zesstra)
  - (prolang.y)
    add_string_constant(): Added size to be allocated to an error message
    Corrected a bunch of format specifiers
    Added a missing line break in an error message in add_lvalue_code()
    epilog(): changed size from int to p_int.
    Changed some comparisons between signed and unsigned types in (lines
      12229, 12322, 12935).
  - (lex.c)
    parse_numeric_escape(): Removed a comparison of unsigned long < 0 which is
      never true and in this case not needed.
  - (i-eval_cost.h)
    add_eval_cost_n(): changed a comparison between signed and unsigned types
    
17-Sep-2008 (Zesstra)
  - (simulate.c)
    Corrected format specifiers, removed not needed casts, corrected some
    casts.
    Changed int to p_int in extract_limits(), added range check in
    v_limited() and v_set_limits().
  - (ptrtable.c)
    find_add_pointer(): p_uint is the better choice for converting a pointer

16-Sep-2008 (Zesstra)
  - (port.c)
    Corrected 3 strftime() calls, the given buffer length was one smaller than
    necessary.
    Corrected a format specifier for an mp_int.
  - (ptrtable.c)
    Changed mp_int in find_add_pointer() to p_int because it stores anyway a
    void*
    Correct two format specifiers.
  - (swap.c)
    Corrected some format specifiers.
    Increased field width for the numbers in 'status swap' a bit.
  - (strfuns.c, lex.c)
    Corrected some format specifiers, changed/removed some unneccessary casts.

15-Sep-2008 (Zesstra)
  - (mapping.c)
    corrected a lot of format specifiers
    changed a bunch of int which are assigned a p_int to p_int (f_m_values(),
        add_to_mapping_filter(), resize_mapping(), map_intersect(),
        v_walk_mapping, x_filter_mapping(), x_map_mapping(), f_m_entry(),
        f_unmkmapping(), _free_mapping(), check_map_for_destr(),
        add_mapping(), compact_mapping(), struct set_mapping_user_locals,
        set_mapping_user_filter(), set_mapping_user(), v_m_add(),
        map_intersect_filter(), map_intersect(), v_mkmapping(),
        f_m_reallocate(), f_widthof().
  - (i-svalue_cmp.h)
    changed d in svalue_cmp() to p_int instead of int.

14-Sep-2008 (Zesstra)
  - (interpret.c)
    Moved duplicate code for calculating the caller stack depth in a small
      static function which will be inlined anyway.

13-Sep-2008 (Zesstra)
  - (interpret.c)
    Changed format specifiers for mp_int to PRI*MPINT and for p_int to
      PRI*PINT and changed some specifiers to the native datatype of the
      variable and removed the casts.
    Corrected some unchecked assignments of (m)p_(u)int to int by using the
      driver type instead of int or adding range checks before the
      assignments. Changed some longs to p_int as well.
    Added some precompiler sanity checks for MAX_TRACE, SIZEOF_STACK,
      TOTAL_TRACE_LENGTH and CACHE_SIZE which have to fit into int.
    get_arg() used a static buffer with length of 10 but writes a long
      with %ld. Increased buffer length to 12 and used snprintf()
      instead of sprintf().
    get_line_number_if_any(): changed calculation of pointers to the beginning
      of lambdas to use the more portable offsetof() and to use (PTRTYPE)
      instead of (char*) and (unsigned long) casts for the pointers.
  - (port.h)
    Added check for pre-defined PRId32 to port.h for the (u)int32 type. If it
      is not defined, define our own.
  - (closure.h)
    Include <stddef.h> which defines offsetof() in case it is not a compiler
      builtin (uses by LAMBDA_VALUE_OFFSET).
  - (doc/efun.de/call_other.de)
    Rephrased misleading sentence about __LPC_ARRAY_CALLS__.

07-Sep-2008 (Zesstra)
  - (closure.c, efuns.c)
    Changed format specifiers for mp_int to PRI*MPINT and for p_int to
    PRI*PINT and changed some specifiers to the native datatype of the
    variable and removed the casts. Corrected some format specifiers which
    were signed but the argument were unsigned.
  - (efuns.c) Corrected typo in error message in v_sha1() which reported
    itself as md5().

06-Sep-2008 (Zesstra)
  - (lex.c, object.h, swap.c)  
    Changed format specifiers for mp_int to PRI*MPINT and for p_int to
    PRI*PINT and removed some casts to long and used the correct format
    specifiers for the actual datatype (e.g z for size_t).
  - (sprintf.c)
    changed argument num of num_add() to p_int.
    inserted the correct length modifier for the p_int type into the format
    string for the system sprintf() call. (#528)

10-Aug-2008 (Lars Duening)  (3.3.717)
  - Created snapshot.

10-Aug-2008 (Lars Duening)  (3.3.716)
  - Created snapshot.

10-Aug-2008 (Lars)
  - The 3.3 branch is now considered stable.

08-Aug-2008 (Zesstra)
  - (settings/morgengrauen) Updated file to include the settings currently
    used in MorgenGrauen.

06-Aug-2008 (Gnomi)
  - (files.c) Rewrote copy/move_file due to copyright issues.

26-Jul-2008 (Fuchur)
  - (object.c)
    remove tell_object_str(), and use tell_object() (#471)
    use FMT_STRING in tell_object(), to support \0 characters (#472)

19-Jul-2008 (Zesstra)
  - (array.c, backend.c, comm.c, dumpstat.c, interpret.c, mapping.c, lex.c)
    Changed format specifiers for mp_int to PRI*MPINT and some for p_int to
    PRI*PINT.

18-Jul-2008 (Zesstra)
  - (autoconf/configure.in)
     Removed check for values.h from configure.in and not used HAVE_VALUES from
       port.h - obsoleted by limits+float.h (was TODO)
     Removed self-written check for ANSI-C89 compliant compiler and used
       AC_PROG_CC_STDC.
     Removed self-written checks for uint32_t, ssize_t, size_t, off_t, long
       long and added the corresponding autoconf macros
     Removed obsolete AC_HEADER_STDC
     Added checks for C99 datatypes: (u)int8_t, (u)int16_t, (u)int32_t,
       (u)int64_t, (u)inptr_t, (u)intmax_t.
     Added size checks for intptr_t, intmax_t, long long
     Added some checks for compiler charactestics: stringenize operator in
       preprocessor, typeof. (check for restrict due to problems with
       mk_func.c still disabled)
     Added header check for stdbool.h
     Changed obsolete AC_CONFIG_HEADER to AC_CONFIG_HEADERS
  - (port.h)
     Fixed PHINT_MIN, PHINT_MAX and PHUINT_MAX in port.h. SIZEOF_CHAR_P ==
       SIZEOF_SHORT * 2 they were defined to SHORT_MAX, SHORT_MIN, USHORT_MAX,
       which should be SHRT_MIN, SHRT_MAX, USHRT_MAX.
     Fixed selection of ph_int (short is not guaranteed to be 2 bytes)
     Use inttypes.h and stdint.h if available.
     Use stdbool.h and _Bool for our own Bool if available.
     Removed own typedef for ssize_t as autoconf will provide is with a
       suitable ssize_t if the standard headers don't have one, which is
       anyway very unlikely.
     Added defines for the right format specifiers for sprintf(), sscanf()
       because we should discontinue to use hard-coded ones when working with
       p_(u)int, mp_(u)int and ph_(u)int.

17-Jul-2008 (Gnomi)
  - (comm, interpret, simulate.c) Added flag to set_noecho and secure_apply
       to indicate external events (Bug #534).
  - (interpret.c, string_spec) Removed the 'closures was bound to
       destructed object' error message and clarified the F_UNDEF error
       message (Bug #523).
 
16-Jul-2008 (Zesstra)
  - (comm.c, autoconf/configure.in, config.h.in)
      MAX_OUTCONN is now configurable with an configure switch
      (--with-max_net_connects), closes Bug #486.
  - (object.c) tell_room() sends message to the given environment itself as
    well, if it is marked interactive. Closes Bug #505.
  - (xptmalloc.c)
    use clib_alloc_stat only if REPLACE_MALLOC is set and define
    REPLACE_MALLOC if SBRK_OK is defined.
  - (driver.h)
    SBRK_OK is enforced if ptmalloc is used as memory allocator. ptmalloc has
    no problem with pthreads and does not work without REPLACE_MALLOC right
    now.

12-Jul-2008 (Zesstra)
  - (interpret.h) removed duplicate and inconsistent prototype for
      last_instructions and moved prototype for f_last_instructions() into the
      #ifdef TRACE_CODE block.

11-Jul-2008 (Gnomi)
  - (files.c) write_file doesn't raise an error if the flag is set
       and the file doesn't exist (Bug #512).

10-Jul-2008 (Fuchur & Gnomi)
  - (prolang.y) Incomplete variable clearance after an inner block
       (Bug #537).

10-Jul-2008 (Gnomi)
  - (pkg-sqlite.c, interpret.c, interpret.h) SQLite pragma statements
       are now possible but privileged.
  - (mstrings.c) mstr_n_str() now finds an empty string at the end
       of an input string (Bug #536).

09-Jul-2008 (Fuchur)
  - (object.c) Use xalloc instead of alloca for allocating the parse buffer
       in f_restore_value(). (Bug #532)

07-Jul-2008 (Zesstra)
  - (mregex.c, pkg-pcre.h, config.h.in, autoconf/configure.in)
       Introduced the compile-time constant LD_PCRE_RECURSION_LIMIT and code
       for limiting the amount of recursions in the PCRE package. The purpose
       is to prevent crashes from stack overflows, as the PCRE package may
       recurse heavily. Default is 3000 recursions for systems with about 8MB
       stack size per process. (Bug #524)

04-Jul-2008 (Zesstra)
  - (test/t-0000524.c) Added a test for Bug #524

03-Jul-2008 (Gnomi)
  - (test/*) Added a testsuite and included existing test cases therein.
  - (test/t-0000532.c) Added a simple test for Bug #532 (Zesstra)

01-Jul-2008 (Gnomi)
  - (comm.c) input_to could leak its parameters when it failed (Bug #486).
  - (comm.c) Corrected the argument number in input_to error messages.
  - (driver.h) Corrected the check for SQLITE3_USES_PTHREADS when
       disabling SBRK_OK.
  - (ed.c) The 'r' command leaked the filename (Bug #488).

31-Jun-2008 (Zesstra)
  - (configure.in) Fix configure.in to work with autoconf 2.61 and later.
      (patch from Fuchur, fixes bugs #541, #542)

30-Jun-2008 (Zesstra)
  - (efuns.c) Added actual array size to error message 'Illegal array size'
     in f_regexplode().
  - (hosts/GnuWin32/GnuWin32.h, hosts/GnuWin32/socket.h) 
      Fixed #defines HOST_DEPENDENT_INIT and socket_number. 
      (Bug #497, thanks to Zonk_FF)

05-Jan-2008 (Gnomi)
  - (efuns.c) The target index in the final copy loop must be incremented
       only for actually copied elements.

27-Dec-2007 (Lars Duening)
  - (i-eval_cost.h, efuns.c, lots of files) Replaced the eval-cost
       increment macro with an inline function which does more checks
       to prevent an overflow. Also, to allow proper catch() handling,
       the eval_cost is capped at max_eval_cost+1 (suggested by Gnomi).
  - (efuns.c) Having md5()/sha1() cost 10 ticks per iteration makes too
       long evaluations more unlikely (suggested by Gnomi).

11-Nov-2007 (Lars Duening)
  - (mstrings.c) mstr_rn_str() now allows a starting position at the
       end of the input string (Bug #509).
  - (efuns.c) sha1() and md5() now cost 5 ticks per iteration (Bug #485).
  - (interpret.h, efuns.c, regexp.c) Introduced a macro to increment
       both eval_cost and total_evalcost with a single statement.

11-Nov-2007 (Gnomi)
  - (actions.c) Improvements for the removal of actions added by shadows
       (Bug #514).
  - (prolang.y) After two consecutive inline closures within the same
       function, the line number information was incorrect (Bug #510).
  - (lex.c) Corrected an off-by-one error related to auto-includes
       by moving the line number adjustment from the CHAR_EOF handling
       to the add_auto_include() function (Bug #508).

14-Oct-2007 (Lars Duening)  (3.3.716)
  - Created snapshot.

14-Oct-2007 (Gnomi)
  - (prolang.y, lex.c) UNKNOWN identifiers are kept around until the
       end of the compilation, as some parser rules can look-ahead multiple
       tokens pointing to the same UNKNOWN identifier, so an early free
       will lead to references to invalid memory. Keeping them that
       long is a bit of overkill, but more future-proof (Bug #494).
  - (prolang.y) Struct names are searched only the global namespace
       as that is where structs are defined. Searched in the local
       namespace can get the driver confused with references to
       undefined structs. (Bug #493)
  - (simul_efun.c) If a simul_efun object appeared before being blessed
       explicitely, it may be an old backup copy. This situation is
       now rejected as the variable/function definitions may differ
       subtly. (Bug #489)

13-Oct-2007 (Lars Duening)
  - (interpret, simulate.c) Changed the apply cache counters to 'unsigned
       long' to reduce the possibility of an overflow (Bug #520).
  - (interpret.c) setup_new_frame() now updates the csp->funstart entry
       by itself, instead of having the caller do it. This is not just
       more convenient, but also avoids problems with possible errors
       during its execution (as the error handling will try to create
       a stack trace). (Bug #495)

07-Oct-2007 (Lars Duening)
  - (comm.c) When in charmode, don't attempt to read in as much data
       as the buffer has left space: otherwise the handling of such an
       'overlong command' confuses the charmode engine and causes the socket
       to close prematurely. Yes, this is more a workaround than a real fix
       (Bug #442).
  - (simulate, interpret) The value thrown in a catch is now held in
       the catch context could be leaked if a second error happens and
       is caught in the master::runtime_error() handler (Bug #513).
  - (configure) When testing for libiconv, reference a real libiconv method.
       This catches situations where libiconv exists, but is of the
       wrong architecture.

06-Oct-2007 (Lars Duening)
  - (configure) gentoo Linux requires the '-n' argument for 'tail +2' to
       work correctly (thanks, Juanjo!).
  - (comm.c) Removed a crasher when running with --check-refcounts: References
       by snooping non-interactives weren't counted (Bug #492).
  - (sprintf.c) Removed a 64-bit issue (comparison of two values with
      differing value ranges) (Bug #490)
  - (prolang.y) upd_long() and read_long() weren't 64-bit-safe (even though
       ins_long() already was) (Bug 491).
  - (prolang.y) With the corrections to the inheritance handling done some
       time ago, the lfuns backing inline closure can be again made 'private
       nomask' (Bug #511).
  - (simulate.c) load_object(): The object filename to load must not be
       empty (Bug #500).
  - (mstrings, obtable.c) Made sure that otable uses the same hasher
       as mstring (Bug #500).
  - (object, simulate.c) clone_object(): When initializing a clone's variables
       using #pragma share_variables, really use the variables from the
       blueprint object being given, not relying on the program.
       This allows the handling of inherited blueprint objects with replaced
       programs. (Bug #483)
  - (simulate.c) replace_program(): If the program of a blueprint is replaced,
       the old program's blueprint pointer is NULLed out as it is no longer
       accurate. (Bug #483)
  - (mudlib/uni-crasher/crasher.c) 'New' version from Bug #91.
  - (my-rusage.h, files.c) Removed obsolete macro PROT() (Bug #504).
  - (interpret.c) foreach(int i : <negative number>) now throws an error
      (Bug #503).

03-Oct-2007 (Lars Duening)
  - (mapping.c, object.c) Removed C-99 features.

01-Oct-2007 (Gnomi)
  - (mapping.c) resize_mapping() didn't check for destructed objects as keys,
      which made operations like map-([0]) after an object destruction
      potentially fatal (Bug #517).

30-Sep-2007 (Lars Duening)  (3.3.715)
  - Created snapshot.

04-Nov-2006 (Lars Duening, Philip Hancke)
  - (pkg-tls, main.c) Added new options --tls-crlfile and --tls-crldirectory
       to hold the Certificate Revocation information.
  - (pkg-tls, func_spec) New efun tls_refresh_certs() to reload the
       certificates and certificate revocations.

09-Jul-2006 (Lars Duening)  (3.3.714)
  - Created snapshot.

14-Jun-2006 (Lars Duening)
  - (array.c) Removed a memory leak when array intersection or subtraction
       failed.
  - (mapping, array, interpret.c, prolang.y) Implemented the array/mapping
       intersection.

12-Jun-2006 (Lars Duening)
  - Oh dear, has it been that long?
  - (make_func.y) Modified a case of undefined behaviour in the creation
       of the character classification tables: only 'unsigned char' types have
       a defined overflow behaviour (thanks, Erik!)
  - (configure) -fno-force-mem is deprecated.

09-May-2006 (Lars Duening)
  - (xalloc.c) If the driver runs low on memory, it also prints the
       current object and program in the low-on-memory message.

06-May-2006 (Lars Duening)
  - (pkg-tls) New efuns hash() and hmac() offer flexible hash and HMAC
       calculation if the driver is compiled to use OpenSSL (provided by
       Philipp).
  - (pkg-tls.c) Removed a compilation error occuring with GnuTLS.
  - (lex.c) New macros __OPENSSL__ and __GNUTLS__ are set depending on
       which TLS package is being used.

06-May-2006 (Gnomi)
  - (prolang.y) Corrected the linenumber counting for inline closures.

23-Apr-2006 (Lars Duening)
  - (mstring) The max hash length used is now available as macro constant.
  - (otable.c) Both mstrings and C-strings are hashed with the same max
      length. This corrects a bug with extremely long object names (Bug #466).
  - (structs.c) The calculation of the first part of a struct's hash 
      uses what the mstring code has already calculated.
      
30-Mar-2006 (Lars Duening)
  - (prolang.y) Removed a dead branch.
  - (pkg-tls.c) Removed a possible compiler warning (Bug #464).
  - (prolang.y) Removed a bison warning when structs aren't used.

27-Mar-2006 (Lars Duening)
  - (pkg-tls.c) Added support for GEN_EMAIL, GEN_URI and GEN_DNS
      certificates. tls_verify_callback() now prints diagnostics
      only if the '-d' option was given (thanks, Philipp).
      
18-Mar-2006 (Gnomi)
  - (interpret.c) In apply cache entries for non-existing functions, the
      garbage collector counted the reference to the string name twice,
      causing the use of deallocated memory (Bug #463).

16-Mar-2006  (Lars Duening)
  - (comm.c) Moved the declaration of a variable which was declared in the
      middle of a block - gcc doesn't complain, but it's not ISO-C (Bug #462).

14-Mar-2006  (Gnomi)
  - (closure, object.c, interpret, exec.h, gcollect.c) lfun closures now
      keep track to which program they belong, to avoid ambiguities
      in case of complex inheritance relationships. This also affects
      the savefile format: lfun closures are saved with their inheritance
      path (Bug #443, #444).
  - (prolang.y) If a non-virtual baseclass was inherited multiple times
      with a virtual class inside the inheritance tree, its members
      were merged even though they shouldn't (Bug #422).
  - (prolang.y) The LPC compiler used a global variable for typetracking,
      which caused errors when types changed inside a variable
      initialisation (Bug #394).

12-Mar-2006  (Lars Duening)  (3.3.713)
  - Created snapshot.
  - (comm.c) Master function disconnect() receives the remaining input data is
       passed as the second argument (suggested by Philipp).

08-Mar-2006  (Malcom Tester)
  - (lp-245/obj/master.c) Made the move implementation more robust.

07-Mar-2006  (Lars Duening)
  - (pkg-tls.c) Two modifications to increase reconnect stability (thanks,
      Philipp!).
  - (prolang.y) Extended a LPC compiler warning when function indices
      are adjusted.

06-Mar-2006  (Lars Duening)
  - (backend, comm.c, object) The logon(obj) function moved from
      backend.c into object.c, and was renamed logon_object() - it's
      more sensical this way.
  - (comm.c) If the master::connect() initiates a secure connection
      which gets stuck in the handshake, neither logon() is called nor
      is the prompt printed. Also, if the tls_init_connection() didn't
      set a callback, the driver will provide a callback to logon().
      This way logon() won't be called unless the connection is up
      and running.
  - (mudlib/psyc-tls.c) Example for using the tls_check_certificate()
      efun (thanks, Philipp).

03-Mar-2006  (Lars Duening)
  - (pkg-tls.c) tls_check_certificate() does more interpretation of
      the result and returns better data (provided by Philipp).

01-Mar-2006  (Lars Duening)
  - (interpret.c) A missing return is noted at runtime only once per
      function. This is achieved by runtime code modification, but we
      do that for switch() as well (Bug #430).

28-Feb-2006  (Lars Duening)
  - (pkg-idna) Added support for International Domain Names (provided
      by Philipp - thanks!).
  - (configure, Makefile) Added a target 'install-headers' to install
      all driver LPC header files.
  - (simulate.c) Virtual blueprint objects are guaranteed to have their
      'clone' flag unset.
  - (string_spec, simulate.c) Renamed COMP_OBJ to the more intuitive
      COMPILE_OBJECT.
  - (interpret.c) Removed the stipulation that CATCH_RESERVED_COST
      must be twice as much as MASTER_RESERVED_COST, since the master
      reserve is used automatically anyway (suggested by Gnomi).
  - (efuns.c) sscanf(): The new modifier '+' requires the matching of
      the characters after a field in order to consider the field
      as matched.

20-Feb-2006  (Lars Duening)
  - (Makefile.in) Added a dependency to create patchlevel.h, even if
      the program is made with 'make ldmud'.

20-Feb-2006  (Gnomi)
  - (comm.c) remove_interactive() clobbered the current_object, setting
      it to NULL. It is now preserved (Bug #431).
  - (interpret.c) When executing an efun closure, the tracedepth wasn't
      incremented accordingly (Bug #441).
  - (simulate.c) When executing a non-toplevel callback, the tracedepth
      should not be zeroed out (Bug #441).

08-Jan-2006  (Lars Duening)
  - (make_func.y) When parsing the func_spec file, the preprocessor
      conditionals were handled in a buffer in a no-longer existing
      stack frame. So far, we were lucky, but on a 64-bit machine
      that space was needed by the Bison parser.
  - (driver.h, smalloc.c, slaballoc.c) If the machine uses a 8-Byte
      malloc alignment (e.g. all PowerPC machines), the allocator does
      not replace the system malloc().
  - (mud/lp-245/) Since the recent change to how simul_efuns are called
      (see Bug #419), the LP-245 lib was broken. This has been corrected.

05-Dec-2005  (Lars Duening)
  - (configure, machine.h.in, config.h.in) Added a configuration check
      for SQLite3.
  - (pkg-sqlite, many files) Added SQLite support (Bug #11).

04-Dec-2005  (Gnomi)
  - (prolang.y) Private lfuns no longer hide simul-efuns.
  - (prolang.y) Private lfuns can be hidden by public functions without
      warning, ie. the former are now really invisible to inheritors. This
      also corrects a crasher with multi-level virtual inherits.
  - (prolang.y) Multiple virtual inheritance of the same program with
      changing visibility is now handled with a better calculation of
      the final visibilities. (Bug #362)

04-Dec-2005  (Lars Duening)
  - (interpret.c) Calling an unbound lambda cleaned the control stack
      twice, causing errors (Bug #374).
  - (simul_efun.c) Only public simul-efuns can be called. This was always
      valid for sefuns outside the 256-range, but now also applies to
      normal sefuns as well (Bug #419)
  - (simul_efun, prolang.y, closure.c, interpret.c) The number of direct
      callable simul-efuns is now configurable in the simul_efun.h. I
      also increased it to 65536 from 256.
  - (closure.c) Simul-efuns were still called with call_other instead
      of call_direct.

02-Dec-2005  (Lars Duening)
  - (gcollect.c) Added a log output when all objects are data-cleaned, as
      it might be the cause for some observed slowdowns.
  - (closure.c, interpret.c) For completeness sake: removed the compilation
      errors happening when disabling the new inline closures (Bug #423).

27-Nov-2005  (Lars Duening)
  - (object.c) Efun present(): Modified the <n> search behaviour so that the
      numbering is applied over both inventory and environment
      together. Before, the numbering was individual in each
      space, leading to situations where low-numbered objects in the
      environment were hidden by those in the inventory (Bug #417).
  - (object.c) Efun function_exists(): The 'FEXISTS_ALL' result also contains
      information about the function's type, flags, and number of
      arguments (Bug #410).

26-Nov-2005  (Lars Duening)
  - (efuns.c) Efun sscanf(): Added test whether the constant characters after
      a %-field also match - if not, the %-field is considered unmatched
      (suggested by Largo).
  - (efuns, func_spec) Efuns md5()/sha1(): Accept the number of iterations as
       optional argument (Bug #418).

24-Nov-2005  (Lars Duening)  (3.3.712)
  - Created snapshot.
  - (md5.c) The ROTATE_LEFT macro wasn't 64-bit clean (Bug #413).
  - (interpret.c) Using foreach(), when looping over a mapping with no values,
      or with only the index being extracted, the loop actually loops over the
      mapping and not just the indices copied into an array (Bug #388).
  - (object.c) Efun set_environment(): clear the RESET_STATE flag of
      of the moved object's original environment, if any (Bug #387).
  - (efuns.c) Efun md5()/sha1() can now hash arrays of numbers as well
      (Bug #411).
  - (xalloc.c) The string_copy() function checks if the requested
      memory is actually allocated, throwing an error if not (Bug #397).
  - (simulate.c) Errors during the processing of a fatal() will be
      recognized and treated as double-fatal (Bug #408).
  - (interpret.c) free_svalue() now recognizes the free of nested
      structures and de-serializes them to avoid stack overflows (Bug #416).
  - (Makefile.in, version.sh, patchlevel.h.in) Removed PRCS support.

24-Nov-2005  (Gnomi)
  - (actions.c) When re-using a sentence structure for marker_sent,
       the shadow_ob member wasn't cleared out, causing crashes
       down the road (Bug #0000414).
  - (closure.c) bind_lambda() doesn't ignore unbindable closures
       when the second argument is missing (Bug #407).

09-Oct-2005  (Lars Duening)
  - (closure.c) replace_program_lambda_adjust() forgot to clear the
       object references from the auxiliary lambda it created (Bug #0000412).

08-Oct-2005  (Lars Duening)
  - (closure.c) When freeing bound unbound_lambdas, the code forgot to
       remove the reference to the creator object of the unbound_lambda.
  - (closure.c) Efun symbol_function() leaked an object reference (Bug
       #0000412).
  - (closure.c, object.h) Made the object reference logs a bit more
       expressive.

31-Oct-2005 (Philipp Hancke)
  - (pkg-tls.c) When accepting a SSL connection, request a client
       certificate. The driver itself won't check the correctness,
       but the result will be available in the connection status.

30-Oct-2005 (Lars Duening)  (3.3.711)
  - Created snapshot.

29-Oct-2005 (Lars Duening)
  - (backend.c) The backend call to cleanup_all_objects() is now
       controlled with a low/high watermark logic, to prevent
       repeated calls in consecutive backend cycles: if one cleanup
       didn't remove enough destructed objects, it is unlikely
       that immediately following ones will.
  - (pkg-tls.c) The OpenSSL read/writes are now retried when necessary.
  - (configure) When searching for the mysqlclient library in the
       usual places, the configure script forgot to clear out the 
       cache flag.
  - (smalloc.c) Removed a compilation error when SBRK_OK wasn't defined.
  - (mstrings, many files) The find-in-table statistics were done
       incompletely.
  - (structs.c) The test for struct equivalence now recurses through
       member structs; otherwise changes in an contained struct wouldn't
       be reflected in the containing struct.
  - (prolang.y) Clarified the 'Unknown type' error messages when
       derefencing structs.

19-Oct-2005 (Lars Duening)
  - (pkg-tls.c) tls_check_certificate() now returns the low-level API
      values, and throws an error if the connection is not secure.

11-Oct-2005 (Lars Duening)
  - (erq/erq.c, xerq/socket.c) Corrected compilation warnings.
  - (lex.c) to_int() no longer accepts "x<num>" as valid sedecimal
       notation (Bug #0000402).

10-Oct-2005 (Lars Duening)
  - (backend.c) Added a clear_state() at the beginning of the
    process_objects() loop, so that errors during the cleanup find
    a consistent machine state (Bug #0000405).

09-Oct-2005 (Lars Duening)
  - (simulate.c) If the catch() handling notices an out-of-memory
      situation, the catch() is ignored. This also fixes an endless
      recursion (Bug #0000406).

04-Oct-2005 (Lars Duening)
  - (doc/concepts/overloading) New man page (thanks, Coogan!).

28-Sep-2005 (Lars Duening)
  - (doc/efun/clone_object) Clarified the variable initialisation.

23-Aug-2005 (Lars Duening)
  - (Makefile.in) The PRCS rules first check if PRCS is available.

20-Jun-2005 (Lars Duening)  (3.3.710)
  - (patchlevel.h.in, version.sh, mk-patchlevel.sh, Makefiles)
      Modified the version numbering system to be compatible between
      Subversion and PRCS.

20-Jun-2005 (Lars Duening)  (3.3.709)
  - (xalloc.c) xalloc used REPLACE_MALLOC before it was defined,
      leading to compilation errors on systems supporting it (Bug #0000393).

19-Jun-2005 (Lars Duening)  (3.3.708)
  - (pkg-pgsql, func_spec) Added new efun pg_conv_string(), courtesy
      of Philipp.
  - (efuns.c) Added new flag setting '4' to get_type_info() for closures
      (Bug #0000392).
  - (parse.c) Possibly corrected a refcounting bug in handling prepositions
      (Bug #0000391).
  - (closure.c) Since the operators #'&, #'|, #'^ and #'! are now considered
      efuns, the closure compiler skipped the special treatment of these.
      As an added bonus of the correction, #'| and #'^ can now take
      an arbitrary number of arguments, too. (Bug #0000389)

10-Jun-2005 (Lars Duening)  (3.3.707)
  - (gcollect, backend.c) If the number of destructed pending objects
      exceeds the number of active objects, a cleanup of all objects
      is triggered. Also, the incremental cleanup in each cycle
      cleans at least the number of objects destructed in the cycle.

06-Jun-2005 (Lars Duening)  (3.3.706)
  - (object.c, sprintf.c, structs.c) Removed a couple compilation warnings
      on x86-64.

15-May-2005 (Lars Duening)  (3.3.705 = 3.4.0)
  - (simulate.c) runtime_error(), runtime_warning() and heart_beat_error()
      received a new argument 'caught' (Bug #0000385).

15-May-2005 (Lars Duening)  (3.3.704)
  - (object.c) Single-character operator closures like #'- couldn't
      be restored in arrays due to some outdated hack in the parser
      (Bug #0000384 and #0000386).

15-May-2005 (Lars Duening)  (3.3.703)
  - (sprintf) sprintf("%c", 0) returned an empty string instead of a
      string with the 0 character, because the code used the system
      sprintf() for this formatting internally (Bug #0000378).

14-May-2005 (Lars Duening)  (3.3.702)
  - (sprintf) Printing structures with "%O" or "%Q" in non-compact
      mode also prints the names of the structure members (Bug #0000380).

13-May-2005 (Lars Duening)  (3.3.701)
  - (configure) Added a check to see if the system is using a broken iconv
      (part of glibc 2.0-2.2) - this iconv can throw the driver into an
      endless loop (Bug #0000377).

13-May-2005 (Lars Duening)  (3.3.700)
  - (lex.c) When adding strings in preprocessor conditionals, the lhs
      string was freed twice, causing memory corruption (reported by Tobias).

24-Apr-2005 (Lars Duening)  (3.3.699)
  - (config.h.in, gcollect.c) Added a specific define LOG_NEW_CLEANUP
      to enable the logging of the automatic cleanup activity. This
      is useful if the cleanup is suspicious of hogging the CPU.
  - (main.c, pkg-tls.c) Improved the documentation for the TLS commandline
      options, removed a crasher when only one of the two cert locations
      is specified (thanks, Coogan!).
  - (xalloc.c) Added warning if ptmalloc is used under FreeBSD.
  - (configure) New configuration parameter '--with-tls-path' allows
      to specifiy a non-standard location for the TLS installation.

01-Apr-2005 (Lars Duening)  (3.3.698)
  - (pkg-tls.c) Added FreeBSD 5.4 compatibility (thanks, Ralph!).
  - (simulate, many files) Renamed error() to errorf() due to a collision
      with gnutls.h include files under newer compilers.

01-Apr-2005 (Lars Duening)  (3.3.696, .697)
  - (port.c) Corrected a C99 incompatibility (thanks, Ralph!).
  - (simulate.c, backend) The commands/s and compiled lines/s statistics
       are part of the 'status tables' output.
  - (gcollect.c) Added a missing variable initialisation (thanks, Ralph!).

27-Mar-2005 (Lars Duening)  (3.3.695)
  - (patchlevel.h, main.c, lex.c) Simplified the version number handling
       in anticipation of the 3.4 branch.

27-Mar-2005 (Lars Duening)  (3.3.694)
  - (backend.c) I reintroduced the numeric limit on the number of objects
       to data-clean, as even with the random factor it could happen
       that the driver tries to cleanup hundreds of objects in one cycle.
       The numeric limit is calculated such that all listed objects can
       be cleaned in half of the configured cleanup cycle.

27-Mar-2005 (Lars Duening)  (3.3.693)
  - (slaballoc.c) Corrected the free-steps statistics.
  - (backend.c) The data-cleanup didn't pay attention to the backend
       timing, occasionally causing the driver to clean up thousands
       of objects in one cycle.
  - (gcollect.c) The cleanup of the fixed datastructures (wizlist, driver
       hooks) did not observe the overall cleanup timing - on muds with
       lots of data in the default wizlist entry this lead to annoying
       lags.

25-Mar-2005 (Lars Duening)  (3.3.692)
  - (simulate.c) Modified the callback setup so that efun callbacks
       can take normal lvalues; and timed function/closure callbacks
       take protected lvalues - but not vice versa.

24-Mar-2005 (Lars Duening)  (3.3.691)
  - (gcollect.c) Added a log output for the time it takes to data-clean
       objects.
  - (config.h.in, slaballoc.c) The sorting of the partial slab freelists
       is now configurable by hand.
  - (slaballoc.c) Added weighted-average statistics for number of steps
       per freed block.
  - (interpret, backend.c, call_out.c, efuns.c heart_beat.c, simulate.c)
       Added a statistic (last and time-weighted average) about the total
       execution ticks and time per LPC thread.

20-Mar-2005 (Lars Duening)  (3.3.690)
  - (backend, main, simulate.c) Updated the last-data-cleaned statistics
       to be weighted over time; and generalized the statistics implementation
       in general.

18-Mar-2005 (Lars Duening)  (3.3.689)
  - (backend.c) Improved the synch heartbeat condition expression.
  - (heartbeat.c) I had forgotten to remove all remnants of an exploratory
       change.

17-Mar-2005 (Lars Duening)  (3.3.688)
  - (backend.c) The synchronous heartbeat timing wasn't initialised properly.

13-Mar-2005 (Lars Duening)  (3.3.687)
  - (main, backend.c, heartbeat.c) The ALARM_TIME and HEART_BEAT_INTERVAL
        time are now configurable at compile and start time (based on
        a patch by Gnomi).

12-Mar-2005 (Lars Duening)  (3.3.686)
  - (func_spec, object.c) The efun tell_object() can now take an array,
        mapping, struct or object as second argument, calling catch_msg() in
        the target in that case (Bug #0000354).
  - (func_spec, object.c) The efuns tell_room() and say() can now take a
        mapping, object or struct instead of an array as second argument for
        the catch_msg() mechanism.

09-Mar-2005 (Lars Duening)  (3.3.685)
  - (mapping.c) The hash/hybrid statistics were somewhat off.
  - (gcollect, backend.c, simulate.c) The default time interval for
      a data cleanup is now available as macro in gcollect.h . And
      since we have that time interval, the number-to-process limit
      in process_objects() didn't make much sense anymore.

06-Mar-2005 (Lars Duening)  (3.3.684)
  - (slaballoc.c) Tuned the allocator: the partially-used slab lists
      are now lazily order for better usage.
  - (interpret.c) For an uncallable closure, the code forgot to clean
      out the CSP before throwing the error (Bug #0000374).
  - (doc/efun/snoop) Corrected the description of the return value (Bug
      #0000372).

26-Feb-2005 (Lars Duening)  (3.3.683)
  - (efuns.c) regreplace() didn't update the stack pointers properly,
      causing crashes down the road (reported by Bardioc).

25-Feb-2005 (Lars Duening)  (3.3.682)
  - (mapping.c) Indexing a mapping with strings didn't quite work yet: the
      hash computation didn't take into effect that strings are no longer
      tabled just to use them as rvalue indices.
  - (simulate.c) If a callback didn't have a valid object associated with
      it (e.g. unbound_lambda()s), the code forgot to remove the arguments
      from the stack (Bug #0000370).
  - (simulate.c) Uncalleable closures given as callbacks are now detected
      and cause a runtime error (Bug #0000370).
  - (simulate.c) A runtime in a regreplace() substitution closure leaked
      the regexp structure. I changed the whole thing to automatic
      cleanup (Bug #0000370).

24-Feb-2005 (Lars Duening)  (3.3.681)
  - (mstrings) Re-integrated the stringtable structures into the strings:
      on the whole, the majority of strings will be tabled so reducing
      the overhead for this case is beneficial.

24-Feb-2005 (Lars Duening)  (3.3.680)
  - (mstrings, closure.c, interpret.c) Debugging 3.3.679: reallocating a
      string 'under the hood' is no longer possible as the string data is now
      an integral part of the string structure. This disables the
      mstr_append() optimizations.

21-Feb-2005 (Lars Duening)  (3.3.679)
  - (mapping.c) get_map_lvalue() didn't correctly check the mapping size:
       it checked against the current and not the future size (Bug #0000369).
  - (mapping, simulate.c) Added a statistic for hash and hybrid mappings (for
       now just the count).
  - (mstrings, gcollect.c, array.c, closure.c, i-svalue_cmp.h, interpret.c,
     simulate.c) Simplified the string implementation to reduce the overhead.

21-Feb-2005 (Lars Duening)  (3.3.678)
  - (slaballoc.c, smalloc.c) I hate crashers which don't happen on my machine:
       the merging of the esbrk() result with adjacent free blocks crashed
       the driver (Bug #0000368).

20-Feb-2005 (Lars Duening)  (3.3.677)
  - (configure, mapping.c, simulate) It is now possible to determine
       the max number of mapping entries (keys) in addition to the total
       mapping size (Bug #0000360).
  - (main.c) New commandline option '--max-mapping-keys' to determine
       separately the maximum number of entries in a mapping.

20-Feb-2005 (Lars Duening)  (3.3.676)
  - (smalloc.c) Corrected a crasher in realloc().
  - (smalloc.c, slaballoc.c) New memory allocated with esbrk() is now
       coagulated with existing free memory if possible (Bug #0000364).

20-Feb-2005 (Lars Duening)  (3.3.675)
  - (pkg-tls.c) Removed compilation errors when using GnuTLS.
  - (comm.c) The charmode/noecho mode is changed in remove_input_to()
       only if the first pending input_to() is removed. Hopefully this
       fixes Bug #0000363.

20-Feb-2005 (Lars Duening)  (3.3.674)
  - (prolang, simulate.c) During the compilation of the master object, simul
       efuns are disabled.

20-Feb-2005 (Lars Duening)  (3.3.673)
  - (smalloc.c, slaballoc.c) The memory block size computation failed
       on large blocks, giving bad statistics.

13-Feb-2005 (Lars Duening)  (3.3.672)
  - (pkg-tls.c) Philip provided a tls_check_certificate() efun.

12-Feb-2005 (Lars Duening)  (3.3.671)
  - (pkg-tls.c) My change was premature.
  - (mstrings.c) The printing of percent values was missing a conversion
      to float in order to actually compute the percent values.

11-Feb-2005 (Lars Duening)  (3.3.670)
  - (mstrings.c) The extended string statistics didn't count the tabled
      comparisons correctly.
  - (lex.c) New macro __BOOT_TIME__ expands to the time() the driver
      was booted.
  - (comm, pkg-tls.c) New interactive_t flag 'outgoing_conn' is TRUE for
      connections openened by net_connect(). This is used by TLS (OpenSSL)
      to set the proper state for the session.
  - (slaballoc.c, smalloc.c) When using brk() for core allocation, the
      returned memory address was one word too low.

09-Feb-2005 (Lars Duening)  (3.3.669)
  - (object, simulate.c, backend.c) The list of destructed-but-referenced
      objects is scanned for deallocatable objects only when a flag
      signals that there actually are candidates. This should reduce
      the CPU load when destructed objects accumulate.
  - (mstrings, various files) Added statistics to check how much the
      shared string table actually helps performance. They are printed
      in the 'status tables' command.

07-Feb-2005 (Lars Duening)  (3.3.668)
  - (smalloc.c, slaballoc.c) The large block handler is now capable
      of handling blocks up to 2**32 words. This is especially useful
      on systems using malloc() instead of sbrk() for core memory
      allocation (reported by Menaures).
  - (efuns.c, smalloc.c, slaballoc.c) The extended malloc statistics
      are now separate from 'status malloc' in 'status malloc extstats'
      (Bug #0000358).

01-Feb-2005 (Lars Duening)  (3.3.667)
  - (pkg-mccp.c) In start_mccp_compress(), the interactive pointer
      was used before being set. I moved the set&check forward
       (Bug #0000361).
  - (pkg-tls.c) The success code passed to the TLS-handshake callback
      was incorrect: on success, it was passed as '1' instead of '0'
       (reported by Philipp).

31-Jan-2005 (Lars Duening)  (3.3.666)
  - (xalloc.c) Forgot to remove a fatal() used to debug slaballoc (Bug
       #0000359).
  - (slaballoc.c) Removed compiler warnings (Bug #0000358).
  - (mregex.c) Great - Kerberos has a function 'error_message()' in 
       a global include file (reported by Rajko).
  - (comm.c) Do not print the prompt to interactives which are currently
       negotiating a TLS handshake.
  - (pkg-tls.c) During the execution of a tls-init callback, the callback
       is protected against premature freeing.
  - (interpret.c) The range foreach (i: __INT_MIN__ .. __INT_MAX__)
       now works as well (I added an internal flag for this case to allow one
       extra pass through the loop (Bug #0000355).
  - (pkg-mccp.c) With the telnet machine disabled, it is now possible to
       still use outgoing compression with start_mccp_compression(), assuming
       a suitable client program is used on the other end (suggested by
       Philipp).

30-Jan-2005 (Lars Duening)  (3.3.665)
  - (interpret.c) foreach(i: x..__INT_MAX__) never executed because
       of internal overflow. By changing the meaning of the internal 'count'
       from 'upper limit' to 'iterations left', this overflow was
       avoided (Bug #0000355).

30-Jan-2005 (Lars Duening)  (3.3.664)
  - (xalloc, slaballoc, configure, efuns.c) Added new 'slaballocator'
       which provides a better use of the free small block storage.
  - (interpret.c) When using foreach() on references, the protector
       structure was allocated too small - a stupid typo (Bug #0000353).

22-Jan-2005 (Lars Duening)  (3.3.663)
  - (actions, simulate, gcollect.c) Unused action and shadow sentences
       are no longer held in a freelist, but instead returned directly
       to the memory allocator.

22-Jan-2005 (Lars Duening)  (3.3.662)
  - (efuns.c) Deep-copying a mapping employing shared arrays as keys (e.g. ([
       arr, ([ arr ]) ])) prematurely freed the copied array as the code
       didn't keep track of the copied data itself, but of the svalues it was
       stored in - and for mapping keys these svalues were local variables
       (Bug #0000351).
  - (comm.c) If telnet-negs were turned off in linemode, the driver started
       treating lineends as if in charmode, which the higher routines
       didn't expect (reported by Philip).

19-Jan-2005 (Lars Duening)  (3.3.661)
  - (gcollect.c) When a program was swapped out, the GC didn't clear the refs
       of its name (Bug #0000348).
  - (mregex.c) If a regexp function was asked to use both RE_TRADITIONAL
       and RE_PCRE, and the regexp doesn't compile for both, the resulting
       error leaked some structures (Bug #0000349).

17-Jan-2005 (Lars Duening)  (3.3.660)
  - (gcollect.c) The names of programs of destructed objects didn't
       get their references cleared properly in a GC, leaking the
       program names if the destructed object was held by
       a self-reference (Bug #0000099).
  - (closure.c) Determining the closure location leaked the
       program's name (Bug  #0000347).

16-Jan-2005 (Lars Duening)  (3.3.659)
  - (configure) Corrected the mySQL library check (Bug #0000346).

14-Jan-2005 (Lars Duening)  (3.3.658)
  - (interpret, array.c, mapping.c, parse.c, simulate.c, files.c)
       The new function push_error_handler() simplifies the creation
       of T_ERROR_HANDLER values.
  - (object.c) Exceptions during a restore no longer leak values
       (Bug #0000344).
  - (smalloc.c) The extended large-free statistics was still off.

14-Jan-2005 (Lars Duening)  (3.3.657)
  - (array.c) Efun unique_array() no longer leaks memory if aborted
       by an exception (Bug #0000345).

14-Jan-2005 (Lars Duening)  (3.3.656)
  - (gcollect.c, object.c) The GC forgot to clean out the refcounts
       of the names of the destructed objects, which meant that if
       the destructed object was held by a self-reference, the name
       would receive an extra reference count and leak until the
       next GC (Bug #0000343).

14-Jan-2005 (Lars Duening)  (3.3.655)
  - (backend.c) Tweak to the process_objects() loop: the loop now
       really allows to have a given number of objects being cleant
       per loop, not just checked for being cleanable.

14-Jan-2005 (Lars Duening)  (3.3.654)
  - (smalloc.c) Small block splits now make sure, that the remaining
       block has a minimum size. This size is currently configured
       to 3 words = 12 Bytes, as the driver doesn't need that many
       of the even smaller blocks.
  - (object, gcollect.c, backend.c) The data cleanup is now timed
       independent of the time of the last reference: similar to
       reset the cleanup takes place in random intervals based
       on the configured cleanup-time (or one hour if the cleanup-time
       is 0).

13-Jan-2005 (Lars Duening)  (3.3.653)
  - (util/xerq/erq.c) The erq didn't check if the calculated timeout
       for the next select() had become negative. (Bug #0000342).

12-Jan-2005 (Lars Duening)  (3.3.652)
  - (mapping.c) Indexing a 0-width mapping returned pointers to memory outside
       the mapping, causing weird crashes. The solution is to return pointers
       to the global const1 (when found), or to a local svalue-0 instance
       (when not found and a lvalue is requested) (Bug #0000341).

10-Jan-2005 (Lars Duening)  (3.3.651)
  - (configure) Added yet another path to the search for a mySQL installation.

09-Jan-2005 (Lars Duening)  (3.3.650)
  - (doc/efun/send_udp) Added a note about the blocking behaviour of 
       name lookups.
  - (configure) The mySQL test was not quite correct.

09-Jan-2005 (Lars Duening)  (3.3.649)
  - (configure) Added another path to the search for a mySQL installation.

08-Jan-2005 (Lars Duening)  (3.3.648)
  - (settings/timewarp) New settings file.
  - (mudlib/sys/files.h, files.c) Efun get_dir() can now return
        access times and file modes (suggested by Mats).

08-Jan-2005 (Lars Duening)  (3.3.647)
  - (configure, pkg-mysql.c) Adjusted the search for the mySQL include
        files to allow for local installations (Bug #0000338)

08-Jan-2005 (Lars Duening)  (3.3.646)
  - (func_spec, lex, prolang.y, interpret.c) New pragma 'range_check'
        allows to check the validity of array ranges at runtime - these
        are the range checks currently controlled by the warn_deprecated
        pragma.

08-Jan-2005 (Lars Duening)  (3.3.645)
  - (smalloc.c) Corrected some bugs in the extended statistics.
  - (comm, simulate.c, mudlib/sys/debug_info.h) Added statistics for
        the incoming network traffic, and also display the total
        amount of data sent/received in the 'status tables' command.

04-Jan-2005 (Lars Duening)  (3.3.644)
  - (main.c, doc/driver/invocation, INSTALL) Corrected the documentation
        (Bugs #0000333 and #0000335).

31-Dec-2004 (Lars Duening)  (3.3.643)
  - (mapping.c) Corrected the hashing function so that for efun/sefun/operator
        closures the object information is no longer part of the hash. Without
        that, mappings treat closure keys differently than the '=='/'!='
        operators, which is not a good thing.

31-Dec-2004 (Lars Duening)  (3.3.642)
  - (lex.c) Factored the handling of preprocessor statements and of
        closures out of the yylex switch.

29-Dec-2004 (Lars Duening)  (3.3.641)
  - (closure, object.c) The driver internally now uses the closure creation
        functions as well - there were more places where lambdas were
        initialized by hand than I expected to be.
  - (closure.c) The location determination for closures didn't check
        carefully enough if the pc was correct or not.

28-Dec-2004 (Lars Duening)  (3.3.640)
  - (pkg-mysql.c) Most mySQL efuns are now privileged as ("mysql", "<efun
        name>") (Bug #0000318).
  - (pkg-pgsql.c) All Postgres efuns are now privileged as ("pgsql", "<efun
        name>").

28-Dec-2004 (Lars Duening)  (3.3.639)
  - (interpret) inter_pc is now always visible, as it's needed by the
        closure origination tracking.
  - (closure) Added functions to create basic closure types, primarily
        so that other closure creators (like FinalFrontier's stringcompiler)
        don't have to do it by hand (and break with every change to the
        closure structure).

27-Dec-2004 (Lars Duening)  (3.3.638)
  - (mudlib/sys/tls.h) Corrected (Bug #0000331)
  - (doc/efun/m_values) Explained the lack of predictable order in the result
        (Bug #0000329)
  - (closure, gcollect.c, interpret.c) Non-operator/efun/sefun closures now
        keep a reference to the program location where they are created, for
        more informative printing (error messages and otherwise).

23-Dec-2004 (Lars Duening)  (3.3.637)
  - (comm.c, sys/input_to.h) The input_to() flag INPUT_APPEND allows
        to queue input_to()s (suggested by Volker Behr).

23-Dec-2004 (Lars Duening)  (3.3.636)
  - (lex, efuns.c) Another small correction to the number parsing in to_int():
        negative numbers exceeding the limits are properly mapped to INT_MIN,
        not -INT_MAX. Unfortunately too large negative numbers seen by
        the LPC compiler are still mapped to -INT_MAX due to the lack
        of proper overflow handling in the compiler; however, the compiler
        now emits a warning on these occasions.
  - (comm.c, pkg-tls.c) More TLS bugfixes by Fippo and Peng (Bug #0000138 and
        #0000140).

22-Dec-2004 (Lars Duening)  (3.3.635)
  - (pkg_tls, func_spec, configure) Incorporated the GNUTLS patches from Peng
       and Gawain: use the new gnutls parameter generation if available;
       properly handle threading; don't request a client certificate since we
       don't need it; and the new fun tls_available() returns whether the
       TLS package could be initialized or not (Bug #0000082).

22-Dec-2004 (Lars Duening)  (3.3.634)
  - (func_spec, efuns.c) New efun regexp_package() to determine the
       currently active default regexp package.

22-Dec-2004 (Lars Duening)  (3.3.633)
  - (prolang.y) The no-warn-deprecated opcodes weren't included in the
       size calculations for the lvalue indexing shuffling.
  - (lex.c, efuns.c) The overflow checking in the number parsing routine
       was overeager, causing Evermore to no longer boot. The checking
       now really compares against the largest possible number, instead
       of simply checking the sign (Bug #0000327).

21-Dec-2004 (Lars Duening)  (3.3.632)
  - (lex.c) The number parsing now recognizes overflows and forces these
       numbers to be LONG_MAX (Bug #0000327).
  - (mstrings.c) mstring_realloc_string() (used for example to append
       to strings) didn't check if the string was indirectly tabled,
       potentially freeing memory which was still in use otherwise
       (reported by Bardioc).
  - (settings/evermore) Updated to the latest version.
  - (prolang.y, interpret.c) The array indexing warnings are now controlled
       by the warn_deprecated pragma (Bug #0000325).

18-Dec-2004 (Lars Duening)  (3.3.631)
  - (interpret.c) Assignments to negative-sized ranges now throw
       an error; indexing of ranges with out of bounds limits generate
       warnings (Bug #0000325).
  - (interpret.c) In DEBUG mode: when setting up an inherited call, check
       that the given inherit index is sensible.

17-Dec-2004 (Lars Duening)  (3.3.630)
  - (xalloc) Added a new function prexalloc() to re-allocate permanent
       memory.
  - (pkg-tls.c) The allocator for the TLS package of course needs to
       allocate permanent memory so that the GC won't deallocate
       the library's memory (Bug #0000323).

11-Dec-2004 (Lars Duening)  (3.3.629)
  - (gcollect.c) Closures found to be bound to destructed objects are
       replaced by 0s, not #'undef closures (Bug #0000322).
  - (closure) The function store_undef_closure() is no longer needed.

09-Dec-2004 (Lars Duening)  (3.3.628)
  - (xalloc.c) Modified xalloc() to accept allocations of size 0 (again as the
       C standard demands).

07-Dec-2004 (Lars Duening)  (3.3.627)
  - (pkg-tls.c) Added allocation wrapper so that gnutls allocations can 
       be traced using the driver's mechanisms (thanks, Peng!)
  - (xalloc.c) Modified rexalloc() and xfree() to accept NULL pointers
       as well (as the C standard demands) (Bug #0000132).

06-Dec-2004 (Lars Duening)  (3.3.626)
  - (erq/erq.c) The erq didn't quite use correct data lengths when sending UDP
       packets, either (thanks, Tobias!)

03-Dec-2004 (Lars Duening)  (3.3.624, .625)
  - (erq/erq.c) The erq errorneously assumed a constant data length
       when receiving UDP packets (thanks, Tobias!)
  - (comm.c, object.c) The driver didn't check if the privilege_violation()
       called for input_to() or rename_object() destructed the object
       in question (Bug #0000316).

30-Nov-2004 (Lars Duening)  (3.3.623)
  - (comm.c) Fixed a memory leak when a no-bank input_to was denied (Bug
       #0000143)

29-Nov-2004 (Lars Duening)  (3.3.622)
  - (interpret.c) When indexing a string for assignment, the driver failed
       to duplicate the string, leading to interesting effects if the string
       was used as mapping key (reported by Andre).

27-Nov-2004 (Lars Duening)  (3.3.621)
  - (interpret.c) When calling inherited functions in objects with virtual
       parents, the function adjusting the offsets always returned NULL
       instead of the pointer to the parent. This was a fallout from the
       closure change.

26-Nov-2004 (Lars Duening)  (3.3.620)
  - (Makefile.in, doc/man/ldmud.1) Added the automatic generation of a manpage
       from the drivers '--longhelp' output.
  - (src/bugs, src/done, src/wk) Moved the data from these directories
       into the bugtracker.

26-Nov-2004 (Lars Duening)  (3.3.618, .619)
  - (closure.c) Calls to explicitely inherited lfun closures weren't compiled
       correctly in lambda()s (Bug #0000145).

25-Nov-2004 (Lars Duening)  (3.3.617)
  - (prolang.y) When the new inline closures were disabled, the LPC compiler
       produced incomplete code for the inline closure constants, and
       the interpreter didn't interpret it correctly either.

24-Nov-2004 (Lars Duening)  (3.3.616)
  - (closure, gcollect.c, interpret.c, object.c prolang) Implemented proper
       closures explicitely referencing inherited functions.

22-Nov-2004 (Lars Duening)  (3.3.615)
  - (comm.c) Efun net_connect(): on multihomed machines the created
       socket is bound to the hostname given with the --hostname option (Bug
       #0000137).

15-Nov-2004 (Lars Duening)  (3.3.614)
  - (efuns.c) You learn a new thing every day: I never realized that
       strtol() supports "+34" and similar - efun to_int() can now
       interpret that again, too (reported by Bardioc).

13-Nov-2004 (Lars Duening)  (3.3.613)
  - (lex.c, efuns.c) Embarassing: the number parsing method assumed that the
       string at least started with a digit - this broke to_int().
       (Bug #0000141)

12-Nov-2004 (Lars Duening)  (3.3.612)
  - (pkg-alists.c) Efun insert_alist() no longer returned the insertion
       position for keys not yet in a key array (reported by Bardioc).

11-Nov-2004 (Lars Duening)  (3.3.611)
  - (efuns.c, lex) Efun to_int() now supports the '0x', '0b', and '0o'
       bases (suggested by Steve Goucher).

30-Oct-2004 (Lars Duening)  (3.3.610)
  - (func_spec, object.c) Introduced the (str, n) form for efun present()
    (Bug #0000134).

26-Oct-2004 (Lars Duening)  (3.3.609)
  - (smalloc.c) Ok, ordering the small block freelists was a bad idea - I
      removed that now. Ordering the large block freelists doesn't seem
      to make a performance difference, so I keep it in for now.

24-Oct-2004 (Lars Duening)  (3.3.608)
  - (backend.c) Reduced the frequence of data-cleanup such that at least
      time_to_clean_up seconds (or 3600 seconds) must have passed since
      the last reference.
  - (smalloc.c) smalloc now supports allocations of 0 byte length (needed
      to replace malloc()).

14-Oct-2004 (Lars Duening)  (3.3.607)
  - (comm.c) The NOECHO hook call specified only two arguments when
      three were required (reported by Bardio and Steve G.).

11-Oct-2004 (Lars Duening)  (3.3.606)
  - (mregex.c) Added a number of NULL pointer checks to the deallocation
      of regular expressions (reported by Bardioc, #0000130, #0000135).

29-Sep-2004 (Lars Duening)  (3.3.605)
  - (smalloc.c) Corrected a bug in the SMALLOC_ORDER_FREELIST code for
      small blocks: the code forgot to store the block size into the
      free blocks, which caused the defragment code to do wondrous things
      (reported by Bardioc).

27-Sep-2004 (Lars Duening)  (3.3.604)
  - (pkg_tls.c) Corrected the callback handling for tls_init_connection()
      (Bug #0000131).
  - (driver.h) Added a macro MIN() for those systems which don't have it.

16-Sep-2004 (Lars Duening)  (3.3.603)
  - (config.h.in, smalloc.c, xalloc, main.c, sysmalloc.c, xptmalloc.c)
      New manual config.h macro MALLOC_EXT_STATISTICS enables extended
      block statistics in smalloc. The statistics can be retrieved
      with debug_info(DINFO_DATA, DID_MEMORY), and are also printed as
      part of the 'status malloc' command. This is an experiment to
      see if we can get more information about the small  heap
      fragmentation this way.

15-Sep-2004 (Lars Duening)  (3.3.602)
  - (config.h.in, smalloc.c, main.c) New manual config.h macro
      SMALLOC_ORDER_FREELISTS instructs smalloc to keep its freelists ordered
      by block address. This is an experiment to see if the high heap
      fragmentation can be reduced this way.

12-Sep-2004 (Lars Duening)  (3.3.601)
  - (prolang.y, lex) New pragma (no_)warn_function_inconsistent to control
      the handling of redefined functions which differ in return or argument
      types. This is intended to easen the adaptation of legacy mudlib
      code (suggested by Wayne).

12-Sep-2004 (Lars Duening)  (3.3.600)
  - (prolang.y) When checking the redefinition of inherited variables, do
      allow the redefinition of static inherited variables with other
      static variables (it will generated warning, though). Also the
      equivalency of nosave and static was applied too late (reported by
      Willem).
  - (func_spec, efuns.c, main) Added an 'exit code' argument to the shutdown()
      efun (Bug #0000129).
  - (func_spec, interpret.c, prolang.y) The pragma warn-deprecated is now
      expressed through a prefix bytecode where appropriate (Bug #0000059,
      #0000093).

09-Sep-2004 (Lars Duening)  (3.3.599)
  - (mregex.c) On a collision in the hash table, the regdata_t structure
       was freed with a call to free_regexp() - not good (Bug #0000128).

07-Sep-2004 (Lars Duening)  (3.3.598)
  - (main, mregex.c, simulate.c) The H_REGEXP_PACKAGE hook can now accept
       the value 0 to fall back onto the package defined by the commandline
       arguments/configuration.

06-Sep-2004 (Lars Duening)  (3.3.597)
  - (ed.c, lex.c, mregex) Removed USE_PCRE remnants which among other things
       disrupted compilation (Bug #0000126).

04-Sep-2004 (Lars Duening)  (3.3.596)
  - (mregex, simulate.c, efuns.c) Implemented the concurrent use of both
       regexp packages.

04-Sep-2004 (Lars Duening)  (3.3.595)
  - (configure, main.c, simulate.c) Added the glue to select a default
       regexp package via commandline option or driver hook. The regexp
       logic itself is still unchanged.

04-Sep-2004 (Lars Duening)  (3.3.594)
  - (mregexp, ed.c) Changed the regexp implementation to use a pImpl
       idiom - this will allow to use traditional regexps and PCRE
       in parallel.

04-Sep-2004 (Lars Duening)  (3.3.593)
  - (comm.c, simulate.c) Added new input_to() flag 'INPUT_LOCAL' to switch
      only the driver side input mode between LINE and CHAR (Bug #0000124).

03-Sep-2004 (Lars Duening)  (3.3.592)
  - (interpret.c, simulate.c) Removed memory leaks (thanks, Gnomi!)
      (Bug #0000120).
  - (sprintf.c) Too large fieldsizes or precisions are caught (Bug #0000119).
  - (closure,  object.c) Some operator closures were saved using the wrong
       names, making the restoration impossible. Also, restoring closures
       within arrays wasn't robust enough (Bug #0000118).
  - (comm.c) Clarified the warnings for input_to modechanges for objects
       with telnet disabled (Bug #0000124).
  - (comm.c) When switching out of CHARMODE, the driver accidentally
       discarded any pending input lines after the current one. (thanks,
       Gnomi) (Bug #0000123)

01-Sep-2004 (Lars Duening)
  - (pkg-tls.c) Added a bugfix to the session creation (thanks, Phillipp!)

31-Aug-2004 (Lars Duening)  (3.3.591)
  - (prolang.y) The real correction to the memory corruption problem: it
      happened when an inline closure returned a struct, because the
      compiler derefenced the returntype entry during the cleanup even
      though it was an uncounted reference. The problem however showed
      up only when the compilation failed and the struct involved was
      a private struct, because in all other cases the struct had enough
      references left to survive.

30-Aug-2004 (Lars Duening)  (3.3.590)
  - (prolang.y) The move of the PREPARE_INSERT() in the last patch caused
      the driver to generate faulty bytecode.
  - (prolang.y) Function definitions didn't count the reference for the
      returntype, which lead to memory corruption/crashes when handling
      struct returntypes. Unfortunately now we have a memory leak
      when structs are used as returntypes - there is something to be said for
      using C++...  (reported by Bardioc).

23-Aug-2004 (Lars Duening)  (3.3.589)
  - (prolang.y) Removed a C99 construct which broke compilation on C90
      compilers. I hope. (Bug #0000116).

23-Aug-2004 (Lars Duening)  (3.3.588)
  - (array.c, pkg-mccp.c) Removed compiler warnings (thanks, Andre).

22-Aug-2004 (Lars Duening)  (3.3.587)
  - (interpret.c) Calls from destructed objects to other objects
       (including simul-efun calls) now elicit a warning (Bug #0000113).
  - (configure, config.h, mregex, pkg-pcre, main.c) The driver now tries
       to use the system's PCRE library if available, while offering an
       override to use the builtin package regardless.

21-Aug-2004 (Lars Duening)  (3.3.586)
  - (interpret.c) If a lambda was executed inside a catch() and threw an
       error, the error routines didn't clean up the protective reference
       held in current_lambda (Bug #0000114).
  - (efuns.c) to_string(closure) leaked the closure (Bug #0000114).
  - (ed.c) The 'M' command leaked the regular expression (Bug #0000114).

19-Aug-2004 (Lars Duening)  (3.3.585)
  - (prolang.y, interpret.c, func_spec) Float variables without initializer
       are now properly initialized to float-0 instead of number-0 (reported
       by Bardioc).
  - (pkg-mccp.c) When ending a MCCP connection failed due to an error, the
       zlib datastructures weren't deallocated (Bug #0000111, fix by Alwin).

08-Aug-2004 (Lars Duening)  (3.3.584)
  - (simulate.c) When printing a load-object error with a long filename,
       the message is limited to the length of the error message buffer (Bug
       #0000109).
  - (simulate, xalloc.c) The length of the error message and error format
       buffer are now given by two macros, to facilitate easier adaptation
       of depending program segments.

01-Aug-2004 (Lars Duening)  (3.3.583)
  - (backend.c) If the garbage_collection() couldn't open a passed file,
       the filename was leaked (reported by xtian).
  - (mstrings.c) Corrected the statistics display for itabled strings.
  - (smalloc.c) The allocated small block statistics was confused by
       the mem_increment() feature.

29-Jul-2004 (Lars Duening)  (3.3.582)
  - (lex.c) The macros __FLOAT_MIN__ and __FLOAT_MAX__ now reflect
       the limits for 'double' floats (Bug #0000101).

28-Jul-2004 (Lars Duening)  (3.3.581)
  - (call_out.c) When printing the uid for an object with an error, make
       sure that there is an uid to print (reported by Bardioc).
  - (mudlib/crashleak.c) Donated by Menaures: a modification of the crasher
       object, looking for memory leaks (Bug #0000102).

25-Jul-2004 (Lars Duening)  (3.3.580)
  - (interpret.c) If the struct lookup operator receives arguments of
       the wrong type, it just throws an error instead of crashing the
       driver, as this can happen with careless funcall(#'->)s (Bug #0000097).
  - (efuns.c) to_array('symbol) crashed the driver because it tried to
       free the symbol as a string (Bug #0000097).
  - (interpret.c) The trace collection into an array now uses unlimited
       arrays, otherwise a too-small limit would cause the driver
       to enter an endless error loop (Bug #0000097).
  - (object, gcollect.c) If a save_{object,value} failed and thus
       left a pointer table behind, a following GC would free the table
       without resetting the pointer. The next save_{object, value} would
       then use the freed memory (Bug #0000097).

25-Jul-2004 (Lars Duening)  (3.3.579)
  - (xerq/erq.c) If select() in the main loop was interrupted by a signal,
       the ERQ still proceeded to evaluate the fd-sets.
  - (xerq/execute.c) The debug logging of the execute parameters didn't
       work.
  - (comm.c) If an ERQ callback function accepts an array, the numbers
       are now all passed on positive (range 0..255).

24-Jul-2004 (Lars Duening)  (3.3.578)
  - (xerq/defs.h) ERQ_DEBUG level wasn't properly translated into
       debug output.
  - (xerq/socket.c) Added a few level 2 diagnostics.
  - (interpret.c) Removed two left-over DEBUG diagnostics (reported
       by Bardioc).
  - (comm.c) input_to() didn't properly check its arguments (Bug #0000098).
  - (call_out.c) If a call-out causes an error, all further call-outs for
       the same user are re-scheduled to the next cycle. This is mainly
       meant to stop run-away call-outs causing too-long-evaluations while
       re-scheduling calls to themselves (Bug #0000095).

21-Jul-2004 (Lars Duening)  (3.3.577)
  - (array.c, interpret.c) Removed a number of memory leaks caused by
       runtime errors during array operations which exceeded the max
       array size (Bug #0000096).
  - (comm.c) If input_to() wasn't given a valid prompt, it leaked
       the memory for the internal input-to structure (Bug #0000096).
  - (comm.c) If binary_message() was given an array of non-ints, it leaked
       the memory for the internal message string (Bug #0000096).
  - (bitstrings.c) The bitstring operators would leak the memory for
       the result if encountering an invalid bitpattern (Bug #0000096).
  - (files.c) If tail() couldnt' find the file, it didn't free the
       string with the pathname (Bug #0000096).

16-Jul-2004 (Lars Duening)  (3.3.576)
  - (interpret.c) When printing a warning during the creation of in inline
       closure, the global stack pointer was one too low (thanks, Gnomi)
       (part of Bug #0000091)

14-Jul-2004 (Lars Duening)  (3.3.575)
  - (prolang.y) The 'missing return' warning is no longer triggered if
       a function ends with raise_error() or throw().
  - (comm.c) Efun input_to(): the check for a change in the CHARMODE mode
       did not properly check if the command_giver was valid - this could
       cause a segfault if input_to() was used without an interactive (Bug
       #0000090).
  - (smalloc.c) If the allocation exceeds the numerical limits and the
       allocation is not in MALLOC_SYSTEM mode, a simple diagnostic is printed
       and the allocation fails. This way, an " "*MAX_INT won't crash
       the mud. (Bug #0000086)
  - (array.c) The array allocation now checks if the size of the requested
       array exceeds the numerical limits (part of Bug #0000091)

13-Jul-2004 (Lars Duening)  (3.3.574)
  - (prolang.y) The 'public foo() shadows private bar()' warning no longer
       warns about the __INIT() function (Bug #0000085).
  - (efuns.c) Removed a memory leak in ctime( <vector> ) (Bug #0000087).
  - (simulate.c) In catch(), the check if there are enough evals left
       was done before the reserve had been added to the eval cost. Since
       the handling for this case was changed to a runtime error, this
       caused the error handler to subtract a reserve which wasn't there,
       in the process messing up eval cost handling (Bug #0000088).
  - (simulate.c) The restoration of eval limits didn't handle the case
       of a fixed eval cost (USE_EVAL_COST > 0) correctly if the process had
       used more than the given amount: the total eval cost was set to the
       given amount, instead of adding the amount to the previous eval cost
       value (Bug #0000077).

12-Jul-2004 (Lars Duening)  (3.3.573)
  - (actions.c) Efun remove_action() didn't check if the sentence under
       scrutiny is a true verb or a shadow sentence - this caused a crash
       if a shadow object executed remove_action(1, shadowee) (Bug #0000080).

11-Jul-2004 (Lars Duening)  (3.3.572)
  - (comm.c, actions.c) On a too long message or command, print the
       first 200 characters as debugging aid (Bug #0000078).

10-Jul-2004 (Lars Duening)  (3.3.571)
  - (interpret.c) The tracedepth was always increased, but only decreased
       when traceing was active (#0000070)

10-Jul-2004 (Lars Duening)  (3.3.570)
  - (pcre/) PCRE no longer directly changes the EVAL_COST, instead the
       MATCH_LIMIT option is used to limit the execution of backtracking
       expressions. Updated the documentation. (Bug #0000075)

08-Jul-2004 (Lars Duening)  (3.3.569)
  - (pcre/) Upgraded PCRE to version 4.5; however, there is additional work
       to be done as PCRE 4.5 offers additional features (Bug #0000075)

01-Jul-2004 (Lars Duening)  (3.3.568)
  - (doc/efun/previous_object) Corrected to reflect actual behaviour (Bug
       #0000073).
  - (lex.c) The symbol __MAX_MALLOC__ is set to what is actually set
       in the global 'max_malloced' and not just the configuration
       value MAX_MALLLOCED (Bug #0000069).

29-Jun-2004 (Lars Duening)  (3.3.567)
  - (comm.c) Improved the check for input_to() bitflags on an object with
       telnet disabled so that only changes in the mode are warned about.

21-Jun-2004 (Lars Duening)  (3.3.566)
  - (xalloc)  The memory reserves were allocated with xalloc(), but freed
       with mem_free() - not good (reported by Heiko).
  - (mstrings) Corrected a compiler error (thanks, Ralph!)

14-Jun-2004 (Lars Duening)  (3.3.565)
  - (doc/) Corrected a number of German manpages.
  - (comm.c) net_connect() didn't compile with IPv6 (reported by Fini).
  - (mstrings, object.c) Contradicting the documentation, save_object()
       did not strip a trailing '.c' from the given filename (reported by
       Niflheim@Unitopia) (Bug #00000067).

30-May-2004 (Lars Duening)  (3.3.564)
  - (interpret.c) Calling privilege_violation() with only three arguments
       accidentally instructed the interpreter to pass four (reported
       by Ralph).
  - (simulate.c) limited() accidentally removed all arguments for the
       closure to execute.

30-May-2004 (Lars Duening)  (3.3.563)
  - (smalloc.c) When using PThreads, don't request memory via sbrk() - on
       Linux systems this leads to corrupted memory.
  - (simulate) Added a new runtime limit LIMIT_COST (f-010320).
  - (interpret, simulate) For limited() and set_limits() the limit
       values are passed to the privilege_violation call (f-020131-0).

28-May-2004 (Lars Duening)  (3.3.562)
  - (interpret.c, port.h, util/indent/indent_globs.h) Adapted for gcc 3.4.0
      (thanks, Ralph!).
  - (mud/lp-245) Removed 'missing return value' warnings.

26-May-2004 (Lars Duening)  (3.3.561)
  - (prolang.y) The 'public shadows private' warning now checks only
       for genuinely private functions, not merely hidden ones. This should
       make the warning more accurate.

25-May-2004 (Lars Duening)  (3.3.560)
  - (prolang.y, interpret.c, simulate, string_spec, closure.c) Added
       modifier 'reserve' to the catch() instruction in order to
       specify the reserved amount of eval ticks at runtime (suggested
       by Menaures).

24-May-2004 (Lars Duening)  (3.3.559)
  - (prolang.y) The compiler emits warnings if the functions defined by
       two inherits collide in their visibility. If this produces too
       much output, we will have to control this by a pragma. (suggested 
       by Bardioc).
  - (simulate.c) If a catch() doesn't have enough eval time left
       (less than CATCH_EVAL_COST), this is thrown as an error from inside
       the catch instead of causing the catch to return 0. (suggested
       by Menaures).
  - (efuns.c) Removed compiler warnings (thanks, Guandalug!)

23-May-2004 (Lars Duening)  (3.3.558)
  - (object.c) When restoring structs and the saved data is longer than
       the struct, make sure that the extra values are skipped in the
       data.

23-May-2004 (Lars Duening)  (3.3.557)
  - (configure) Corrected a typo in the --with-udp-port option (thanks,
       LynX).
  - (object.c) When restoring structs, the sizes no longer need to match - 
       the driver restores as many members by position as possible.

23-May-2004 (Lars Duening)  (3.3.556)
  - (efuns, func_spec) The efuns member() and rmember() can take a
       start position.

22-May-2004 (Lars Duening)  (3.3.555)
  - (smalloc.c) With USE_AVL_FREELIST, the AVL tree could develop cycles -
       corrected that (reported by Ralph).

21-May-2004 (Lars Duening)  (3.3.554)
  - (func_spec, object, parse.c) The result of efun deep_inventory()
       can be restricted to a certain depth (suggested by Urv).

20-May-2004 (Lars Duening)  (3.3.553)
  - (config.h.in) Oops, the AVL change to smalloc (3.3.534) was never activated.
  - (smalloc.c) Small block allocated directly from a freelist didn't set
       the GC_FREE flag. As this flag doubles as M_DEFRAG flag, many
       blocks were accidentally considered 'permanent'.
  - (object.c) When writing save files, only the names of structs
       will use the shared-string notation. Other strings are given
       literally for better readability (suggested by Coogan).

19-May-2004 (Lars Duening)  (3.3.552)
  - (comm.c) The H_NOECHO hook is now called only if the target object
      is not destructed.
  - (etc/savefile-parse.pl) Fini provided a Perl script (actually long time
      ago) which can read a LPMud savefile and recreate the data as
      Perl datastructures.

18-May-2004 (Lars Duening)  (3.3.551)
  - (simulate, backend.c, string_spec) Runtime errors are now also passed
      to the master function runtime_warning().

18-May-2004 (Lars Duening)  (3.3.550)
  - (efuns.c) Bah, forgot the 'MTRACE_ARG' to the call of
      mstring_cvt_progname(), so the file didn't compile when MALLOC_TRACE
       was enabled (reported by Ralph).

17-May-2004 (Lars Duening)  (3.3.549)
  - (efuns.c, closure) Efun get_type_info() can now return the name
       of the defining program for a lfun or context closure (Bug #0000010).
  - (configure) Removed double checks for stdint.h and inttypes.h .
  - (wiz_list.c) During a GC, the references for the error filename
       and message weren't cleared.
  - (gcollect) In general, string references weren't cleared during the
       GC (a holdover from when all strings were tabled).

16-May-2004 (Lars Duening)  (3.3.548)
  - (my-stdint.h) I checked for a subtly wrong define here, causing the
       compilation to break on Linux (reported by Ralph).
  - (configure, my-stdint.h) FreeBSD doesn't have stdint.h, but it
       has inttypes.h which serves mostly the same purpose (reported by
       Joseph).

15-May-2004 (Lars Duening)  (3.3.547)
  - (configure, my-stdint.h, sha1.h) Added a test for and a replacement
       of the C99 include file stdint.h, which is required by the sha1
       code (reported by Joseph).

14-May-2004 (Lars Duening)  (3.3.546)
  - (comm.c, simul_efun.c) Corrected compilation errors (thanks, Ralph!)

13-May-2004 (Lars Duening)  (3.3.545)
  - (comm.c, pkg-mccp) A MCCP connection can now be terminated by force from
       the driver.
  - (comm.c, gcollect.c ) USE_PTHREADS: The memory allocations/deallocations
       for the background thread are done using malloc()/free().
  - (configure, smalloc.c) USE_PTHREADS: With threads, smalloc no longer
       attempts to replace malloc() and friends. This way we can
       use smalloc() for main-thread allocations, and fall back on system
       malloc() for sub-thread allocations. In extension, smalloc is again
       the default allocator even if pthreads are enabled.
  - (configure) If pthreads are not requested, don't add the lib to
       link (but still check if it's available).
  - (simul_efun, main.c, interpret.c) Corrected the re-load of the simul
       efun object so that returning 0 from master::get_simul_efun() again
       signals working without such an object.

12-May-2004 (Lars Duening)  (3.3.544)
  - (array.c) My apologies to all involved: I messed up the callback
       handling for unique_array() in 3.3.39 (reported by Ralph and Urv).

11-May-2004 (Lars Duening)  (3.3.543)
  - (main.c, simul_efun.c) If the simul-efun object can't be reloaded at
       runtime, don't terminate the driver (reported by Bardioc).
  - (mregex.c) Corrected a memory leak when using PCRE (reported by Alwin).

10-May-2004 (Lars Duening)  (3.3.542)
  - (mstrings.c) Since the purpose of mstring_unshare() and mstring_dup()
       is to create modifiable string copies, the .hash value is set
       to 0 in the new strings.
  - (doc/efun.de) Updated (thanks, Menaures!)

09-May-2004 (Lars Duening)  (3.3.541)
  - (mstrings) mstr_get_hash() macro now first checks if the hash has
       already been computed before calling the slower mstring_get_hash()
       function.
  - (pkg-tls, comm, func_spec, gcollect.c) tls_init_connection() is now
       able to set up the TLS connection in the background, optionally
       calling a callback function once the attempt fails or succeeds
       finally.

08-May-2004 (Lars Duening)  (3.3.540)
  - (make_func.y) Worked around a bug in the codegeneration on AIX 5.2 for
       both Visual Age C 6 and gcc 2.9.
  - (mapping.c) When looking up string keys, the code only checked if the
       string was tabled, not if it was directly tabled.
  - (mstrings) The hash of a string is now stored with the string data
       and computed on demand. Especially for lookups of strings in the
       string table this should give some advantages.
  - (mregex.c, otable.c) Make use of new mstring hash functions.
  - (interpret.c) When multiplying an array, string elements are now
       longer made tabled.

06-May-2004 (Lars Duening)  (3.3.539)
  - (array.c) Using name-based callbacks for unique_array() crashed
       the driver (reported by Ralph).
   - (mstrings.c) Modified mstring_make_tabled() and mstring_table_inplace()
        so that the strings are always tabled in-place (using indirectly
        tabled strings if necessary). This allows to table a string without
        allocating any extra memory.
   - (interpret.c) Assigning or transferring a string no longer makes
        the string tabled (that's what we have refcounts in them for).
   - (comm.c, efuns.c, gcollect.c, interpret.c, simulate.c) Adapted to the
        no-failure versions of mstring_make_tabled().
   - (doc/concepts/inheritance) Shiny new doc from Lynx (thanks!).

02-May-2004 (Lars Duening)  (3.3.538)
  - (pkg-tls.c) tls_query_connection() returns FALSE on non-interactive
       objects instead of raising an error (suggested by Lynx).

30-Apr-2004 (Lars Duening)  (3.3.537)
  - (lex, prolang.y) The pragma '(no_)warn_missing_return' controls whether
       the driver checks for missing return statements or not; by default
       the check is enable.
  - (prolang.y) If the driver can detect at compile time that a return
       statement is missing, a compile time warning is emitted and the
       code uses the normal F_RETURN0 as default return.
  - (prolang.y) Corrected compilation errors when NEW_INLINES was not
       defined (Bug #0000056)

28-Apr-2004 (Lars Duening)  (3.3.536)
  - (etc/patch-o-matic, settings/forgottendreams) Updated with the latest
       version (thanks, Andre!)
  - (pkg-tls.c) The TLS handshake() is retried when it failed with
       an E_AGAIN or E_INTERRUPTED for GnuTLS, or WANT_READ/WANT_WRITE
       for OpenSSL (thanks, Fippo!) (Bug #0000054)

27-Apr-2004 (Lars Duening)  (3.3.535)
  - (strfuns.c) Efun convert_charset() crashed when given an empty
       input string (reported by Ralph).
  - (configure) When checking for iconv, the script now first checks
       if -liconv is actually needed before looking for the libraries
       (reported by Philipp).
  - (configure) Made the test for non-const in parameter to iconv()
       more reliable ... I hope (reported by Ralph).

27-Apr-2004 (Lars Duening)  (3.3.534)
  - (smalloc.c, config.h, efuns.c) If multiple large blocks of the same
       size are freed, an AVL node is created just for the first one of these
       blocks. The other blocks are held in a double-linked list hanging
       off the AVL node. For now, this feature is activated by
       the macro USE_AVL_FREELIST in config.h. Practive will show if
       the ratio of free blocks to AVL nodes is large enough to make
       this useful. (Bug #0000053)

27-Apr-2004 (Lars Duening)  (3.3.533)
  - (strfuns.c) Efun convert_charset(): The parameters to iconv_open() were
      reversed.
  - (smalloc.c) If esbrk() can allocated more memory than asked, the
      difference is now returned in a pointer-argument instead of
      a global variable - much easier to understand this way.

26-Apr-2004 (Lars Duening)  (3.3.532)
  - (actions.c) Added missing include.
  - (configure) Corrected bison recognition under AIX/Visual Age 6.
  - (configure) Test if iconv() takes a non-const char** as input string.
  - (random.c) Adapted for AIX/Visual Age 6.
  - (interpret.c) <int> -= <float> subtracted a random number (reported by
       Acius).
  - (efuns.c, port.h) Efun reverse() can bit-reverse integers.
  - (etc/lpc.xml) Menaures provided a new version.

24-Apr-2004 (Lars Duening)  (3.3.531)
  - (smalloc.c) Corrected the permanent block allocation statistics.
  - (func_spec) Deprecated efun make_shared_string().
  - (func_spec, strfuns) New efun convert_charset() (thanks, Philip).

24-Apr-2004 (Lars Duening)  (3.3.530)
  - (xalloc.c, smalloc.c) Changed the memory dump output format so that all the
       important information is on one line. Also increased the size of
       the initial small chunk so that all the driver's own tables fit
       into it.

24-Apr-2004 (Lars Duening)  (3.3.529)
  - (comm.c) Integrated Uwe's patch to open IPv6 connections with
       net_connect() (thanks!).
  - (efun.de/) A few more manpage translations.
  - (func_spec, efuns) New efun reverse() (provided by Ralph, thanks!)
       (f-000113-1, f-990714-7, f-990203-15)

23-Apr-2004 (Lars Duening)  (3.3.528)
  - (main.c) The standard strings are initialized earlier in the startup
       process so that a memory error doesn't cause a coredump.

22-Apr-2004 (Lars Duening)  (3.3.527)
  - (efuns.c) Forgot an '#include <fcntl.h>'.

22-Apr-2004 (Lars Duening)  (3.3.526)
  - (smalloc.c, xalloc.c, efuns.c) debug_info(DINFO_DUMP, "memory")
       dumps a list of all allocated memory blocks into the file
       <mudlib>/MEMORY_DUMP, if the allocator supports this.

22-Apr-2004 (Lars Duening)  (3.3.525)
  - (sha1) The files were still in DOS fileformat, which causes some
       compilers to choke on the multi-line macro definitions.
  - (backend.c) Active objects were never cleant up.
  - (gcollect.c) During object cleanup, mappings with just one reference
       left are not cleant up, as they will be freed immediately.

20-Apr-2004 (Lars Duening)  (3.3.524)
  - (configure) The MySQL libraries are now also search in
       /usr/local/lib/mysql/lib (can happen on older installations on Mac
       OS-X). Also, when the libraries were found in /usr/local/lib, the
       script still added /usr/local/mysql/lib to the link command.
  - (mudlib/sys/lpctypes.h) Corrected a typo.

18-Apr-2004 (Lars Duening)  (3.3.523)
  - (func_spec, sha1, efuns) New efun sha1() (provided by Fippo -
       thanks!).
  - (func_spec, files.c) Efun write_file() can now be instructed to
        delete the file first (suggested by Pulami).

18-Apr-2004 (Lars Duening)  (3.3.522)
  - (interpret.c) F_RETURN now takes care to undo a pending SAVE_ARG_FRAME.
       This situation can happen in a closure like ({#'sprintf, "%O",
       ({#'return, 1 }) }) (reported by Risky).

18-Apr-2004 (Lars Duening)  (3.3.521)
  - (prolang.y, func_spec, interpret.c) The default return inserted for
       value returning functions (in case the programmer forgets about
       it) now generates a runtime warning so that such code can be found
       and corrected. This applies only for functions with specified return
       type - old type functions don't generate a warning (suggested by
       Heiko).

15-Apr-2004 (Lars Duening)  (3.3.520)
  - (func_spec, array, simulate) Efun unique_array() can now use
       a closure as separator function, and also pass extra arguments
       (suggested by Shinarae).

14-Apr-2004 (Lars Duening)  (3.3.519)
  - (prolang.y) I had to restrict '&(struct->member)' to a single level
       of member lookup because the compiler generated invalid code.

13-Apr-2004 (Lars Duening)  (3.3.518)
  - (sprintf.c) Made the code portable to non-32-bit machines.
  - (test/t-040413) Added a testcase for two struct lookup issues.

13-Apr-2004 (Lars Duening)  (3.3.517)
  - (sprintf.c) Format '%b' to print a number in binary notation (supplied
       by Ralph - thanks!).

13-Apr-2004 (Lars Duening)  (3.3.516)
  - (func_spec, prolang.y, interpret.c) I had to back out the recent change
       as it interfered with the use of bitflags. We need a proper unsigned
       type for this kind of thing.

12-Apr-2004 (Lars Duening)  (3.3.515)
  - (mud/heaven7, settings/heaven7) Heaven7 v4 runs natively on LDMud 3.2 .
  - (func_spec, prolang.y, interpret.c) Constant integer numbers exceeding the
        allowed range cause runtime errors (reported by Ralph).

11-Apr-2004 (Lars Duening)  (3.3.514)
  - (svalue.h) Reserved CLOSURE typecode 1 (used to be CLOSURE_ALIEN_LFUN) for
        future use, so that the other closure typecode have the same value as
        in 3.2 (suggested by Sebastion).
  - (mudlib/sys/lpctypes.h) Added symbolic defines for the closure typecodes.

10-Apr-2004 (Lars Duening)  (3.3.513)
  - (comm.c) Corrected a compilation error when TELNET_DEBUG is defined
       (thanks, Tobias).
  - (comm.c) Using input_to() without a command_giver crashed the
        driver.
  - (erq/erq.c, xerq/lookup.c) Well, TRY_AGAIN is a h_errno result,
       not errno (thanks, Tobias).
  - (xptmalloc.c) Under *BSD when using pthreads and GC support, malloc()
       is used before the pthread structures are available. For this
       reason, REPLACE_MALLOC is disabled under *BSD (for simplicity in
       all cases).

09-Apr-2004 (Lars Duening)  (3.3.512)
  - (efuns.c) The cost calculation for efun clones() forgot to take the
       number of checked objects into account.
  - (configure, sprintf.c) trunc() is a C-99 library function; if not
       available, the driver uses ceil()/floor() instead.
  - (mudlib/dns_resolve.c) Example simul-efun for doing non-blocking
       DNS lookups (thanks, Tobias & Arne!)
  - (doc/efun.de) Added the german efun manpages from Unitopia (thanks,
       Tiberian!)
  - (util/erq/erq.c) Corrected the ERQ_LOOKUP so that the passed-in hostnames
       are properly null-terminated (thanks, LynX).
  - (util/erq/xerq.c) ERQ_LOOKUPs are tried again only if the DNS indicates
       that it is useful.

06-Apr-2004 (Lars Duening)  (3.3.511)
  - (comm.c) With telnet disabled, an input_to() can still pretend to
       switch from line- to charmode.

04-Apr-2004 (Lars Duening)
  - (erq.c) Retry name-lookups only if the DNS subsystem said so (thanks,
      Tobias!).

03-Apr-2004 (Lars Duening)  (3.3.510)
  - (func_spec, comm, string_spec) New efun enable_telnet() to disable/enable
       telnet support.

03-Apr-2004 (Lars Duening)  (3.3.509)
  - (object.c) function_exists() and variable_exists() now check if the
       object is destructed, instead of crashing (Bug #0000038).
  - (files.c,  backend.c, object.c) Added missing include for SunOS 4.1
       (reported by Coogan).
  - (configure, main.c) strtoul() is not available on the older machines,
       this is now checked by configure (reported by Coogan).
  - (object.c) If H_RESET/H_CREATE_* are defined by name, static functions
       are found as well (suggested by Daniel).

03-Apr-2004 (Lars Duening)  (3.3.508)
  - (object.c) restore_value() now checks for and rejects extraneous
       characters after the '\n' delimiting the value string (Bug #0000039).
  - (prolang.y) Casts to type 'mixed' are exempted from generating
       an "empty cast" warning (Bug #0000041).
  - (configure) The configuration now checks for libnsl as standard
       system library - it is needed for ERQ on Solaris (Bug #0000012).

01-Apr-2004 (Lars Duening)  (3.3.507)
  - (prolang.y, interpret.c) Implemented <mapping> &= <mapping>,
       <mapping> &= <vector> (Bug #0000042).
  - (interpret.c) get_line_number(): Program names in the traceback
       can be arbitrarily long (Bug #0000040).

31-Mar-2004 (Lars Duening)  (3.3.506)
  - (prolang.y) Corrected range check regarding short integers (thanks,
       Gnomi).
  - (comm.c, pkg-mccp.c, mregex.c, structs.c) Removed warnings (thanks,
       Andre!).

30-Mar-2004 (Lars Duening)  (3.3.505)
  - (func_spec) The result type of m_entry() was specified as 'mapping'
       instead of the correct 'mixed *' (thanks, Heiko!).
  - (random.c) Updated the Mersenne twister to the version with improved
       initialization (thanks, Fini, for the link).

27-Mar-2004 (Lars Duening)  (3.3.504)
  - (mstrings, interpret.c) Extended the string-appending scheme
       to addition of numbers to strings.
  - (ed.c) The 'Q'/'q' commands no longer clear the buffer before
       checking if the command was legal (Bug #0000046).
  - (ed.c) Corrected the doprnt() function so that the current line
       is never out of range (this could happen when giving 'Z' while
       at the end of the file). (Bug #0000045)

27-Mar-2004 (Lars Duening)  (3.3.503)
  - (strfuns, simulate.c) Added a function to make a c-string copy
       of a strbuf.
  - (mempools.c) Reduced the ideal size of a pool block to 128 bytes - 
       hopefully this reduces some of the fragmentation issues.
  - (mstrings, interpret.c) When adding strings (operators '+' and
       '+='), the driver tries to extend the left-hand string when
       possible, instead of allocating a new string. When creating
       large strings, this hopefully improves the reduces the allocations
       of new string buffers.
  - (interpret.c) inl_transfer_svalue() no longer makes untabled
       strings tabled. Originally the driver did this for volatile strings
       at this point, which no longer exist.

23-Mar-2004 (Lars Duening)  (3.3.502)
  - (actions.c) If the H_COMMAND lfun is not found in an object, the
       driver now throws an error instead of crashing (reported by Urv).

22-Mar-2004 (Lars Duening)  (3.3.501)
  - (prolang.y) Corrected a crasher when printing type of incomplete
       structures (as they are used to store the efun type specifications)
       (thanks, Alwin!) (Bug #0000043)

24-Feb-2004 (Lars Duening)  (3.3.500)
  - (xerq/socket.c) When sending data over a congested socket, the
       queued data included the last successfully sent bytes
       (thanks, Fantom!).

22-Feb-2004 (Lars Duening)  (3.3.499)
  - (comm) The net_connect() handling wasn't prepared for errors during the
       LPC logon, occasionally re-trying the logon endlessly (reported 
       by Dafire).

19-Dec-2003 (Lars Duening)  (3.3.498)
  - (comm) When a connection can't be opened immediately with net_connect(),
       the socket was closed prematurely (reported by LynX).

14-Dec-2003 (Lars Duening)  (3.3.497)
  - (comm) When opening a connection with net_connect(), printing of
       the prompt clobbered the current_object, causing a crash.

21-Nov-2003 (Lars Duening)  (3.3.496)
  - (comm) Added new efun net_connect() (thanks, LynX!)
  - (object.c, sys/functionlist.h) Efun variable_list() didn't properly
       filter for static variables.

18-Nov-2003 (Lars Duening)  (3.3.495)
  - (mudlib/telnetneg.c, xerq/lpc/socketd.c) New versions from Fiona (thanks!)
  - (sprintf.c) When printing floats with %O/%Q, they are always printed
       with a decimal point (suggested by Fiona).

30-Oct-2003 (Lars Duening)  (3.3.494)
  - (prolang.y) When creating a foreach() instruction, don't get confused
       by visibility flags in the variable type. Before, a 'varargs mixed *'
       function parameter was errorneously recognized as reference
       (reported by Alwin and Fiona).
  - (prolang.y) When removing an unnecessary F_SAVE_ARG_FRAME from a
       functioncall, also update the last_expression value. Before,
       a F_CONST0 pushed in place of a void-functions return value
       was never optimized out.

17-Oct-2003 (Lars Duening)  (3.3.493)
  - (comm.c) Efun query_ip_number(): the return of the full socket
       address in a reference argument didn't work (thanks, Nostradamus).
  - (configure) More corrections to the detection of -lcrypto and -lz
       (reported by Jaroslaw).

15-Oct-2003 (Lars Duening)  (3.3.492)
  - (configure) Made sure that -lz always follows the -lmysqlclient,
       as some system apparently can't resolve all backward references
       (reported by Alwin).

02-Oct-2003 (Lars Duening)
  - (comm.c, mempools.c, ptmalloc, xalloc.c) Removed signed/unsigned
       compiler warnings (thanks, Ralph).
  - (pkg-odbc, p-031002) Added, but not yet processed (thanks, Robert!).

30-Sep-2003 (Lars Duening)  (3.3.491)
  - (comm.c) The maxNumCmds setting was defaulted to 0 instead of -1
       (reported by Bardioc).
  - (comm.c, master_skeleton.c) Officially documented that a new
       interactive connection is bound to the master at the time
       of master::connect(), and adjusted the set_max_commands
       manpage accordingly.
  - (lex.c) The macros __RESET_TIME__ and __CLEANUP_TIME__ always used
       the configured values, ignoring commandline overrides (reported
       by Ralph).
  - (interpret.c, func_spec) New efun master() to return the master object.

28-Sep-2003 (Lars Duening)  (3.3.490)
  - (comm.c) Removed a crasher from set_max_commands() (thanks, Ralph!).

27-Sep-2003 (Lars Duening)  (3.3.489)
  - (autoconf) Renamed the option enable-use-array-calls to
      enable-lpc-array-calls, as it's a language option and not a package.

27-Sep-2003 (Lars Duening)  (3.3.488)
  - (efuns.c) Added a third argument to debug_info(DINFO_OBJLIST) to return
       multiple objects.
  - (comm, func_spec) New efuns set_max_commands(), get_max_commands()
       to control the number of commands allowed per second on a
       per-connection basis.
  - (svalue.h) Added macro put_float() to store floats into a svalue.
  - (lex, prolang.y) Pragma (no_)warn_empty_casts allows to turn off
       the warnings about ineffective casts.
  - (etc/lpc.vim) LPC syntax highlighting for vim (submitted by Coogan).
  - (autoconf, interpret.c, main.c, lex.c) The call_other() on arrays of
       objects is now configurable; if enabled, __LPC_ARRAY_CALLS__ is
       defined.
  - (mudlib/sys/commands.h) Added defines for the query_action() bitflags.
  - (array.c, mapping.c, pkg-alists.c, sprintf.c, xalloc.c, prolang.y)
       Removed a couple of signed/unsigned warnings (thanks, Ralph!).
  - (efuns.c) to_array(string) now treats the string characters as unsigned
       (reported by Fiona).

27-Sep-2003 (Lars Duening)  (3.3.487)
  - (prolang.y) Corrected some subtleties in the lfun/efun classification
      of functions, revealed by the recent change.
  - (simul_efun.c) The __INIT() function is no longer visible as simul-efun.

25-Sep-2003 (Lars Duening)  (3.3.486)
  - (prolang.y, lex) The driver crashed when a private lfun shadowing
      a public sefun was virtually inherited twice in parallel, because
      the public sefun inhibited a proper cross-definition of the second
      lfun instance. The problem was in the either-or assignment of an
      identifier to either be an lfun or a (s)efun/global var (t-030925).
  - (mapping.c) When walking over a mapping of width 1, the hash part
      was not protected; thus deletions from the mapping from within the
      walk_mapping callback could cause walk_mapping() to pass invalid
      pointers to the callback on later iterations (reported by Bardioc).
  - (comm, func_spec) Passing 0 as argument to
      set_{combine,connection}_charset() re-establishes the default charset.
  - (comm, func_spec) New efuns get_combine_charset() and
      get_connection_charset().
  - (comm) Experimental: limited the number of commands accepted per
       connection to 10 per second - this is meant as a safety limit for
       muds making heavy use of charmode connections. If it works out,
       the feature will be fully fleshed out with commandline arguments
       and everything (Mantis #0000009).

12-Sep-2003 (Lars Duening)  (3.3.485)
  - (sprintf.c) Printing a 0-member struct with '%O' crashed the driver
       (reported by Nostradamus).

02-Sep-2003 (Lars Duening)  (3.3.484)
  - (prolang.y) When creating a local lvalue, the compiler didn't properly
       check if it's a real local or a context value, causing 
       'map( arr, (: mm[$1]; :) );' to resolve 'mm' as local value (reported
       by Zonk).

24-Aug-2003 (Lars Duening)  (3.3.483)
  - (lex.c) Removed a crasher.
  - (configure) Improved the mySQL/PostgreSQL recognition: on some machines,
      /usr/local/include is not in the standard search path :-(

21-Aug-2003 (Lars Duening)  (3.3.482)
  - (configure) Improved the PostgreSQL recognition.
  - (make_func.y, actions.c, array.c, backend.c, bitstrings.c, comm.c,
     efuns.c, files.c, hash.c, interpret.c, lex.c, main.c, mapping.c,
     mempools.c, mstrings.c, object.c, prolang.y, parse.c, pkg-pgsql.c,
     simulate.c, sprintf.c, smalloc.c, xalloc.c) Removed signed/unsigned
       compiler warnings.

20-Aug-2003 (Lars Duening)  (3.3.481)
  - (configure, pkg-mysql.h, pkg-pgsql.h) If mySQL/PostgreSQL are configured
      but not existant, the compilation will fail with a suitable error
      message. Also the configure script tries harder to not let this happen
      (Mantis #0000013).

19-Aug-2003 (Lars Duening)  (3.3.480)
  - (lex, prolang.y, files.c, simulate.c, backend.c, closure.c) Redefinition
      of LPC preprocessor macros now list the file and line of the original
      definition (suggest by Bardioc).

14-Aug-2003 (Lars Duening)  (3.3.479)
  - (smalloc.c, debug_info.h) Added small block defragmentation
      statistics.

14-Aug-2003 (Lars Duening)  (3.3.478)
  - (pkg-tls, comm, md5, configure) Added the OpenSSL support. It's probably
      buggy as heck as I had to copy&paste from OpenSSL demo programs due
      to lack of documentation.

13-Aug-2003 (Lars Duening)  (3.3.477)
  - (pkg-tls) Added the program initialisation/de-initialisation code for
      OpenSSL.

09-Aug-2003 (Lars Duening)  (3.3.476)
  - (configure) The configuration script now looks for OpenSSL before
      GnuTLS. However, TLS support using OpenSSL is not implemented yet.

09-Aug-2003 (Lars Duening)  (3.3.475)
  - (main.c, pkg-tls) The x509 key and certfile can now be specifed
      on the commandline with '--tls-key' and '--tls-cert'.

08-Aug-2003 (Lars Duening)  (3.3.474)
  - (pkg-tls.c, comm.c) Corrected compilation errors in the TLS code
      (I didn't have GnuTLS installed before, so I didn't notice).

08-Aug-2003 (Lars Duening)  (3.3.473)
  - (lex.c) Symbol __PTHREADS__ is defined if the driver is compiled
       for pthreads (suggested by Gawain).
  - (configure, pkg-tls) Added TLS support (using GnuTLS) - thanks,
       Gawain!

07-Aug-2003 (Lars Duening)  (3.3.472)
  - (doc/) Corrected a number of typos (thanks, Casey!)
  - (object.c) The efun variable_list() can now return variable values
       as well (thanks, Casey!).

07-Aug-2003 (Lars Duening)  (3.3.471)
  - (configure, pkg-mysql, main.c) Improved the recognition of mySQL when
       there's more than one mySQL installation. Additionally the pkg-mysql
       checks that the mysqlclient library is consistent with the header
       files (reported by Craig Venz).

05-Jul-2003 (Lars Duening)  (3.3.470)
  - (smalloc.c) Reduced the computational overhead of the small block
       defragmentation: since only newly freed blocks offer opportunities
       for defragmentation, only those are checked.
  - (object.c) Saving an object in the old format ('0') still used the
       shared value syntax for strings (reported by Bardioc).

31-Jul-2003 (Lars Duening)  (3.3.469)
  - (smalloc.c) Splitting of a block from a larger free list failed
       to preserve the PREV_BLOCK flag in the returned block, causing
       the defragmentation to malfunction on occasion (Mantis #0000007)

29-Jul-2003 (Lars Duening)  (3.3.468)
  - (smalloc.c) The small-block defragmentation clobbered an important
       flag in some blocks, causing the driver to crash (reported by Bardioc).
  - (smalloc.c) Reduced the amount of freelist-linking done for
       non-defragmentable blocks.

28-Jul-2003 (Lars Duening)  (3.3.467)
  - (prolang.y) If a pragma requires a function return type, the error
       message now names the active pragma in question instead of always
       'strict_types' (Mantis #0000003)
  - (comm.c) In charmode, CR and LF are treated as normal data
       characters (Mantis #0000002).

26-Jul-2003 (Lars Duening)  (3.3.466)
  - (mapping.c) Taking a cue from 3.2.10-594, the number of times a mapping
       is checked for destructed elements has been reduced. This was less of
       a problem than in 3.2.10, but still occured far too often,
  - (mapping.c) The mapping compaction criterium has been extended to
       guarantee a compaction after 2 * TIME_TO_COMPACT seconds idle time.

25-Jul-2003 (Lars Duening)  (3.3.465)
  - (mudlib/dhrystone.c) The time measurement was off by factor 10.
  - (smalloc.c) Implemented a lazy defragmentation scheme for the
       free small blocks.

24-Jul-2003 (Lars Duening)  (3.3.464)
  - (configure) Improved the detection of libcrypt and libcrypto.
  - (bytecode.h, hosts/crypt.c) Added a number of macros to deal with 64-bit
       machines (untested).

23-Jul-2003 (Lars Duening)  (3.3.463)
  - (sysmalloc.c, ptmalloc/malloc.c) Corrected compilation errors (reported by
       Tomba).

22-Jul-2003 (Lars Duening)
  - (object.c) Cleaned up the code in restore_object() a wee bit.

21-Jul-2003 (Lars Duening)  (3.3.462)
  - (interpret.c) The -= operator didn't work when subtracting an int
       from an int: a missing break caused it to flag a non-existant
       argument error.

17-Jul-2003 (Lars Duening)  (3.3.461)
  - (prolang.y) Made the cast checks more informative.

17-Jul-2003 (Lars Duening)  (3.3.460)
  - (interpret.c) The operators -=, /= and *= can now operate on 
       <int> x <float> values, yielding a <float> result.
  - (prolang.y) Casts with no effect generate a warning.

17-Jul-2003 (Lars Duening)  (3.3.459)
  - (i-svalue_cmp.h) When comparing closures for equality, the result was
       reveresed (reported by Fantom).
  - (array.c, interpret.c) Replaced uses of closure_cmp() with closure_eq()
       where appropriate.

10-Jul-2003 (Lars Duening)  (3.3.458)
  - (interpret.c) When the value stack overflowed during a secure_apply(),
       the secure_apply_error() routine failed to notice that the stack
       elements had already been cleared out (reported by Bardioc).

27-Jun-2003 (Lars Duening)  (3.3.457)
  - (xptmalloc.c) Added a heap_start variable so that assert_stack_gap()
       will compile (reported by Dafire).
  - (ptmalloc) Added Gawain's latest changes - thanks!

26-Jun-2003 (Lars Duening)
  - (interpret.c) Added compile-time check to make sure that MAX_USER_TRACE
       is not larger than MAX_TRACE.

25-Jun-2003 (Lars Duening)  (3.3.456)
  - (xalloc.c) On HP-UX machines, the stack is above the heap and is also
       growing upwards, which the heap/stack check didn't expect. I reworked
       the code to be more generic (reported by Rainer).
  - (lex.c, interpret.c) Characters with the 8th bit set are now uniformly
       treated as positive by the lexer and indexing operations (reported by
       Oskar).
  - (lex.c) Added macro __MAX_MALLOC__ to reflect the MAX_MALLOCED
       parameter (suggested by Coogan).

18-May-2003 (Lars Duening)  (3.3.455)
  - (sprintf.c) Removed a memory leak in efun printf() (reported by Dafire).

07-May-2003 (Lars Duening)  (3.3.454)
  - (simulate.c) The error() routine now takes care to zero out all
       pointer variables after freeing the referenced data. This way, if
       a recursive error occurs before the new reference is stored the
       driver won't try to free the same references again (reported by
       Freaky).

05-May-2003 (Lars Duening)  (3.3.453)
  - (lex.c) Ooops, I forgot that I had commented out the strong type
       pragmas when I experimented with an older mudlib (thanks, Ralph).
  - (ptmalloc/thread-m.h) The constraints for one asm statement operand
       were wrong (reported by Bardioc).
  - (object.c) Made restore_xxx() even more robust towards CRLFs (thanks,
       Holger).

03-May-2003 (Lars Duening)  (3.3.452)
  - (simulate, interpret, func_spec, prolang.y) Added the new modifier
       'publish' to the catch() directive to have it call
       master::runtime_error() when an error occurs (suggested by
       Menaures).

03-May-2003 (Lars Duening)  (3.3.451)
  - (comm.c) When a pthread was cancelled, the flushing of the pending
       data happened after the socket was already shut down. Reason was that
       the threads were 'detached' upon creation, disabling the ability
       of the parent thread to wait for their completion (reported by Urv).
  - (object.c) The restore_svalue() routine now accepts a CR preceeding
       a LF as delimiter.

30-Apr-2003 (Lars Duening)  (3.3.450)
  - (ed.c) Only consecutive 'z'/'Z' commands do not re-print the current line;
       a 'z'/'Z' after a different command does (suggested by Elric).
  - (comm) When using PThreads, destructing an interactive object now
       flushes all remaining pending data to the socket (suggested by Urv).
       Additionally, the main thread waits properly for the writer thread to
       terminate.
  - (comm.c) When not using MCCP but PThreads, all outputs were doubled.

29-Apr-2003 (Lars Duening)  (3.3.449)
  - (sprintf.c) When printing arrays with '%O', the size was given
       one too small.
  - (mregex.c) PCRE: The string arguments passed to pcre_exec() were wrong, 
       making repeated replacements within on string dangerous (e.g. in ed
       '749,$s!arg!strength!gp') (reported by Elric).

24-Apr-2003 (Lars Duening)  (3.3.448)
  - (interpret.c) If during a call of the type 'funcall(lfun-closure)' the
       object holding the closure was destructed and the closure deallocated,
       int_call_lambda() still read the now-invalid lambda structure after
       the actual call. This could lead to an inconsistency in the
       control stack, depending on the memory contents (reported by Bardioc).

22-Apr-2003 (Lars Duening)  (3.3.447)
  - (pkg-mccp, comm, gcollect.c, configure) Added MCCP support (thanks,
       Dafire!) (p-011012, p-020810-1).

21-Apr-2003 (Lars Duening)  (3.3.446)
  - (pkg-pgsql.c) Corrected a crasher during a GC.
  - (smalloc.c) Corrected the small-free-block statistics.

19-Apr-2003 (Lars Duening)  (3.3.445)
  - (pkg-pgsql, configure, other files) Added PostgreSQL implementation
       based on the code donated by Ctx (thanks!) (f-011229-0).

13-Apr-2003 (Lars Duening)  (3.3.444)
  - (smalloc.c) Removed compilation warnings.

13-Apr-2003 (Lars Duening)  (3.3.443)
  - (func_spec, object) The efuns save_value() and save_object() can now
       create savefiles in the old format as well.

12-Apr-2003 (Lars Duening)  (3.3.442)
  - (xalloc.c) Corrected a compilation error when MALLOC_TRACE was not
       defined.

12-Apr-2003 (Lars Duening)  (3.3.441)
  - (smalloc.c) Adjacent free small blocks are now merged automatically
       as soon as they are detected. This reduces the mem_consolidation()
       call to detecting and freeing totally unused small chunks.
  - (xalloc.c) The block dump of lost blocks now prints a proper hexdump
       instead of just dumping the data as-is.

11-Apr-2003 (Lars Duening)  (3.3.440)
  - (smalloc.c) A bit of code cleanup; and in preparation for the planned
       automatic small block defragmentation introduced 'free' flags for
       small blocks and a minimum payload size.

09-Apr-2003 (Lars Duening)  (3.3.439)
  - (efuns.c, strfuns, func_spec) Efuns filter() and map() can be used on
       strings.

09-Apr-2003 (Lars Duening)  (3.3.438)
  - (heartbeat.c) Removed the pooled allocation of heartbeat structures:
       Muds have spikes of high callout usage, but a low usage over
       the longterm average, so most of the pooled structures are not
       used. This more than makes up for any malloc overhead saved
       by the pooled allocation.
  - (heartbeat.c) Errors in a heartbeat execution now longer aborts
       the whole heartbeat cycle (suggested by Baba).
  - (efuns.c, main, mudlib/sys/debug_info.h) The boot time is now
       available through debug_info(DINFO_DATA, DID_STATUS).
  - (wizlist) The wizlist now accounts the evalcost split into
       ticks and gigaticks, to be able to handle long uptimes, and also
       offer a non-decaying total sum of the evalcosts (suggested by
       Baba).

07-Apr-2003 (Lars Duening)  (3.3.437)
  - (mud/lp-245) Adapted the set_this_object() usage in the master.
  - (actions.c) Efun remove_action() can now remove all actions defined
      by an object (suggested by Menaures).

04-Apr-2003 (Lars Duening)  (3.3.436)
  - (structs.c) When remove_unreferenced_struct() freed the structs, it
      forgot to properly mark the memory blocks as 'allocated', so that
      the final sweep phase of the GC tried to free them again (reported
      by Nostradamus).

30-Mar-2003 (Lars Duening)  (3.3.435)
  - (comm.c) The driver now logs the pathname of the ERQ executable
      it attempts to start.

29-Mar-2003 (Lars Duening)  (3.3.434)
  - (config.h.in) The options MALLOC_CHECK and MALLOC_SBRK got mixed up.
  - (gcollect.c) The cleanup code didn't remove the program from the swap
      when it zeroed out a reference to a destructed blueprint. Later GCs
      then followed this invalid pointer.

27-Mar-2003 (Lars Duening)  (3.3.433)
  - (simulate.c, mapping) Since there is no longer a list of dirty mappings,
      and since the GC can handle dirty mappings, it is no longer feasible
      to keep an accurate count.
  - (efuns.c) to_struct() can now convert mappings to structs.
  - (mapping.c) mkmapping() can now convert structs to mappings.

26-Mar-2003 (Lars Duening)  (3.3.432)
  - (prolang.y) Constrained the switch() grammar to accept just blocks
      as body, not statements (reported by Menaures).
  - (comm.c) After removing a pending input_to, the proper noecho
      state is restored (provided by Ctx).

25-Mar-2003 (Lars Duening)  (3.3.431)
  - (port, simulate.c) Since memmem() is a GNU/Linux extension and buggy
      up to glibc 2.0, the driver now uses its own replacement all the
      time. But I adjusted the argument order to the one used by the
      correct Linux function (reported by Fiona).
  - (interpret.c) Function calls by address and global variable accesses
      now check if a set_this_object() is in effect.

24-Mar-2003 (Lars Duening)  (3.3.430)
  - (prolang.y) Assignment to struct members caused a fatal error if
      the struct did not have the named member. The problem was that
      in such a case an invalid type was recorded for the result (reported by
      Dafire).

21-Mar-2003 (Lars Duening)  (3.3.429)
  - (object.c) Shared strings are now saved in the <n> notation as well;
      this is mostly beneficial for saving endless repetitions of the
      same struct name (suggested by Bardioc).

20-Mar-2003 (Lars Duening)  (3.3.428)
  - (object.c) Restoring the efun closure "#e:," confused the
      savefile parser (thanks, Risky).
  - (func_spec, efuns, mstrings) New efun strrstr().
  - (mapping, prolang.y) Operator '&' can now intersect mappings with
      other mappings and arrays.
  - (func_spec, mapping) New efun m_entry() to return all values for
      an entry at once.

19-Mar-2003 (Lars Duening)  (3.3.427)
  - (sprintf.c, closure) Modifier '#' used for '%O' and '%Q' produces
      output in a compact format (suggested by Menaures).
  - (func_spec, efuns) New efun rmember().

19-Mar-2003 (Lars Duening)  (3.3.426)
  - (structs.c, object.c) Saving and restoring struct now also saves
      the defining program's name, so that external restore modules
      can restore the values (reported by Bardioc).

17-Mar-2003 (Lars Duening)  (3.3.425)
  - (backend.c, gcollect.c) Corrections to the cleanup code: removed an
      interaction between the cleanup code and the swapper, which caused an
      incomplete cleanup; made sure that dirty mappings are compacted just
      once; and made sure that the backend cleanup code actually cycles
      through the object list.
  - (call_out.c) Removed a memory leak in remove_call_out()/find_call_out().

17-Mar-2003 (Lars Duening)  (3.3.424)
  - (doc/master) Added missing manpages for the parse_command() support
      (reported by Zonk).
  - (main, simulate.c, configure) New commandline option '--filename-spaces'
      to allow space characters in filenames (default is to disallow them).
  - (object.c) Shared variable closures were saved without the '<num>=' header
      (reported by Menaures and Fiona).

17-Mar-2003 (Lars Duening)  (3.3.423)
  - (mapping.c) Removed a memory leak.

15-Mar-2003 (Lars Duening)  (3.3.422)
  - (gcollect.c) The NEW_CLEANUP code treated the driver hooks like other
      svalues, which was bad because it caused lambda-closure hooks bound
      to destructed objects to disappear. Since these closures can be re-bound
      on the fly, the cleanup code now does exactly that (reported by
      Nostradamus and Bardioc).

14-Mar-2003 (Lars Duening)  (3.3.421)
  - (driver.h, smalloc.c) Removed a build problem when MALLOC_CHECK
      was not defined, but MALLOC_TRACE was (reported by Nostradamus).

13-Mar-2003 (Lars Duening)  (3.3.420)
  - (xalloc.c, smalloc.c, configure) New configuration option
      '--enable-malloc-sbrk' to selectively allow the memory allocator to use
      sbrk() instead of malloc() where available (default is to allow sbrk()).
      The idea is to circumvent limitations some system put on sbrk().
      (suggested by Tomba)

12-Mar-2003 (Lars Duening)  (3.3.419)
  - (mapping.c, gcollect.c) The mapping GC forgot to mark the map-chain
       blocks as referenced (reported by Bardioc).

11-Mar-2003 (Lars Duening)  (3.3.418)
  - (structs.c) Removed a crasher caused by two uninitialized variables.
  - (mappings, gcollect.c) The GC can now collect mappings with hash
       parts.
  - (ptmalloc.c) More locking code - these should cover almost all
       cases (thanks, Gawain).

10-Mar-2003 (Lars Duening)  (3.3.417)
  - (prolang.y) Corrected the error handling when a struct member was
       duplicated and clashed with an inherited member (reported by
       Guandalug).
  - (prolang.y, structs, hash, efuns.c, interpret.c, sprintf.c)
       When a struct-defining program is recompiled, the compiler
       tries to reactivate the struct type objects if possible.

08-Mar-2003 (Lars Duening)  (3.3.416)
  - (swap.c, mapping) The swapper got out of sync when swapping mappings
       with destructed objects as keys. So far it was not a problem because
       mappings got compacted faster than they were swapped, and the swapper
       already refused to swap mappings with objects/closures used as keys
       in the condensed part. But with the new mapping compaction strategy
       a more thorough test became necessary.

07-Mar-2003 (Lars Duening)  (3.3.415)
  - (configure) New configuration option '--with-optimize' to select
       the optimization level in the generated Makefile: no, low,
       med, or high.
  - (call_out.c) Removed the pooled allocation of callout structures:
       Muds have spikes of high callout usage, but a low usage over
       the longterm average, so most of the pooled structures are not
       used. This more than makes up for any malloc overhead saved
       by the pooled allocation.
  - (swap.c) Added sanity checks to the variable swapper.

06-Mar-2003 (Lars Duening)  (3.3.414)
  - (dumpstat.c) Corrected build warnings.
  - (mempools, lex.c) Cosmetic changes.
  - (mapping.c) Additional condition for mapping compaction: the number
       of entries in the hash part is equal to or exceeds the number
       of non-deleted condensed entries.

06-Mar-2003 (Lars Duening)  (3.3.413)
  - (mapping, gcollect, backend) The compaction of dirty mappings is now
       part of the object cleanup process. This needs some careful handling,
       but simplifies the mapping code.

05-Mar-2003 (Lars Duening)  (3.3.412)
  - (mempools, alloca.c, array.c, object.c, lex.c, ptrtable.c) The user
       space of a mempool block is now restricted to 256 bytes, to reduce
       fragmentation issues in the large block heap.

05-Mar-2003 (Lars Duening)  (3.3.411)
  - (gcollect.c, object.c) Inserted checks so that the driver doesn't try
       to access the non-existing name of the default wizlist entry (in
       particular the GC) (reported by Bardioc).

03-Mar-2003 (Lars Duening)  (3.3.410)
  - (mapping, backend.c, gcollect.c) Experimental: dirty mappings are
       not compacted immediately, but only after a certain time (for now
       10 minutes) since the last change has elapsed.

03-Mar-2003 (Lars Duening)  (3.3.409)
  - (dumpstat.c) Added the object load time to the OBJ_DUMP data (suggested by
       Menaures).
  - (dumpstat.c) Removed a memory leak in dumpstat() and dumpstat_dest().
  - (closure.c) When converting a lfun closure which is bound to a different
       object than it is defined in ('alien lfun closure'), to a string, the
       bound object is printed as well as the defining object.
  - (ed.c) Consecutive 'z' or 'Z' commands no longer repeat the previous
       current line (suggested by Menaures).

02-Mar-2003 (Lars Duening)  (3.3.408)
  - (configure) It would be useful if I actually updated the configure
       script.

02-Mar-2003 (Lars Duening)  (3.3.407)
  - (ptmalloc.c) Added some documentation and error checks (thanks, Gawain).
  - (configure, smalloc) Removed the CHECK_SMALLOC_TOTAL debugging code -
       the problem is fixed.
  - (configure, smalloc) New diagnostic option MALLOC_SBRK_TRACE to enable
       a log of all esbrk() calls and the stats of the allocation requests
       causing it. This formalizes the 'DEBUG: MEM ' diagnostics added
       in 3.3.399, though the particular string 'DEBUG: MEM ' has been
       dropped from the output.

02-Mar-2003 (Lars Duening)  (3.3.406)
  - (gcollect.c) During the 'clear' phase of the GC, struct member elements
       weren't marked as cleared, which prevented proper counting in the
       'count' phase and caused the referenced memory blocks being deallocated
       prematurely in the 'sweep' phase (reported by Bardioc).
  - (mapping.c) Fixed a memory leak in efun m_add().

01-Mar-2003 (Lars Duening)  (3.3.405)
  - (func_spec, object) New efun variable_exists() and
       variable_list().

27-Feb-2003 (Lars Duening)  (3.3.404)
  - (interpret.c) Improved the error message for when 'mapping[a,b]' is used
       with incorrect types at runtime.

27-Feb-2003 (Lars Duening)  (3.3.403)
  - (gcollect.c, swap.c, mempools) During a the GC a new swap membuffer could
       be allocated and then marked 'unreferenced' by the GC, subsequently
       causing memory corruption as the swapper continued to use it. The
       memory buffers are now held on to during the GC and only freed
       afterwards.

24-Feb-2003 (Lars Duening)  (3.3.402)
  - (strfuns.c) Made the strbuf allocations resilient against out-of-memory
       conditions.
  - (xalloc) rexalloc() now accepts the MALLOC_TRACE information. The
       normal implementation doesn't use it, but they are useful when
       instrumenting the allocator code.

24-Feb-2003 (Lars Duening)  (3.3.401)
  - (interpret.c) With special reference indexing of struct members,
       the struct refcount was decremented once too often.

23-Feb-2003 (Lars Duening)  (3.3.400)
  - (smalloc.c, xalloc.c) Corrected two fatal typos.

23-Feb-2003 (Lars Duening)  (3.3.399)
  - (smalloc.c, xalloc.c) All esbrk() requests are logged on stdout
       as 'DEBUG: MEM ...' messages. This is to find out why certain
       muds use so much memory lately.

21-Feb-2003 (Lars Duening)  (3.3.398)
  - (mempools.c) Corrected a compilation problem.

21-Feb-2003 (Lars Duening)  (3.3.397)
  - (lex.c) Macro __MSDOS_FS__ is defined on systems using the
       MS-DOS filesystem conventions.

20-Feb-2003 (Lars Duening)  (3.3.396)
  - (mempools, efuns.c) Added the table sizes to the debug_info(DINFO_DATA,
       DID_STATUS) result.

20-Feb-2003 (Lars Duening)  (3.3.395)
  - (mempools, files.c, swap.c, object.c) The file reading efuns (read_file(),
       read_bytes(), restore_()) and the swapper now use a persistent buffer
       to hold the variable data in memory. Goal is to avoid allocations and
       deallocations of large memory blocks which worsen the memory
       fragmentation.

18-Feb-2003 (Lars Duening)  (3.3.394)
  - (smalloc, efuns.c) Since smalloc can split up large small blocks and
       handle oversized ones, having the special case of 'unused space' in the
       current small chunk is no longer necessary. This also means that the
       DID_MEM_UNUSED value from debug_info() no longer exists (b-020506).

16-Feb-2003 (Lars Duening)  (3.3.393)
  - (smalloc, backend.c, gcollect.c) The smalloc freelist consolidation
       is now also called from the backend and does its job whenever
       the number of free small blocks is twice the amount the last
       consolidation left over.
  - (smalloc.c) The maximum small block size has been reduced to 64 Bytes:
       it turned out that the larger sizes aren't deallocated often enough
       to make the free lists work, which caused unnecessary small chunk
       allocations.
  - (sprintf.c) Normal (top-level) sprintf() calls now use a static
       instance of the fmt_state_t buffer, avoided repeated (de)allocations
       of that 130KB structure.

16-Feb-2003 (Lars Duening)  (3.3.392)
  - (smalloc.c) Since parsing the min-small-malloc already requires
       a small chunk allocation, the small chunk allocation using the new
       chunk size is also forced to go directly to the system.

15-Feb-2003 (Lars Duening)  (3.3.391)
  - (ptmalloc) Gawain provided the first locking code for the GC.
  - (interpret.c) On 'too deep recursion' errors, also print the depth
       and recursion limits. This information is somewhat redundant, but
       makes the error logs easier to read.

12-Feb-2003 (Lars Duening)  (3.3.390)
  - (prolang.y) The illegal switch-case ranges like '100..50' now generate
       an error message (reported by Menaures).

08-Feb-2003 (Lars Duening)  (3.3.389)
  - (ptmalloc) Corrected a compilation problem on x86 gcc (reported
       by Nostradamus).

07-Feb-2003 (Lars Duening)  (3.3.388)
  - (prolang.y) Corrected a fatal error in the 'break'/'continue'
       handling.
  - (configure) Corrected the check for pthread_atfork().

06-Feb-2003 (Lars Duening)  (3.3.387)
  - (prolang.y) With the increasing program sizes, using 16-Bit offsets
       for the 'break' and 'continue' branches was no longer enough. They
       might hold the final offsets, but during compilation they stored
       the absolute address of the next 'break'/'continue', which could
       exceed 2 Bytes (reported by Alwin).
  - (prolang.y) Insertions of 2 byte values are now checked for range.
  - (xptmalloc.c, mudlib/sys/debug_info.h) debug_info(DINFO_MEMORY) now
       returns the ptmalloc statistics (thanks, Gawain).
  - (ptmalloc) GC support is now alpha-functional, but not yet
       threadsafe (thanks, Gawain).
  - (configure) The check for pthread_atfork() was unreliable.

04-Feb-2003 (Lars Duening)  (3.3.386)
  - (smalloc.c) Small chunks (except for the first one) are now allocated
       from the large blocks. Reason is that during a consolidation, unused
       small chunks are returned to the large blocks. Without this change,
       new small chunks were always allocated directly from the system
       without re-using the space released to the large blocks, so that
       over time the process memory usage grew but only a fraction of the
       memory was in use (reported by Coogan and Dafire, reproduced by
       Menaures).

02-Feb-2003 (Lars Duening)  (3.3.385)
  - (interpret.c) Assignments to multi-level struct references (a->b->c)
       didn't work (reported by Dafire).

30-Jan-2003 (Lars Duening)  (3.3.384)
  - (simulate.c) Removed a memory leak in the warnf() routine (reported
       by Dafire).

29-Jan-2003 (Lars Duening)  (3.3.383)
  - (structs.c, swap.c) Swapping struct values no longer changes the
       refcounts of the referenced type objects. This avoids
       a racing condition during the GC, and also prevents a typeobject
       from being freed while swapped-out values still require it
       (reported by Bardioc).

29-Jan-2003 (Lars Duening)  (3.3.382)
  - (smalloc.c) In mem_increment_size(), the internal size of the
       memoryblock was most cases computed one word too small.

28-Jan-2003 (Lars Duening)  (3.3.381)
  - (prolang.y, interpret.c) Improved the error message when a given
       struct doesn't match the expected struct type.
  - (prolang.y) The compiler now checks in struct definitions if a
       given base struct is complete. This also
       catches 'struct Foo (Foo) { ..  }'.

27-Jan-2003 (Lars Duening)  (3.3.380)
  - (object.c) Restoring a plain lfun-closure no longer worked (reported
       by Bardioc).

26-Jan-2003 (Lars Duening)  (3.3.379)
  - (prolang.y) Corrected a small bug in the code generation for
       operators &&= and ||=.

26-Jan-2003 (Lars Duening)  (3.3.378)
  - (main, lex, prolang, object, simulate.c, configure) Removed the
       configuration option INITIALIZATION_BY___INIT and changed the driver
       to always use __INIT(). However, the variable sharing between clone
       and blueprint is now selectable on a per-program basis with the
       pragmas 'share_variables' and 'init_variables'. The default
       setting for the pragma can be set with the configuration option
       --enable-share-variables and with the commandline arguments
       --share-variables and --init-variables.

26-Jan-2003 (Lars Duening)  (3.3.377)
  - (prolang.y) Removed a compilation problem (reported by Markus).
  - (xptmalloc.c) Removed compiler warnings regarding intentionally
       unused variables.

26-Jan-2003 (Lars Duening)  (3.3.376)
  - (configure) The check for pthread_atfork() never succeeded (reported by
       Nostradamus).
  - (object.c) Removed a compiler warning (reported by Nostradamus).
  - (prolang.y) Removed a compilation problem.

25-Jan-2003 (Lars Duening)  (3.3.374+.375)
  - (prolang.y, interpret.c, func_spec) Implemented short-circuit evaluation
       for the operators '&&=' and '||='.

25-Jan-2003 (Lars Duening)  (3.3.373)
  - (bitstrings.c, mstrings, efuns.c, interpret.c, lex.c) Corrected a string
       refcount error in and/or/xor_bits() (reported by Markus).

24-Jan-2003 (Lars Duening)  (3.3.372)
  - (lex.c) Included #pragma xxx_types settings are no longer restricted
       to the include file's scope (reported by Gnomi).

24-Jan-2003 (Lars Duening)  (3.3.371)
  - (object.c) save/restore didn't look out for shared closures, which
       could lead to endless recursions.
  - (prolang.y) When compiling the context for inline closures, references
       to local variables (for initialisation) were already redirected
       into the closure.

23-Jan-2003 (Lars Duening)  (3.3.370)
  - (configure, ptmalloc.c) Not all systems provide pthread_atfork(),
       so configure now checks for it and activates a dummy if
       necessary.

23-Jan-2003 (Lars Duening)  (3.3.369)
  - (structs) Swapping structs during a GC triggered a sanity check
       in error (reported by Bardioc).

23-Jan-2003 (Lars Duening)  (3.3.368)
  - (xalloc.c) I confused two function arguments in the implementation
       of rexalloc() *blush*.

22-Jan-2003 (Lars Duening)  (3.3.367)
  - (prolang.y) The typetracking for assignments to a struct member
       was faulty (reported by Markus).

22-Jan-2003 (Lars Duening)  (3.3.366)
  - (xalloc.c) rexalloc() and malloc_increment_size() didn't update the
       xalloc_stat statistics, which could lead to a wrap-around of
       that number. Also, rexalloc() is now first trying a
       malloc_increment_size().

22-Jan-2003 (Lars Duening)  (3.3.365)
  - (efuns.c) Efun member() crashed when given a struct as second
       argument (reported by Markus).
  - (etc/lpc.xml) LPC syntax highlighting for KDE's kate (thanks, Menaures!)
  - (prolang.y, interpret.c, closure.c) Implemented struct lookups
       on 'mixed' expressions (suggested by Markus).

19-Jan-2003 (Lars Duening)  (3.3.364)
  - (configure) The '--with-malloc' option didn't quite work (reported
       by Nostradamus).

19-Jan-2003 (Lars Duening)  (3.3.363)
  - (structs.c, gcollect) The GC crashed when encountering self-referential
       structs (reported by Nostradamus).

19-Jan-2003 (Lars Duening)  (3.3.362)
  - (object.c) Changed the error thrown by replace_program() to
       a mere warning.

19-Jan-2003 (Lars Duening)  (3.3.361)
  - (object.c) Restricted replace_program() on the first inherited
       program if that program has virtually inherited variables.
       See b-030119 for an explanation.

18-Jan-2003 (Lars Duening)  (3.3.360)
  - (ptmalloc) Gawain provided a bugfix and more work towards GC
       support (yes, my previous enthusiasm was premature).

17-Jan-2003 (Lars Duening)  (3.3.359)
  - (prolang.h) Corrected a compilation problem when using ptmalloc.

17-Jan-2003 (Lars Duening)  (3.3.358)
  - (ptmalloc) Gawain added GC support to ptmalloc - yay!
  - (configure) New with-malloc setting 'default' selects either smalloc
       or ptmalloc depending on the support and selection of PThreads.

16-Jan-2003 (Lars Duening)  (3.3.357)
  - (interpret.c) The 'indexing one past' for strings didn't work
       with the empty string (reported by Zonk).
  - (prolang.y) When redefining a function, the redefinition can now
       have more arguments than the original.
  - (lex.c) Escaping newlines in #if conditions on Windows didn't
       work (reported by Zonk)

11-Jan-2003 (Lars Duening)  (3.3.356)
  - (efuns.c) to_string(struct) didn't print the name of the struct,
       and leaked memory (reported by Zonk).
  - (object.c, prolang.y) Corrected another refcount error in struct
       type instances (reported by Zonk).

08-Jan-2003 (Lars Duening)  (3.3.355)
  - (lex, prolang.y, simul_efun.c) Exported the initialisation of a global
       identifier into a single function, to collect all the values in
       one place.

07-Jan-2003 (Lars Duening)  (3.3.354)
  - (several files) Removed the 'no-blueprint' configuration option: there
       code is stable.

07-Jan-2003 (Lars Duening)  (3.3.353)
  - (prolang.y) Corrected another error in non-__INIT initializations
       (thanks, Guandalug).
  - (prolang.y) Corrected another refcount error in the struct code
       (reported by Bardioc).

06-Jan-2003 (Lars Duening)  (3.3.352)
  - (prolang.y) Removed compiler warnings.
  - (prolang.y, simulate.c) Removed compiler errors when not using __INIT
       (reported by Guandalug).
  - (mudlib/sys/wizlist.h) The wizlist_info() result array was allocated
       too small (reported by Dafire).

06-Jan-2003 (Lars Duening)  (3.3.351)
  - (ptmalloc.c) Using driver.h instead of config.h leads to compilation
       errors on some systems (reported by Gawain).
  - (smalloc.c, configuration) New configuration option --enable-malloc-check
       to enable simple malloc checks like the magic words in smalloc (enabled
       by default). The overhead for this is small, but especially in 
       a development driver this can catch many memory mis-uses.

05-Jan-2003 (Lars Duening)  (3.3.350)
  - (prolang.y) Corrected another struct related refcount error: function
       return types were freed twice (reported by Dafire).
  - (structs.c) Changed a call to struct_free() to free_struct() as the
       refcount needs to be adjusted properly.
  - (swap.c) When freeing an empty swapped-out struct, the refcount needed to
       be adjusted before calling struct_free_empty() (reported by Bardioc).
  - (make_func.y) When creating type/hookmaps in prolang.y, the linecounting
       didn't count the map's continuation lines.

04-Jan-2003 (Lars Duening)  (3.3.349)
  - (interpret.c) Many mudlibs index strings happily one past the
       end, which when used with assignments might lead to
       data structure corruption. Since this faulty idiom is in wide
       use, I re-allowed it, but now also generate a warning.
  - (simulate.c) Generating warnings didn't quite work.

04-Jan-2003 (Lars Duening)  (3.3.348)
  - (prolang.y) When inheriting functions with struct arguments,
       the refcount of the struct type instances wasn't incremented
       (reported by Bardioc and Dafire).

03-Jan-2003 (Lars Duening)  (3.3.347)
  - (smalloc.c) Freeing a small chunk in mem_consolidate() passed the
       wrong address to sfree() (reported by Nostradamus and Dafire).

03-Jan-2003 (Lars Duening)  (3.3.346)
  - (gcollect.c) The struct display code still used SMALLOC_OVERHEAD.

02-Jan-2003 (Lars Duening)  (3.3.345)
  - (xalloc.c) Freeing unreferenced memory didn't adjust the xalloc_stat
       statistic.

02-Jan-2003 (Lars Duening)  (3.3.344)
  - (many files): Improved and rewrote the struct implementation.

30-Dec-2002 (Lars Duening)  (3.3.343)
  - (configure, ptmalloc/, xalloc.c) Gawain adapted the threadsafe
       ptmalloc2 for use with the driver (GC not supported yet).
  - (smalloc.c) Removed the code for the double-linked freelist handling
       of large blocks - nobody was using it anymore.

28-Dec-2002 (Lars Duening)  (3.3.342)
  - (object.c) When saving lfun closures, the function name was looked
       up in the wrong program (reported by Dafire).

24-Dec-2002 (Lars Duening)  (3.3.341)
  - (xalloc.c) Clarified the role of REPLACE_MALLOC (prompted by Gawain).

24-Dec-2002 (Lars Duening)  (3.3.340)
  - (mregex.c) Efun regreplace() didn't check if for a '\<int>' replacement
      pattern the destinated subexpression match existed (reported by Zonk).

20-Dec-2002 (Lars Duening)  (3.3.338, .339)
  - (lex.c) Added a workaround for an optimizer bug in Cygwin (reported
      by Zonk).

20-Dec-2002 (Lars Duening)  (3.3.337)
  - (actions.c) Throw an error if H_NOTIFY_FAIL hook is missing. This also
      prevents the driver from crashing if the H_SEND_NOTIFY hook is
      defined (reported by Zonk).

18-Dec-2002 (Lars Duening)  (3.3.336)
  - (xalloc.c) The max_malloced tracing forgot to count down the allocated
      size on xfree()s (reported by Dafire).

18-Dec-2002 (Lars Duening)  (3.3.335)
  - (object.c) When calling privilege_violation() for restoring efuns,
      the current object is passed as 'who' argument (suggested by Gnomi).

17-Dec-2002 (Lars Duening)  (3.3.334)
  - (lex, object.c) restore_svalue() did not check if a restored efun was
      overriden by a nomask simul-efun (reported by Gnomi).
  - (comm.c) With pthreads, the driver could crash in remove_interactive()
      when the write_cond was destroyed while the thread was still
      waiting on it (reported by Lee).

16-Dec-2002 (Lars Duening)  (3.3.333)
  - (object.c) restore_map_size() stumbled over closure entries (reported by
      Jason).

16-Dec-2002 (Lars Duening)  (3.3.332)
  - (xalloc.c) Corrected a preprocessor conditional (thanks, Gawain!)

16-Dec-2002 (Lars Duening)  (3.3.331)
  - (xalloc.c) Corrected two small problems (thanks, Guandalug!)

16-Dec-2002 (Lars Duening)  (3.3.330)
  - (comm.c) If the login object destructed itself in the logon() call,
      the driver crashed in the print_prompt() routine (reported by Jason).

15-Dec-2002 (Lars Duening)  (3.3.329)
  - (object.c) Corrected a compilation error (thanks, Dafire and Jason!).

15-Dec-2002 (Lars Duening)  (3.3.328)
  - (prolang.y) It is no longer possible to defined a variable to be
      of type 'void' (reported by Gnomi).

14-Dec-2002 (Lars Duening)  (3.3.327)
  - (xalloc, smalloc, sysmalloc, gcollect, dependent files) Cleaned up the
      allocator interface somewhat, so that the MALLOC_-tracing is now
      handled by the xalloc layer, and that the GC no longer relies on
      the internal structures of smalloc.

14-Dec-2002 (Lars Duening)  (3.3.326)
  - (object.c) Efuns save_() and restore_() can now handle non-lambda
      closures, symbols and quoted arrays.  This required a new savefile
      format, though.

12-Dec-2002 (Lars Duening)  (3.3.325)
  - (mapping.c) Removed a memory leak: free_empty_mapping() did not
     clear the refcount.

11-Dec-2002 (Lars Duening)  (3.3.324)
  - (doc/concepts/negotiation, src/wk/) Added some telnet protocol
      related documentation.
  - (func_spec, lex.c, prolang.y, interpret.c) New operators '&&=' and
     '||=' (suggested by Croft).

09-Dec-2002 (Lars Duening)  (3.3.323)
  - (mudlib/telnetneg.c) Updated (thanks, Fiona!)
  - (mudlib/test_master.c) Added testcode for using charmode (thanks, Fiona!)
  - (comm) Fiona provided more patches: SAVE_NOECHO, which makes sure that
      the client can switch to CHARMODE before also setting NOECHO; and
      SIMULATE_CHARMODE which allows the mudlib to switch to charmode even
      if the client can do only linemode.
  - (files.c) Efuns copy_file() and rename() no longer throw errors
      on failures, but just return a non-0 value (reported by Menaures).

05-Dec-2002 (Lars Duening)  (3.3.322)
  - (config.h, comm, gcollect.c, main.c) Replaced USE_PTHREAD by USE_PTHREADS.
  - (comm.c) Before printing the prompt, current_object is set to NULL
      so that the player's catch_tell() is sure to be able to see the
      prompt (reported by mudder@Furtual.ORG).

04-Dec-2002 (Lars Duening)  (3.3.321)
  - (make_func.y, comm.c, main.c, prolang.y) Removed warnings (reported by
      Coogan).
  - (comm.c) When logging on a new player, the prompt wasn't printed - in
      particular the prompt set by input_to(INPUT_PROMPT) (reported by
      Nostradamus).
  - (main.c) If the reserved areas can be reallocated, the out_of_memory
      flag is reset.
  - (simulate.c) catch() reports an 'out_of_memory' condition only
      if it was raised during the execution of the guarded code.
  - (smalloc.c) Changed OVERHEAD to M_OVERHEAD.

03-Dec-2002 (Lars Duening)  (3.3.320)
  - (patch-o-matic) Updated to new executable name.
  - (prolang.y, object.c) The filenames returned by include_list()
      now always start with a '/' to make their reuse in include statements
      simpler (suggested by Coogan).
  - (mudlib/telnet) Fiona donated the telnet negotiations module from
      Wunderland, containing a complete implementation of the telnet protocol
      (thanks!).
  - (sprintf.c) The %O/%Q formatter stumbled over really large arrays
      and mappings: the top-level function ignored if the conversion
      routine reallocated the string buffer (reported by Bardioc).

03-Dec-2002 (Lars Duening)
  - (sprintf.c, closure.c, pkg-mysql.c) Removed compiler warnings.

03-Dec-2002 (Lars Duening)  (3.3.319)
  - (Makefile.in) Corrected two typos.

03-Dec-2002 (Lars Duening)  (3.3.318)
  - (Makefile) Driver executable renamed from 'driver' to 'ldmud'.
  - (configure, Makefile) The configure script now tries to figure out
      on its own which warning options the compiler supports.
  - (comm.c, erq.h) The erq callbacks can now take the returned
      data as a string instead of an array (suggested by Dafire).
  - (mud/lp-245) Edward S. Marshall found all uses of the new keyword
      'function' in the old mudlib and replaced them by something
      less offensive to the parser (thanks!).

30-Nov-2002 (Lars Duening)  (3.3.317)
  - (comm.c) Fiona provided a number of bugfixes for CHARMODE - thanks!

30-Nov-2002 (Lars Duening)  (3.3.316)
  - (prolang.y) Brainfart: the last patch created a problem, instead of
      solving one. The bug was that "*"::fun() looked at _all_ inherited
      programs, not just the directly inherited ones.

30-Nov-2002 (Lars Duening)  (3.3.315)
  - (prolang.y) When making wildcarded supercalls ("*"::fun()), the compiler
      takes care that each function is called only once (reported by Gnomi).

29-Nov-2002 (Lars Duening)  (3.3.314)
  - (sysmalloc.c) This file is no longer needed (actually it has been
      useless since 3.2.8-dev.188).
  - (dumpstat.c) Didn't compile with MALLOC_sysmalloc.
  - (lex.c) pragma_combine_strings was never initialised with a default.
  - (lex.c) Changed the FLOAT_MIN/FLOAT_MAX predefined to reflect
      the C-float limits, not the C-double limits, as the gamedriver's
      floats are somewhere inbetween the two.

27-Nov-2002 (Lars Duening)  (3.3.313)
  - (patchlevel.h, hosts/be/Makefile, hosts/be/set-version) The version
      flags of the BeOS executable are now read from patchlevel.h and not set
      directly in the BeOS Makefile.

27-Nov-2002 (Lars Duening)  (3.3.312)
  - (object.c) Efun transfer() was still incorrect. Funny though that
      nobody noticed it before :-) (reported by Nostradamus).

27-Nov-2002 (Lars Duening)  (3.3.311)
  - (comm.c) The correction of the threads racing condition unfortunately
      introduced a deadlock - Gawain found and fixed it (thanks!).

27-Nov-2002 (Lars Duening)  (3.3.310)
  - (object.c) Corrected the deprecated efun transfer(): the check
      for dest->can_put_and_get() was implemented wrong (reported by
      Nostradamus).

27-Nov-2002 (Lars Duening)  (3.3.309)
  - (comm.c) The thread-cleanup function now locks the structure before
      performing the cleanup (suggested by Gawain).

26-Nov-2002 (Lars Duening)
  - (object.c) restore_object("#0:0") caught the driver in an endless loop
      (thanks, Ctx!).

21-Nov-2002 (Lars Duening)
  - (etc/patch-o-matic) Contributed by Guandalug - thanks!

21-Nov-2002 (Lars Duening)  (3.3.308)
  - (closure, interpret.c, gcollect.c, mapping.c, dumpstat.c, efuns.c,
     call_out.c, comm.c) Merged lfuns with alien-lfuns - the space advantage
      of lfuns over alien-lfuns is no longer that big, and the merger
      simplifies the handling.

20-Nov-2002 (Lars Duening)  (3.3.307)
  - (closure.c) Corrected refcount errors in the handling
      of soon-to-be dangling alien-lfun closures.
  - (smalloc.c) Made sure that before each call to fatal() the thread-check
      is reset.
  - (closure, gcollect.c, interpret.c) Moved the context variables back to the
      closure_t toplevel - the alien-lfuns needed them as well, and the inner
      location was reason for strange crashes.

19-Nov-2002 (Lars Duening)  (3.3.306)
  - (closure.c, interpret.c) In order to convert a dangling lfun closure
      during a replace_program() into a dangling alien-lfun closure, the
      closure needs to be created as alien-lfun in the first place (reported
      by Pulami).

18-Nov-2002 (Lars Duening)
  - (closure, interpret.c, gcollect.c) Moved the context[] array from the top
      level of the closure_t into  closure_t.function.lfun, where it belongs.

17-Nov-2002 (Lars Duening)  (3.3.305)
  - (gcollect.c) When cleaning up an untabled string, a string was
      freed twice.
  - (svalue.h) Corrected the macro arguments to the put_object() family
      (reported by Ctx).
  - (many files) Removed trailing spaces from lineends.

16-Nov-2002 (Lars Duening)  (3.3.304)
  - (smalloc.c) If the allocator ran out of memory, the exit handling
      triggered the 'Multiple threads' safety check. Not really a problem,
      as the driver would exit anyway, but it obscures what is happening.
  - (prolang.y) Inline closures spanning include files were flagged
      as faulty, still the driver generated code.

16-Nov-2002 (Lars Duening)  (3.3.303)
  - (gcollect.c) The cleanup code could forget to free a destructed object.

15-Nov-2002 (Lars Duening)  (3.3.302)
  - (comm.c) The call to remove_flush_entry() could clobber the list
      of players to flush if it was called for a player not in the
      flush list.

15-Nov-2002 (Lars Duening)  (3.3.301)
  - (prolang.y) After removing the linenumber information for an inline
      closure from the LINENUMBER memory block, the compiler forgot to
      adjust the size of the block accordingly (reported by Zonk and
      Guandalug).

15-Nov-2002 (Lars Duening)  (3.3.300)
  - (gcollect.c) He - the new cleanup was permanently disable due to
      a typo on the #ifdef expression. Ah, the joys of using the
      C preprocessor...

14-Nov-2002 (Lars Duening)  (3.3.299)
  - (swap.c) Swapping strings during a GC could crash the driver.

13-Nov-2002 (Lars Duening)  (3.3.298)
  - (sprintf.c) Corrected an off-by-one error which sometimes clobbered
      the result of sprintf().
  - (efuns.c) get_type_info(,2) on an unbound-lambda crashed the driver
      because an uninitialized variable was used (thanks, Ctx!)
  - (simulate.c) If the H_NOECHO hook is set, the telnet negotiations
      are redirected only after the hook setting is verified (thanks,
      Fiona!)
  - (comm.c) Corrected a potential problem when an interactive object
      with pending data is forcefully made non-interactive: from my
      reading of the code it seems that the object remained in the
      list of players-to-flush, even though it no longer had a valid
      interactive_t attribute.

13-Nov-2002 (Lars Duening)  (3.3.297)
  - (backend.c) Reset and swapped objects are data-cleaned only
      every time_to_clean_up seconds (or 3600 seconds if no cleanup
      time is set); active objects are data-cleaned every time
      the processing gets to them.
  - (swap.c) When swapping strings, the length is now explicitely stored
      in the swap file. The old format added a \0 character as terminator,
      and consequently malfunctioned or crashed on strings using \0 as
      data character.
  - (backend.c, sprintf.c) The efuns debug_message(), sprintf() and printf()
      can now handle strings with \0 characters better.
  - (config.h) Moved the NEW_CLEANUP define into the config.h file and made
      it active again; but it still has to be modified by hand if so
      desired.

13-Nov-2002 (Lars Duening)  (3.3.296)
  - (gcollect.c) The cleanup code did not check for the NO_BLUEPRINT
      define (reported by Bardioc).
  - (gcollect.c, main.c) The new cleanup code seems to interfere with
      the swapper, therefore I deactivated it for the moment using
      the #define NEW_CLEANUP. If you want the new cleanup code, add
      this define in the Makefile to the compiler flags.

12-Nov-2002 (Lars Duening)  (3.3.295)
  - (port.h) The 'malloc' attribute is now used only with gcc 3 or newer.
  - (lex.c) Corrected the line counting with auto-includes (reported by
      Coogan).
  - (gcollect, backend.c) Added a method to the garbage collector which
      cleans up an object, ie. removes all references to destructed 
      objects from its variables and changes all untabled strings
      into tabled ones. This cleanup is performed by the backend as part
      of the normal object processing, and by the GC for all objects before
      the actual collection begins.

      This change solves the problem that destructed objects in the
      condensed part of a mapping go unnoticed if the mapping is only
      added to/removed from. In Evermore, where objects served as keys
      in a particular mapping, this led to an enormous mapping with
      stale entries, which the regular GC flagged as 'leaks'.

11-Nov-2002 (Lars Duening)  (3.3.294)
  - (comm.c) When calling H_NOECHO, the code did not check if the
      argument objects were still alive (reported by Fiona).
  - (port.h, comm.c, xalloc.h, smalloc.h) Activated GCC attributes for
      OS-X compilations, added GCC attribute 'malloc' to the allocator
      functions, removed some warnings.

07-Nov-2002 (Lars Duening)  (3.3.293)
  - (configure.in) The tests regarding which libraries are needed suffered
      from a disabling typo (reported by Nostradamus).
  - (ed.c) Added a safety checks to uses of P_FNAME - in case it's NULL
      (reported by Dafire).

07-Nov-2002 (Lars Duening)  (3.3.292)
  - (closure.c) If a lfun-closure is left danging by a replace_program(),
      it is now converted into an alien-lfun closure pointing to
      master::dangling_lfun_closure(). This way the error handler has
      a chance to determine the originating object (suggested by Gnomi).
  - (closure.c) The handling of dangling alien-lfun closures actually
      destroyed the alien.ob entry.
  - (interpret, array.c) allocate() used with an array or mapping initialisation
      value now creates shallow copies of the initialisation value for each
      initialised element (suggested by Oskar).
  - (interpret.c) The out-of-bounds condition [<0] was not caught (reported by
      Dafire).
  - (prolang.y, make_func.y) Removed warnings (reported by Freaky).

04-Nov-2002 (Lars Duening)  (3.3.291)
  - (smalloc.c) The thread-check in xfree() also triggered when the
      memory reserves were released (reported by Bardioc).

03-Nov-2002 (Lars Duening)
  - (configure.in) Made the check for -lpthread more robust (reported by
      Markus Peter).

01-Nov-2002 (Lars Duening)  (3.3.290)
  - (comm.c) *blush* Deleted TELOPT_EOR handling by act of stupidity..

31-Oct-2002 (Lars Duening)  (3.3.289)
  - (comm.c) Added TELOPT_BINARY to the telnet negotiations forwarded
      to H_TELNET_NEG (suggested by Fiona).
  - (comm.c) Made sure that telnet negotiations are sent out as quasi-
      binary messages (before, the default handling of TELOPT_BINARY failed
      because that option is character 0; reported by Fiona).

30-Oct-2002 (Lars Duening)  (3.3.288)
  - (lex.c) When starting a new compile, the order of initialisations
      was wrong (in particular: auto-include was handled before the
      lexer was set up) (reported by Freaky).
  - (configure, (x)erq/Makefile.in) Only link in libraries actually
      needed by the erq (suggested by Freaky).
  - (configure) Modified the configure so that only required libraries
      are added to the compile (suggested by Freaky).

29-Oct-2002 (Lars Duening)  (3.3.287)
  - (comm, func_spec) find_input_to() and remove_input_to() can now
      match on both object and string name.
  - (comm.c) Improved the 'already bound' error messages to list
      the port number.
  - (util/xerq) If the xerq couldn't send all data from a ERQ_SEND request
      immediately and thus returned a ERQ_E_INCOMPLETE, it will follow it
      up with a ERQ_OK message to the same handle later once all the pending
      data has been send (provided by Fiona, thanks!)
  - (util/xerq/lpc) Replaced the socketd with the Wunderland daemon
      (thanks!).
  - (lex.c, prolang, simulate.c) auto-includes are now handled like
      normal includes (instead of just placing the text into the textbuffer
      and fudging the current_line variable), correcting a source of false
      linenumber informations.
  - (efuns.c) regmatch( "a", "b*", RE_MATCH_SUBS ) crashed the driver because
      the code tried to determine the length of the non-existing first match
      (reported by Zonk).

27-Oct-2002 (Lars Duening)  (3.3.286)
  - (smalloc.c) Added a very primitive safeguard against interleaving
      calls to the allocator - I suspect that this is the root cause
      for the problems with pthreads.
  - (object.c) When resetting an object, the previous_object() was
      some random object (reported by Gnomi).
  - (comm, func_spec) New efuns find_input_to() and input_to_info()
      (suggested by Fiona).

16-Oct-2002 (Lars Duening)  (3.3.285)
    - (configure) Some systems need libresolv in order to provide
        herror() (reported by Coogan).
    - (comm.c) Removed a compile warning (thanks, Fiona!).

15-Oct-2002 (Lars Duening)
  - (mkfunc.y, Makefile.in, prolang.y) We now assume that on principle
       the yacc can't use default actions with anonymous yystack values.
       The difference in code is too small to justify all the testing
       effort.
  - (prolang.y) bison 1.5 helped finding some small flaws.

14-Oct-2002 (Lars Duening)
  - (configure) If a requested option (like use-mysql) can't be used
       because the system lacks the necessary support, the configure
       script issues a warning and exits with return code 1 (suggested
       by Freaky).

13-Oct-2002 (Lars Duening)  (3.3.284)
  - (configure.in) The test for 'long long' was run twice. And if pthreads
       are not found, USE_PTHREADS is now deactivated (reported by Freaky).

10-Oct-2002 (Lars Duening)  (3.3.282, .283)
  - (object.c) Restoring structs in mappings didn't work (reported by Tomba).
  - (efuns.c, svalue.h, interpret.c) Evaluation cost of  deep_copy() is
       now proportional to size and nesting depth of copied arrays
       and mappings, if DYNAMIC_COST is defined (suggested by Gnomi).
  - (main, configure) Removed the last remnants of debug options CHECK_STRINGS
       and KEEP_STRINGS.

09-Oct-2002 (Lars Duening)  (3.3.281)
  - (actions.c, interpret) The OPC dump function still used char* strings
       instead of the new strings (reported by Nostradamus).
  - (prolang.y) Removed compilation warnings.

09-Oct-2002 (Lars Duening)  (3.3.280)
  - (prolang.y) When processing inherited structs, the code overwrote
       random memory - especially when there weren't any structs to
       process (reported by Bardioc).
  - (port.h) No longer includes <values.h> which has been obsoleted
       by <limits.h> and <float.h>.
  - (config.h, driver.h) Removed the compilation warning when YYDEBUG
       was not defined.

08-Oct-2002 (Lars Duening)
  - (sprintf.c) Printing a quoted array accidentally used the struct-printing
       code (reported by Dafire).
  - (interpret.c) structs are not flattened in apply() or with '...'
       (suggested by Zonk).

08-Oct-2002 (Lars Duening)  (3.3.279)
  - (prolang.y) Gah, forgot to remove a debug output.

08-Oct-2002 (Lars Duening)  (3.3.278)
  - (configure) Forgot to regenerate it.
  - (lex.c, prolang) Implemented #'inh::fun lfun closures (b-010801-0).

07-Oct-2002 (Lars Duening)  (3.3.277)
  - (comm.c, main.c, efuns.c) Removed compilation problems with BeOS.
  - (prolang.y) In struct literals, a trailing ',' is now allowed
       (suggested by Zonk).
  - (prolang.y) Oh My Ghod. The range index [..<expr0>] created faulty
       bytecode, maybe even clobbered random memory, if the expression
       was anything complicated, like 'm++' or 'm = 4'. This bug
       was caused by uninitialized the LPC parser not initializing
       the internal return value from parsing <expr0>, so the bug
       didn't manifest itself every time (reported by Zonk).

06-Oct-2002 (Lars Duening)  (3.3.276)
  - (prolang.y, interpret.c, efuns.c, sprintf.c, gcollect.c, exec.h)
       structs now carry an identification string internally, which is
       displayed in sprintf() and can be retrieved using get_type_info().

06-Oct-2002 (Lars Duening)  (3.3.275)
  - (prolang.y) New inlines: found a way to implement the old (: expr; :)
       form, and corrected an error where the type of context variables
       wasn't copied properly, but instead a random value was used.
  - (interpret.c) The sanity check for proper stack usage was still
       incompatible with the new multibyte efun instructions (reported
       by Dafire).
  - (prolang.y) Structure IDs are now counted up from 1 instead of 0,
       so that efun argument type errors can print id #0 as "just struct"
       (reported by Dafire).
  - (prolang.y) Straightened out the functions for function generation to
       reduce duplicated code.

06-Oct-2002 (Lars Duening)  (3.3.274)
  - (prolang.y) New inlines: Improved the error handling for the (::) form:
       the parser now recovers gracefully if statements are used instead
       of expressions (reported by Dafire and Nostradamus).

05-Oct-2002 (Lars Duening)  (3.3.273)
  - (prolang.y) Inline closures without returntype specification are now
       typed to return 'mixed' instead of 'unknown'. This makes them
       play better with #pragma strict_types (reported by Dafire).
  - (func_spec, interpret.c) Completely forgot to implement the structp()
       predicated.

05-Oct-2002 (Lars Duening)  (3.3.272)
  - (gcollect.c) Oops, MALLOC_TRACE and USE_NEW_INLINES caused a compilation
       error.

04-Oct-2002 (Lars Duening)  (3.3.271)
  - (lex.c, prolang.y) Debugged the new inline closure code - it all seems
       to work now. I therefore turned it on by default. (f-020528, f-991104-1)
  - (prolang.y) Removed the already inactive code for hybrid struct literals,
       as nobody wanted them.
  - (autoconf/configure.in) Corrected the problem with newer autoconfs.

03-Oct-2002 (Lars Duening)  (3.3.270)
  - (prolang.y) The new inline closures is alpha-complete: I think I have
       implemented everything, but I haven't tested it yet.
  - (lex.c, prolang.y) Some internal changes to make implementation of
       new inline closures simpler.

02-Oct-2002 (Lars Duening)  (3.3.269)
  - (prolang.y) Added the basic infrastructure to compile an inline closure.
       Still missing: context recognition, translation of local variable
       uses, extended context (': ..' syntax), mandatory local scopes,
       and line numbers.

01-Oct-2002 (Lars Duening)  (3.3.268)
  - (comm.c) Forgot a parameter in an error message (thanks, Freaky!)
  - (main.c, comm) The hostname was initialized to late, so the debug.log
      file was opened with the wrong name (reported by Dafire).

30-Sep-2002 (Lars Duening)  (3.3.267)
  - (comm.c) Changed the fprintf() in the thread cleanup routine into a
      malloc-friendlier dprintf1().
  - (main.c) Added a check into debug_message() if the name of the
      debug log file has already been set (reported by Dafire).
  - (simulate.c) The driver now checks if an object to be loaded appears
      out of nowhere while it is being compiled (this can happen if the mudlib
      warning handler is careless with rename_object()) and throws an error
      (reported by Gnomi).
  - (main.c, comm) New commandline options --hostname and --hostaddr
      to override the values returned by the system. In particular,
      --hostaddr will be used as the address to open to the driver
      ports.

27-Sep-2002 (Lars Duening)  (3.3.266)
  - (comm, main.c, configure) Based on a patch by Gawain, PTHREADS and
      PCRE (requires Fiona's patch) can now be configured like other
      options. New commandline option --max-thread-pending to set
      the limit for pending data to write.

26-Sep-2002 (Lars Duening)
  - (interpret.c) struct can now be compared for equality and
      inequality; they can be used as values in foreach() statements
      and with the '...' operator resp. apply().

25-Sep-2002 (Lars Duening)
  - (comm.c) If a connection is marked for removal (.do_close != 0),
      telnet commands can still be sent. This is to allow the input_to()
      handling to properly reset the connection to linemode even if
      the input_to() handler has called remove_interactive().
  - (backend, smalloc.c) Made the GC request log output nicer.

25-Sep-2002 (Lars Duening)  (3.3.265)
  - (comm, gcollect.c) Removed compiler warnings, and a crash
      in pthreads thread cleanup (reported by Dafire)

25-Sep-2002 (Lars Duening)  (3.3.264)
  - (interpret.c) The LPC tracing code crashed when used with lambda
      closures or with call_resolved() (reported by Nostradamus).

24-Sep-2002 (Lars Duening)  (3.3.263)
  - (comm, backend.c, gcollect.c) smalloc is not threadsafe, which
      caused the implementation of USE_PTHREAD code to trash the
      memory structures. To solve the problem, all memory allocations
      and deallocations are done by the main thread.
  - (gcollect.c) Program strings were counted twice, causing
      a creeping memory leak.
  Patches from Guandalug:
  - (efuns.c) Efun deep_copy() couldn't be used with structs.
  - (object.c) Efun function_exists(): corrected an error message.
  - (closure.c) Converting a sefun-closure to a string looked up the
      name in the efun table instead of the sefun table.

23-Sep-2002 (Lars Duening)
  - (prolang.y) Using a range foreach() with an empty loop body crashed
       the driver (reported by Nuutti).
  - (comm.c) USE_PTHREAD: Restructured the writer_thread() code a bit.

19-Sep-2002 (Lars Duening)  (3.3.262)
  - (etc/lpc-mode.el) LPC mode for EMACS, by Vivek Dasmohapatra.
  - (func_spec) The spec for set_modify_command() excluded that the
       efun could take '0' as argment (reported by Kent!)
  - (object.c) Efun inherit_list(): the tagging of virtual inherits
       didn't work (reported by Dafire).
  - (prolang.y) The test for duplicate toplevel inherits got confused
       when virtual inherits occured (reported by Zonk via Dafire).

18-Sep-2002 (Lars Duening)  (3.3.261)
  - (func_spec, interpret, simulate) Added the infrastructure to create
       context closures, and to access the context variables. Now we
       'just' need the support in the compiler.

18-Sep-2002 (Lars Duening)  (3.3.260)
  - (gcollect.c) Oops, didn't compile with MALLOC_TRACE enabled.

18-Sep-2002 (Lars Duening)  (3.3.259)
  - (doc/obsolete/) New directory to hold obsolete manpages - useful
       when reworking old code (suggested by Coogan).
  - (func_spec, object, string_spec) Efun transfer() is now officially
       deprecated.
  - (doc/hook/) New directory to document the driver hooks
       one-per-file.
  - (func_spec, parse, other files) Removed the compat-mode version
       of parse_command(); the efun itself is now configured over
       the config option use-parse-command.
  - (func_spec, configure, other files) Efuns set_is_wizard(),
       set_light(), and process_string() can now be configured.
  - (closure, efuns.c, sprintf.c) Streamlined the conversion of closures
       to strings.
  - (bytecode.h) New include to reduce dependencies on exec.h .
  - (func_spec, actions) New efun match_command().

17-Sep-2002 (Lars Duening)  (3.3.258)
  - (bitstrings.c, swap.c, simulate.h) Removed warnings (reported by Dafire).
  - (comm.c) ECONNREFUSED is recognized as error (suggested by Coogan).
  - (prolang.y) Assignments to a struct member caused the LPC compiler to
       dereference uninitialized memory when the member lookup failed
       (reported by Bardioc).

16-Sep-2002 (Lars Duening)  (3.3.257)
  - (comm.c) With PThreads: forgot to detach new threads after creation
       (thanks, Gawain!)
  - (configure) The object statistic seems to be correct now, so the
       OSTAT diagnostics are disabled by default.
  - (closure.c) The argument checking when compiling sefuns in a lambda
       closure didn't work properly (reported by Coogan).
  - (exec.h) The mask SEC_TYPE_INFO was defined improperly.
  - (prolang.y) If an explicite call to an inherited function couldn't
       be compiled, the argument type stack got popped too often - eventually
       causing memory corruption.

15-Sep-2002 (Lars Duening)  (3.3.256)
  - (bitstrings.c, closure, efuns.c, interpret, gcollect.c, object.c,
     simul_efun.c, swap.c)
       Reduced coupling to instrs.h .
  - (closure, ed.c, lex, parse.c, parse_old.c) Reduced coupling to lang.h .
  - (func_spec, lex.c, object) Config option COMPAT_MODE now just defines
       the default run mode.

15-Sep-2002 (Lars Duening)  (3.3.255)
  - (mstrings.c) Corrected the search statistics.
  - (prolang.y, lex, interpret.c, simulate, func_spec) New pragma
       'warn_deprecated' causes the compiler to print warnings when
       a deprecated efun is used (suggested by Dafire).
  - (regexp, mregex.c) Removed name clashes with system libraries.

15-Sep-2002 (Lars Duening)  (3.3.254)
  - (mapping.c) Accidentally broke the mapping functionality with the
       new svalue_cmp()/svalue_eq() functions.
  - (prolang.y) If a wildcarded super call couldn't be resolved, a
       spurious arg-frame was left on the stack (reported by Dafire).
  - (prolang.y) The LPC compiler didn't check addition was attempted
       on known structs. Vice versa, the type checking on assignment
       was too strict (reported by Bardioc).

13-Sep-2002 (Lars Duening)  (3.3.253)
  - (interpret.c, prolang.y) Removed compiler warnings.
  - (array, mapping.c, pkg-alists.c, i-svalue_cmp.h) Exported the
       svalue comparison inline functions into their own include file.
  - (closure, gcollect.c, other files) With USE_NEW_INLINES: lfun closures
       can now carry a bunch of context values with them.

12-Sep-2002 (Lars Duening)  (3.3.252)
  - (interpret.c) DYNAMIC_COSTS now also covers array additions.
  - (prolang.y) When inheriting variables, the function to
       adjust the struct-id inadvertendly stripped away the
       inheritance flags. This caused virtual variables to
       go uninitialized or worse.

11-Sep-2002 (Lars Duening)
  - (prolang.y) Oops, typos in the constant-struct code when __INIT
       is not used (thanks, Guandalug).

11-Sep-2002 (Lars Duening)  (3.3.251)
  - (main.c) Redesigned the argument definition array to combine all
       information (short version, long version, short and long help
       text) in one place. Also got rid of the COMPAT arguments.

10-Sep-2002 (Lars Duening)  (3.3.250)
  - (func_spec, efuns) The efuns to_array() and to_string() can now
       handle structs; new efun to_struct().
  - (prolang.y) Removed the ability to create struct literals
       with named and unnamed initializers - it's borderline
       featuritis.

09-Sep-2002 (Lars Duening)  (3.3.249)
  - (exec.h) The NAME_HIDDEN flag interfered with the struct id in
       full variable types.
  - (config.h.in) Oops, USE_STRUCTS was controlled by the PCRE
       configuration option.
  - (configure, config.h.in, prolang.y, lex.c) Just for fun I added
       the necessary rules for a new inline function syntax. This
       change is controlled by configuration option use-new-inlines,
       and since it is incompatible with existing code, it is by
       default OFF.

08-Sep-2002 (Lars Duening)  (3.3.248)
  - (dumpstat.c) The status dump (also accessed by debug_info(2))
       couldn't handle structs (thanks, Markus).
  - (efuns.c) The argument checks for debug_info(DINFO_STATUS)
       accepted objects instead strings (thanks, Markus).
  - (prolang.y) Assignments of mixed/mixed* to struct don't need
       a cast (suggested by Markus).

06-Sep-2002 (Lars Duening)  (3.3.247)
  - (object.c) Restoring arrays or structs confused the two types
       (thanks, Markus!).

06-Sep-2002 (Lars Duening)  (3.3.246)
  - (prolang.y, func_spec, interpret.c, closure.c, object.c, swap.c,
     efuns.c) structs are now fully implemented (at least as far as I
       can see); internally they are used and accessed like arrays
       (f-981229-05).

05-Sep-2002 (Lars Duening)  (3.3.245)
  - (prolang.y) The function header for __INIT() was generated incorrectly
       (reported by Markus).
  - (exec.h, prolang.y, svalue.h, gcollect.c, interpret.c) Implemented
       constant struct initializations (!INITIALIZATION_BY___INIT).

04-Sep-2002 (Lars Duening)  (3.3.244)
  - (gcollect.c, prolang.y, exec.h, object) Implemented the parsing
       and inheritance of struct definitions (the latter untested).
  - (mstrings.c) The string statistics seem to be correct, so I removed
       the 'SSTAT' diagnostics altogether.

04-Sep-2002 (Lars Duening)  (3.3.243)
  - (exec.h, prolang.y, make_func.y, closure.c, main.c) Added a compile-time
       type 'TYPE_STRUCT' and provided space in the function header to 
       store it. A side effect is that ALIGN_FUNCTIONS is now mandatory; it
       was the default anyway and nobody I know ever disabled it. Another
       side effect is that I found another magic constant which I hadn't
       given a macro name before.

04-Sep-2002 (Lars Duening)  (3.3.242)
  - (mstrings.c) I found one place where the string statistics were
       computed wrongly.

03-Sep-2002 (Lars Duening)
  - (interpret, lex.c, comm.c) Lambda-callbacks now clear the evaluation
       costs before processing an error as well.
  - (swap.c) The object statistics get messed up when the GC swaps objects.
       Let's see if this change corrects all of the discrepancies. In
       general the reason for the discrepancies was that variables
       were counted more often as 'swapped in' than they had been
       swapped out.

02-Sep-2002 (Lars Duening)  (3.3.241)
  - (mstrings.c) The SSTAT diagnostic produced far too much output; but
       since the test run in OSB gave me a first clue, I can now search
       with less brute force.

02-Sep-2002 (Lars Duening)  (3.3.240)
  - (prolang.y) Added a missing %endif (thanks, Guandalug!)

01-Sep-2002 (Lars Duening)  (3.3.239)
  - (mstrings.c) The string statistics are off - added 'DEBUG: SSTAT'
       diagnostics when that happens.

30-Aug-2002 (Lars Duening)  (3.3.238)
  - (efuns.c, lex.c, make_func.y) Support for international characters
       was broken (thanks, Oskar!).

29-Aug-2002 (Lars Duening)  (3.3.237)
  - (prolang.y, lex.c, main.c, configure) Added syntax support for structs
        - no code yet to actually use them.

28-Aug-2002 (Lars Duening)  (3.3.236)
  - (prolang.y) When removing the arg-frame instruction from a call_other,
        the compiler looked up the wrong program offset.

28-Aug-2002 (Lars Duening)  (3.3.235)
   - (mud/lp-245) Provided all object lfuns with proper argument and return
        types.

27-Aug-2002 (Lars Duening)  (3.3.234)
   - (prolang.y) Fixed two typos in messages.

26-Aug-2002 (Lars Duening)
   - (swap.c) The OSTAT diagnostic for swap-in subtracted instead of added
        to compute the expected new tot_alloc_object_size value (reported
        by Coogan).

25-Aug-2002 (Lars Duening)
   - (comm.c) The pthreads code didn't compile (reported by Markus).

24-Aug-2002 (Lars Duening)  (3.3.233)
   - (efuns.c) Efun terminal_colour(): some random characters were appended
        to the result string (reported by Markus).
   - (object.c) If restoring from a file fails, the error message lists
        the line number concerned.

23-Aug-2002 (Lars Duening)  (3.3.232)
   - (efuns.c) Efun terminal_colour(): the bugfix to handle single '%'
        was incomplete (reported by Markus).

21-Aug-2002 (Lars Duening)  (3.3.231)
   - (comm.c, object.c, simulate.c, swap.c) Corrected some warnings
        (reported by Dafire).
   - (interpret, and some more files) Master applies caused by external events
        (like ERQ messages) are now distinguished from internal calls
        (like valid_write()) so that the error handling for external calls
        receive the full eval cost benefits (suggested by Fiona).
   - (Makefile.in s): Added missing @EXEEXT@ tags.

20-Aug-2002 (Lars Duening)  (3.3.230)
   - (main.c) Needed to #include <netdb.h> on Solaris to get the
        MAXHOSTNAMELEN macro (thanks, Coogan).
   - (util/erq/erq.c, util/xerq/erq.c) Forgot the timestamp in the
        initial startup message.
   - (port, files.c, comm.c, hosts/unix.h) Cygwin corrections.
   - (config.h, configure, driver.h, erqs) New configuration option
        with-erq-debug sets the new config.h macro ERQ_DEBUG which
        defines the ERQ debug level. No more '-DDEBUG' to enable
        the debugging code in the ERQs (suggested by Bill).

19-Aug-2002 (Lars Duening)  (3.3.229)
   - (lex.c) An error in a permanent define given on the command line
        would crash the driver because the lexer called error() before
        the VM had been set up.
   - (main.c) If the driver uses the default debug.log file, its (mudlib)
        name is available in the predefined macro __DEBUG_LOG__ (suggested
        by Mandragon).
   - (driver.h, config.h) Made the config.h macro DEBUG invisible to the
        ERQs as their debugging mode is controlled by their Makefiles.
   - (util/erq/erq.c, util/xerq/erq.c) The ERQs now print their name
        and compilation date to stderr on startup.
   - (closure.c) Efun symbol_efun() freed symbol-svalues as strings
        (reported by Dafire).
   - (regexp.c) regexec() returned a RE_MATCH for a failed match,
        causing all kinds of neat failures (thanks, Guandalug!)

18-Aug-2002 (Lars Duening)  (3.3.228)
   - (lex.c) Added predefined macros __RESET_TIME__ and __CLEANUP_TIME__
        (suggested by Elric).

18-Aug-2002 (Lars Duening)  (3.3.227)
   - (interpret.c) vefun argument error messages printed the wrong
        instruction name since they still expected a 'num_args'
        bytecode (reported by Markus).
   - (efuns.c) Efun terminal_colour(): when checking for the existance
        of a '%^' marker in the text, a single '%' caused the code
        to search random memory (reported by Markus) (b-020228-1).

17-Aug-2002 (Lars Duening) (3.3.226)
  - (array.c) In the array-array operations, the optimized handling
        for handling short arrays didn't clean out destructed 
        object references (reported by Markus).

16-Aug-2002 (Lars Duening) (3.3.225)
  - (array.c) In the array-array operations, the algorithm didn't
        handle multiple occurances of the same value well (reported
        by Markus).

15-Aug-2002 (Lars Duening) (3.3.224)
   - (array.c) In the array-array operations, a comparison was made
        using unallocated memory (reported by Markus).

14-Aug-2002 (Lars Duening) (3.3.223)
   - (configure) Optimization option -funroll-all-loops seems to
        create buggy code, so I removed it from the configure.
   - (object.c) Efun tell_room() leaked memory.
   - (simulate.c) check_valid_path() leaked the pathname when
       an error occured.

14-Aug-2002 (Lars Duening) (3.3.222)
    - (comm.c) Compilation broke under BeOS.
    - (object.c, swap.c, simulate.c) Removed warnings.
    - (object.c) An error message printed memory garbage.
    - (array) Forgot to export array_cmp() and shrink_array() when
         using alists (reported by Markus).

14-Aug-2002 (Lars Duening)  (3.3.221)
    - (array, interpret.c, prolang.y) Added the symmetric difference
         operators '^' and '^=' for arrays; complemented '|' for arrays
         with '|='.
    - (array.c) Modified the sorting routine get_array_order() so that
         for small arrays linear-exchange is used instead of heapsort.
         This trades less overhead for worse complexity.

13-Aug-2002 (Lars Duening)  (3.3.220)
    - (configure) The VERBOSE_OPCPROF define in config.h got clobbered.
    - (interpret.c) I removed the copy-on-write for mappings again - 
         it broke more than it fixed.

13-Aug-2002 (Lars Duening)  (3.3.219)
    - (regexp, mregex) Changed the original RE package to return
         error codes instead of calling regerror(). This puts it more
         in line with the PCRE implementation.
    - (configure, setting files) PCRE is now compilation default; however
         I disabled it explicitedly in the setting files.
    - (regexp, pcre) Whenever the RE engine has to backtrack, the eval
         cost is incremented and checked. This will catch pathological
         matches like regexp(({"=XX==================="}), "X(.+)+X")
         (regexp mod provided by Fiona).
  This completes the addition of PCRE to LDMud (f-010406-0).

12-Aug-2002 (Lars Duening)  (3.3.218)
    - (lex.c) New predefined macros __CATCH_EVAL_COST__ and
         __MASTER_EVAL_COST__ to carry the corresponding
         configuration options over to LPC (suggested by Menaures).
    - (Makefiles, configure, config.h) Moved the debugging options into
         config.h to ensure clean recompilations, and made them
         configurable through the normal configure mechanism.
    - (make_func.y, lotsa files) Efuns with more than four fixed
         arguments are implemented as vararg efuns. In addition,
         because the vararg efun functions have a different signature
         than the fixed efun functions, the former now use 'v_xxx()'
         as standard name.

11-Aug-2002 (Lars Duening)
    - (driver.h, object.c, simulate.c, swap.c) Defining debug macro
         CHECK_OBJECT_STAT allows tracing of all changes to the
         tot_alloc_object(_size) statistics. Aim is to find the
         discrepancy in the 'status' command. To activate the
         tracing, the commandline option '--check-object-stat' must
         be given.
    - (interpret.c) The operations <map> += <map> and <map> -= <map>
         now implement the copy-on-write semantic to mirror the
         behaviour of the related array operations (suggested by Dafire).
    - (interpret.c) get_type_info(<closure>,2) did not return the
         bound object for efun, simul-efun and operator closures 
         (reported by Gnomi).
    - (interpret.c) Attempting to replace a program in an object
         which already has closures bound no longer raises an error,
         but issues a debug_message() (suggested by Pulami).
    - (make_func.y) Removed two warnings by bison (reported by Gawain).

10-Aug-2002 (Lars Duening)  (3.3.217)
    - (closure.c) In efun symbol_function(), symbols were freed as
         strings (reported by Freaky).
    - (main, backend.c) Signal USR2 forces the driver to reopen the
         host.debug.log file (thanks, Gawain!).
    - (comm, gcollect.c) Experimental: Defining USE_PTHREAD (if your
         system has pthread support) activates code which uses threads
         to write the socket data to the network in the background.
         Intention is to avoid EWOULDBLOCK errors on slow connections
         (thanks, Gawain!)

08-Aug-2002 (Lars Duening)
    - (comm.c) When using IPv6, get_host_ip_number() used a too small
         buffer (thanks, Fiona!)
    - (backend.c) Improved the 'doing a GC' messages somewhat.

05-Aug-2002 (Lars Duening)  (3.3.216)
    - (mapping.c) Embarassing: the bugfix broke map() and filter()
         for all non-multi-value mappings (reported by Casey).

05-Aug-2002 (Lars Duening)  (3.3.215)
    - (prolang.y) Inheriting the same program twice at the top level
         now raises a warning, resp. an error in pedantic mode.
    - (simulate.c) If a closure is called from limited() and self-destructs,
         the driver would try to free the now-invalid closure argument
         and crash (this happened a lot in EotL) (thanks, Casey!).
    - (interpret.c) In DEBUG mode, the functions free_object_svalue() and
         free_string_svalue() check that they really get the proper data type.
    - (efuns.c) Efuns filter() and map(): when used with multi-value
         mappings, the driver checks if the called function kept a reference
         to the passed array with the values. If yes, a new array is
         created for the next iteration to avoid overwriting the old
         one (reported by Fiona).
    - (interpret.c) When collecting the traceback in a catch(), the
         file and line information was used, but not initialized, occasionally
         crashing the driver. In addition, in a couple of cases when the
         file and line information can't be determined, the file was
         left undefined (thanks, Gnomi!)

16-Jul-2002 (Lars Duening)  (3.3.214)
    - (efuns.c) regmatch() returns 0 instead of the empty string for
         non-matches (suggested by Fiona).
    - (efuns.c) regmatch() takes and returns a start index for repeated
         matches over the same string (suggested by Fiona).

15-Jul-2002 (Lars Duening)  (3.3.213)
    - (mud/lp-245) The wizlist() simul-efun didn't print proper failure
         notices (reported by Vandergnome).
    - (gcollect.c) In a GC the list of destructed objects was handled
         last, by which time the list might already have been clobbered.
         Moving the handling first should plug a memory leak (reported by
         Dafire).
    - (prolang.y) If a variable was inherited multiple times, the driver
         generated a senseless warning (reported by Zora).
    - (efuns.c, main.c) Added some support for locales; in
         particular the driver now uses the locale defined in the LANG
         environment variable for character conversions (thanks, Oskar!).
    - (simulate.c) Efun callbacks misparsed the arguments when only the
         function name and extra arguments, but no object was provided.
    - (efuns.c) Corrected a bug in regreplace() was caused by matches
         on null-string patterns (reported by Dafire, fixed by Fiona -
         thanks!).

14-Jul-2002 (Lars Duening)  (3.3.212)
    - (etc/memusage) Fiona updated the script to make it more robust and
         work with the new OBJ_DUMP format. Furthermore the constants
         for $DOMAINS and so on do work now.
    - (files.c) When GETDIR_PATH was used with get_dir(), the resulting
         strings had trailing NUL characters (thanks, Guandalug!)
    - (mstrings.c) Under some circumstances, strstr() returned positions
         after the end of the string. Found by Acius and fixed by Guandalug
         (thanks!).

05-Jun-2002 (Lars Duening)  (3.3.211)
    - (prolang.y) Oops, yesterday's bugfix was not quite corrected.

04-Jun-2002 (Lars Duening)  (3.3.210)
    - (prolang.y) If a method in a virtual inherit is rendered invisible,
         but also made available again through a parallel inherit of the same
         program, the compiler resolved the visible function to the
         wrong inheritance, causing the driver to crash (b-020530).

17-May-2002 (Lars Duening)
    - (backend.c) The new arguments to garbage_collection() are ignored
         when the memory allocator doesn support a GC.

13-May-2002 (Lars Duening)  (3.3.209)
    - (hash.c) The hash functions were still incorrect for 0-length
         strings, causing FinalFrontier to crash on boot (reported
         by Dafire).
    - (config.h.in, Makefile.in, autoconf/configure.in) TRACE_CODE
         is now configurable through the configure script, and thus
         is located in config.h and no longer in Makefile.
    - (gcollect, interpret.c, func_spec) Optional filename argument
         to efun garbage_collection() can specify a new GC log file
         for the next GC. The filename is validated through
         master::valid_write() (f-020312).

07-May-2002 (Lars Duening)  (3.3.208)
    - (mapping.c) 'mapping += mapping' now throws an error when the
         mappings are of differing width (reported by Alfe and Coogan).
    - (prolang.y) New notation '([:<expr>])' as shortcut for
         m_allocate(0, <expr>) (suggested by Alfe).

06-May-2002 (Lars Duening)  (3.3.207)
    - (smalloc.c) With CHECK_OBJECT_GC_REF, small chunks could lead to
         misleading diagnostics during the GC.

03-May-2002 (Lars Duening)  (3.3.206)
    - (interpret) The H_DEFAULT_METHOD can now be specified with varargs
         arguments and still receive by-reference variables, similar to
         the call_other() sefun (reported by Bardioc).
    - (prolang.y) Reworked the program block reallocations to make sure
         that their bounds won't be overwritten. This could have been
         the reasons for the crashers on corrupted memory (reported by Coogan).

01-May-2002 (Lars Duening)
    - (settings/dt2) Updated the DeeperTrouble settings file; and also
         removed the mud/dt2 directory since it's no longer necessary
         (thanks, Lasse!).

26-Apr-2002 (Lars Duening)  (3.3.205)
    - (prolang.y) Hiding an inherited private nosave variable with an
         inherited non-private variable didn't work (reported by Gnomi).
    - (prolang.y, lex.c, simulate.c) Compiler error and warning messages
         all have the format '<file> line <line>: <text>' now.
    - (prolang.y, swap.c) Oops, the linenumber structure was allocated too
         small on creation, and read in incorrectly from swap.
    - (driver.h) Deactivated the debug defines CHECK_MAPPING_TOTAL
         and CHECK_OBJECT_REF since these bugs seem to be fixed.

25-Apr-2002 (Lars Duening)  (3.3.204)
    - (comm.c) Using unbound lambdas for prompts crashed the driver
         (reported by Gnomi).
    - (driver.h, gcollect, smalloc) When macro CHECK_OBJECT_GC_REF is
         activated, every supposedly non-object memory reference in a GC is
         checked if it points to an object. If yes, a diagnostic is printed
         to gcollect out. Requires MALLOC_TRACE to work.

21-Apr-2002 (Lars Duening)  (3.3.203)
    - (exec.h, prolang.y, interpret.c, object.c, swap.c) Linenumbers are
         now kept in a separate memory block, which makes swapping them
         out and back in simpler.

20-Apr-2002 (Lars Duening)  (3.3.202)
    - (prolang.y, lex.c) Calls to the master during a compilation now check
         the available evaluation costs. If the limit is exceeded, a
         compilation error is generated.
    - (swap.c) Removing a program block from the swap no longer crashes
         if the program doesn't have line numbers (reported by Pixie).
    - (prolang.y) Calls to undefined functions now generate a warning
         when detected in functions without typechecking if #pragma
         pedantic is in effect (before the compiler silently inserted
         a prototype).

19-Apr-2002 (Lars Duening)
    - (prolang.y) Removed a few bison warnings (reported by Menaures).

18-Apr-2002 (Lars Duening)  (3.3.201)
    - (prolang.y) When passing a wrong argument to a varargs function, the
         error message gave the wrong argument number (reported by Gnomi).
    - (func_spec, mapping) New efun m_add().

09-Apr-2002 (Lars Duening)  (3.3.200)
    - (prolang.y) The improved type checking on <op>= accidentally
         broke the type checking on the plain assignment (reported by Dafire).
    - (mregex.c) Substituting patterns copied garbage characters, too
         (reported by Markus).
    - (hash.c) Made the hash functions resistant against 0-length
         strings.

08-Apr-2002 (Lars Duening)  (3.3.199)
    - (efuns.c) The length computation for the result of regreplace()
         was wrong when using closure-substitutions (reported by Markus Peter
         and Dafire).
    - (prolang.y) Improved the type checking on the <op>= operators
         to match what the VM actually implements (reported by Menaures).

05-Apr-2002 (Lars Duening)  (3.3.198)
    - (efuns, rxcache, ed.c) Implemented regexp substitution and
         made ed and regreplace() work with PCRE.
    - (efuns, rxcache, func_spec) New efun regmatch().
    - (main.c, rxcache.c) PCRE-related bugfixes.
    - (pkg-pcre.c, pcre/internal.h) New unified wrapper for all PCRE
        modules. For this to work, the PCRE internal.h had to be
        protected against multiple inclusion.
    - (mregex) The files formerly known as rxcache.[ch].

04-Apr-2002 (Lars Duening)  (3.3.197)
    - (mapping.c) During a GC, the .hash member in a mapping does not
         point to a mapping-hash structure - the statistics code
         ignored that (b-011015-0).
    - (gcollect, swap.c) Made the GC status variable less reliant
         on magic numbers.
    - (swap, gcollect.c, object.c, simulate.c) When removing the swap
         entry for a modified program, the code now also makes sure
         that the linenumbers are loaded back into memory.

03-Apr-2002 (Lars Duening)  (3.3.196)
    - (efuns.c, rxcache.c) The old regexp code is usable again.
    - (prolang.y) '<string> *= <int>' didn't compile (reported by Dafire and
         Menaures).
    - (swap, gcollect.c, object.c, simulate.c) A hunch: when a program is
         swapped for the first time, the driver writes the struct as it
         is to the disk. On later swap-ins, this data is read directly
         into memory, but never written again. If in the meantime
         the prog->blueprint pointer changed, this change will be lost
         after the next swap in. It would require a rare sequence of
         activities to make this a problem, but it's possible. The change
         is therefore to remove the swap block whenever prog->blueprint
         changes; let's see if this helps (b-020228-0).

02-Apr-2002 (Lars Duening)  (3.3.195)
    - (efuns.c) Efun regexplode() did not remove all its arguments
         (maybe b-020331).
    - (efuns.c) Efun regexplode() misinterpreted how to extract
         substrings from a string.
    - (interpret.c) When calling the default method, the code to
         massage the stack in fact clobbered memory (b-020324, b-020328-0).

31-Mar-2002 (Lars Duening)  (3.3.194)
    - (simulate.c) Load errors during the initial master load crashed
         the driver in the error handling.

31-Mar-2002 (Lars Duening)  (3.3.193)
    - (rxcache, efuns.c, ed.c, mstrings.c) The driver again compiles
         when PCRE is activated, but substituting strings is not
         implemented yet; and matching strings hasn't been tested.

30-Mar-2002 (Lars Duening)  (3.3.192)
    - (driver.h) The blueprint code helped some people (but not all), so I
         re-activated it as a counter-check.
    - (bugs/) Updated the files.

28-Mar-2002 (Lars Duening)  (3.3.191)
    - (efuns.c) Passing 0 as second argument to md5_crypt() caused
         to the driver to write over array bounds (reported by Markus Peter).
    - (interpret.c) The fatal() message in free_svalue() printed
         the wrong value.

28-Mar-2002 (Lars Duening)  (3.3.190)
    - (rxcache, efuns.c, ed.c, func_spec, mudlib/sys/regexp.h)
         Streamlined the regexp compilation options and made them
         accessible from LPC. The actual RE matching is still not
         supported for PCRE.

27-Mar-2002 (Lars Duening)  (3.3.189)
    - (rxcache) Added the basic code to compile and free PCREs. The
         matching is still not supported, so at the moment the driver
         won't even compile with PCRE activated :-)

27-Mar-2002 (Lars Duening)  (3.3.188)
    - (wiz_list.c) Don't call master::get_wiz_name() when there is no
         master. Otherwise a simple warning during the initial master
         load would abort the driver (reported by Frank Syse).
    - (driver.h, lots of files) If debug macro NO_BLUEPRINT is defined,
         the driver no longer tracks the blueprint for a program structure.
         This somewhat disables the blueprint() efun, but if it solves
         the object refcount problem, I know at least where to look.
    - (func_spec, actions.c) Efun query_verb() now takes an optional
         flag to return the verb as specified in the add_action() instead
         of the verb given by the user (suggested by Dafire).

26-Mar-2002 (Lars Duening)  (3.3.187)
    - (array.c, mapping.c) Made sure that the callback structures are
         properly released on errors.

25-Mar-2002 (Lars Duening)
    - (lex.c) *sigh* 'ifstate_t' is also a system type (reported by Alwin).
    - (comm.c) Removing the last pending input_to() did not reset the
        'input_to pending' flag in the interactive structure (reported
        by Gnomi).

21-Mar-2002 (Lars Duening)  (3.3.186)
    - (lex.c) The lexer's 'struct ifstate' clashes with an 'enum ifstate'
        defined on some systems for the networking stack (reported by Alwin).
    - (interpret.c) Removed the negative indexing on control_stack
        and value stack by introducing dummy entries at the bottom of
        each.

19-Mar-2002 (Lars Duening)  (3.3.185)
    - (interpret.c) CHECK_OBJECT_REF: The destructed objects are now
        checked on F_RETURNs and after all efuns, in order to use
        fewer cycles.

16-Mar-2002 (Lars Duening)  (3.3.184)
    - (array.c) And this should be the last piece of code which made
        assumptions about free_svalue().
    - (func_spec, efuns) New efun blueprint().

12-Mar-2002 (Lars Duening)
    - (Makefiles) Changed default optimization level from High (-O4)
        to Medium (-O2), since compilers get notoriously unreliable
        at high optimization.

11-Mar-2002 (Lars Duening)  (3.3.183)
    - (simulate.c) The CHECK_OBJECT_REF check was still overzealous;
        unfortunately not with the FF mudlib I tested it with. Hmpf.
    - (xalloc.c) The heap/stack gap check didn't expect the stack to
        be located under the heap, as Cygwin does it.

10-Mar-2002 (Lars Duening)  (3.3.182)
    - (actions.c, simulate.c) The CHECK_OBJECT_REF check was overzealous
        and didn't track properly the changes in object sentences. Sorry.
    - (func_spec, object.c) Efun all_environment() did not accept destructed
        objects as argument as documented (reported by Pulami and Gnomi).

09-Mar-2002 (Lars Duening)  (3.3.181)
    - (xalloc) The implementation of the heap/stack check didn't work
        on architectures with really big address spaces - corrected that.
    - (mapping.c, interpret.c, object.c, efuns.c) When adding new values
        to mapping, the code didn't check if the memory could be allocated
        (reported by Menaures).
    - (doc/efun) More german translations from Pulami.

07-Mar-2002 (Lars Duening)  (3.3.180)
    - (xalloc, smalloc.c interpret.c, efuns.c, object.c) Added check
        to prevent the stack from growing into the heap.
    - (smalloc.c) Some expected/found magic word logs were reversed.
    - (doc/efun) Pulami provided a whole bunch of german translations.
    - (efuns.c) to_int() on closures didn't work as advertised
        (reported by Pulami)

06-Mar-2002 (Lars Duening)  (3.3.179)
    - (simulate, interpret.c, gcollect.c) With CHECK_OBJECT_REF, the
        driver continually checks the consistency of the list of
        destructed objects.
    - (doc/efun/get_dir) Updated the manpage and added the german
        version (both provided by Pulami).

05-Mar-2002 (Lars Duening)  (3.3.178)
    - (efuns.c) deep_copy() didn't handle quoted arrays properly (reported
        by Gnomi).
    - (efuns, func_spec) New efun unquote() (suggested by Gnomi).
    - (object, gcollect.c, driver.h) Debug macro CHECK_OBJECT_REF activates
        a trace of blueprint allocations/deallocations, to be used to debug
        the strange refcount bugs recently encountered (b-020228-0).

04-Mar-2002 (Lars Duening)  (3.3.177)
    - (prolang.y) Publically inheriting functions which had been inherited
        protected before now overrides the earlier inherit (b-020303-1).
    - (ptrtable.c) When allocating a new ptable, the .table[] member is
        cleared.
    - (files.c) New get_dir() flag GETDIR_PATH adds the full absolute
        pathname to the returned filenames (suggested by Pulami).

03-Mar-2002 (Lars Duening)  (3.3.176)
    - (simulate.c) When the driver runs on a fatal error, it calls
        the master lfun notify_shutdown() with "Fatal Error" as argument
        before it dumps core.
    - (configure) Added a check for 'bison -y' when looking for YACC.
    - (driver.h, mapping, smalloc) If debug macro CHECK_MAPPING_TOTAL
        is defined, ever change in the registered mapping size statistics
        is accompanied with a sanity check. If the check fails, a
        DEBUG message is generated on stderr. Also added diagnostic
        statements to count_mapping_size() in order to find the place where
        the mappings statistics is screwed up.

01-Mar-2002 (Lars Duening)  (3.3.175)
    - (rxcache, ed.c, efuns.c, regexp) Extended the rxcache module
        into a wrapper around the regexp structure to hide the actual
        regexp implementation behind a simple API (some regexp efuns
        still use internal knowledge, though).

28-Feb-2002 (Lars Duening)  (3.3.174)
    - (simulate, efuns.c, gcollect.c, interpret.c) In addition to the
        last uncaught-error trace, debug_info() can now also return
        the last error trace in general.
    - (mapping, interpret.c, object.c, setting files) The MAX_MAPPING
        configuration parameter now determines the total number of
        elements (keys + values) a mapping can hold, not just the maximum
        number of keys. The current max-mapping settings have been tripled
        to account for this change (f-020223).

27-Feb-2002 (Lars Duening)
    - (wizlist.c) Efun wizlist_info() now returns the total number
        of mappings per user, too.
    - (smalloc.c) Corrected the statistics adjustment during the freelist
        consolidation.
    - (backend.c) The check_alarm() method did not recognize the '--no-heart'
        option, eventually turning the alarm() back on (reported by Dafire).

26-Feb-2002 (Lars Duening)  (3.3.173)
    - (efuns.c) Adjusted the terminal_colour() sanity check to acknowledge
        a certain boundary condition; added a test to make sure that
        the indentation is smaller than the wrapping width (reported
        by Menaures).
    - (actions.c) An error in add_action() could cause the driver to free
        memory twice (reported by Menaures).
    - (mapping.c) An allocation in walk_mapping() didn't check for success.

22-Feb-2002 (Lars Duening)  (3.3.172)
    - (simulate.c) Made the load_object_error() method resistant
        against object names with printf format specifications (reported by
        Gnomi).
    - (mudlib/uni-crasher) Added Menaures' test object to the archive.

21-Feb-2002 (Lars Duening)
    - (array.c) Array-joins didn't work properly because the code
        was comparing the wrong values (reported by Dafire).
    - (simulate.c) Setting a string driver hook leaked the string.
    - (gcollect.c) The refcounts for object and programs names weren't
        counted correctly.
    - (main, gcollect.c, xalloc.c, smalloc.c) Added a new low-level writes()
        function to replace all the macros floating around.

20-Feb-2002 (Lars Duening)  (3.3.171)
    - (prolang.y) Variable definitions are now normal statements and
        as such no longer restricted to the beginning of a block (f-000430-1).

18-Feb-2002 (Lars Duening)  (3.3.170)
    - (gcollect.c) Oops, forgot to close a comment. Strange though that
        my test compile didn't pick this one up (thanks, Dafire!).

17-Feb-2002 (Lars Duening)  (3.3.169)
    - (prolang.y) In a for() loop, variables may now be declared without
        initialisation (e.g. 'for (int i; ...)') (suggested by Pulami).
    - (gcollect.c) Since the GC seems to crash when trying to print the
        name for destructed leaked objects, I temporarily disabled the
        printing of these names so that we can figure out why the object
        was leaked in the first place.
    - (interpret.c) Corrected a crasher in efun referencep() (reported by
        Menaures).
    - (call_out.c) Looking up call_outs by closure didn't fully handle
        all closure types, causing the driver to fatal (reported by Menaures).
    - (efuns.c) Efun clones() didn't check its arguments well enough
        (reported by Menaures).
    - (random.c) Tentatively modified the scaling of the raw random number
        to the desired range so as to avoid overflow problems (investigated
        by Collin Baillie for an Alpha machine). 

15-Feb-2002 (Lars Duening)
    - (simul_efun.c) simul-efuns shadowing real efuns were not properly
        discarded, making it impossible to reactivate them (which in a 
        way was lucky as it made it possible to find the call_other bug).
    - (interpret.c) The error handling for a secure call did not
        properly roll back the control stack, leaking any closure
        referenced from it (b-990505-0).

13-Feb-2002 (Lars Duening)  (3.3.168)
    - (bitstrings.c) Efun copy_bits(): I accidentally had deleted the lines
        handling negative deststart values. The efun was also
        prone to numerical overflow effects (reported by Menaures).
    - (gcollect.c) Hmm, clear_object_ref() unconditionally cleared
        the blueprint reference - this should happen only for
        destructed blueprints. Dunno if this was responsible for
        the recent crashes in FinalFrontier.
    - (sprintf.c) sprintf("%-=10s", "a\nb\n") printed two extra
        newlines at the end instead of just one (reported by Gnomi).
         
11-Feb-2002 (Lars Duening)  (3.3.167)
    - (Makefiles) Corrected the compilation and call to dftables (reported
         by Menaures).
    - (comm.c) If on shutdown players were already destructed in
        notify_shutdown(), the following remove_player() was passed
        destructed objects (reported by Dafire).
    - (bitstrings.c) Corrected a crasher in the new efun copy_bits().
    - (bitstrings.c) copy_bits() malfunctioned if src range to copy ended
        in unset bits (reported by Menaures).
    - (efuns.c) In efun terminal_colour(), the wrapping analysis had
        to be separated from the initial length gathering since the
        analysis requires all lengths to be available. Without the
        separation, the driver ran into a fatal sanity error on some
        input values (reported by Dafire).
    - (actions.c) Argument errors in add_action() would leak the
        action sentence.

10-Feb-2002 (Lars Duening)  (3.3.166)
    - (config.h, autoconf, lex.c) New configuration parameter --use-pcre
         (disabled by default) to enable the use of PCRE instead of
         traditional regexps. If enable, the LPC macro __PCRE__ is defined.
         This is just the basic configuration framework, the PCRE code has not
         yet been integrated.
    - (pcre/, Makefiles) Included the PCRE code into the driver distribution,
         and it is even compiled and linked, but not yet used by the driver.
    - (bitstrings, func_spec) New efun copy_bits() to copy ranges of
         bitstrings (based on code provided by Menaures).
    - (bitstrings.c) And nobody noticed that set_bit() was broken :-)
    - (efuns.c) Efun terminal_colour(): In wrapped formatting, when a
         word is too long to fit on a line by itself and there are at least
         two characters space left on the current line, the long word is begun
         immediately.  Previously, such long words were always printed on a
         line of their own (suggested by Fiona).

07-Feb-2002 (Lars Duening)  (3.3.165)
    - (ed, comm, efuns) Modified the print_prompt() routine so that
         the editor prompt is take directly from the editor buffer.
         This allows to get rid of the swapping of editor and normal command
         prompts, which may also have been responsible for the memory
         leaks reported in b-020205-0 (though I can't prove that). As an
         aside, the f_set_prompt() function moved from efuns.c to comm.c .
    - (actions.c) If notify_fail() was not used from an undestructed
         command giver, the given failure notice value leaked (b-020205-1).

07-Feb-2002 (Lars Duening)  (3.3.164)
    - (bugs/) Cleaned up the bug reports.

06-Feb-2002 (Lars Duening)  (3.3.163)
    - (prolang.y, make_func.y, comm.c) New optional driver hook
         H_DEFAULT_PROMPT to specify a prompt different from the
         usual one.
    - (prolang.y, make_func.y, comm.c) New optional driver hook
         H_PRINT_PROMPT to do special magic when printing a prompt
         (suggested by Markus Peter).
    - (sprintf.c) In justified column formatting, when a word is too
         to fit on a line by itself and there are at least two characters
         space left on the current line, the long word is begun immediately.
         Previously, such long words were always printed on a line of
         their own (suggested by Fiona).

06-Feb-2002 (Lars Duening)  (3.3.162)
    - (bugs) Added more information about memory leaks.

05-Feb-2002 (Lars Duening)  (3.3.161)
    - (prolang.y) Inherited public but undefined function were hidden
         by (simul-)efuns of the same name, making a resolution by
         crossdefinition through another inherited module impossible
         (reported by Fiona).

03-Feb-2002 (Lars Duening)  (3.3.160)
    - (simulate, prolang.y, lex.c) Added a limit safety check to
        limit_error_format(), and increased the buffer sizes for the
        error messages (reported by Gnomi).

01-Feb-2002 (Lars Duening)
    - (efuns.c) Removed the undocumented 'feature' that a process_string()
         function call specification could be terminated with a space.
    - (array, prolang.y, interpret.c) The '|' operator can now join
         arrays.

31-Jan-2002 (Lars Duening)  (3.3.159)
    - (interpret.c) If input_to() was used without command giver,
         a NULL pointer string was pushed onto the interpreter stack
         due to a missing check in the privilege_violation4()
         function (reported by Menaures).

30-Jan-2002 (Lars Duening)  (3.3.158)
    - (gcollect.c) The GC forgot to clear the refcounts in the known
         destructed objects, thus sometimes causing a 'First reference
         to program, but refcount != 0' fatal error (reported by Coogan,
         reproduced by Menaures).
    - (object.c) replace_program() without argument can now skip
         the extra inherits added by the compiler to accomodate
         virtual variables (reported by Nathan).

26-Jan-2002 (Lars Duening)  (3.3.157)
    - (prolang.y) The wildcarded supercall "*":: no longer throws an
         error if none of the inherited objects defines the called function.
         It fits into the semantics of the '*' wildcard ("any or none"), and
         it is practical for supercalls like "*"::reset() (suggested by
         Zonk@Finalfrontier via Dafire).

25-Jan-2002 (Lars Duening)  (3.3.156)
    - (object.c) Made an error message more informative.

24-Jan-2002 (Lars Duening)
    - (interpret.c) If a value of the wrong type is passed to a switch,
        the driver no longer throws a runtime error but instead
        jumps to the 'default' case (suggested by Pulami).

23-Jan-2002 (Lars Duening)  (3.3.155)
    - (prolang.y) The '::' operator did not recognize the separate
        namespaces of local variables and functions (reported by
        Imp via Gnomi).
    - (func_spec, prolang.y, interpret.c) Added new bytecode instruction
        nconst1 and create negative number constant right at compile
        time instead of using negate() - especially useful for __INT_MIN__
        (reported by Menaures).
    - (efuns.c, interpret.c, mapping.c) check_map_for_destr() wasn't
        called before copying or subtracting mappings (reported by Coogan).
    - (simulate.c) Improved the loadtime error messages: they now print
        the inheritance chain (suggested by Gnomi).
    - (etc/memusage) Provided by Fiona - thanks!

17-Jan-2002 (Lars Duening)  (3.3.154)
    - (simul_efun, simulate.c) Destructing the simul-efun object
        immediately invalidates all simul-efuns; this should reduce
        the number of 'undefined function' errors when doing manual
        reloads of the simul-efun object.
    - (smalloc.c, prolang.y, closure.c) Modified some memory accesses
        in order to keep Memory Check tools like ZeroFault happy.
    - (regexp.c) The .from_ed member in a newly compiled regexp
        wasn't set.
    - (object.c) One variable wasn't set.

16-Jan-2002 (Lars Duening)
    - (simul_efun) When reloading the simul-efun objects, all previous
        sefuns are discarded and removed from the symbol table. Otherwise
        if the simul-efun object used cross-defined sefuns itself, the
        recompiled object would not recognize the cross-defined calls
        and instead pick up the older inactive entry from the symbol
        table. This problem may still occur when reloading a simul-efun
        object by hand (reported by Coogan and some other people).
    - (lex) Inferior identifier entries now have their own string
        reference.
    - (lex.h, prolang.y) The magic values for ident_t.u.global now
        have symbolic names.

15-Jan-2002 (Lars Duening)
    - (configure) Fiona did more analysis on the rxcache hash and found
        out that using a prime table size doesn't help. I set the size back
        to 8192; let's see how bad the collisions are at this small table
        size.

14-Jan-2002 (Lars Duening)
    - (interpret.c) The overflow error messages for float divisions
        named the wrong values (thanks, Guandalug!).

12-Jan-2002 (Lars Duening)  (3.3.153)
    - (configure.in) Fiona pointed out that just halving the rxcache
        size doesn't seem to increase the fill ratio. As an experiment
        I now set the default size to prime 8191.
    - (efuns.c, interpret.c) The float range checks stupidly compared against
        DBL_MIN for the low limit instead of -DBL_MAX (reported by Ben).
    - (mstrings.c, efuns.c) Added string table related statistics.

10-Jan-2002 (Lars Duening)  (3.3.152)
    - (lex.c) Added new predefined macros __FLOAT_MIN__ and __FLOAT_MAX__
        for the float value limits.
    - (interpret.c, efuns.c) Added checks for numeric overflows to float
        operations.  Btw, <int> / <float> returned a wrong result.
    - (configure.in) Reduced the default size of the RXCACHE table to 8192
        instead of 16384 entries.

08-Jan-2002 (Lars Duening)  (3..3.151)
    - (efuns.c) Efun terminal_colour() removed a crasher which happened
        when too many control sequences appeared in a line (reported by Peng).
    - (autoconf/configure.in) Added icc compiler option '-ipo' to highest
        optimisation tests.
    - (make_func.y, bitfuns.c, comm.c, lex.c, interpret.c) Removed a couple
        (but not all) warnings generated by the Intel Compiler (reported by
        Dafire).

03-Jan-2002 (Lars Duening)  (3.3.150)
    - (gcollect.c) Forgot to clear the refcounts in the list of
        destructed objects. Oops.
    - (object.c) free_prog() now also frees its blueprint reference, which
        should remove at least one major refcount leak.
    - (lp-245/obj/master.c, lp-245/obj/player.c) Small corrections.

02-Jan-2002 (Lars Duening)  (3.3.149)
    - (simulate, comm.c) Corrected a potential crasher when bad arguments
        are passed to efun input_to(): the embedded callback structure
        wasn't initialized properly, so that the free_input_to() got
        garbage data instead of pointers (reported by Menaures).
    - (util/xerq/erq.c) Reduced the amount of crap printed in DEBUG
        configuration.
    - (gcollect.c) There seems to be a problem with leaking object refcounts,
        so that destructed objects are tagged as 'referenced' even if they
        aren't. The GC will eventually free the memory itself, but inavoidably
        mess up the object statistics. As a first measure the GC after
        the mark phase checks the list of destructed objects if any
        of the objects on it haven't been referenced yet. If so, the
        objects concerned are logged and then explicitely included into
        the list of objects to free. This way at least the object statistics
        will be kept in sync for the time being.

02-Jan-2002 (Lars Duening)  (3.3.148)
   - (gcollect.c, simulate, comm) The GC now removes all stale objects
       referenced from the interactive structures during the cleanup phase.
       As a side effect, callbacks may no longer reference destructed
       objects during the clearing/counting phase of a GC.
   - (actions, main.c, backend.c, efuns.c, gcollect.c, interpret.c,
      simulate, dumpstat, string_spec, mudlib/sys/debug_info) Destructed
       objects are now kept in a separate list in order to aid mudadmins in
       analysing the memory usage of their muds. debug_info(DINFO_STATUS)
       returns the statistics in the new fields DID_ST_OBJECTS_NEWLY_DEST
       and _DEST; debug_info(DINFO_DUMP, "destructed") dumps the lists to a
       file; and the builtin commands 'status tables' and 'dumpallobj' have
       been updated accordingly.
 
31-Dec-2001 (Lars Duening)  (3.3.147)
    - (efuns.c) to_string() can now handle operator closures (suggested
        by Gnomi).

30-Dec-2001 (Lars Duening)  (3.3.146)
    - (interpret.c) abs(INT_MIN) now generates an overflow error (reported
        by Menaures).
    - (sprintf.c) When adding columns, a one-line column ending with a
        newline inserted the newline on-the spot instead of delaying
        it until the end of the line as it was done with multiline
        columns (reported by Gnomi).

29-Dec-2001 (Lars Duening)
    - (driver/dumpallobj, efun/debug_info) Explained the format of
        the OBJDUMP file.
    - (settings/tubmud) Updated (thanks, Coogan!)

28-Dec-2001 (Lars Duening)  (3.3.145)
    - (interpret.c) When calling a simul_efun in a vanished object, the
        local stackpointer of eval_instruction() was not synchronized
        with inter_sp after the call (reported by Gnomi).
    - (simul_efun.c) When reloading a simul_efun object, the check for
        old sefuns to reactivate ignored changes in the TYPE_MOD_XVARARGS
        flag. Since the exact format of the F_SIMUL_EFUN instruction depends
        on this flag, this could trip the bytecode interpreter (reported by
        Gnomi).
    - (mudlib/astar.c) An implementation of the A* pathfinding algorithm,
        donated by Acius (thanks!).

21-Dec-2001 (Lars Duening)  (3.3.144)
    - (simulate.c) When checking the refcounts, the extra_refs in objects
        named in callbacks weren't counted corrected (reported by Tomba).
    - (gcollect, call_out.c, simulate.c) Removed knowledge about the
        GC internals from call_outs and callbacks.

20-Dec-2001 (Lars Duening)  (3.3.143)
    - (mapping.c) The handling of protected deleted entries did create
         some dead links (reported by Tomba).

19-Dec-2001 (Lars Duening)  (3.3.142)
    - (object.c) Efun say(): one variable was initialized wrongly,
         occasionally causing the driver to crash (reported by Nostradamus).

14-Dec-2001 (Lars Duening)  (3.3.141)
    - (interpret.c) Efun set_this_object() queried the master and
         simul-efun object without checking if they actually exist.
    - (autoconf, main, comm.c, backend.c) The input escape character
         can now be configured to something else than '!' (suggested
         by Tomba).
    - (settings/bat) New settings for BatMUD.

12-Dec-2001 (Lars Duening)  (3.3.140)
    - (call_out.c) Efun call_out_info() did not return the target object
         if the call_out is a closure (reported by Menaures).
    - (interpret.c) The increment and decrement operators were missing the
         overflow checks (reported by Freaky).
    - (lex.c) New LPC defines __INT_MAX__ and __INT_MIN__ for the numeric
         integer limits.
    - (interpret.c) Another overflow check, this time for __INT_MIN__ / -1
         (reported by Menaures).
    - (object.c) Corrected the bugfix to the say() refcount problem
         (thanks, Tomba!)

11-Dec-2001 (Lars Duening)
    - (comm.c) TELOPT_TM can now be negotiated from the mudlib as well
         (reported by Peng).

11-Dec-2001 (Lars Duening)  (3.3.139)
    - (interpret.c) Additions, subtractions and multiplications now
         check for numeric overflows.

11-Dec-2001 (Lars Duening)  (3.3.138)
    - (interpret.c, mapping.c) Oops, the new checks also introduced
         divisions by 0 (reported by Menaures).
    - (sprintf.c) Runtime fieldsize specification by '%*' didn't check
         if the size was given as MIN_INT: it would try to negate it
         to get the positive number, but fail and cause the formatting
         routines to crash under circumstances (reported by Menaures).

10-Dec-2001 (Lars Duening)  (3.3.137)
    - (interpret.c) gcc 2.91 on Linux/x86 generates buggy code for
         MIN_INT % -1, so this case is now explicitely check for
         (reported by Menaures).
    - (interpret.c) Multiplication of a string with a number was
         not checked for numeric overflows in the computation of
         the result length (reported by Menaures).
    - (smalloc.c) Added a check against numeric overflows in the
         computation of the final memory block size.
    - (mapping.c) When allocating/resizing mappings, a check against
         numeric overflows in the size computations has been added
         (reported Menaures).

05-Dec-2001 (Lars Duening)  (3.3.136)
    - (backend.c) Before calling reset() or clean_up() from the backend,
        the previous_object is cleared (reported by Gnomi).
    - (main.c) New commandline option:
          --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.
    - (interpret.c) The mysterious code in calling alien lfun closures to
        create a second control frame, deactivated in 3.3.83, revealed
        its purpose: when for such a closure the bound object l->ob
        differs from the code object l->function.alien.ob, this fact
        needs to be recorded in order to prevent security holes. So the
        code fragment has been activated again with a small change: the
        second control frame will be created only if the two objects
        differ (unknowingly suggested by Menaures).

04-Dec-2001 (Lars Duening)  (3.3.135)
    - (interpret.c) When doing a call_other on an array, inter_sp
        was incorrect while getting the object. An error there
        then could clobber memory.
    - (backend) Added in internal flag 'mud_is_up' for debugging.
    - (main.c) The initial random seed is printed for debugging
        purposes.

29-Nov-2001 (Lars Duening)  (3.3.134)
    - (prolang, lex.c) Storing the line number info for the end of an
        include file used the wrong line for rollbacks (reported by
        Guandalug).

28-Nov-2001 (Lars Duening)  (3.3.133)
    - (prolang.y) Another correction to the bugfix of Gimli's problem
        (reported by Freaky).

27-Nov-2001 (Lars Duening)  (3.3.132)
    - (prolang.y) The bugfix to Gimlis problem unfortunately broke a couple
        of muds. This version works better (reported by many people).
    - (object.c) Removed memory leaks in the error handling of include_list()
        and inherit_list().

25-Nov-2001 (Lars Duening)  (3.3.131)
    - (mudlib/sys/functionlist.h) Changed the <> include of lpctypes.h
        into a "" include (suggested by Heiko).
    - (prolang.y) Inheriting two private functions of the same caused the
        compiler to crossdefine the second one to the first. Not directly
        visible to the user, this messed up any use of these functions
        by INITIALIZATION_BY___INIT (reported by Gimli).
    - (object.c) Efun replace_program() can omit the argument if the
        object has only one inherit (suggested by Pulami).

24-Nov-2001 (Lars Duening)  (3.3.130)
    - (lex.c) The auto-include strings needed to be prefixed with a newline
         internally - yet, the newline was added after the string (reported
         by Heiko).

23-Nov-2001 (Lars Duening)
    - (object.c) Efun say() could leak object references (reported by Tomba).
    - (mudlib/sys/functionlist.h) Changed the absolute include of lpctypes.h
        into a <> include (suggested by Heiko).

21-Nov-2001 (Lars Duening)
    - (pkg-mysql.c) Using the mysql->thread_id as handle proved to be
        unreliable as the thread_id may change. Instead an explicit
        handle is now used (thanks, Fuchur!).
    - (ed.c) Added command 'T' to perform Tab <-> Whitespace conversion
        (thanks, Menaures!).

20-Nov-2001 (Lars Duening)  (3.3.129)
    - (sprintf.c) Printing a table modified the internal precision information
        without making a backup. If now the table was applied to an array
        of data ("%#99999999999@s" format string), formatting the second
        line would cause a crash (reported by Menaures).
    -  (doc/efun/snoop) Corrected the manpage: snooping an already snooped
        player terminates the previous snoop (reported by Zordiac).

20-Nov-2001 (Lars Duening)  (3.3.128)
    - (exec.h, lex.c, prolang, object, gcollect.c, typedefs.h) Added
        complete include file information to compiled programs.
    - (object.c) Implemented efun include_list() properly.

19-Nov-2001 (Lars Duening)  (3.3.127)
    - (sprintf.c) It was possible to instruct sprintf to format a string
        as both columns and as a table. sprintf() then formatted it as
        columns, but any error (like buffer overflow) would crash the
        driver. The error recovery is now more robust, and such an invalid
        format string is rejected (reported by Menaures).
    - (sprintf.c) Max size of the result is now 128 KByte.
    - (lex.c) A H_AUTO_INCLUDE closure also receives a flag telling if
        it was a <>-type include or not (suggested by Freaky).
    - (bitstrings.c) Efuns and_bits(), or_bits(), xor_bits() mishandled
        the bits 5, 11, 17, ... (thanks, Fuchur!)
    - (prolang.y) The bugfix yesterday was not quite correct: a pair
        of missing parentheses completely changed the meaning of the
        check for private inherited functions, causing the driver to crash
        (reported by Freaky).

18-Nov-2001 (Lars Duening)  (3.3.126)
    - (object.c) Efun inherit_list: the tagging of virtual inherits
        returned a random value for the main program (reported by Freaky).
    - (prolang.y) Inherited private functions could hide simul-efuns
        or efuns (reported by Gnomi).
    - (lex.c) If H_AUTO_INCLUDE is set to a closure, it will be called
        for all files opened by the lexer. A second argument passed to
        the closure determines whether the call is for the object file
        itself or for an included file (suggested by Freaky).
    - (func_spec, array, exec.h, prolang.y) New efun include_list()
        to return the filenames read when compiling a program.
    - (efuns.c) Added the number of included files to the result
        of object_info(OINFO_MEMORY).

17-Nov-2001 (Lars Duening)  (3.3.125)
    - (func_spec, prolang.y, make_func, lex, simulate) Replaced the efun
        set_auto_include_string() with the driver hook H_AUTO_INCLUDE.
        Additionally, a closure can be used to generate the auto include
        data (f-000505, f-011026-2, f-990316-1).
    - (simulate.c) Removed a small memory leak in set_driver_hook():
        replacing hooks leaked the old hook data.
    - (comm) Efun input_to() now accepts a prompt parameter, specifying
        the prompt to print.
    - (object.c, exec.h, mudlib/sys/inherit_list.h) New flag for efun
        inherit_list() allows to tag virtual inherits in the result 
        (rest of f-991020-0).
    - (doc/concepts/hooks) Corrected the docs for the MODIFY_COMMAND hooks.

16-Nov-2001 (Lars Duening)  (3.3.124)
    - (sys/debug_info.h, smalloc.c) Efun debug_info(): macro DID_SBRK_SIZE was
        typoed as DID_SBKR_SIZE.
    - (sys/debug_info.h, smalloc.c) Efun debug_info(): added the derived
        statistics DID_MEM_ALLOCATED, _USED and _TOTAL_UNUSED to the
        DINFO_DATA:DID_MEMORY data.
    - (interpret.c) The stack overflow error handling forgot to update
        the stack pointer after cleaning up the stack, causing some
        svalues to be freed twice (reported by Coogan).
    - (efuns.c) Efun terminal_colour(): Temporary values are no longer
        held directly on the stack, but instead in an array on the stack,
        thus greatly reducing the stack usage for strings with lots of
        colour codes.

15-Nov-2001 (Lars Duening)  (3.3.123)
    - (svalue.h) The definition of macros push_object() and
        push_valid_object() lacked the 'from' argument (reported by Nathan).
    - (lex.c) If H_INCLUDE_DIRS is set to an array of directory names,
        the names can now have leading '/' (reported by Nathan).
    - (interpret.c) Improved the stack overflow checking a bit, and for
        some function calls the local variables were allocated twice.
    - (efuns.c) member() used with closures didn't always find them
        (reported by Gnomi).

14-Nov-2001 (Lars Duening)  (3.3.122)
    - (gcollect.c) Tweaks to the information dumped on fatals.
    - (driver.h, gcollect) New debug macro DUMP_GC_REFS (in driver.h)
        instructs the GC to list all found references on the gcollect_outfd.
        Off by default, this macro should be defined only by people
        getting fatal()s like 'First reference to destructed object, but
        ref count != 0'.
    - (main) New function dprintf4().
    - (mapping.c) compact_mappings() did not remove destructed elements
        from the mappings (reported by Menaures).
    - (efuns.c, interpret.c) Put back in some of the check_map_for_destr()
        calls, as they are required in order to get an accurate count
        of the number of entries.

13-Nov-2001 (Lars Duening)  (3.3.121)
    - (gcollect.c, smalloc.c) Removed a compilation problem when
        MALLOC_LPC_TRACE is not defined (reported by Menaures).
    - (efuns.c, interpret.c, sprintf.c) Removed unnecessary calls
        to check_map_for_destr().
    - (smalloc.c) The computation of a 'magic' word in the freelist
        consolidation was wrong, causing bus errors in Tubmud.
    - (files.c) Added missing newlines to some error messages
        (thanks, Freaky!)
    - (object.c) Efun transfer() miscalculated the weights when the
        target wasn't a living (reported by Zordiac).
    - (interpret.c) When calling a #'efun which takes another efun as
        default argument, call_lambda() generated incorrect bytecode
        in the trampoline stub by assuming that instruction code
        equalled bytecode. Example: funcall(#'ctime) (reported by Dan).

12-Nov-2001 (Lars Duening)  (3.3.120)
    - (make_func.y) Lexer now understands lines terminated with CRLFs
        instead of just LFs (reported by Holger).
    - (mapping.c) Adjusted the computation of num_dirty_mappings in
        remove_empty_mappings(). This should the fix the inconsistency
        in this counter (thanks, Andre and Carsten!)
    - (gcollect.c, xalloc) When a 'First ref to' with unmatching refcount
        is encountered, the memory allocation information is dumped, too.

24-Oct-2001 (Lars Duening)  (3.3.119)
    - (efuns.c) If a closure is used with regreplace(), it will be
        passed the position of the found substring, too (suggested
        by Alfe).
    - (comm.c) New efun remove_input_to() (part of f-000530).

23-Oct-2001 (Lars Duening)
    - (doc/efun/terminal_colour) Improved the explanation of the key
        recognition strategy, and added a MudOS simulation function
        courtesy of Fiona.

22-Oct-2001 (Lars Duening)
    - (md5.c) Changed two function calls from the generic to the MD5
        versions (thanks, Gawain!)

21-Oct-2001 (Lars Duening)  (3.3.118)
    - (actions.c) Removed a crasher when add_action() was performed between
        two objects with no environment (thanks, Fuchur!).

18-Oct-2001 (Lars Duening)  (3.3.117)
    - (doc/LPC/arrays, doc/efun/sprintf) Improved examples by
        Coogan (thanks!).
    - (sprintf.c) Removed a crasher in justified formatting when the string
        to format contained only one word (reported by Slava and Coogan).

17-Oct-2001 (Lars Duening)  (3.3.116)
   - (interpret.c) I had to deactivate the tests against assignments
        to negative ranges - this feature is in fact in use (thanks,
        Coogan and Alfe - and sorry for breaking TubMud!).

15-Oct-2001 (Lars Duening)  (3.3.115)
    - (interpret.c) Another error in call_other() on arrays of objects.
        (reported by Dafire)
    - (call_out.c) The minimum delay can now be 0 (suggested by Tomba).

14-Oct-2001 (Lars Duening)  (3.3.114)
    - (efuns.c) Removed a free-memory access in efun strstr() (thanks,
        Tomba!)
    - (Makefiles) Updated my MkDepend tool, so that it no longer adds
        non-existing include files to the dependencies.
    - (interpret.c) Oops, call_other()/call_direct() on array of objects
        always used default functions even if they shouldn't. This also
        caused the double freeing of svalues. (reported by Dafire)
    - (interpret.c, swap.c, xalloc) Didn't compile when using sysmalloc
        as allocator (reported by Tomba).

12-Oct-2001 (Lars Duening)  (3.3.113)
    - (sprintf.c) Improved the flushing algorithm: spaces are more
        evenly distributed, newlines in columns didn't work properly
        (reported by Slava).
    - (make_func, func_spec, interpret, simulate, lex) Implemented
        the optional H_DEFAULT_METHOD driver hook to implement
        default methods for unresolved calls.
    - (lots of files) Renamed closure_hook[] to the more sensical
        driver_hook[]. And got rid of USE_FREE_CLOSURE_HOOK.
    - (erq, xerq) Erq now accepts an '--execdir' argument to override
        the default ERQ_DIR setting (suggested by Freaky).
    - (main, comm.c) It is now possible to pass simple arguments to the
        erq with the --erq commandline option (suggested by Freaky).

11-Oct-2001 (Lars Duening)  (3.3.112)
    - (sprintf.c) New formatting modifier '$' allows flush formatting
        of strings and columns of strings (f-010717).
    - (interpret.c) Added the apply framework for default methods.

10-Oct-2001 (Lars Duening)  (3.3.111)
    - (object.c) Efun inherit_list() can now return the inheritance
        structure as a tree (part of f-991020-0).
    - (interpret.c) Simul-efuns with an varargs argument as weren't able
        to receive no extra arguments (reported by Tomba).

09-Oct-2001 (Lars Duening)  (3.3.110)
    - (gcollect.c) Increased the refcount of an destructed referenced
        object before recursing into the substructures - I have the
        feeling that there was a possible race condition, but I can't
        prove it.
    - (object) Efun function_exists() can now also return the filename
        and linenumber where a function was defined (based on a patch
        p-010928-0 by Andre).
    - (object.c) Removed the fixed table in inherit_list() and replaced
        it by a pooled list. It also already gathering the information
        about the shape of the inheritance tree.

08-Oct-2001 (Lars Duening)  (3.3.109)
    - (prolang.y) Function definition errors and warnings now all print
        the name of the function involved (suggested by Freaky).
    - (simulate.c) Shadowing a nomask function now prints the names of
        objects involved as well (suggested by Freaky).

06-Oct-2001 (Lars Duening)  (3.3.108)
    - (prolang.y) Warnings about redefinition of visibility apply
        to prototype/functions only, but no longer to redefinitions
        of inherited functions.

05-Oct-2001 (Lars Duening)
    - (lex.c) Termination of a macro definition in an include file
        with End-of-file confused the lexer (reported by Tomi).
    - (comm) If a message had to be discarded due to contention (EWOULDBLOCK),
        the user will receive a information message at the next possible
        opportunity.
    - (comm.c) Efun binary_message() wrote random data (thanks, Andre!).

04-Oct-2001 (Lars Duening)  (3.3.107)
    - (efuns, md5) Renamed efun md5_encrypt() to md5(), and added a new,
        Apache compatible password encryption efun md5_crypt (provided by
        Dafire).

03-Oct-2001 (Lars Duening)  (3.3.106)
    - (prolang.y) Prototypes no longer modify the definition of inherited
        functions in strange ways (reported by Fiona).

01-Oct-2001 (Lars Duening)  (3.3.105)
    - (prolang.y) The check for redefinition of 'nomask' functions no longer
        worked (reported by Gimli).

30-Sep-2001 (Lars Duening)  (3.3.104)
    - (lex.c) Added a warning about empty #pragmas (reported by Slava).
    - (interpret.c) Tracing no longer crashes when the command_giver
        turns non-interactive (reported by Dafire).

28-Sep-2001 (Lars Duening)  (3.3.103)
    - (lex.c) Spaces before the lineend caused the lexer to complain about
        an unrecognized pragma, even though the pragma had been recognized
        (reported by Dafire and Slava).
    - (efuns.c) Efun terminal_colour(): The escape sequence '%%^^' is
        now recognized and replaced by '%^' as is '%^%^' already. This is
        for compatibility with MudOS drivers (suggested by Fiona).
    - (telnet.h, comm.c) Added support for mudlib negotiation of MCP, MSP
        and MXP through the normal H_TELNET_NEG hook (suggested by Markus
        Peter).
    - (interpret.c, lex.c, smalloc.c) Made it work on Linux s/390 (a machine
        where char's are by default unsigned) (provided by Freaky).

27-Sep-2001 (Lars Duening)  (3.3.102)
    - (lex.c) Pragma recognition no longer stumbles over CRs at the line
        end (reported by Freaky and Slava).
    - (interpret.c) The idiom of assigning to a range [i..i-1] in order to
        insert elements is legal again - a lot of mudlibs already use it
        (reported by Andre).

26-Sep-2001 (Lars Duening)  (3.3.101)
    - (interpret.c) Assignments to negative length ranges (eg. [3..2]) are
        caught and throw an error (reported by Gimli).
    - (gcollect.c) Printing memory information during a GC is more robust
        against string NULL pointers (reported by Freaky).
    - (lex.c) It is possible to specify multiple pragmas in one #pragma
        statement, separated by commas (suggested by Largo).

08-Sep-2001 (Lars Duening)  (3.3.100)
    - (interpret.c) The test if a function call should be trace or not
        was done against the command_giver, not against the
        current_interactive as documented (reported by Gnomi).
    - (simulate.c) When entering a fatal(), the given format string is
        printed as is to stderr (just a precaution).
    - (smalloc.c) The 'magic match' failed messages now give the expected
        block address and sizes, too.
    - (lex.c) Added warning when an unknown pragma is encountered (suggested
        by Robert).

05-Sep-2001 (Lars Duening)  (3.3.99)
    - (prolang.y) The driver couldn't handle (multiple?) second-level inherits
        of a 'private nomask' function, which inline closure now are (reported
        by Bardioc).

03-Sep-2001 (Lars Duening)  (3.3.98)
    - (xalloc, smalloc) New helper function dump_malloc_trace() to, well, dump
        the malloc trace if there is one.

31-Aug-2001 (Lars Duening)  (3.3.97)
    - (lex.c) The lfuns implementing inline closures are now 'private nomask', 
        which is the real solution unlike the one implemented in
        3.2.9-dev.260/3.3.39 (suggested by Freaky).
    - (efuns.c) If terminal_colour() was used with a closure returning a
        computed string, the ever call (but the first) within the same
        formatting clobbered the result from the previous one (reported by Ben
        and Elric).
    - (swap.c) Oops, when adjusting the allocation statistics after
        swapping out variables, the driver occasionally tried to dereference
        a non-existing pointer (reported by Ben and Nostradamus).
    - (mudlib/sys/lpcytpes.h) The values to be returned by functionlist() were
        out of sync with what functionlist() really returned (reported by
        Freaky).

29-Aug-2001 (Lars Duening)  (3.3.96)
    - (smalloc.c) Corrected a small statistics problem in the
        freelist consolidation: some unusable space was counted
        twice (b-010713-0, b-000830).
    - (swap.c) When swapping variables, the object allocation size
        statistics wasn't updated.
    - (lex.c) Multi-dimensional array indices in macro calls are no longer
        confused with multiple macro arguments (reported by Freaky).
    - (files.c) Trying to read 0 bytes with read_bytes() caused a
        fatal error.
    - (mapping.c) Corrected errors in the statistics.

28-Aug-2001 (Lars Duening)  (3.3.95)
    - (interpret.c) Oops, one string argument was passed in the
        wrong way.

28-Aug-2001 (Lars Duening)  (3.3.94)
    - (interpret.c) More corrections to the refcount checking code.
        Furthermore, an failure no longer crashes the driver (but
        generates lots of debugging output)
        (reported by Tomba).
    - (pkg-mysql.c) Removed a memory leak caused by the result set
        not begin freed after all the data has been fetched.
    - (backend.c) Added safeguard so that slow_shut_down() is not
        called repeated while a previous one is still pending (suggested by
        Dafire).

28-Aug-2001 (Lars Duening)  (3.3.93)
    - (interpret.c) The reference loop check was too strict and also
        flagged legal assignments (thanks, Dan).

27-Aug-2001 (Lars Duening)  (3.3.92)
    - (interpret.c) Improved the check for reference loop creation on
        assignment (suggested by Menaures).
    - (many files) When reloading the master object, the driver freed
        through the driver hooks some object references it shouldn't free.
        If a lambda driver hook is bound to an object, this reference is
        now counted. This makes rebinding the hook closure a bit more
        laborsome, but overall the handling is safer since consistent
        (reported by Tomba).

26-Aug-2001 (Lars Duening)  (3.3.91)
    - (interpret.c) Efun sscanf() didn't check its arguments (reported by
        Tomba).
    - (simulate.c) Running the driver with '-d -d' crashed it when loading
        objects.
    - (interpret.c) The refcount check for got to count the blueprint
        reference in programs (reported by Tomba).
    - (smalloc.c) The check against MAX_MALLOCED was incomplete and
        could lead to use of foreign memory (reported by Menaures).

25-Aug-2001 (Lars Duening)
    - (prolang.y) The range checks for the new [>] indexing were not complete
        (reported by Tomba).

23-Aug-2001 (Lars Duening)  (3.3.90)
    - (array.c) ERQ callbacks for a destructed object don't have a
        current_object at the time the error occurs. The error handling code
        allocates an array, but the array code was still assuming that
        current_object is always valid (reported by Fiona).
    - (prolang.y) Redefining an inherited private function with a non-private
        one, and then inheriting the redefinition didn't work (reported by
        Menaures).

22-Aug-2001 (Lars Duening)  (3.3.89)
    - (interpret.c) The lambda protection had a bug: when a non-lambda closure
         was called from within an executed lambda, the lambda closure was
         accidentally freed (reported by Fiona).
    - (sprintf.c) *blush* I completely forgot to add the terminator 0 after
         creating the quoted representation of a string (thanks, Menaures!).

21-Aug-2001 (Lars Duening)  (3.3.88)
    - (prolang.y) The 'private' correction caused the driver to crash
         under obscure circumstances. I implemented the correction now
         in a different way, and it seems to work now (reported by Bardioc and
         many others).
    - (prolang.y) If an efun was called with too many arguments, the
         extraneous args were popped twice from the argument stack, so that
         subsequent function calls clobbered memory (reported by Dafire).
    - (simulate.c) Added an error when the time left for a catch() is less
         than the reserved cost.

19-Aug-2001 (Lars Duening)  (3.3.87)
    - (prolang.y) Defining a function which is also a private function in an
         inherited object no longer redefines the inherited one (reported by
         Bardioc and Menaures).
    - (sprintf.c) Closures on inherited lfuns are printed with the defining
         program for the %O format.
    - (sprintf.c) New format specifier 'Q' acts like 'O', except that special
         characters in strings are quoted (suggested by Menaures).

15-Aug-2001 (Lars Duening)  (3.3.86)
    - (interpret.c) Holding a reference on a lambda works much better
         if the code actually increment the correct refcount.

14-Aug-2001 (Lars Duening)  (3.3.85)
    - (interpret) The VM now holds a reference on a lambda while it is
         executed, preventing premature destructions (reported by Dan
         and Fiona).
    - (simulate, actions.c, backend.c, comm.c, gcollect.c) Since the VM
         now protects lambdas during their execution, the free_closure_hooks()
         hack is no longer needed. For now, the code has been just
         deactivated.
    - (efuns.c) Corrected late-night errors in efuns ceil() and floor()
         (reported by Niels).

13-Aug-2001 (Lars Duening)
    - (mapping.c) Adding a mapping to itself via 'm += m' freed svalues
         first, then used them as data for assignment (reported by Patryn).

12-Aug-2001 (Lars Duening)
    - (func_spec) Somehow the change for sizeof() didn't make it into
         the distribution (reported by Menaures).

07-Aug-2001 (Lars Duening)  (3.3.84)
    - (lex.c) The recognition of numeric character constants was slightly
         wrong (thanks, Fiona).

06-Aug-2001 (Lars Duening)
    - (object.c) Efun program_name() now accepts 0 as
         argument and pass it through (suggested by Niels).
    - (func_spec, efuns.c) Efuns floor() and ceil() also accept integers
         values (suggested by Niels).

05-Aug-2001 (Lars Duening)  (3.3.83)
    - (mstrings.h, interpret.c) The duplication of shared strings before
         a modification did not catch shared untabled strings. And the memory
         usage was calculated off-by-one, too (reported by Niels).
    - (simulate.c) Destructing an object with a single shadow crashed the
         driver (reported by Craig).
    - (object.c) Efuns load_name() and object_name() now accept 0 as
         argument and pass it through (suggested by Niels).
    - (interpret.c) Calling an alien-lfun created two control frames instead
         of just one, with no obvious purpose. I removed one of the frames
         but commenting out the code, so if it is needed nonetheless, it
         will be easy to reactivate (reported by Niels).
    - (interpret.c) For the first 255 simul-efuns it is now permissible to
         receive references in a varargs parameter, e.g. to implement
         a simulated call_other(). Handle with care! (reported by Coogan)
    - (configure) Improved the search for mySQL libraries - it is amazing in
         how many different ways this package is installed.

01-Aug-2001 (Lars Duening)  (3.3.82)
    - (prolang.y) The error message for the case that a wildcarded super
         call tried to pass arguments was confusing (reported by Gimli).
    - (interpret.c) Efun sizeof() can be used on strings (suggested by Niels).

31-Jul-2001 (Lars Duening)  (3.3.81)
    - (pkg-mysql.c) Fixed a syntax error. It sucks that I can't compile
         this file at home, doesn't it?
    - (lex.c) A preprocessor statement following a macro redefinition
         wasn't recognized because the macro parsing code clobbered
         the newline character (thanks, Fuchur!).

26-Jul-2001 (Lars Duening)  (3.3.80)
    - (lex.c) The redefinition of a macro messed up the list of defines,
        eventually crashing the driver (reported by Freaky).
    - (efuns.c) Using terminal_colour() with a closure as lookup method
        an a non-tabled keyword crashed the driver (reported by Elric).
    - (simulate.c) Clones no longer inherit the current O_WILL_CLEAN_UP
        flag from their blueprint - it didn't make sense (thanks, Niels!).

25-Jul-2001 (Lars Duening)  (3.3.79)
    - (sprintf.c) Printing numbers with leading zeroes and a sign character
        printed the sign in the wrong place (reported by Dafire).
    - (backend.c) The check_alarm() function did not quite work right
        (thanks, Coogan!).
    - (efuns.c) Efun regreplace(): Pattern which could match on the
        empty string matched once too often at string end.
        E.g. regreplace("blah fasel", ".*", "ERSATZ", 1) returned
        "ERSATZERSATZ" instead of just "ERSATZ" (thanks, Fiona!).
    - (lex.c) Redefinition of a macro yields a warning even if the
        definition doesn't change (suggested by Gnomi).
    - (backend.c, simulate.c) The initial setting of the O_WILL_CLEAN_UP flag
        checked for the hardcoded "clean_up" lfun instead for what the
        H_CLEAN_UP hook said. Also, the documentation was slightly out
        of sync with the reality (thanks, Niels).
    - (mysql.c) db_error() used a non-existing argument (thanks, Dafire!).

17-Jul-2001 (Lars Duening)  (3.3.78)
    - (array, gcollect.c, mapping) The GC now recounts the number of arrays 
        and mappings in the game (reported by Niels).
    - (prolang.y) If the compiler detects a function call with too many
        arguments, the subsequent argument type checks were wrong
        (reported by Fiona).
    - (sprintf.c) Instead of using the new modifier '$', the efun now
        uses the existence of an explicite pad string specification
        as flag whether to remove pad space before new lines or not.
        This is actually more logical to use than a modifier (suggested
        by Largo).
    - (actions.c) The special command 'malloc' now follows the
        'is_wizard' handling of the other special commands (thanks,
        Niels).

16-Jul-2001 (Lars Duening)  (3.3.77)
    - (mapping.c) Removed an extraneous increment in the mapping statistics:
        the hash part of a new mapping was counted twice.
    - (lp-245/) Removed the uses order_alist() from the simul_efun objects.
    - (func_spec, lex.c, prolang.y, interpret.c, closure.c) Added [>]
        indexing method (both single and ranges) to fully replace the
        gone extract() efun.
    - (make_func.y, lex.c, func_spec) Closure operators can now be declared
        directly in the func_spec; no need for manual patching by lex.c .
    - (gcollect.c) Oops. Freeing a circular array reference with
        MALLOC_LPC_TRACE enabled crashed the driver in the dump
        of the array contents.

15-Jul-2001 (Lars Duening)  (3.3.76)
    - (actions, simulate) Removing or destructing a shadow now properly
        removes all associated actions (reported by Nathan).
    - (actions.c) New add_action() flag AA_IMM_ARGS implements the sane
        NOSPACE argument handling.

15-Jul-2001 (Lars Duening)  (3.3.75)
    - (configure) When testing for mySQL, the driver automatically checks
         in /usr/local/include as well (some systems don't have it the
         default include path).
    - (configure) Added a check for 'minimal optimization' options.
    - (configure) When compiling on Windows, link in a couple of more
         libraries. This might not be fully correct yet.
    - (make_func.y) Removed a couple of warnings under gcc 3.0 (thanks,
        Largo!).
    - (comm.c) On a regular shutdown, stop the erq demon explicitely.
    - (main.c) When compiling for MSDOS_FS, the erq pathname wasn't built
        correctly (reported by Coogan).
    - (sprintf.c) Simul-efun closures printed with %O are marked as such.
    - (closure.c) Comparison of operator, efun, and simul-efun closures
        was instable (reported by Nathan).

13-Jul-2001 (Lars Duening)  (3.3.74)
    - (comm.c, parse.c, parse_old.c) Removed a couple of
        undefined behaviours, detected by gcc 3.0 (thanks, Largo!)
    - (sprintf.c) Format modifier '$' instructs (s)printf() to not remove
         padding white space before a lineend.
    - (efuns) New efuns gmtime() and localtime() to return the time broken
         up into its constituents (suggested by Markus Peter).
    - (lex.c) Escaped character constants are now only parsed up to a
         maximum length. If no valid digits are found, the whole item
         is simply treated as escaped character (thanks, Fiona!).

05-Jul-2001 (Lars Duening)  (3.3.73)
    - (prolang.y) It is now possible again to redefine a non-static inherited
         variable with a static one (or vice versa), but it also generates
         a warning.
    - (doc/concepts/intermud*) Intermud-2 documentation added (thanks, Fiona!)

03-Jul-2001 (Lars Duening)  (3.3.72)
    - (prolang.y) How embarrassing! The code for !INITIALIZATION_BY_INIT
        had a bad syntax error - and I didn't notice it (thanks, Bardioc!)

01-Jul-2001 (Lars Duening)  (3.3.71)
    - (configure) 'with_wizlist_file=no' didn't work from settings files
        (reported by Freaky).
    - (lex.c)  '//' comments didn't like to be terminated by the end of
        file (reported by Matthew).

30-Jun-2001 (Lars Duening)  (3.3.70)
    - (hosts/os2) Updated the OS/2 port (provided by Bart).

30-Jun-2001 (Lars Duening)  (3.3.69)
    - (prolang.y) Relaxed type checking somewhat so that a non-mixed
        function argument can be redefined to mixed, and vice versa
        (suggested by Gnomi)
    - (lex.c) Escaped character constants in inline closures weren't
        recognized (reported by Freaky and Gnomi)
    - (doc/LPC/comments) New.
    - (configure.in) When using mySQL, also check for libnsl.
    - (configure.in) The mySQL path is now used for both include
        and library searches.

29-Jun-2001 (Lars Duening)  (3.3.68)
    - (prolang.y) Accidentally it was no longer possible to redefine 
        privately inherited variables (reported by Gnomi).
    - (actions.c, simulate.c) New hook H_SEND_NOTIFY_FAIL to deliver
        the notify fail message. It is meant for those muds who want
        control over the command flow without having to implement everything
        themselves via the H_COMMAND hook. This hook is still experimental
        and may change in details (suggested by Gnomi).
    - (prolang.y) It is now possible to define a default visibility
        for functions and variables (see doc/LPC/modifiers) (suggested
        by Freaky).

29-Jun-2001 (Lars Duening)  (3.3.67)
    - (main.c) Commandline arguments can now be read from a textfile, using
        new commandline option '--args'. These argument files can be nested.
        (suggested by Elric)

28-Jun-2001 (Lars Duening)  (3.3.66)
    - (configure) The evaluation of the '--with-wizlist-file' configuration
        option was less than flawless.
    - (main.c) Instead of scanning the arguments twice, all encountered
        -f options are stored in a temporary list and evaluated when
        it's time (f-010603-1).
    - (main.c) Laid the groundwork for nested sources for the command
        arguments.

27-Jun-2001 (Lars Duening)  (3.3.65)
    - (simulate.c) When parsing callback arguments, the pattern 'function,
      object, extra' was parsed such that 'object' became part of the
      'extra' arguments (reported by Marthin).
    - (lex.c) It is now possible to use symbols in inline closures, ie.
        "(: 'a :)" (reported by Menaures).
    - (main.c, lex.c, wiz_list, configure) The name of the WIZLIST file
        can now be configured at compile time and with commandline option
        '--wizlist-file'. The LPC macro __WIZLIST__ expands to the selected
        name.  The WIZLIST file can also be disabled completely
        ('--no-wizlist-file'), in which case __WIZLIST__ is not defined
        at all (based on a patch from Elric).
    - (call_out.c) Corrected a fatal refcount bug in the garbage collection
        of call_outs with destructed command givers (reported by Gnomi).

22-Jun-2001 (Lars Duening)
    - (sprintf.c) Column-formatting a string with one newline
         printed one newline too few if the formatstring didn't end
         immediately (reported by Gnomi).

21-Jun-2001 (Lars Duening)
    - (make_func.y, lex.c) Identifier names can use the extended alpha
         characters from the ISO 8859-1 alphabet (suggested by Elric).

17-Jun-2001 (Lars Duening)  (3.3.64)
    - (backend.c) cleanup_stuff() also executes a clear_state() to
         avoid dangling object references (reported by Gnomi).
    - (pkg-mysql.c) Added efun db_error() to return the most recent
         error string (thanks to Casey and Dafire).
    - (efuns.c) If the driver is compiled with DYNAMIC_COSTS, the cost
         of efun clones() is proportional to the number of objects
         in the game.

13-Jun-2001 (Lars Duening)  (3.3.63)
    - (prolang.y) Global variables can no longer be redefined (reported
         by Coogan).
    - (doc/efun/operators) Clarified the behaviour of (<type>) casts.
    - (simulate.c, interpret.c) Normal runtime errors (and their traceback)
         are no longer reported on stdout at all (reported by Tomi).
    - (etc/startmud.pl) Added a simple start/keep-alive script - feel
         free to improve on it (thanks, Krystal-Anne!)

11-Jun-2001 (Lars Duening)  (3.3.62)
    - (interpret) Nifty little crasher: if the object holding the closure
         currently execute is destructed, the interpreter happily tried
         to free the closure after execution without noticing
         that it already has been freed (as part of the object destruction
         process) (reported by Freaky).

09-Jun-2001 (Lars Duening)  (3.3.61)
    - (mstrings.c) strstr("text", "") erroneously returned 'not found'
         instead of 0 (reported by Bardioc).
    - (mapping) Corrected the SIZEOF_ macros (most of them gave a too
         big number, but SIZEOF_MC undercalculated for wide mappings);
         and corrected one calculation in the total statistic (instigated
         by Bardioc).
    - (configure, lex.c) 'nosave' is now a permanent feature in LPC; the
         configuration option 'use-nosave' no longer exists (suggested
         by Coogan).
    - (main.c) Improved the formatting of the language options in the
         '--options' output.
    - (pkg-mysql.c) In the call to mysql_real_connect(), the arguments
         for database and user/password were given in the wrong order
         (thanks, Malcom!).

07-Jun-2001 (Lars Duening)
    - (comm.c) The driver forgot that it is in noecho/charmode mode after
         the second consecutive input_to call, sending out unnecessary
         telnet negotiations.
    - (interpret.c) When an object is destructed, all references to it
         are removed from the stack - including references through
         closures. Before, only direct T_OBJECT references were removed
         (reported by Gnomi).

04-Jun-2001 (Lars Duening)  (3.3.60)
    - (prolang.y) The type on function return is too strict (or the
         type tracking in general too lacking) unfortunately,
         so I took it out again.

03-Jun-2001 (Lars Duening)  (3.3.59)
    - (prolang.y) A cast of a type to itself is now a no-op as it should
         be (reported by Gnomi). 
    - (interpret.c, prolang.y) Integers and float can now be compared
         against each other (suggested by Gnomi).
    - (gcollect.c) The GC forgot to trace the program->blueprint pointer
         which was introduced 3.3.40 (reported by Coogan).

02-Jun-2001 (Lars Duening)
    - (lex.c, mstrings) The lexer can now create literal strings with
         embedded \0 characters.
    - (backend.c) The check_alarm() function also restores the alarm
         signal handler.
    - (prolang.y) It is now possible to cast to '(mixed)'.
    - (prolang.y) Improved the type tracking of '?:': it now accepts
         operands of different types and evaluates to 'mixed' in that
         case (reported by Dennis VanHoey)
    - (prolang.y) Improved the type checking at function return under
         strict_types.

25-May-2001 (Lars Duening)
    - (configure) Comments may now appear at the end of the lines in
         a settings file (thanks, Bertram!).

24-May-2001 (Lars Duening)  (3.3.58)
    - (efuns) Efun terminal_colour() can now use closures to translate
         colour keys (suggested by Elric).
    - (prolang.y, pkg-alists) When using alists, the compiler needs the
         order_alists() function for constant expressions.
    - (object.c) Efun say() freed an array once too often (reported by
         Nostradamus).
    - (backend.c) Removing destructed objects in the process-objects
         loop clobbered the list of programs to replace (reported by
         Gnomi).

22-May-2001 (Lars Duening)
    - (efuns.c) Efun regreplace() can now take a closure to produce
         a replacement string (suggested by Fiona) (f-010516-2).

16-May-2001 (Lars Duening)  (3.3.57)
    - (mapping.c) Missing parentheses around a ?: construct could crash
         the driver (thanks, Bardioc).
    - (prolang.y) The non-__INIT code referenced F_ORDER_ALIST even when
         alists are disabled (thanks, Bardioc).
    - (backend.c) The call to clean_up() erroreously counted the internal
         blueprint-program reference to the reference count passed to the
         clean_up() apply. Additionally, before the call all pending
         destructed objects are removed (suggested by Elric).
    - (rxcache.c) The regexp cache forgot to compare the excompat flag,
         occasionally selecting the wrong regexp (thanks, Fiona).

15-May-2001 (Lars Duening)  (3.3.56)
    - (sscanf) Clarified the documentation regarding the matching of
         '%s' (reported by Pulami and Gnomi)
    - (closure.c) Compiling a simul_efun with extended varargs in a
         lambda closure created faulty bytecode (reported by Gnomi).

13-May-2001 (Lars Duening)  (3.3.55)
    - (prolang.y) Undid the casting change, as it broke the idiom
         's = (string)foo->bar();' where bar() may signal a failure
         by returning integer 0. It's the old 0/nil dichotomy again.
    - (efuns.c) Efun sscanf(): the format '%s%d' failed to parse 'ab1cd'
         correctly (reported by Pulami).

09-May-2001 (Lars Duening)  (3.3.54)
    - (prolang.y) Casting an unknown or mixed type now always inserts
         a proper conversion (reported by Tomi).
    - (heartbeat.c) The result for DID_ST_HBEAT_AVG_PROC was computed
         as int instead of float (reported by Freaky).
    - (mud/morgengrauen) Added basic support for the MorgenGrauen 3.2.6
         mudlib.

08-May-2001 (Lars Duening)
    - (prolang.y) The expression 'a & b' failed to track the types if one
         of the operands was of TYPE_ANY (reported by Gnomi).

06-May-2001 (Lars Duening)
    - (interpret.c) Added a protection against simple reference loops
         as created by 'b = 0 || &a; b = 0 || &a;' (reported by Gnomi).

29-Apr-2001 (Lars Duening)  (3.3.53)
    - (mapping.c) m_values() failed to properly check the mapping width,
         especially on empty mappings.
    - (array.c) Looking up a key in an array failed on some arrays (reported
         by Freaky).
    - (prolang.y) Nested definitions of inline closure no longer generates
         warnings about the arguments shadowing previous declarations
         (reported by Freaky).

28-Apr-2001 (Lars Duening)  (3.3.52)
    - (several files) Removed the support for Atari and OS/2, restricted
         the Amiga support to gcc/ixemul.
    - (pkg-alists.c) Removed compiler warnings.

27-Apr-2001 (Lars Duening)  (3.3.51)
    - (sprintf.c) Duh. A typo caused '%^' to eat the next character
         from the format string (reported by Robert).
    - (sprintf.c) A leading '0' used to pad the whole field with 0s.
         Now, only leading 0s are printed and this setting and the
         explicite pad string are independent of each other (suggested
         by Fiona).
    - (call_out.c) Removing call_outs, or call_outs going stale, messed
         up the 'number of callouts' statistics (provided by Gnomi).
    - (autoconf) Oops, the USE_ALISTS option lacked a crucial substitution.
    - (mapping.c) Freeing mappings clobbered memory.

25-Apr-2001 (Lars Duening)  (3.3.49 and 3.3.50)
    - (efuns.c, array, parse.c, parse_old.c, interpret.c) 
         Removed the last uses of old_explode_string().
    - (array, pkg-alists, object.c, swap.c, configuration) Alists are
         now an optional package. By default alists are not supported,
         however, I edited all settings/ files to include support.
         (suggested by Freaky)
    - (prolang.y) Pre-increment or -decrement failed to terminate
         the parser reduction, causing an internal fatal error when the
         result was used somewhere (reported by Dafire).

24-Apr-2001 (Lars Duening)  (3.3.48)
    - (efuns.c) Efun sgn() used on negative integers still returned +1 -
         a simple typo (thanks, Fiona!).
    - (mapping,dump_stat.c, func_spec, interpret.c, swap.c) I re-implemented
         the mappings. Originally I tried to devise a better way of
         storing mappings in memory, but in the end I ended with the scheme
         Amylaar used already. Just that now both layout and code are
         a bit simpler and easier to maintain. Oh, and the obsolete
         efun copy_mapping() is gone, too.

22-Apr-2001 (Lars Duening)  (3.3.47)
    - (array.c) When using a multi-dimensional allocate(), specifying
         0-sized dimensions could crash the driver (reported by Menaures).
    - (Makefile.in) When doing 'make install', the driver is now installed
         as 'driver', not 'parse' (reported by Eivind).
    - (docs) Some corrections, provided by Fiona.
    - (closure.c) The generation of sparse lookup ranges failed to properly
         generate default-jumps for the values between two consecutive
         ranges (e.g. 'case -2..-1:, case 1..2:' was smudged into 'case -2..1:
         case 0..2:') (reported by Menaures).

20-Apr-2001 (Lars Duening)  (3.3.46)
    - (mapping.c) Removed a couple of fatal bugs in the key deletion
         (reported by Freaky).

19-Apr-2001 (Lars Duening)  (3.3.45)
    - (configure, main.c, simulate, call_out.c) Runtime for the total
         number of callouts, settable with commandline option
         '--max-callouts'.

18-Apr-2001 (Lars Duening)  (3.3.44)
    - (interpret.c) Corrected a crasher when freeing protected char lvalues.
    - (func_spec, prolang.y, interpret.c) foreach() can now iterate over
         references to arrays/mappings/strings, allowing the loop to change
         them (f-010406-1).
    - (prolang.y, interpret.c) foreach() can now iterate over integers
         and integer ranges (f-000221).
    - (object.c) Fixed another compilation problem for COMPAT mode
         (reported by Ralph).

17-Apr-2001 (Lars Duening)  (3.3.43)
    - (prolang.y) Redefining an inherited private heart_beat() didn't work:
         the new heart_beat() wasn't called (reported by Gnomi).
    - (rxcache.c) The status functions were far too slow, because they
         counted the number of entries on each call (reported by Sissi).
    - (prolang.y) Function calls can distinguish between variables and
         functions of the same name (suggested by Gnomi).
    - (prolang.y) Warnings while loading the master caused the load to
         fail.

16-Apr-2001 (Lars Duening)  (3.3.42)
    - (object.c) Ooops, didn't compile in COMPAT mode (reported by Ralph).

13-Apr-2001 (Lars Duening)  (3.3.41)
    - (simulate.c) Made the 'illegal object to load' error message
         more informative (suggested by Freaky).
    - (mapping.c) Modified to mapping code to be able to use closures
         as proper keys.

12-Apr-2001 (Lars Duening)
    - (pkg-mysql.c) Forgot to include mstrings.h here (reported by 
        Gawain and Bardioc)
    - (sprintf.c) The formatter "%^" will print "%^" for compatibility
         with terminal_colour().
    - (closure.c, array.c) Introduced a total order on closure svalues
         which allows their use in alists and array operations like
         intersection. The same will have to be done later for their use in
         mappings (reported by Gnomi).

11-Apr-2001 (Lars Duening)  (3.3.40)
    - (prolang.y, interpret.c, func_spec) Wildcarded calls to inherited
        functions confused arguments with results and messed up the stack.
        Introduced a dedicated bytecode for this situation.
    - (prolang.y) Additions of floats to constant 0 yielded TYPE_ANY
         instead of TYPE_FLOAT.
    - (interpret.c) Arguments passed to runtime_error() were wrong
         if the error happened in a master apply (reported by Gnomi).

10-Apr-2001 (Lars Duening)
    - (exec.h, prolang.y, simulate.c) The program structure received
        a pointer pointing to the blueprint object. Main purpose is to 
        allow the cheap deep update of the master object, but other uses will
        probably show up as well.
    - (simulate.c) Added function deep_destruct() to destruct an
        object and the blueprints of all inherited programs.
    - (backend.c, interpret.c) The signal SIGUSR1 now destructs the
        master object and all its inherits, to allow a clean reload.

07-Apr-2001 (Lars Duening)  (3.3.39)
    - (smalloc.c) The multiple-of allocation was not quite correct.
    - (Makefile.in) The pkg-mysql file was missing from the build
         rules (reported by Dafire).

06-Apr-2001 (Lars Duening)  (3.3.38)
    - (md5.c) Removed a compiler warning.
    - (closure.c, interpret.c, prolang.y) Bugfixes in the '...' code
         generation.
    - (interpret.c) Indexing beyond the bounds of a rvalue string 
         returns -1 as 'character' value.
    - (smalloc.c) On Darwin, we get the memory from the system only
        in multiples of 64 Bytes, which caused the creation of too-small
        large blocks. Fixed that.

05-Apr-2001 (Lars Duening)  (3.3.37)
    - (object.c) Removed an occasional crasher from restore_object()
        (reported by Freaky).
    - (func_spec, prolang.y, interpret.c) Reworked and completed the
        support for the '...' argument operator (f-990417-9).
    - (object.c) The error messages for save_object() and restore_object()
        also print the filename in question.

04-Apr-2001 (Lars Duening) 
    - (func_spec, prolang.y, interpret.c) Added experimental support
        for the '...' argument operator (flatten argument). It works
        for lfuns and probably simul_efuns and doesn't break existing
        code, but I have to rework it to handle efuns efficiently.
        One of the problems is the one pass nature of the LPC compiler,
        which allows to nest function calls into function call arguments.

04-Apr-2001 (Lars Duening)  (3.3.36)
    - (Makefiles) Corrected.
    - (efuns, md5) New efun md5_encrypt() (thanks, Gawain!)
    - (lex.c) An attempt to '(: ;} fun() {... :)' is now detected and
        rejected (reported by Daniel Fischer).

03-Apr-2001 (Lars Duening)  (3.3.35)
    - (lex) Corrected a bug in yesterday's change.
    - (doc/) Cleaned up the files a bit.
    - (erq, xerq) Fixed (hopefully) a type mismatch under Darwin.
    - (make_func, parser) Wrapped the parsers into a file defining 'lint'
        to avoid spurious warnings, and under Darwin to enable to compile
        them in the first place. As a result, make_func is now called
        'mkfunc', and the lpc parser is 'parser.[co]'.

02-Apr-2001 (Lars Duening)  (3.3.34)
    - (lex) When generating names for inline closures, the compiler
        makes sure that the name hasn't been used yet (reported by Dan).

30-Mar-2001 (Lars Duening)
    - (lex.c) The include path and filenames returned by the master the
        and H_INCLUDE_DIRS closure can now start with leading slashes
        (suggested by DaFire).
    - (xerq) The incoming data buffer is cleared before each new command,
        in order to detect errors more easily (suggested by Gawain).
    - (comm.c) When using charmode against non-charmode clients (TinyFugue),
        the line end wasn't handled properly. The solution is to receive
        the data in charmode, but to pass it on to the user as if in
        linemode.
    - (comm.c) Newline sequences received in charmode are passed to the
        mudlib as-is. Older drivers used to pass empty strings in their
        place, which made handling clients which refused to go into charmode
        difficult.

27-Mar-2001 (Lars Duening)
    - (interpret.c) All <op>= assignment operators can now operate on
        indexed strings on the left hand side.

22-Mar-2001 (Lars Duening)
    - (closure.c) Default arguments were not properly stored by
        prefix/bytecode (reported by Zwirch).
    - (efuns.c) The optional argument to get_type_info() was no longer
        optional (reported by Zwirch).

21-Mar-2001 (Lars Duening)  (3.3.33)
    - (stralloc-away) Deleted these files.
    - (mstrings.c) Repeating a string 0 times left clobbered memory.

20-Mar-2001 (Lars Duening)  (3.3.32)
    - (erq, xerq/execute.c) Quoted arguments are recognized and not split into
        words (provided by Christian W., thanks!)
    - (backend.c) The no-var-swapping time before a reset() is limited to
        5 minutes max, otherwise a lot of muds will never swap variables.
    - (object.c) A correction to the correction to functionlist() (thanks,
        Fiona!).
    - (func_spec, array.c) Efun allocate() now accepts an initialisation
        value (f-981229-09a).
    - (configure.in) When using mySQL, the script also checks for and links
        in the libz (reported by Bardioc).

19-Mar-2001 (Lars Duening)
    - (func_spec, closure.c) The definition of bind_lambda() didn't work.
    - (mapping.c) Keyvalues for strings were still computed incorrectly.

16-Mar-2001 (Lars Duening)  (3.3.31)
    - (pkg-mysql.c) Dafire provided to new mySQL efuns: db_insert_id()
        and db_coldefs() - thanks!.
    - (object.c) The list control for functionlist() was documented
        incorrectly, and also functioned incorrectly (thanks, Fiona!).

15-Mar-2001 (Lars Duening)  (3.3.30)
    - (settings/unitopia) Updated (thanks, Freaky!).
    - (comm.c) The pathlength safety check in the start-erq-demon routine
        was too cautious (thanks, Freaky).
    - (mudlib/dhrystone.c) Added a missing assignment.
    - (mstrings.c) String comparisons of equal length failed to detect
        equality (reported by Nostradamus).
    - (xerq/Makefile.in) Accidentally left the XDEBUG option enabled.
    - (make_func.y) The LPC runtime argument types for all but the first
        efun arguments were corrupt. Also made this table a wee bit more
        compact.
    - (comm.c) A prompt closure bound to a destructed object is detected
        and restored to the default prompt. An error is still thrown, to
        give the mudlib hackers something to do.
    - (pkg-mysql.c) The version check did not really work (thanks, Dafire).

14-Mar-2001 (Lars Duening)  (3.3.29)
    - (interpret.c) collect_trace() freed a filename information which
        was still needed.
    - (prolang.y, closure.c) Sorting and searching of aligned functions
        must be done by comparing the name pointers downcasted to (char*).
        If not, the differences reported don't allow for reliable searching.
    - (efuns.c) regreplace() didn't work well with empty strings.
    - (files.c) Reading an invalid file caused a fatal() error.
    - (rxcache.c) The condition to check for a match was reversed.
    - (main.c, comm.c) The command option '--erq' can now be used to
        specify the full pathname of the erq executable (suggested 
        by Freaky).
    - (comm.c) Before printing a prompt via a closure, the current object
        is set to the command giver. This avoids a crash under (admittedly
        rare) circumstances of closure destruction.

13-Mar-2001 (Lars Duening)  (3.3.28)
    - (backend.c) When calling the master apply slow_shut_down(), it is
        made sure that previous_object(), this_player(), and
        this_interactive() are all 0 (reported by Freaky).
    - (comm.c, ed.c, interpret.c, simulate.c) Removed spurious checks
        for out-of-memory condition. While the intention is noble, it hasn't
        been implemented consequently enough to be of any use.
    - (mstrings.c) cvt_progname() got the meaning of compat_mode reversed.
    - (object.c) restore_object() tried to restore from the wrong filename.
    - (comm.c) If a CRLF as expansion of a NL character was to be inserted,
         but only one character was left in the buffer, the code errorneously
         detected a 'message shorter than minimum, needs not be send'
         condition, thus swallowing all following characters after the NL.
    - (main.c) The lexer, and with it the permanent defines, was initialized
         before the master name had been determined.
    - (interpret.c) Reverse-indexing before the start of a string is allowed
         and returns 0.
    - (interpret.c) Argl. Letting the ==/!= comparison for floats fall through
         to the all new and improved closure comparison was not a good idea
         (reported by Gnomi and Freaky).

12-Mar-2001 (Lars Duening)
    - (pkg-mysql.c) db_connect() optionally takes a username and a password
        (thanks, Andre!)
    - (mapping.c) Keyvalues for strings were computed incorrectly.
    - (efuns.c) The result for terminal_colour() and to_string(array)
        was alloced one too long.

09-Mar-2001 (Lars Duening)  (3.3.27)
    - (array.c, rxcache.c, interpret.c, mstrings, simulate.c, mud/lp-245)
         Bugfixes.
    - (configure) Another define for 'void' signal return types - this one
        can be tested directly, as a comparison of the values of RETSIGTYPE
        is not portable.
   The driver is now able to run lp-245, and boot into Evermore-native.

08-Mar-2001 (Lars Duening)
    - (mstrings.c) Removed a couple of bugs.

07-Mar-2001 (Lars Duening)  (3.3.26)
    - (gcollect.c, string_spec) Corrected compilation errors.
    - (interpret.c) Freeing a T_FLOAT svalue is allowed, too. And  not
         defining TRACE_CODE accidentally removed a handful of
         efuns.
    - (comm.c) Writing a string to stdout via add_message() didn't work.

06-Mar-2001 (Lars Duening)  (3.3.25)
    - (mstrings.c, array.c) xalloc_pass() was called with too many arguments,
        clobbering the size of the allocate memory block.
    - (gcollect.c) The global master name as tabled name was freed by
        accident.
    - (comm.c) add_message() didn't recognize the flush message.
    - (interpret.c) Freeing an T_INVALID svalue is allowed.

    Implemented changes up to 3.2.9-dev.263:
    - (smalloc.c) Corrected a statistics error (reported by Freaky).
    - (simulate, interpret, efuns.c) Added the last error trace as
        possible return from debug_info(DINFO_TRACE) (suggested by Gnomi).
    - (interpret.c) Removed a VM stack leak in ++/-- on floats (reported
         by Dafire).
    - (object.c) The previous object for object resets is this_object()
         (reported by Gnomi).
    - (Makefiles) Added 'lint' to the compiler defines to ensure a smooth
         compilation of prolang.y.
    - (backend.c) Simplified the error message output in write_file().
    - (simulate.c) The master apply runtime_error() receives an extra
         argument describing if the error is a normal error, or occured
         during a heartbeat (suggested by Freaky).
    - (gcollect.c) Added a dump function for closure literals.
    - (lex.c, gcollect.c) Cosmetics.
    - (smalloc.c, main.c) xfree() now accepts NULL pointers. Allocation of
         MIN_(SMALL_)MALLOCED blocks actually check if the memory is
         allocated (reported by Freaky).
    - (main.c, backend.c, interpret.c) Swapping is no longer an optional
         feature, though it still can be disabled by specifying swapping
         times of 0.
    - (configure.in, main.c, xalloc) New commandline options '--min-malloced'
         and '--min-small-malloced' to complement the configuration options
         (suggested by Freaky).
    - (hosts/win32) Updated the various files with those provided by
         Coogan (thanks!)
    - (smalloc) Renamed the constant MASK to M_MASK, as MASK seems to clash
         with one of Darwin's symbols.
    - (func_spec, efuns) The efuns debug_info() and object_info() can now
         return single values instead of whole arrays.
    - (backend, comm.c) Added a check method which restarts the alarm
         after some time of activity. This is required at least for
         Cygwin on Windows, where the alarm often gets lost (thanks, Holger!).
    - (interpret.c) The master apply valid_trace() now receives as second
         argument the argument passed to the efun (suggested by Coogan).
    - (lex.c, prolang) Inline closure 'inherit' the visibility modifiers
        of their defining function (suggested by Coogan).
    - (smalloc.c) Corrected an accounting error in consolidate_freelists().
    - (autoconf/configure.in) Some more small fixes.
    - (prolang.y) Recognize an inherited heart_beat() only if it is visible
         (adopted from Morgengrauen).
    - (efuns.c) debug_info(DINFO_DATA, DID_STATUS) now returns the number
         of executed heartbeats as well as the total number of heartbeats.
    - (settings/morgengrauen) New configuration file.
    - (autoconf/configure.in) Corrected some replacement directives.
    - (func_spec) Removed two duplicate efun definitions which caused
        Cygwin compiles to hang.
    - (make_func.y, lex.c) Added diagnostics to detect duplicate efun
        and string definitions.
    - (autoconf/configure.in) The option --enable-use-mysql now also
        accepts a directory path under which the libmysqlclient can be
        found (f-000918).
    - (main.c) Added code to unblock SIGALRM on program start - on systems
        it is blocked randomly for no obvious reason (thanks, Fini!)
        (maybe fixes b-000308)
    - (efuns, func_spec) New efun sgn() to retrieve the sign of a numeric
        argument (suggested by Croft).
    - (lots of files) New configuration option 'use-deprecated' allows
        to disable obsolete and deprecated efuns. If enabled, the macro
        __DEPRECATED__ is defined (suggested by Coogan).
    - (lots of files) The UDP port is now a standard feature. The
        option has been renamed from 'catch_udp_port' to just 'udp_port'.
    - (lots of files) The UDP efuns have been renamed from send_imp()
        and query_imp_port() to send_udp() and query_udp_port(); as were
        the associated privilege violation string and the master apply.

11-Feb-2001 (Lars Duening)  (3.2.24)
   Included changes up to 3.2.9-dev.255:
    - (smalloc.c) Removed a compilation error (reported by Coogan).
    - (strfuns.c) When (re)allocating the strbuf buffer, the length was
        accidentally casted down to unsigned short, causing the program
        to write outside the allocated memory (reported by Sebastian).
    - (smalloc.c) Using the time_stamp() from within the allocation routines
        was really stupid.
    - (smalloc.c) The large block allocator had an off-by-one error which
        left free large blocks of 'small' size behind. These blocks could
        never be allocated, just merged again.
    - (smalloc.c) The routine to split largish free small blocks was faulty,
        causing coredumps.
    - (parse_old.c) Expanded the list of hard coded prepositions.
    - (lex.c) Added new standard predefine __LDMUD__, expanding to an empty
        string.
    - (settings/heaven7, mud/heaven7/) Added basic support for Heaven7: you can
        boot the mud and log in. There are probably still errors in the
        areas.
    - (func_spec) The result of set_prompt() can be a string or a closure,
        yet it was declared to return only string (reported by Gnomi).
    - (prolang.y) The type tracking for multiplication returned an 'int'
        result even for 'mixed' operands (reported by Gnomi).
    - (interpret.c) The relations '==' and '!=' can now compare lfun-
        and variable closures (suggested by Gnomi).
    - (func_spec, efuns) New efuns min() and max().
    - (configuration, smalloc.c) Added a new config parameter
        MIN_SMALL_MALLOCED which defines the size of the first small chunk
        allocated by the system.
    - (xerq) With ERQ_FORK started subprocesses are now as well handled
        with a child_t structure. While not exactly necessary, it allows
        for useful diagnostics in the sig_child() handler (reported by
        Freaky).
    - (dumpstat, efuns.c) The internal data measuring routines now return
        both the total data size, as well as the data size scaled down
        according to the extend of data sharing. The results are also
        returned by object_info(OI_MEMORY) (suggested by Freaky).

07-Feb-2001 (Lars Duening)
    - (Many files) Bugfixes. The driver is now able to boot the test_master.c
       and call simple functions, but dies in a garbage_collection or when
       printing the 'status' on login. This however could be caused by
       the pending bug in smalloc and strbuf (fixed in 3.2.9-dev.255).

06-Feb-2001 (Lars Duening)
    - (sprintf, swap, wiz_list, xalloc) Adapted to new string implementation.

    This completes the basic string adaption - it compiles, it links, it
    can display its options, it probably crashes and burns when you try
    to boot a mud with it.

05-Feb-2001 (Lars Duening)
    - (simulate, simul_efun, strfuns) Adapted to new string implementation.

02-Feb-2001 (Lars Duening)
    - (object, otable, parse, parse_old, rxcache) Adapted to new string
        implementation.

31-Jan-2001 (Lars Duening)
    - (prolang, main, pkg-mysql, mapping) Adapted to the new string
        implementation.
    - (array, mstrings, xalloc.h) Removed compilation errors.

26-Jan-2001 (Lars Duening)  (3.3.23)
    Included changes up to 3.2.9-dev.254:
    - (smalloc.c) Introduced a free list for 'oversized' small blocks which
        is used much like the unused space in a small chunk. This list
        allows the consolidation function to keep large free blocks
        together even if they exceed the legal maximum size for small
        blocks.
    - (smalloc, gcollect.c) New function consolidate_freelists() to
        rebuild the small block free lists, merging adjacent free small
        blocks where possible. Additionally, when a small chunk is exhausted
        the small block allocator first tries to split one of the larger
        free blocks before getting a new small chunk.
    - (xerq/execute.c) Corrected some small bugs (thanks, Freaky!)
    - (port.c) The time_stamp routines recompute the string result only
        if the time has changed since the last call.
    - (efuns.c, smalloc.c) smalloc now keeps a statistic about the number
        and size of permanent and clib allocations; and debug_info()
        returns this statistics as part of (DINFO_DATA, DID_MEMORY).
    - (smalloc.c) Defining the macro DEBUG_SMALLOC_ALLOCS causes smalloc
        to log all new allocations which can't be satisfied directly
        from the free lists. The output is written to the same stream
        as the GC log (default is stderr).

23-Jan-2001 (Lars Duening)
    - (mstrings) Made the reference behaviour of mstring_dup() and
        mstring_resize() more intuitive.
    - (lex) Adapted to new string implementation.

22-Jan-2001 (Lars Duening)
    - (interpret.c, mstrings, string_spec) Completed adaption of interpret.c
        to new string implementation.

19-Jan-2001 (Lars Duening)  (3.3.22)
    - (interpret.c, mstrings) Continued adaptation.

    Included changes up to 3.2.9-dev.251:
    - (main.c) Change to the default MUD_LIB directory early, so that the
        debug.log file is opened in the right place (reported by Elric).
    - (xerq) The parent now synchronizes with the child by sending a specific
        byte of data.
    - (pkg-mysql.c) Markus Peter provided a patch for backwards compatibility
        with mySQL before 3.22.24.
    - (main, comm.c) The name of the erq executable can now be given on the
        commandline with the option '--erq <filename>' (suggested by Freaky).
    - (comm.c) In efun exec(), if this_interactive() points to one of the
        the involved objects, it is switched over as well, like this_player()
        already is (reported by Elric).
    - (xerq) Freaky found and corrected a couple race conditions in the
        clean-up loops of socket and children.
    - (backend.c) Efun debug_message() now allows to preprend the message
        with a timestamp for the current date and time, controlled by
        a new bitflag (suggested by Freaky).
    - (xerq) Added additional diagnostic output, activated with compiler
        option XDEBUG. Also, removed two uninitialized variables (the stdout/
        stderr sockets in the child_t structure) in the handling of child
        processes, and added measures against buffer overflows.
    - (erq.c, xerq/socket.c) When closing the connection to a child
        process, the erq makes sure to read all still remaining data
        from the connection (reported by Freaky).

21-Dec-2000 (Lars Duening)  (3.3.21)
     Included changes up to 3.2.9-dev.250:
     - (comm.c, interpret.c) More small corrections to the new telnet
         error reporting.
     - (func_spec, backend.c) Extended the efun debug_message() to take
         a parameter telling where to log the message (suggested by Freaky).
     - (comm.c) If the driver received only a NL in charmode, the first
         following character was ignored.
     - (comm.c) Found and corrected a problem concerning the use
         of CHARMODE with Windows' telnet: the charmode negotiation were
         considere a failure too early, and moreover the CHARMODE_REQ flag was
         reset without adjusting the input buffer variables. Unfortunately
         this re-opens b-000818. (b-001214)
     - (comm.c) Clients sending CRLF in Charmode instead of just CR
         are now handled properly: the LF is ignored like the NUL in CR NUL
         already is. This also re-fixes b-000818.
     - (comm.c) When receiving DONT ECHO or WONT SGA, the check for if
         the option has already been granted was wrong.
     - (comm.c) After a charmode input_to() has been received, the driver
         did not properly reset the text pointers, causing !-escaped
         commands to go unrecognized.
 
19-Dec-2000 (Lars Duening)  (3.3.20)
    - (interpret.c) Continued adaptation.
    Included the changes up to 3.2.9-dev.249:
    - (mudlib/floattest.c) Unfortunately this code was a derivate of
        a copyrighted program from Numerical Recipes, and therefore can't be
        distributed legally.
    - (lex.c) On solaris, strtod() does not clear errno after a successful
        conversion, causion spurious warnings (reported by Coogan).
    - (main.c) The driver version is now also printed in the .debug.log
        file on startup.
    - (comm.c) A bug in the comm_fatal() routine caused the driver to
        abort on the second call to it. Oops. (reported by Gnomi and
        Freaky)

15-Dec-2000 (Lars Duening)  (3.3.19)
    - (interpret.c) Continued adaptation.
    Included the changes up to 3.2.9-dev.248:
    - (comm, simulate.c) When the telnet machine for a player gets into
        an inconsistent state, the driver no longer aborts. Instead, the
        player's interactive structure is dumped to stderr, and then
        removed the hard way.
    - (regexp.c) Added the metacharacter '+' (match at least once'
        to the regexp code (provided by Terry Penn, thanks!).
    - (mudlib/floattest) This LPC program computes the floating point
        characteristics; it can be called from the test_master (provided
        by Croft, thanks!)
    - (lex.c) Octal numbers are now prefixed by '0o' - it's cleaner
        and avoids compatibility problems with existing code.
    - (interpret.c) Omitting a check_map_for_destr() in a mapping addition
        caused data in a wiz_info mapping to mysteriously disappear (thanks,
        Coogan) (b-001204).
    - (prolang.y) The result type for '++map[mixed]' was computed
        incorrectly (reported by Freaky).
    - (comm.c) If an error occurs on accept(), the driver no longer abort()s
        but prints a better error message.

06-Dec-2000 (Lars Duening)  (3.3.18)
    Included the changes up to 3.2.9-dev.244:
    - (lots of files) Closures bound to destructed objects are now treated
        like destructed objects and zeroed out where possible.
    - (wiz_list) Destructed objects and closures is now removed from the
        'extra' wizinfo in regular intervals. Note that this doesn't
        extend to subarrays and -mappings held by the 'extra' info.
    - (autoconf/configure.in, configure) If MySQL or IPv6 are not requested,
        the configure script won't check for the libraries; consequently
        they won't linked in unless needed (suggested by Coogan).
    - (interpret.c, prolang.y) The operators '++' and '--' can now be
        used on floats, too (suggested by Croft).
    - (interpret.c) sqrt(0.0) caused a 'bad argument' error - corrected
        that (thanks, Andre!).
    - (interpret, efuns.c) debug_info(DINFO_TRACE) returns the current
        call stack as either string or array. (f-000716)
    - (interpret.c) The efuns sin(), cos(), tan(), atan(), atan2(),
        log(), exp(), sqrt() and pow(), when given an integer argument,
        returned a float result typed as integer. (reported by Slava)
    - (lex.c) Oops, a last minute change to remove a warning broke the
         recognition of escaped characters in strings (thanks, Slava!).
    - (interpret.c) Efun pow() did not properly check its arguments.

27-Nov-2000 (Lars Duening)  (3.3.17)
    Included the changes up to 3.2.9-dev.240:
    - (lex.c) Numbers can be specified in binary using the '0b' prefix.
    - (lex.c) Moved the parsing of escaped character sequences into a
         separate function, and implemented the specification of characters
         through their numeric code (expressed in decimal, octal, sedecimal
         and binary). (f-990203-04)
    - (closure.c) Implemented catch-nolog as '({#'catch, <body>, 'nolog })'.
    - (prolang) Folded catch() and catch_nolog() back into one catch(),
        distinguished by the keyword 'nolog'.
    - (func_spec, efuns.c) The efuns sin(), cos(), tan(), atan(), atan2(),
        log(), exp(), sqrt() and pow() now accept integers as arguments, too.
        The results remain float. (suggested by Croft).
    - (interpret.c, mapping.c) When testing for a 'mapping too large' condition
        on mapping addition or element assignment, it is made sure that all
        invalid keys have been removed. (reported by Fiona)
    - (func_spec, lex.c, interpret.c, simulate, prolang.y) New language
        construct catch_nolog() as alternative to catch(): the new statement
        doesn't log the error in the driver logfiles (thanks, Michael!)
        (p-990901).
    - (lots of files) The mode of the driver (plain or compat) can now be
        selected with the commandline options '--no-compat' resp. '--compat'.
        The default is still selected during configuration. (f-981229-00)
    - (mudlib/sys, doc/) Small corrections (thanks, Coogan!).
    - (mudlib/telnet_neg.txt) Added Slava's example on telnet negotiation,
         which includes a means of measuring lag using TMs (thanks!).

15-Nov-2000 (Lars Duening)  (3.3.16)
    Included the changes up to 3.2.9-dev.238:
    - (efuns.c) The OIB_NAME returned by object_info(OINFO_BASIC) did
         not start with a '/' in plain mode. (reported by Fiona)
    - (mud/lp-245) Added secure/master.c as a wrapper for obj/master.c for
         use with plain drivers.
    - (func_spec, efuns, port) Added new efun utime() (provided by
         Slavis) and adapted ctime() to accepts its output.
    - (settings/unitopia) Updated with new version provided by Freaky.
    - (settings/default) Clean up.

14-Nov-2000 (Lars Duening)
    - (strfuns, actions.c, ed.c, efuns.c, interpret.c, object.c, swap.c,
       wiz_list.c) New function xstrncpy() to copy a string up to a certain
         length, but without adding extra 0 padding if the string is shorter
         than the given length.

07-Nov-2000 (Lars Duening)  (3.3.15)
    Included the remaining changes from 3.2.9-dev.237:
    - (efuns.c) object_info(OINFO_MEMORY) also returns the program flags
         NO_SHADOW, NO_CLONE and NO_INHERIT.
    - (pkg-mysql.c) Small bugfix (thanks, Michael!)
    - (settings/forgottendreams) Updated according to Michael.
    - (util/[x]erq/erq.h) Around dev.220 I accidentally broke 
         compatibility with older erq binaries by renumbering the KEEP_HANDLE
         constant - fixed that now. (reported by Coogan)

05-Nov-2000 (Lars Duening)  (3.3.14)
    Included the changes from upcoming 3.2.9-dev.237:
    - (interpret.c) call_resolved() now accepts a destructed object as
         second argument and returns 0 instead of throwing an error.
         (reported by Coogan)
    - (settings/tubmud) 'nosave' is now on by default.

    Included the changes from 3.2.9-dev.236:
    - (interpret.c) When setting up the frame for a function, resolve a
         possible cross-definition first. (b-000616, b-001004)
    - (interpret.c, prolang.y) Right shifts of 32 or more are now properly
         defined.
    - (mapping.c) Adding two mappings of different width throws an error
         (reported by Holger and Fiona). (b-001010)
    - (regexp.c) Added a patch by Marcus Meissner to make regexp more
         compatible with 8-bit characters (thanks!).
    - (simulate, interpret) Moved the catch_instruction() function into
         simulate to keep aggressive optimizers from over-optimizing this
         function. I hope this finally cures the catch() related crashes.
         (thanks, Coogan!) (b-001010-1)
    - (simulate, array.c, call_out.c, comm.c, mapping.c) Callbacks now accept
         protected lvalues as arguments only if they are called just once.
         Reason is that the protectors don't count references: at the first
         return from a callback the lvalue would be freed even though it
         is still needed.
         (b-001002)
    - (main.c) New driver option '--pidfile <filename>' to write the
         pid of the driver into a file (suggested by Freaky).
    - (backend.c) The IGNORE_BANG option to efun input_to() didn't
         work (provided by Casey, thanks!).
    - (pkg-mysql.c) Changed some xalloc()s into pxalloc()s to protect them
         against the GC (provided by Michael Fedrowitz, thanks!).
    - (interpret.c) Cosmetics to the traceback output (thanks, Coogan).
    - (simulate.c) A semicolon was missing (thanks, Christian B.).

13-Sep-2000 (Lars Duening)  (3.3.13)
    - (func_spec, lex.c, closure.c, interpret.c, prolang.y) Added the
         operators '>>>' and its cousin '>>>=' for logical right shifts.
    - (interpret.c) Continued adaption.

11-Sep-2000 (Lars Duening)
    - (configure) Removed no longer used option 'max-log-size' (reported
         by Malcom).

09-Sep-2000 (Lars Duening)  (3.3.12)
    - (simulate.c) Callbacks in efuns like filter() can now take references,
         too (reported by Freaky).

08-Sep-2000 (Lars Duening)
    - (gcollect, heartbeat) Adapted to new string handling.
    - (files.c) Corrected a control flow bug in read_file().
    - (interpret) Began adaptation.

07-Sep-2000 (Lars Duening)  (3.3.11)
    - (simulate, call_out) Due to a flag inversion, call_out() was unable
         to take lvalues as arguments. It also gave the error message
         with an off argument count (reported by Thorsten).
    - (files) Adapted to new string handling.

06-Sep-2000 (Lars Duening)
    - (interpret) The setjmp() for a catch() instruction has been moved into
         its own stack frame and eval_instruction() is called recursively
         on the guarded code. This seems to prevent failures and cores
         when using gcc as compiler, and doesn't hurt on other platforms
         either (reported by Parsec).

05-Sep-2000 (Lars Duening)
    - (xerq/socket.c) A faulty comparison caused the xerq to ignore
         SOCKET_STDERR and send everything on stdout (thanks, Fiona!).

04-Sep-2000 (Lars Duening)  (3.3.10)
    - (mstrings) Added allocation tracing.
    - (func_spec, efuns) Removed obsolete efun extract().
    - (efuns) Adapted to new string handling.

03-Sep-2000 (Lars Duening)
    - (ed.c) Adapted.

01-Sep-2000 (Lars Duening)  (3.3.9)
    - (comm, dumpstat) Adapted to new string handling.
    - (mstrings) Some new functions; strings are now internally terminated
         with '\0' to simply interfacing with normal C library functions.

31-Aug-2000 (Lars Duening)  (3.3.8)
    - (array.c) Completed adaption, also removed obsolete efun member_array().
    - (backend, bitstrings, call_out, closure) Adapted to new string handling.

30-Aug-2000 (Lars Duening)  (3.3.7)
    - (comm.c) The driver did not fully recover from a failed INPUT_CHARMODE
         notification - treating the input as in charmode even after the
         failure. (b-000818)
    - (array.c) Continued adaptation.

29-Aug-2000 (Lars Duening)
    - (interpret.c) When reactivating a destructed master, the function
         applies failed to find static functions, even though all other
         master applies do (thanks, Daniel!)

29-Aug-2000 (Lars Duening)  (3.3.6)
    - (interpret.c, object.c) The applies to valid_seteuid() and valid_trace()
         clobbered the stackpointer (reported by Freaky).
    - (func_spec) The argument definitions for apply() and input_to()
         were incomplete (reported by Freaky).
    - (actions, sent.h) Adapted the actions to use mstrings.
    - (actions, func_spec) Removed the efuns add_verb(), add_xverb(),
         and the historic add_actions(fun) mode.

28-Aug-2000 (Lars Duening)  (3.3.5)
    - (make_func.y) Adapted the creation of stdstrings.[ch].
    - (Makefiles) Adapted.
    - (svalue.h) Modified the definition of svalue_t to use string_t
         instead of char* for strings. Also, the string_type is gone.
    - (hash) Added whashmem() which hashes a memory block of a given
         length.
    - (gcollect.c) Adapted the basic functions to the new stringhandler,
         but not all the places where at the moment normal strings are
         referenced.
    - (efuns.c) Adapted debug_info() to the new string handler.
    - (other files) All uses of T_STRING changed to T_OLD_STRING (which
         of course doesn't exist). This way it's easier to find all
         the places which have to be changed.

28-Aug-2000 (Lars Duening)  (3.3.4)
    - (pkg-mysql.c, configure, Makefile.in) Made the mySQL code work again.
         Additionally the mysqlclient library is now part of the @PKGLIBS@
         template in Makefile.in, so that utils like xerq don't have to
         link it in. (thanks, Michael!)

25-Aug-2000 (Lars Duening)  (3.3.3)
    - (xerq/lookup.c) In the IPv6 lookup, a buffer was freed twice.
         (found by Uwe and Fiona).
    - (pkg-mysql, doc/..., INSTALL) Integrated the mySQL efuns into the
         driver proper. They are activated on suitable hosts with the
         configuration switch 'use-mysql' and, when activated, define
         the macro '__MYSQL__' in LPC programs.
    - (lex.c) Added new LPC defines __VERSION_MAJOR__, ..._MINOR__,
         ..._MICRO__ and ..._PATCH__ do exactly what you expect.
    - (various files) Removed obsolete efuns: file_name(), filter_array(),
         m_sizeof() and map_array(). Removed deprecated efuns:
         allocate_mapping(), efun308(), filter_mapping(), map_mapping()
         and mapping_contains(). They were all just aliases of other efuns
         anyway.

23-Aug-2000 (Lars Duening)  (3.3.2)
    - Forked 3.3 off the 3.2 branch at 3.2.9-dev.227.
    - (bitstrings, files) New files holding the efuns for bitstrings
         and files.
    - (almost all files) Rewrote the codegeneration and -interpretation,
         which has these effects:
           - In func_spec, non-int arguments may be given the type
             'null' if the number 0 is accepted at runtime.
           - The relation between instruction code and prefix byte
             is now defined via a table lookup and not a shift operation.
           - The old prefixes 'escape', 'tefun' and 'vefun' are gone,
             instead we have 'efun0'..'efun4' for efuns with fixed
             argumens, and 'efunv' for vararg efuns.
           - All LPC-related and machine internal instructions are
             encoded without a prefix byte.
           - Almost all efuns are now tabled, drastically reducing
             the size of the switch() in the interpreter.
           - The types of the tabled efuns are checked at runtime
             by the interpreter against the specs in func_spec
             _before_ the tabled efun itself is called. This means
             that the efuns only have to check against illegal
             type combinations and invalid values.
           - New functions to handle argument-type errors were
             introduced, which print the expected and the actual
             type as part of their message.
    - (hosts/msdos) Dropped from the release.
    - (INSTALL) Added compilation notes provided by Bruce (thanks!)
    - (xerq/erq.c) The DEBUG part was missing the data to generate proper
         error messages for RLOOKUPV6 requests (reported by Fiona).
    - And of course I forgot for 3.3.1 to remake all the dependencies *sigh*.

23-Aug-2000 (Lars Duening)  (3.2.9-dev.227)
    - (util/indent/, autoconf/configure.in) The Makefile is now under
        configure control, and I removed a couple of warnings.
    - (util/erq/erq.c) Oops, the check for HAVE_SYS_TIME came before
        machine.h was included, so it couldn't work (reported by Betram
        and Fiona).

22-Aug-2000 (Lars Duening)  (3.2.9-dev.226)
    - (hash, stralloc) Changed a few parameters from 'char*' to 'const char*'.
    - (comm.c, erq, xerq) The IPv6 lookup was totally broken - fixed it.
         (reported by Holger)

20-Aug-2000 (Lars Duening)  (3.2.8-dev.225 == 3.2.8)
    - RELEASE 3.2.8
    - (func_spec, prolang.y) Efun clonep() now accepts 'mixed' arguments.
         (suggested by Fiona)
    - (interpret.c) The salt-handling of efun crypt() is now compatible
         with the md5 passwords of FreeBSDs libscrypt. (thanks, Gerhard!)

15-Aug-2000 (Lars Duening)  (3.2.8-dev.224)
    - (prolang.y) All ranges '[..<op><expr>]' caused the compiler to overwrite
         memory (most of the time the compiled program) because the attributes
         of <expr> weren't promoted up by the <ob>. 
    - (lex.c) '//' comments in the argument list of a function macro at the
         point of use were not ignored and caused syntax errors. It even was
         already a 'TODO' in the lexer... (reported by Croft and Parsec).

14-Aug-2000 (Lars Duening)  (3.2.8-dev.223)
    - (prolang.y) The range '[..-<expr>]' caused the compiler to overwrite
         memory (most of the time the compiled program) because the attributes
         of <expr> weren't promoted up by the '-' (reported by Mammi).
    - (prolang.y) In the expression '++<ident>' the opcode for '++' was
         overwritten if the <ident> required a 2-Byte index. (b-000803,
         b-000810)
    - (comm.c) Looking up hostname first enters the IP address as string
         into the lookup table, to be replaced later by the ERQ. This neatly
         handles unresolved hostnames as well (provided by LynX).
         
11-Aug-2000 (Lars Duening)  (3.2.8-dev.222)
    - (mstrings) Completed the implementation of the string module itself.

10-Aug-2000 (Lars Duening)
    - (func_spec, interpret.c, efuns.c) Efun terminal_colour() can now be used
         with no keyword mapping at all: it then acts as a simple wrapping
         efun.

08-Aug-2000 (Lars Duening)
    - (smalloc.c) Attempts to free a memory block twice are now explicitely
         flagged (when compiling with MALLOC_TRACE).
    - (lex.c) #else and #endif followed by uncommented text raise an error
         only in pedantic mode; otherwise just a warning is generated.
    - (array.c, regexp.c, backend.c) Made the handling of a regexp's memory
         more resistant to errors. Especially an error during a match or the
         first pass of a regexp compilation caused the memory for the last
         regexp compiled being freed unconditionally, even when that last
         regexp was still in use or had been freed already.

04-Aug-2000 (Lars Duening)
    - (lex.c) After an include, the driver did not refill its lex buffer.
         This had bad or even catastrophic results if the include failed
         and the include statement was the last in the lex buffer.
         (reported by Freaky)
    - (lex.c) The preprocessor statements #else, #endif and #define now
         check if they are followed by uncommented text. If yes, the
         former two raise an error (like real C does), if no, the latter
         one raises an error. (reported by Freaky)

01-Aug-2000 (Lars Duening)  (3.2.8-dev.221)
    - (hosts/be/Makefile, .../beyacc) The driver can now be crosscompiled
         on x86 for PPC.
    - (mud/lp-245) Corrected a few simul_efun definitions.
    - (lex.c) '#else' was not recognized if followed by whitespace.
         (reported by Bardioc and Dafire)

30-Jul-2000 (Lars Duening)  (3.2.8-dev.220)
    - (prolang.y)  Redefinition of an inherited function with differing
         arguments was not properly differentiated from a normal redefinition,
         causing the redefined argument information to be lost even with
         #pragma save_types in effect. (reported by Bardioc)
    - (mstrings) First code for an improved string handler.

26-Jul-2000 (Lars Duening)  (3.2.8-dev.219)
    - (lex.c) Preprocessor keywords weren't recognized if they were
         followed by a non-space character (e.g. '# if('). (reported
         by Fiona).
    - (object.c) Saving a mapping to a file wrote unsaveable keys like
         objects as '0' into the savefile, possibly creating multiple
         entries with the same key. As restore_object() didn't expect
         this, svalue were simply overwritten instead of properly freed.
         This lead to memory leaks. Now, non-saveable keys and their
         data are completely excluded from a saved mapping, and the
         restore function is more robust. (part of: b-990429, b-991123-1,
         b-000104)

25-Jul-2000 (Lars Duening)
    - (interpret.c, smalloc.c) Removed two warnings (thanks, Freaky!).

23-Jul-2000 (Lars Duening)  (3.2.8-dev.218)
    - (main.c) The removal of MAX_SMALL_MALLOCED somehow didn't make
         it into the diff.

20-Jul-2000 (Lars Duening)  (3.2.8-dev.217)
    - (regexp.c) Errors in the regular expression leaked the memory
         from temporary buffers (found by Freaky).

18-Jul-2000 (Lars Duening)
    - (smalloc.c, xalloc, main.c, settings/*, configure.in)
         When the system run out of memory in a small block allocation
         during a GC, it tended to crash
         because the interaction of the 'force_more' allocation and  the
         'max_small_malloced' parameter caused the allocator to free the
         reserves, but to never check the freelists. Removing the 
         max_small_malloced parameter and slightly simplifying the
         force_more logic solved the problem. As a side effect, the
         commandline argument '--max-small-malloc' and the corresponding
         configuration parameter are gone.

17-Jul-2000 (Lars Duening)
    - (closure.c, gcollect.c, dumpstat.c, interpret.c, object.c)
         Revisited the places where a NULL object->variables might
         be used. Especially replace_program was suspectible to this.
    - (interpret.c) Efun to_string() now accepts lambda closures
         as well. sprintf() was modified to print the same information
         as to_string() returns. (suggested by Fiona)

06-Jul-2000 (Lars Duening)  (3.2.8-dev.216)
    - (smalloc.c) Removed two warnings (thanks, Freaky!)
    - (lex.c) Improved the display of the error context at line ends
         or end of files.
    - (configure, port, machine.h.in) Ultrix (VAX) doesn't provide
         the strdup() function, so I added a check and a replacement
         function. Ironically, make_func.y already has its own strdup()
         for exactly this reason... (reported by Bruce).

04-Jul-2000 (Lars Duening)  (3.2.8-dev.215)
    - (smalloc.c) Oops, the file didn't compile.

03-Jul-2000 (Lars Duening)  (3.2.8-dev.214)
    - (comm.c) A DEBUG_TELNET statement was at the wrong place, dereferencing
         an uninitialized variable (b-000620).
    - (object.c) Forgot to delete the old ixopen() statement when making
         the change in 3.2.8-dev.210, causing the driver to run out of
         fds because every savefile was opened twice. (b-000630)
    - (smalloc.c) Added more magic words to accomodate the increased
         SMALL_BLOCK_MAX value. In addition, the magic word arrays are
         indexed modulo their size in case SMALL_BLOCK_MAX is increased
         over the size of the arrays again.
    - (interpret.c) Made the VM Stack error messages more informative.
    - (prolang.y) Provided by UNItopia: return type mismatches are by
         default warnings, and in pedantic mode real errors.
    - (Makefile.in) The generated Makefile ended the OBJ definition
         on sane systems with a line ending in a backslash, which the
         Ultrix make doesn't like. (thanks, Bruce!)

01-Jul-2000 (Lars Duening)  (3.2.8-dev.213)
    - (main.c) DEBUG options are printed with --options, too.
    - (object.c) If a savefile can't be opened, the strerror() message
         is included into the error message.
    - (backend.c) If the driver runs out of fds in efun write_file(),
         lex_close() is called only when there is a compilation going
         on (before, it was called on every out-of-fds, which crashed
         the driver if it happend outside of a compile). (reported by
         Freaky)
    - (comm.c) h_telnet_neg() always removed two values from the
         stack, regardless of many actually were there. (b-000625)
    - (interpret.c) The handling of a caught error in catch() has
         been exported in a separate, non-inlineable function to
         thwart overzealous optimizers. (b-000606)
    - (doc/LPC/closure_guide) Clarified the creation of mappings
         using #'([. (b-000217-1)
    - (lex.c) lex_error_context() pays more attention to the end
         of the line buffer and EOF characters - before it blindly
         copied 14 characters after *outp. (b-000518)

29-Jun-2000 (Lars Duening)  (3.2.8-dev.212)
    - (settings/unitopia, doc/efun/count_bits) Small changes.
    - (backend.c) The 'inconsistency in main loop' message is now
         printed onto stdout, too.
    - (main, backend.c) The state check (available when compiled with
         DEBUG) can now be controlled via the commandline option
         '--check-state <lvl>'.

28-Jun-2000 (Lars Duening)  (3.2.8-dev.211)
    - (prolang.y) Removed the shift/reduce conflict in the rules for
         argument definitions: token L_VOID was ambiguous.
    - (prolang.y) The argument type check stumbled over additional
         arguments in a function redefinition. (reported by Bardioc)
    - (interpret.c) Operator += allows to add strings and floats to ints,
         as operator + already does. (reported by Croft)

27-Jun-2000 (Lars Duening)  (3.2.8-dev.210)
    - (closure.c) The lambda block ({ #'return }) was compiled incorrectly:
         a F_RETURN0 was generated, but for the closure compiler the block
         returned void, necessiting the insertion of a default value by
         the surrounding block. The result was a 'Bad stack at F_RETURN' at
         the final F_RETURN[0] of the lambda closure latest,
         e.g. for funcall(lambda(0, ({ #'?, 1, 1, ({ #'return }) }) )).
         (reported by Mat@Maethos)
    - (object.c) Under Cygwin and other MSDOS filesystem systems, the
         savefiles are opened in binary mode. (thanks, Bastian!) (b-000528)

16-Jun-2000 (Lars Duening)
    - (pkg/mysql) Integrated the update to dev.207 (thanks, Malcom!)

14-Jun-2000 (Lars Duening)  (3.2.8-dev.209)
    - (settings/hyperborea) added.
    - (comm.c) The default routine for answering telnet negotiation requests
         forgot to clean up the LPC stack when no hook was defined, thus
         eventually overwriting memory. Since this happened only with
         clients which actually did negotiate options, this bug remained
         undetected for quite some time. (b-000508)
    - (backend.c) Since b-000508 would have been found earlier if the
         LPC stackpointer had been checked for consistency, I reactivated
         the check_state() mechanism in DEBUG mode.
    - (lex.c, prolang.y, interpret.c) Corrected the linecounting in
         combination with inline closures (found by Zora).

12-Jun-2000 (Lars Duening)  (3.2.8-dev.208)
    - (efuns.c) present(object) returned the environment of the object
        found, not the object itself. While traditional, this behaviour
        is rather illogical. (thanks, Freaky!)
    - (several files) Clarified some casts.

04-Jun-2000 (Lars Duening)  (3.2.8-dev.207)
    - (mapping.c) Added a fatal() if the mapping size rises over 0x10000000.
        This is to track down b-000218.

02-Jun-2000 (Lars Duening)
    - (comm.c) Added a number of debug prints to debug the telnet machine.
        The are inactive unless DEBUG_TELNET is defined.

30-May-2000 (Lars Duening)
    - (doc/efun/send_imp) Added a note regarding the handling of errors
        on some machines. (thanks, lynX!)
    - (interpret.c) The driver now prints the last 200 instructions when
        fatal()ing in DEBUG mode. In addition, the trace also lists the
        absolute stack usage together with the already known relative
        usage.

29-May-2000 (Lars Duening)  (3.2.8-dev.206)
    - (stralloc) Small improvements to the CHECK_STRING mechanism. Added
        several diagnostics regarding possible refcount over/underflows.
    - (stralloc) New define 'KEEP_STRINGS' prohibits shared strings
        from being deallocated. While memory intensive, this is a debugging
        measure to locate the 'free string not found' error.

28-May-2000 (Lars Duening)  (3.2.8-dev.205)
    - (configure) Remade with autoconf 2.13

28-May-2000 (Lars Duening)  (3.2.8-dev.204)
    - (prolang.y) Warnings are generated if the redefinition of a function
        loses the 'varargs' attribute (pedantic only), or if the redefinition
        makes an incompatible change to the return type. Assignment type error
        messages are more informative. And the argument type warnings/errors
        are now printed for the correct source line, not the one following the
        function.
    - (ed.c) New command 'M' to strip ^Ms from lineends (thanks, Dafire!)
    - (hosts/be/Makefile) The cross-compiled executable is provided with
        proper resources and file attributes (icons!).
    - (doc/LPC/if) Added.

27-May-2000 (Lars Duening)
    - (prolang.y) Misplaced prototypes are now a warning, not just a debug
        message.

23-May-2000 (Lars Duening)  (3.2.8-dev.203)
    - (comm.c, util/xerq/erq.c) Corrected a type error which caused the
        erq to misinterpret message lengths, resulting in overwriting
        its global variables: Due to a missing sign, the driver did not
        handle a blocking write() operation properly, causing the resend of
        the pending data to start off at the wrong offset. In turn, the
        xerq did not protect itself against invalid message lengths.
        This bug only triggered when the mud tried to sent more data
        to the erq at once than the connection could handle. (Thanks,
        Elric!) (b-000404)

22-May-2000 (Lars Duening)
    - (various files) Cleaned up a couple of documentary files.

22-May-2000 (Lars Duening)  (3.2.8-dev.202)
    - (prolang.y) Whenever a function is redefined, the argument types
         are checked for consistency. If they differ, a warning
         (error in pedantic mode) is issued. The same mechanism compares
         the prototype for a function with its definition.

21-May-2000 (Lars Duening)
    - (smalloc.c) Added a diagnostic to the 'Temporary out of mem'
         situation, because the driver run totally out of mem before
         the usual diagnostic in the allocating code is reached.

20-May-2000 (Lars Duening)
    - (interpret.c) foreach() makes sure that destructed objects are
         removed from arrays. Also, assign_svalue_no_free() assigns 0
         to the destination if the source is a destructed object.

18-May-2000 (Lars Duening)  (3.2.8-dev.201)
    - (lex, prolang.y) Pragma 'pedantic' causes the compiler to treat
         certain warnings as errors. Pragma 'sloppy' (the default
         setting) turns the pedantic behaviour off.
    - (prolang.y, simulate) parse_error(), and with it the master
         lfun log_error() received a flag argument 'warn', which is
         set if the passed message is a warning, not an error.

16-May-2000 (Lars Duening)  (3.2.8-dev.200)
    - (prolang.y) Added functions yywarn() and yywarnf() to print
        warnings during the compile. They act like yyerror() except
        that they don't count up parse errors.
    - (prolang.y) Failure to pass enough arguments to a non-varargs
        simul_efun generates a warning. I'd like to make it an error,
        but then a lot of mudlibs would be unhappy.

14-May-2000 (Lars Duening)  (3.2.8-dev.199)
    - (ed.c) Removed an endless loop in ed_buffer_size().

08-May-2000 (Lars Duening)
    - (func_spec) Efun apply() was still listed with two arguments
        where only one is actually required.
    - (comm.c) Removed a warning.

07-May-2000 (Lars Duening)  (3.2.8-dev.198)
    - (util/xerq/socket.c) In flush_queue(), the loop pointers weren't
        advanced after removing a queue element.
    - (doc/efun/symbol_variable) Clarified the functionality.
    - (interpret.c) Efun apply(), like efun funcall(), just returns
        the first argument if it is not a closure.
    - (func_spec) Efun typeof() can now accepts literal references.
    - (array.c) Efun transpose_array() handles mixed size subarrays
        better.
    - (lex.c, interpret.c, simulate.c, object.c, prolang.y) More tweaks
        to the memory statistic.
    - (stralloc.c) Corrected the memory statistics.

07-May-2000 (Lars Duening)  (3.2.8-dev.197)
    - (smalloc.c, comm.c, simulate.c) Added a few more memory statistics.
        Some memory uses are still unaccounted for, including the memory
        used for mallocated strings.

05-May-2000 (Lars Duening)
    - (smalloc.c, efuns.c) Corrected the smalloc memory stat to count
        and list the wasted memory fragments. Adapted the efun debug_info()
        to return this information. Also safeguarded the dump_malloc_data()
        function against allocations during this function (this lead to
        confusing data).
    - (lex, simulate.c) Added an output of the lexer structures to 'status'.

30-Apr-2000 (Lars Duening)  (3.2.8-dev.196)
    - (actions.c) Corrected the cleanup code in execute_command() to
        handle the situation if the command giver is destructed during
        the command. (b-000207-3)
    - (lex.c) By Matthew Julius: added the preprocessor macros __DIR__
        and __PATH__(). (f-990203-08)
    - (main.c) Corrected a few typos in the help texts.
    - (prolang.y) Corrected the type tracking when compiling the
        '+' operator.
    - (prolang.y) '(void)' is now accepted as empty function argument
        list.

27-Apr-2000 (Lars Duening)
    - (hosts/be) Adapted the BeOS port to R5.

21-Apr-2000 (Lars Duening)  (3.2.8-dev.195)
    - (prolang.y) Added the change required by bison.

20-Apr-2000 (Lars Duening)  (3.2.9-dev.194)
    - (prolang.y) Local variables can now be initialized in the
         definition.
    - (random.c) Another small tweak.

19-Apr-2000 (Lars Duening)  (3.2.8-dev.193)
    - (configure.in, configure) Oops #2, the '--with-malloc' was
         applied wrongly to the config.h
    - (random.c) Improved the handling of large ranges.
    - (gcollect.c) Multiple references to a memblock no longer fatal()
         the driver, but instead print a diagnostic.

18-Apr-2000 (Lars Duening)  (3.2.8-dev.192)
    - (configure.in, configure) Oops, the '--with-malloc' was not
         really applied to the config.h
    - (util/xerq) Added a missing variable initialisation, and corrected
         the num_fd computation for select(). (thanks, Michael!)
    - (settings/forgottendreams) The name of the settings file should
         be used by the file itself, hm?

17-Apr-2000 (Lars Duening)  (3.2.8-dev.191)
    - (random.c) Improved the fitting of the raw random number into
         the given range. The key is not to use the '%' operator, as
         the low-order bits are distressingly non-random. (b-990217-3)
    - (settings/unitopia) Updated.
    - (settings/forgottendreams) Added.
    - (smalloc.c) Increased the max size of a small block to 128 Bytes.
         This value used to crash Unitopia, but probably only because
         the tables weren't fully initialised. This has been corrected,
         and with Unitopia's new system the crash vanished anyway.
    - (array.c, backend.c, closure.c, comm.c, efuns.c, prolang.y, object.c,
       ptrtable.c, simulate.c stralloc.c, strfuns.c, sprintf.c, xalloc.h)
         Removed a number of warnings. (thanks, Freaky!)
    - (util/(x)erq/erq.c) Correct the time_stamp() function.
    - (util/xerq/socket.c) Corrected a type which clobbered the TCP
         functionality. (thanks, Michael!)
    - (pkg/mysql/sql.diff) Updated. (thanks, Michael!)
    - (object.c) Got rid of the fragile 'old_format' variable; instead
         format parse decisions use the read version value directly.
    - (interpret.c) <mapping1> -= <mapping2>  now works for <mapping2>
         of any width, like the normal subtraction already does.

16-Apr-2000 (Lars Duening)  (3.2.8-dev.190)
    - (lotsa files) Improved to 'out of memory' error messages to state
         how much memory was needed for what.

16-Apr-2000 (Lars Duening)  (3.2.8-dev.189)
    - (array.ch, interpret.c) Array sizes are listed verbatim in the
         array structure.
    - (smalloc.c) Small improvements to the aligned allocations.

15-Apr-2000 (Lars Duening)  (3.2.8-dev.188)
    - (doc/driver/codestyle) First version.
    - (xalloc.ch) New 'standardised' memory allocator module: it simply
         includes the source for whatever allocator was selected.
         As a side effect, the makefile no longer needs to know
         which allocator to use - the define moved into config.h .
    - (smalloc.ch, driver.h) Simplified the compilation of smalloc:
         the functions are now compiled as they are, and stubs are
         provided for the emulation of the clib functions if
         possible.
    - (other files) Adapted to the new memory allocator compilation,
         reducing the number of dependencies on MALLOC_smalloc.
         Especially: the GC support is now tied to the macro GC_SUPPORT,
         SMALLOC_(LPC_)TRACE has been renamed to MALLOC_(LPC_)TRACE,
         and array always store their size with the vector structure.
    - (configuration) The selection of the memory allocator can now
         be done with the '--with-malloc=<value>' option of configure.

15-Apr-2000 (Lars Duening)  (3.2.8-dev.187)
    - (prolang.y, exec.h) Extended the bugfix from yesterday so that
         inherited functions are lookup up using a proper breadth search.

14-Apr-2000 (Lars Duening)  (3.2.8-dev.186)
    - (prolang.y, exec.h) The compiler now keeps track which inherits
         happened at the top level. When looking for a ::function() to
         call, it searches until it either finds the function defined
         in a first level inherit, or it takes the first definition 
         found on any other level. (b-000207-4, b-000411-1)
    - (lex.c) Added new pragma 'weak_types' to counter the effects
         of a pragma 'strict_types'. (b-000208-1)

13-Apr-2000 (Lars Duening)  (3.2.8-dev.185)
    - (actions.c) If the notify_fail() is a closure, it is made sure
         that it won't be freed while it is executing (thanks, Gnomi!)
    - (erq, xerq) The time_stamp() tried to use the driver's
         get_current_time() instead of the proper time().
    - (configure.in) Improved the recognition of unsupported
         compiler options.

11-Apr-2000 (Lars Duening)  (3.2.8-dev.184)
    - (comm.c) Corrected an endless loop in lookup_ip_entry()
         (thanks, Freaky!)
    - (hosts/unix.h) When compiling with gcc on Amiga, the
         symbol AMIGA is made undefined.

07-Apr-2000 (Lars Duening)  (3.2.8-dev.183)
    - (gcollect.c) Found another void-function casted to a value, this
         time it's writed().
    - (smalloc.c) Increasing the SMALL_BLOCK_SIZE to 32 caused
         crashes in UNItopia, manifesting themselves in garbage
         stack data. Reduced it back to 8.
    - (settings/eotl) Updated.
    - (object.c) Corrected the versoin detection in restore_object() - 
         the logic was reversed, but happened to work for the
         current generation of savefiles. (Thanks, Casey!)

06-Apr-2000 (Lars Duening)  (3.2.8-dev.182)
    - (gcollect.c) Casting a the void returning function fatal()
         to a value returning function caused the AIX-xlc code
         generator to crash on high optimization levels.
    - (lots of files) Adapted for compilation on AIX 3.4 using xlc.
         Some of these changes may break the adaption previously done
         by Uwe, but now at least I have a base to work from on.

06-Apr-2000 (Lars Duening)  (3.2.8-dev.181)
    - (lex.c, prolang.y, main.c, settings/*, configure)
        The keyword 'nosave' is now optional, controlled by the setting
        parameter 'enable-lpc-nosave'.

05-Apr-2000 (Lars Duening)
    - (closure.c) Forgot to remove two leftover DEBUG printfs
        (thanks, Coogan!).
    - (object.c) Corrected one error message. (thanks, Casey!)
    - (comm.c) Added Lynx' optimization for the iptable[] IP
        address lookup. Main advantage is that it scales better
        to large numbers of users. (thanks!)

04-Apr-2000 (Lars Duening)  (3.2.8-dev.180)
    - (pkg/mysql) Coogan provided the updated source files - thanks!
    - (INSTALL) BeOS: Added a paragraph about the etc/hosts file.
    - (settings/eotl) Added the settings for End of the Line (thanks,
        Casey!).
    - (util/erq, util/xerq) Added timestamps plus nametag to the
        diagnostics of the erq demons.

03-Apr-2000 (Lars Duening)  (3.2.8-dev.179)
    - (array.c) Freaky was correct: sort_array() no longer made a copy
        of the incoming array *Mateese blushes deeply*. (b-000106-3)
    - (sprintf.c) Trailing pad space is not added if a newline
        follows directly afterwards.

02-Apr-2000 (Lars Duening)  (3.2.8-dev.178)
    - (stralloc.c) Increased the hashed length from 20 chars to 100.
    - (smalloc.c) Increased the number of small block sizes from 8
        to 32, that is: the max small block size from 32 to 128 Bytes.
    - (*.h) Removed the leading '_' from the include guards as these
        are reserved for system defines.
    - (interpret.c, prolang.y, swap.c) Removed pointer-mismatches
        (for example char* vs. unsigned char*).
    - (port.c) Implemented time_stamp() using strftime().

30-Mar-2000 (Lars Duening)  (3.2.8-dev.177)
    - (func_spec, prolang.y, lex.c, interpret.c, closure.c, sprintf.c)
        Two new bytecodes F_NX_RANGE/F_RX_RANGE (and their lvalue
        counterparts) implement the constructs [x..] and [<x..]. The
        former solution of abusing other bytecodes when these constructs
        were used in a closure was too unstable. (b-000106-1)

29-Mar-2000 (Lars Duening)
    - (sprintf.c) Change the implementation so that the efun (s)printf()
        are now re-entrant.

27-Mar-2000 (Lars Duening)  (3.2.8-dev.176)
    - (prolang.y) If the declaration of a new local variable in an
        lvalue context (foreach()) shadowed a global identifier, the
        lvalue was computed for the global identifier. And that
        meant random memory accesses! (b-000221-3, b-000105-2)
    - (simulate.c) execute_callback(): if an apply() fails, the
        apply_return_value is now properly set to 0. (b-000113-1)
    - (interpret.c, prolang.c) It is now made sure that no function
        is passed more than 255 arguments (the maximum which can
        be encoded in just one byte). (b-991220)
    - (simulate, smalloc.c) Removed the MALLOC_STAT statistic.

26-Mar-2000 (Lars Duening)  (3.2.8-dev.175)
    - (actions.c) remove_action_sent(): Removed a segfault in the
        DEBUG code (of all things). Thanks, Casey!
    - (sprintf.c) (s)printf() didn't add padding if no
        data was following the format field. This is probably a space-
        saving feature, but seriously hinders some formatting tasks.
        (b-000228, b-000306-5)
    - (closure.c) symbol_efun(), and with it efun symbol_function(),
        didn't know about #'foreach. Oops. (b-000228-3)
    - (closure.c) compile_value(): #'++ was accidentally compiled
        as #'--. (b-000228-4)
    - (lex.c) The variable pragma_no_shadow wasn't initialized
        before a new compile. (b-000103)

25-Mar-2000 (Lars Duening)
    - (prolang.y) Added two %type statements which allow the use of
        bison instead of byacc. (p-000205)
    - (efuns.c) Efun terminal_colour() didn't handle well the combination
        of indentation and forced wrapping in the middle of a word.
        (b-000217-2)
    - (main.c, simulate.c) Added a 'vdebug_message()' as companion to
        'debug_message()', taking a va_list argument instead of the
        printf() style varargs. It's needed for a proper implementation
        of fatal() (I'm amazed that it didn't crash earlier).

23-Mar-2000 (Lars Duening)  (3.2.8-dev.174)
    - (object.c) restore_value()/restore_object() modify the value
        string, which is desastrous if it's a volatile or shared
        string. (b-000212-1)
    - (doc/efun/strstr) Documented the negative start indices. (b-000106-2)
    - (doc/efun/sort_array) Made clear that the argument array
        is sorted in-place. (b-000106-3)

22-Mar-2000 (Lars Duening)  (3.2.8-dev.173)
    - (interpret.c) call_others on arrays crashed with empty arrays,
        and failed to handle 0s gracefully. The crasher was caused
        by a premature optimization of the algorithm... (b-000221).
    - (closure.c) Compiling a #'foreach, <sym-array> construct didn't
        check if the sym-array is non-empty (b-000228-2).

21-Mar-2000 (Lars Duening)  (3.2.8-dev.172)
    - (actions.c) When execute_command() called privilege_violation4(),
        it passed sp+1 instead of sp as the stackpointer to use. This
        lead inter_sp pointing to an uninitialized stack entry if the
        privilege was denied, causing a fandango on the core. (b-000110-2)
    - (interpret.c) set_bit(), clear_bit(), test_bit() did not check
        if the given bit number might be negative. (b-000112)

20-Mar-2000 (Lars Duening)  (3.2.8-dev.171)
    - (actions.c) Revisited the 64-Bit issue and removed all casts.
    - (actions.c, mudlib/sys/commands.h, doc/efun/add_action)
        Corrected the behaviour of add_action() so that it is backwards
        compatible again. Added symbolic defines for the flags accepted
        by add_action(). Improved the manpage to include examples of how
        the flags affect the command parsing. (thanks, Freaky!) (b-991230)

10-Mar-2000 (Lars Duening)  (3.2.8-dev.170)
    - (actions.c) Corrected a possible 64-Bit issue: a cast from (p_int)
         down to (int) might have lost bits while handling an address.
    - (prolang.y, lex.c) The modifier 'nosave' for variables takes
         over the meaning of 'static' - the latter is still recognized
         for variables, but its use is deprecated. Similar, 'nosave'
         should be used instead of 'static' as inheritance 
         modifier.

09-Mar-2000 (Lars Duening)  (3.2.8-dev.169)
    - (lex.c) Added the name of the macro to certain error messages
         issued during expansion. This also required a new function
         lexerrorf() with obvious purpose.

06-Mar-2000 (Lars Duening)  (3.2.8-dev.168)
    - (doc/efun/closure_guide) Removed Tubmud'isms.
    - (bugs/...) New bug reports, and the EotL patches.

04-Mar-2000 (Lars Duening)  (3.2.8-dev.167)
    - (interpret.c, doc/efun/tell_room) Doc corrections.
    - (interpret.c) f_traceprefix called master::valid_trace() with
        "trace" instead of "traceprefix".
    - (doc/efun/call_out) Corrections.
    - (bugs/...) Added all the bug reports since .164.

01-Mar-2000 (Lars Duening)  (3.2.8-dev.166)
    - (make_func.y, exec.h, backend.c, parse.c) Removed warnings.

01-Mar-2000 (Lars Duening)  (3.2.8-dev.165)
    - All the prvious changes since .141 are back under PRCS control.
    - (hosts/be/Makefile) The dependencies on generated files
         like stdstrings.h are now generated automatically as well
         (requires MkDepend 1.6).

17-Dec-1999 (Lars Duening)  (3.2.8-dev.164)
    - (mapping.c) The callbacks for map(mapping) and filter(mapping)
         were told about more arguments than actually existing on
         the stack. Very stupid, but it took the Evermore lib to
         find this one. (thanks, Bardioc!)

16-Dec-1999 (Lars Duening)  (3.2.8-dev.163)
    - (simulate.c) And of course the difference between toplevel and
         normal callbacks also includes the current_object :-(
    - (prolang.y) Typechecking for pre-increment/decrement on indexed
         values stumbled over mixed arrays. (thanks, DiEHARD).

15-Dec-1999 (Lars Duening)
    - (comm.c) Recognition of a quoted IAC in the input forgot to
         change the state back to TS_DATA.
    - (simulate.c) Freeing callbacks with just one arg used the wrong
         pointer and crashed. (thanks, Freaky!)
    - (simulate, array.c, comm.c, call_out.c, mapping.c) Argh - I
         have to distinguish if a callback is called from the toplevel
         (current_prog is invalid) or from a program (current_prog is
         valid). (thanks, Freaky!)

14-Dec-1999 (Lars Duening)  (3.2.8-dev.162)
    - (pkg/mysql) Corrected a number of crashers (thanks, Bastian!)
         and added the HOWTO by Karm.
    - (actions.c) The recent changes activated a bit of legacy code,
         which started passing the verb as part of the argument string
         to NO_SPACE commands. *sigh* (thanks, Daryth!)
    - (simulate, call_out.c, comm.c) The callbacks can now accept
         lvalues as arguments.
         Also the index returned for faulty arguments was one too
         high. (thanks, Zwirch!)
    - (array.c) If setting up an efun callback generates an argument
         error, the proper, lower stack pointer is returned. (thanks,
         Zwirch)
    - (interpret.c) apply() on efun-, sefun- and operator-closures
         didn't properly check the number of arguments. This wasn't
         detected earlier because the related code has hardly ever
         been executed. (thanks, Zwirch!)
    - (comm.c) The driver telnet negotiations understands quoted
         IACs now. (thanks, Amylaar!)

13-Dec-1999 (Lars Duening)
    - (func_spec, array.c) Efun map() can now map an array through
         a mapping; similar to how filter() works.
    - (prolang.y) Indexing [..x] and [..<x] are allowed as short form
         of [0..x] and [0..<x]. (f-990419)
    - (prolang.y) Moved the parsing and compilation of the various indexing
         forms into two dedicated rules - this greatly simplified all
         the other rules which involve indexing (yes: for once a file
         became shorter :-).
    - (func_spec, prolang.y, interpret.c, closure.c, sprintf.c) The
         ranges [x..] and [<x..] are now mapped onto [x..<1] resp. [<x..<1];
         this removes the need for F_EXTRACT2 for everything but the
         efun extract(). F_(PROTECTED_)EXTRACT_LVALUE are gone, too.
    - (sprintf.c) Made '%O' a bit more knowledgable about the various
         lvalues, but without the interpret.c-internal datastructures
         the printed data is just an approximation.

12-Dec-1999 (Lars Duening)  (3.2.8-dev.161)
    - (array, interpret) Removed a few compilation problems.
    - (ed.c) If a file can't be read on editor start, the full
         message is printed.

12-Dec-1999 (Lars Duening)  (3.2.8-dev.160)
    - (array, simulate, mapping, interpret.c) Modified the map_() and
         filter_() efuns, also sort_array() and walk_mapping(), to use
         the recently introduced callback_t for their implementation.
         This not only simplified the code (especially in array.c), but
         also introduces a standard way how callbacks are specified in
         such efuns.

11-Dec-1999 (Lars Duening)
    - (actions.c, sent.h) Implemented the "short verb" usage of
         efun add_action().
    - (sent.h, ed) Completed the documentation of sentences.
    - (sent.h, comm, simulate, other files) The interactive_t is no longer
         a subclass of shadow_t; instead the latter now acts as generic
         "attribute" sentence for an object, linking to an independent
         interactive_t for interactive users. This makes handling interactive
         connections somewhat simpler.

10-Dec-1999 (Lars Duening)
    - (actions, gcollect.c) The garbage collector did not trace the
         globals of actions.c under the faulty impression that they are
         valid only during a command execution. However, e.g. notify_fail()
         can be used outside of a command, which led to used memory being
         deallocated in the GC. From there, the damage continued to spread.
         (at least part of b-991123-1)
    - (doc/LPC/functions) Rewritten to cover all the new features introduced
         since LPmud 2.4.5.
    - (interpret.c) Added check for stack overflow in the eval loop - code
         like funcall(lambda(0, ({ #'({ })+({1})*10000)) could otherwise
         easily crash the driver. (thanks, Zwirch!)

09-Dec-1999 (Lars Duening)
    - (Makefile.in, hosts/*/Makefiles) The manual dependencies for instrs.h
         were out of date. (reported by Freaky and Anders - thanks!)
    - (port.c) The current time_stamp() implementation omitted leading
         zeroes in the day field. (thanks, Freaky!)

08-Dec-1999 (Lars Duening)  (3.2.8-dev.159)
    - (closure, gcollect.c, interpret.c) The closure compile did not
         handle lambdas with more than 254 constants properly: the
         number of values was consistently stored in the wrong place.
         A classic off-by-one, caused by the indexing from the end.
         (thanks, Zora!)

07-Dec-1999 (Lars Duening)
    - (pkg/mysql/) Small corrections.

06-Dec-1999 (Lars Duening)
    - (mud/lp-245/obj/master.c, .../simul_efun.c) valid_write() and
         valid_snoop() didn't work well with plain drivers due to the
         reliance on file_name(). The master now has its own file_name().
         (thanks, Andy!)
    - (string_spec, make_func.y, Makefiles, sources) Tired of updated
         stralloc.* in three places for every change in the common
         strings table, I now define all these strings in string_spec
         and modified make_func to generate stdstrings.[ch] from these.
    - (interpret.c) Efun get_type_info(cl, 2) did not return the
         object for closure <cl> if <cl> was a lambda or bound lambda.
         (thanks, Freaky!)

05-Dec-1999 (Lars Duening)
    - (interpret.c, comm.c, simulate.c, object.c) Cosmetics.
    - (settings/dt2, mud/dt2/...) Created the Deeper Trouble II adaption
         from the old 3.2.1@141 diffs. It compiles and seems to work,
         but without the mudlib I can't tell for sure.

03-Dec-1999 (Lars Duening)  (3.2.8-dev.158)
    - (interpret.c) Efun query_input_pending() deref'd the wrong object,
         causing a nice crash. (thanks, Michael!)

01-Dec-1999 (Lars Duening)
    - (doc/efun/inherit_file) Corrected typos (thanks, Freaky!).
    - (doc/efun/[]) Accidentally got lost in the last snapshot.
    - (interpret.c) Removed a sneaky memory leak in transfer_pointer_range().
         (thanks, Michael!)
    - (func_spec) Efun functionlist() was specified to return "string*"
         instead of the correct "mixed*". (thanks, Freaky!)
    - (interpret.c) Improved the error messages of F_MAP_INDEX.

29-Nov-1999 (Lars Duening)
    - (func_spec, comm) New efun "set_combine_charset()" to combine
         characters received in charmode into strings. (f-991126-0)
    - (func_spec, comm.c) Efun "set_connection_charset()" now also
         accepts a string as charset specificator.

27-Nov-1999 (Lars Duening)  (3.2.8-dev.157)
    - (port.h) A tentative change of VAR_PROT() and VARPROT() for AIX.
    - (prolang.h, prolang.y) struct s_lrvalue is now defined twice in
         prolang.y, to be able to cope with a wider variety of yaccs
         (especially the AIX yacc).
    - (util/xerq/(erq.c, socket.c)) Forgot to change two "struct queue_s"
         to "struct equeue_s".
    - (stralloc.c) string_dinfo_data() used an uninitialized variable.

26-Nov-1999 (Lars Duening)
    - (stralloc, gcollect.c, main, backend.c, Makefiles) When compiling
         with DEBUG and CHECK_STRINGS: The structures of the shared
         string table are shadows in a second table, and every string
         access checks the consistency of the structures. Additionally,
         with the commandline option "--check-strings" the whole string
         table is checked with every backend cycle.

25-Nov-1999 (Lars Duening)
    The following three changes should correct b-990430, which might have
    caused b-991123-0 and b-991123-1 in turn.
    - (comm.c) When accepting a line of non-negotiation text in charmode,
         interactive_t.tn_start became negative after the second char.
         Similar if an error occured during a very long line - here
         set_noecho() used wrong indices.
    - (comm.c) Charmode: when a client sent single CRs and there were no
         negotiations on the same line, the CR was re-read (almost)
         endlessly.
    - (comm.c) Should the telnet machine receive too much data, the program
         now makes sure that .command_end won't fall under .tn_start resp.
         .command_start.

24-Nov-1999 (Lars Duening)
    - (main.c) Commandline option "--check-refcounts" was mistakenly
         marked to accept a value.

23-Nov-1999 (Lars Duening)
    - (actions.c, backend.c, call_out.c, comm.c, ed.c, gcollect.c,
       interpret.c, lex.c, main.c, mapping.c, object.c, prolang.y,
       simul_efun.c, simulate.c, stralloc.c, swap.c, wiz_list.c)
         Added the timestamp to the diagnostics. error() and fatal()
         calls automatically log the timestamp. The whole situation
         of what is logged where when is still a mess :-(
    - (comm.c) Ups, call_function_interactive() forgot to remove
         its (stack located) error recovery context from the context
         stack. And it hid the leading "!" when falling through to
         IGNORE_BANG handlers. (thanks, Freaky!)
    - (prolang.y, stralloc) New master-apply "inherit_file()" to check
         and generated the full filename from an inherit statement.
         (suggested by Freaky) (f-990323-0)
    - (interpret.c) free_interpreter_temporaries() now also removes
         all destructed objects from the code trace (obviously only
         when compiled with TRACE_CODE). Since this function is called
         only from the GC, it has no further sideeffects.

22-Nov-1999 (Lars Duening)
    - (sprintf.c) sprintf("%O", object) in plain mode prints the object
         name with a leading "/". (thanks, Freaky!)
    - (lex.c) Master apply include_file() now receives the object filename
         in !compat with a leading slash; of the result, leading slashes
         are ignored. Also removed a typo. (thanks, Freaky!)
    - (simulate.c) Efun limited() did not give the closure the full
         amount of eval ticks are requested in the call. (thanks, Freaky!)
    - (mapping.c) Corrected the error handling in filter_mapping() and
         map_mapping(), which are used for the filter()/filter_indices()
         efuns and their map_() counterparts. (thanks, Robert!)
    - (port) New function time_stamp() for use in the creation of
         error and driver log messages.

21-Nov-1999 (Lars Duening)
    - (simulate, gcollect.c, comm, call_out.c) Introduced the "callback"
         structure, to be used for input_to()s and call_out()s. call_out.c
         became really simple :-)

20-Nov-1999 (Lars Duening)
    - (autoconf/configure.in, configure, port.h) Small tweaks.
    - (interpret.c) Correction to sort_array(): the GET_NUM_ARG occured
         too late.

19-Nov-1999 (Lars Duening)  (3.2.8-dev.156)
    - (efuns.c, simulate.c, swap) Added new debug_info() request DINFO_DATA:
         DID_SWAP to retrieve the data usually printed as "status swap".
    - (efuns.c, smalloc) Added new debug_info() request DINFO_DATA:
         DID_MEMORY to retrieve the data usually printed as "status malloc".
    - (typedefs.h) Just a definition of strbuf_t was missing.

18-Nov-1999 (Lars Duening)
    - (comm.c, autoconf/configure.in, autoconf/acconfig.h, machine.h.in)
         Added tests if F_SETOWN and SO_OOBINLINE are actually supported
         by the operating system.
    - (port.c, autoconf/configure.in, config.h.in, settings/{default,osb})
         Added the configuration option USE_SYSTEM_CRYPT. This solves
         the problem for OSB that the existing password files which have
         been created with IRIX' crypt() are invalid under HP-UX's crypt().
    - (efuns.c, simulate, otable, call_out, heartbeat, stralloc, rxcache)
         Added new debug_info() requests DINFO_DATA, and implemented
         the first sub-request DID_STATUS.

17-Nov-1999 (Lars Duening)
    - (make_func.y, lex.c, efuns.c, util/xerq) Removed a few warnings when
         compiling under Solaris (some remain and are caused by the
         system headers); also changed the queue_t type in xerq to equeue_t
         because of a clash with the Solaris queue_t type.
    - (port.h, autoconf/configure.in, autoconf/acconfig.h, machine.h.in)
         Added a test for ssize_t.
    - (erq.c, xerq/lookup.c) Added two fixes provided by Uwe (thanks!).

16-Nov-1999 (Lars Duening)
    - (comm.c, settings/osb) Removed a few warnings when compiling under
         HP-UX; and the normal erq still doesn't compile there (but xerq
         does).
    - (func_spec, array, interpret.c) The efun sort_array() now accepts
         extra arguments to be passed to the comparison function.
         (suggested by Robert from Unholy Lands).

15-Nov-1999 (Lars Duening)
    - (strfuns.h) Changed "ulong" to "u_long", which should be the
         standard.
    - (mempools) Added an include of <sys/types.h> for ssize_t.
    - (settings/tubmud) Corrected some settings from "<foo>=<value>"
         to the correct "with_<foo>=<value>". (thanks, Coogan!)
    - (interpret.c) When apply() expanded an array, it didn't check
         the elements for destructed objects. (thanks, Coogan!)
    - (interpret.c) Before calling a vefun, inter_sp and inter_pc
         are updated. (thanks, Michael!)
    - (lex.c) Corrected an off-by-one error in the linenumbers
         of an inline closure. (thanks, Michael!)
    - (array.c, efuns.c, exec.h, interpret.c, prolang.y) The various
         inherit types are now distinguished by a proper "inherit_type"
         field in the inherit_t structure; as opposed to the former
         "is_extra" flag. (provided by Michael)

14-Nov-1999 (Lars Duening)
    - (smalloc.c) Added first hooks for use of madvise().
    - (mud/anders) Added the diffs and extra files for the patched
         3.2.1@141 driver of Deeper Trouble 2.
    - (interpret.c) A return from within a foreach() crashed because
         foreach's hidden "variables" messed up the stack check
         in F_RETURN. (thanks, Bardioc!)

11-Nov-1999 (Lars Duening)  (3.2.8-dev.155)
    - (prolang.y, interpret.c, strfuns, make_func.y) The operators "&"
         and "-" (and their assignment variants "&=" and "-=") may now
         be applied on strings.
    - (comm.c) Arguments passed to an input_to() haven't been checked
         for destructed objects. (thanks, Anders!)
    - (lex.c, stralloc) News master apply include_file() to generate
         the full pathnames of files specified in #include directives.

10-Nov-1999 (Lars Duening)
    - (mud/sticklib/) Updated the diff files.

09-Nov-1999 (Lars Duening)
    - (bugs/p-990901) Updated the catch_no_log() patch. (thanks, Michael!)
    - (array.c) unique_array() on an empty array crashed. (thanks, Ralph!)

08-Nov-1999 (Lars Duening)
    - (simulate.c) Oops, "rename_to" has been written "rename_tp".
         (thanks, Elric!)
    - (gcollect.c) Added some DEBUG: printfs to check if the objects
         are counted properly.
    - (prolang.y) "*"::foo() now succeeds if at least one inherited
         object contains this function.
    - (prolang.y) The name table in get_type_name() was still incorrect.
         (thanks, Michael!)

07-Nov-1999 (Lars Duening)
    - (settings/default, unitopia) Updated the unitopia settings, and
         commented the max. hashtable values.
    - (object.c, closure.c, parse.c, sprintf.c) Removed a couple of compiler
         warnings.
    - (prolang.y, closure.c, switch.h) Removed a memory leak in the
         compilation of top-level switch() statements.

05-Nov-1999 (Lars Duening)  (3.2.8-dev.154)
    - (regexp.c) In one place, FALSE was returned instead of TRUE,
         making regexp()/regreplace() unfunctional (thanks, Zwirch!).
    - (main, gcollect.c) writex() renamed to write_x() to avoid
         a clash with AIX' writex().
    - (prolang) Some more AIX adaptions: struct s_lrvalue has to
         be defined after the rules (to be precise: after %union),
         and yyerrorf() has to use VAR_PROT() in the prototype.
    - (pkg/mysql) Added new efun db_handles() (provided by Karm).
    - (strfuns.h, smalloc.c) Added the necessary changes to compile
         under FreeBSD (thanks, Elric!).
    - (configure.in, configure) Took out the test for "-xO2" and "-xO4".
         It gave wrong results under FreeBSD, and doesn't seem to be useful
         anyway.

04-Nov-1999 (Lars Duening)
    - (configure) Updated it with the script created on Solaris
         from the configure.in.
    - (mudlib/dhrystone.c) Added Hyp's Dhrystone implementation for
         test purposes (486/33MHz/Cygwin: 6.7 Dhry/s).
    - (port, main.c) Cygwin's rusage() only returns 0s, so I replaced
         it with the simulation also used for Amiga - this way we
         at least get some time information.
    - (prolang.y) "#'f == string" crashed on printing an error message
         due to a lacking typename for the #'symbol.
    - (closure.c) Numbers bigger than 255 in closures weren't compiled.

03-Nov-1999 (Lars Duening)
    - (doc/LPC/foreach) Improved the documentation a bit.
    - (make_func.y) Since Solaris doesn't know stricmp() either, and
         since on Cygwin it is just a define to strcasecmp(), I just
         changed my two uses of stricmp() to strcasecmp().

02-Nov-1999 (Lars Duening)
    - (prolang.y) Added "foreach(x in y)" as alternative to
         "foreach(x : y)" - without making "in" a reserved word.
    - (interpret.c) When confronted with negative starting offsets,
         strstr() returned invalid results.

01-Nov-1999 (Lars Duening)  (3.2.8-dev.153)
    - (efuns.c) terminal_colour() stumbled over strings starting with
         a keyword.
    - (closure.c) The branch-rewriting was broken in @142 - using an
         invalidated variable, and rewriting only two of three branch
         types weren't good ideas at all.
    - (lex.c, prolang.y) Replaced the 'in' keyword in foreach()
         by ':' - mudlibs already use 'in' as variable name :-(

31-Oct-1999 (Lars Duening)
    - (erq.c) Small fix in the IPv6 rlookup, provided by Uwe.
    - (prolang.y) Cleaned up the lvalue rules for variables a bit, and
         also removed the "dangling else" shift/reduce conflict.
    - (func_spec, lex.c, prolang.y, interpret.c, closure.c) Implemented
         the foreach() loop construct. (f-981229-18)

29-Oct-1999 (Lars Duening)
    - (closure.c) An include of stddef.h was missing here, too.
    - (backend.c) In non-DEBUG mode, the interactive player wasn't set
         in the backend loop. (thanks, Heiko!)
    - (lex, prolang.y, simulate.c, exec.h) New program flag P_NO_SHADOW,
         set by the new #pragma no_shadow, disables shadowing for a
         program (suggested by Holger).
    - (efuns.c) Efuns debug_info()/object_info(), xINFO_MEMORY: also print
         resp. return the datasize of the object. (suggested by Freaky)
    - (sprintf.c) Multiples of 10 were printed without the leading digit.
    - (simulate.c) Efun rename(): the two valid_write() calls are now passed
         the operation codes "rename_from" and "rename_to" instead of
         "do_rename" twice. (suggested by Freaky)
    - (interpret.c, func_spec) call_other() now accepts arrays of objects
         and returns the call results in another array.
 
28-Oct-1999 (Lars Duening)
    - (settings/evermore) Added.
    - (make_func.y) Linux doesn't know stricmp(), but strcasecmp(). Added
         ad-hoc define for that.
    - (swap.c) Added missing include stddef.h.
    - (Makefile.in) The high WARN setting for gcc defined -Wno-parentheses
         instead of -Wparentheses.
    - (doc/LPC/pragma) The pragmas no_clone and no_inherit weren't
         documented.
    - (smalloc.h, interpret.c) Added braces around ambigouous if-elses.
    - (exec.h, prolang.y, lex.c, interpret.c) Runtime errors within inline
         closures were reported with wrong line numbers. Reason is that
         the normal store_line_number_info() expects line numbers to
         increase and therefore ignore the #line directives used with
         inline closures. Solution was to add a new LI_BACK linenumber
         code plus creation function to decrement the current line counter.
         (thanks, Zwirch!)

27-Oct-1999 (Lars Duening)  (3.2.8-dev.152)
    - (xerq/erq.c) The global variable "sockets" was not initialized.

26-Oct-1999 (Lars Duening)
    - (interpret.c) In call_lambda(): moved the checks for destructed
         objects to the beginning.
    - (comm.c) If after an ERQ call back the object is found to be
         destructed, the callback is removed even if the ERQ sent
         a KEEP_HANDLE reply.
    - (regexp, rxcache, array.c, backend.c, ed) Regular expressions
         used from outside ed() throw errors instead of printing
         error messages. (b-990523)
    - (actions, func_spec) Efuns query_notify_fail(), command_stack():
         the information, which object did the last notify_fail(), is
         now stored and accessible. (f-990217-2)
    - (access_check.c, lex.c, smalloc.c, wiz_list.c, hosts/amiga/dice30.diff)
         Just for fun, and because most of the changes had been done already:
         applied the remaining Amiga-diffs to the main sources.

25-Oct-1999 (Lars Duening)
    - (lex.c) Newlines in strings in (: :) closures are recognized
         and rejected. (thanks, Zwirch!)

24-Oct-1999 (Lars Duening)
    Only two months until Christmas!
    - (pkg/mysql) Added the mySQL support provided by Karm (thanks!).

22-Oct-1999 (Lars Duening)
    - (lex.c) Includes caused an offset-by-one for the linenumbers.
    - (comm, gcollect.c, interpret.c) input_to()s now accept closures
         for functions. (f-981229-21)
    - (prolang.y) Improved the ->() operator: the function name may be
         the same as a local variable, may be a string given as "ident"
         or a string expression given as (<expr>). (b-991019-0, f-990510,
         f-990605)
    - (prolang.y, stralloc) ->() again: a call_other() simul-efun is
         recognized.
    - (exec.h) Removed TYPE_SPACE and TYPE_TERM - nothing used them.

21-Oct-1999 (Lars Duening)  (3.2.8-dev.151)
    - (prolang.y) If an object is inherited virtually multiple times,
         a wildcarded super call ("*::") calls it only once. (b-990217-0)

20-Oct-1999 (Lars Duening)
    - (prolang.y) In virtual inherits, the check for duplicate virtual
         functions forgot the take the virtuality of the duplicate into
         account. (part of b-981208-3)
    - (prolang.y) A virtual inherit is ignored if the program in question
         has been inherited virtually before. (part of b-981208-3)
    - (prolang.y, interpret.c) Simulefun may now take "varargs" type
         arguments (e.g. 'x (varargs mixed arg)'). (b-990113-0)

19-Oct-1999 (Lars Duening)
   Worked through a handfull of reports submitted by Rodney.
    - (doc/efun/say) Clarified the exclusion rules.
    - (interpret.c) Efun printf(): prints to NPCs are now sent to
         catch_tell().
    - (efuns.c) Prompt-closures are protected against premature
         deletion when replaced while they are executing.
    - (svalue.h, interpret.c, prolang.y) New macro addref_closure() to easily
         increment the refcount of a closure-svalue.

13-Oct-1999 (Lars Duening)
    - (efuns.c) Efun terminal_colour(): when, during a wrap, spaces were
        removed from a string, this fact was not considered in the
        memory-access sanity checks. (b-991012-1)

12-Oct-1999 (Lars Duening)
    - (comm.c) Added another IPv6 patch. (thanks, Uwe!)
    - (erq, xerq) Added the ERQ_RLOOKUPV6 request supplied by Uwe (thanks!).

07-Oct-1999 (Lars Duening)
    - (comm, backend.c, gcollect.c) input_to() are now be nested when
         a command is executed from within an input_to(). This is not
         a real stacked input system as outlined in f-990721-0.

06-Oct-1999 (Lars Duening)
    - (swap.c) Corrected a small, but fatal omission of a cast.

05-Oct-1999 (Lars Duening)  (3.2.8-dev.150)
    - (efuns.c) Straightened the key recognition in efun terminal_colour().
    - (object) Added member object_t.load_id to be able to distinguish between
         objects created at the same time.
    - (func_spec, efuns) New efun clones() to find the clones of an object.
         (f-990203-00, f-990203-26)

04-Oct-1999 (Lars Duening)
    - (make_func.y) %tefuns specified with 'void' parameters are
         now recognized as vefuns. (b-990320-0)
    - (make_func.y, comm.c, ed.c, lex.c, main.c, simulate.c, swap.c)
         Use of MAXPATHLEN verified.
    - (prolang.y) Implemented '++<map>[<x>,<y>]'. (b-990204-1)
    - (func_spec, object) New efuns save_value() and restore_value()
         to encode/decode values in strings. (f-981229-19)
    - (func_spec, object) Extended the efuns save_object() and
         restore_object() to save and restore directly to and from
         a string. Maybe this should be put into separate efuns?
         (f-990203-25)

03-Oct-1999 (Lars Duening)  (3.2.8-dev.149)
    - (util/xerq) Commented and beautified - now that was a nice
         program to work on. I left the docs/ and lpc/ files alone,
         for the moment, though.
    - (prolang.y) The dummy code created for undefined functions was
         not aligned even with ALIGN_FUNCTIONS - the other reason
         for the crash in functionlist(). (b-990819-0, see
         26-Sep-99 as well)

02-Oct-1999 (Lars Duening)
    - (doc/util/erq, util/erq) Commented and beautified the erq a bit.
         There could be done more, but I really know better things
         to do. But note that somebody (probably the folks at TubMud)
         has added the socket requests to the erq. (b-981212)

01-Oct-1999 (Lars Duening)
    - (simulate, smalloc) Added a malloc statistic, which is dumped
         into the file MALLOCSTAT with the special command "status mstat".
    - (util/overhead.c) Commented.
    - (util/fundesc.c, util/make_docs/) Removed - these were programs
         for the original LPmud environment.

30-Sep-1999 (Lars Duening)  (3.2.8-dev.148)
    - (func_spec, simulate) New efun copy_file().
    - (smalloc) Commented and beautified.

29-Sep-1999 (Lars Duening)
    - (simulate, efuns, other files) Commented and beautified simulate.c;
         moved and removed several pieces of code which didn't belong
         there.
    - (prolang.y) The compiler thought, "int * string" yields int - a
         really silly typo (thanks, Michael!).

28-Sep-1999 (Lars Duening)
    - (exec.h, closure.c, interpret.c, object.c, simul_efun.c, prolang.y)
         Changed FUNCTION_NAME into FUNCTION_NAMEP to make sure
         people (like me) don't use it directly (alignment!).
    - (array.c) Corrected a mis-use of FUNCTION_NAME() which could lead
         to Bus Errors due to misaligned data accesses (thanks, Sunblood!)
          (b-990819-0, but see 03-Oct-99 as well)
    - (sprintf) Commented, beautified, and two changes: formatting erros
         now throw an error(), and recursive arrays/mappings are recognized.

27-Sep-1999 (Lars Duening)
    - (swap) Commented and beautified.
    - (stralloc) Commented and beautified.

26-Sep-1999 (Lars Duening)  (3.2.8-dev.147)
    - (simul_efun) Commented and beautified.
    - (wiz_list) Commented and beautified.

25-Sep-1999 (Lars Duening)
    - (interpret.c) Corrected a nasty crasher in the multiplication of
         arrays of malloced strings (thanks, Michael!).
    - (regexp) Beautified it, but didn't add many comments.

24-Sep-1999 (Lars Duening)  (3.2.8-dev.146)
    - (prolang.y, lex.c, closure.c) Added #'parse_command.
    - (prolang.y) Corrected a rare problem with the code generated
         for '&(expr[x])' and '&(expr[<x])'.
    - (prolang.y, lex, make_func, lotsa files) Finally: the lexer/compiler
         tokens no longer double as machine instructions. Not only this
         simplifies include dependencies, it also gets rid of that
         dreadful F_OFFSET (and '%instrs' is gone again, too).
         *Lars bounces happily*.
    - (make_func.y, Makefile) make_func now takes arguments determining
         what to create. This greatly reduces compile times after changes
         to the LPC compiler. See the source of make_func.y for more details.

23-Sep-1999 (Lars Duening)
    - (prolang.y, exec.h, svalue.h) Commented and beautified the compiler.

21-Sep-1999 (Lars Duening)
    - (array.c, doc/efun/functionlist) Clarified that efun functionlist() does
         not load objects from a name, and improved the error message
         for this case.

20-Sep-1999 (Lars Duening)
    - (make_func.y) Added the numeric bytecodes to the created efun_defs.c
         and intrs.h - helps with debugging sometimes.
    - (make_func.y, func_spec, prolang.h, closure.c, dumpstat.c efuns.c,
       gcollect.c, lex.c, array.c, interpret.c, swap.c, simul_efun.c,
       sprintf.c)
         Added a new func_spec-type '%instrs' to distinguish the instructions
         used as tokens from those which aren't. This allows less files
         to depend on lang.h .

19-Sep-1999 (Lars Duening)  (3.2.8-dev.145)
    - (parse.c, doc/efun/parse_command) Commented and ansified.
    - (parse_old.c) Beautified, but only sparsely commented.

18-Sep-1999 (Lars Duening)  (3.2.8-dev.144)
    - (mudlib/lp-245/obj/simul_efunc.c) Adapted to the new definition
         of inherit_list().
    - (stralloc) Added the parse_command() lfuns as predefined
         shared strings.

17-Sep-1999 (Lars Duening)  (3.2.8-dev.144)
    - (mudlib/sticklib) Adapted the interpret.c.diff.
    - (prolang.y) Incorrect initialisation of local blocks in inline
         closures sometimes generated illegal code (thanks, Michael!).
         (also b-991026-1)
    - (array.c, interpret, doc/efun/inherit_list) Efun inherit_list()
         now prepends the returned program names with '/'es in non-compat
         mode. (thanks, Michael!)
    - (configure.in, configure) Corrected (I hope!) the tests for
         inet_ntoa() and ipv6 support.
    - (func_spec, interpret.c, doc/efun/) Efun load_name() also accepts
         strings, following a suggestion by Coogan.

16-Sep-1999 (Lars Duening)  (3.2.8-dev.143)
    - (efuns.c) Documented process_string().
    - (closure.c, mud/lp-245/obj/master.c) Corrected small errors.
 
15-Sep-1999 (Lars Duening)
    - (efuns, parse, func_spec, interpret.c) Moved process_string()
         into efuns.c and made it a tabled efun.

14-Sep-1999 (Lars Duening)  (3.2.8-dev.142)
    - (closure, doc/LPC/closures, svalue.h) Ansified and documented.
    - (switch.h, prolang.y, typedefs.h) Beautified and documented the
        data structures used for the switch().
    - (exec.h) Added macros to generate code.
    - (Makefile.in) The rule running make_func did not delete instrs.h
        first.
    - (configure.in, configure) Corrected the probing for optimization
        options.
    - (hosts/unix.h) Added an additional check for the newer Cygwin
        packages (the old 'gethostname' problem).
    - (strfuns.h) *sigh* ulong is not a standard type - we have to
        clean that up later.

19-Aug-1999 (Lars Duening)  (3.2.8-dev.141)
    - (prolang.y) Forgot to change one 'struct lambda' into 'lambda_t'.
    - (comm.c) Corrected a wrong if() condition in efun exec().

16-Aug-1999 (Lars Duening)  (3.2.8-dev.140)
    - (actions.c) Oops, the marker_sentence was not given a valid type.

15-Aug-1999 (Lars Duening)
    - (gcollect.c, parse_old.c, parse.h) The {clear,count}_parse_refs()
        functions exist in both new and old parse_command() *duh*.
    - (Makefiles) Updated all dependencies.

14-Aug-1999 (Lars Duening)  (3.2.8-dev.139)
    - (my-alloca.h) Removed a declaration conflict on BeOS/PPC.
    - (settings/avalon) Updated.
    - (comm.c) Removed a compilation warning.
    - (prolang.y) Redeclaration of local scopes inside of for() statements
        did not recover gracefully.
    - (lex.c) If the driver is compiled for IPv6, the macro __IPV6__ is
        defined.
    - (autoconf/configure.in, configure) Improved tests for IPv6.

13-Aug-1999 (Lars Duening)  (3.2.8-dev.138)
    - (sent.h, actions, simulate, other files) Beautified the sentence
        handling.
    - (mud/lp-245) Added mudwho-code and explanations for non-compat masters
        to the obj/master.c
    - (mudlib/) Removed the old master.c, simul_efun.c and room.h.
    - (comm, port.h, autoconf/*) Integrated the AIX and experimental IPv6
        support provided by Uwe (thanks!).
    - (object.h) Forgot to include instrs.h even though part of the
        struct object depends on F_SET_LIGHT *duh*.

12-Aug-1999 (Lars Duening)  (3.2.8-dev.137)
    - (svalue.h) Created from old datatypes.h.
    - (typedefs.h) File holding the opaque definition of several globally
        used types <foo>_t (which are shortcuts for the old 'struct <foo>'s);
        mainly used to decouple the header files. 
    - (other files) Adapted to use the <foo>_t types.

12-Aug-1999 (Lars Duening)  (3.2.8-dev.136)
    - (strfuns) Increased the possible size of a strbuf from 2**16 to 2**32.
    - (mempools, alloca.c, Makefiles) Added mempools: specialised allocators.
    - (array.c, lex.c, ptrtable) Added uses of mempools where useful.

11-Aug-1999 (Lars Duening)  (3.2.7-dev.135 == 3.2.7-pre.1)
    - (lpmud.prj, patchlevel.h, hosts/be/Makefile) Introduced new source
        branch '<v>-<r>-<p>.*' to hold the pre-releases during the shakedown
        period before the 'official' release. Features and such in these
        pre's are fixed, only fixes for final bugs take place.

09-Aug-1999 (Lars Duening)
    - (mapping.c) Efun m_reallocate() returned the old (freed) mapping,
        not the new one.
    - (interpret.c) Before every bytecode evaluation, inter_sp and inter_cp
        are updated.
    - (pkg/ip6-aix) AIX/IPv6 package added.

04-Aug-1999 (Lars Duening)  (3.2.7-dev.134)
    - (util/xerq/) Corrected a couple of typos (I hate not being able
        to compile this!) (thanks, Freaky!).
    - (simulate.c) Cosmetic for 'status tables': the apply-cache stat
        lacked a divider.

31-Jul-1999 (Lars Duening)  (3.2.7-dev.133)
    - (interpret.c) '*', '*=': inter_sp wasn't set properly before error()
        was called. (thanks, Michael!)
    - (array, swap.c) Swapping in an array ignores the current size limit.
        (thanks, Michael!)
    - (efuns.c) Efun terminal_colour(): the temporary buffer for the current
        line is now potentially unlimited.
    - (util/xerq/) Integrated patches from UNItopia, which remove a couple
        of warnings and works around the repeated closing of sockets.
        (thanks, Freaky!)

30-Jul-1999 (Lars Duening)
    - (efuns.c) Efun trim(): forgot a check for the string end when trimming
        left. This caused trim("") to core. (thanks, Freaky!)

30-Jul-1999 (Lars Duening)  (3.2.7-dev.132)
    - (gcollect.c) Oops, forgot to change two calls to free_vector() into
        free_array(). (thanks, Freaky!)
    - (interpret.c) Efun mkmapping() could have problem with oversized
        arrays.

29-Jul-1999 (Lars Duening)  (3.2.7-dev.131)
    - (simulate.c) I am surprised nobody complained about this one: when
        an error occured, the runtime stack was unrolled too early and
        left the runtime_error() apply with no valid commandgiver.
    - (func_spec, simulate) New efuns set_limits(), query_limits() and
        limited() to handle runtime limits. (f-981229-11)
    - (backend, main, simulate): array, mapping, and file transfer limits
        are all settable from commandline and through the limit efuns.
    - (interpret.c, efuns.c) Code for efuns like object_info()
        now use the mudlib/sys/ includes to generated their results.
    - (interpret.c, prolang.y) The '*' and '*=' operators now allow
        to multiply strings/arrays with numbers.

28-Jul-1999 (Lars Duening)
    - (lots of files) Removed trailing spaces.
    - (main, backend, lex, interpret, simulate) eval_costs are now counting
        up from 0 and are tested against a positive limit. The limit can
        be 0, in which case the eval costs are still counted but can grow
        without limit. This is just a preparation for the oncoming code,
        and might even work.

27-Jul-1999 (Lars Duening)  (3.2.7-dev.130)
    - (efuns.c) Efun trim() also accepts a string of characters to trim.
    - (array.h, datatypes.h, closure.h, mapping.h) Moved the definitions
        of non-svalues back into their associated module header files.
    - (datatypes.h, stralloc.h) Wrapped setting of svalues into nice
        put_<type>() macros. For once, the sources shrank a few lines
        instead of growing :-)

26-Jul-1999 (Lars Duening)  (3.2.7-dev.129)
    - (array.h, mapping.h, object.h, and dependees) Streamline the refcount
        handling in macros ref_<type>(), deref_<type>() and free_<type>().
        Not necessary in terms of typesafety, they make the source a bit
        more readable, and less likely that a ref++ is forgotten.

23-Jul-1999 (Lars Duening)  (3.2.7-dev.128)
    - (lex.c, prolang.y) The inline function variables weren't initialized
        properly nor checked, leading to interesting crashes when the driver
        tried to freed non-existing memory.
    - (lex.c, strfuns) Rewrote the inline closure scanner to cope with
        linefills.

22-Jul-1999 (Lars Duening)
    - (access_check.c) A null-message could cause a random memory
        write.
    - (strfuns.c) Corrected a write beyond boundary.
    - (lex.c) Inline function scanning: newlines didn't trigger a
        buffer refill in time.

22-Jul-1999 (Lars Duening)  (3.2.7-dev.127)
    - (actions, func_spec) New efun 'execute_command()' implements
        a low-level access to the command parser.
    - (prolang.y, exec.h) New optional driver hook H_COMMAND, which
        replaces the driver based command handling with its own.
        (obsoletes f-990204-1 and f-990203-09)
    - (make_func.y) Lookup failures yield an error message, not just
        an exit(1).
    - (func_spec, efuns) New efun 'trim()' to trim characters from
        a string. (f-981229-24)
    - (settings/) Small corrections to 'default', added 'wunderland'.
    - (pkg/ip6/) Added the experimental IPv6 patch from Uwe (thanks!).

21-Jul-1999 (Lars Duening)  (3.2.7-dev.126)
    - (settings/) Updated the tubmud settings file, added the sticklib
        file. All scripts now use 'exec' to start the configure script,
        allowing more meaningful exit codes.
    - (simulate.c) Caught errors now produce a tracedump on stdout/stderr
        (thanks, Sunblood!).
    - (mud/sticklib/) Added the StickLib changes (thanks, Doomdark!)
    - (lex.c) 'check last char before :)' stumbled over Newline characters.
    - (prolang.y) Inline closures: removed an interaction between typed
        inline closures in untyped functions.
    - (actions.c, comm) Notify-fail handling is now in actions.c, this
        also means that notify-fail messages are saved over nested
        commands.
    - (actions.c) notify_fail is available for NPCs, too: the text
        will be told to the NPC. (f-990204-5)
    - (func_spec, actions) New efun 'query_notify_fail()' returns the
        current notify-fail setting. (f-990217-2)
    - (func_spec, actions) New efuns 'command_stack()' and
      'command_stack_depth()' to query the command stack.

20-Jul-1999 (Lars Duening)  (3.2.7-dev.125)
    - (simulate, interpret.c, backend.c) Player command execution is now
        stacked, meaning that after a command() the previous command giver,
        verb, etc are restored. This does not yet extend to notify-fails
        though.
    - (actions.ch) New source files holds the functions related to
        command parsing and action management.

19-Jul-1999 (Lars Duening)  (3.2.7-dev.124)
    - (prolang.y) Removed a spurious debug printf().
    - (backend, call_out.c, closure.c, interpret.c, simulate.c, main.c)
        Generalized the error_recovery_info stack into a runtime context stack.

18-Jul-1999 (Lars Duening)  (3.2.7-dev.123)
    - (settings) Updated the tubmud settings file.
    - (autoconf/configure.in, configure) Unfortunately it's not just
        gcc 2.8.1 on Solaris which stumble over the float/branch test.
    - (prolang.y) Removed a nasty interaction between disabled local
        scopes and for() statements (which unfortunately didn't manifest
        itself in earlier tests). Also, the local_scopes pragmas are
        check only when entering a function.
    - (otable.c) The table status threatened to print some stack garbage.
    - (main, config.h.in, interpret.c, array.c, mapping.c, object.c,
       simulate.c) Array and mapping size limits are now commandline
         options; and a setting of 0 disables the limit checks.

16-Jul-1999 (Lars Duening)
    - (autoconf/configure.in, configure) Oops, a typo in configure.in
        really messed up the script.
    - (backend.c) Following a notice from Stefan Lichtenhagen, I removed
        the safety factor '*2' from f_regreplace() - the error it avoided
        was fixed in dev.28. However, if this efun should cause crashes
        again, this factor is one thing to try out.
    - (simulate.c) Stupid bug, the second: clone_object() checked the
        P_NO_CLONE flag before swapping in the program. (thanks, Manu!)
    - (lex, prolang.y) New pragma 'no_local_scopes' turns off local
        scoping to cater for legacy code; the second pragma 'local_scopes'
        turns it back on.
    - (settings/) Added settings file for Avalon (thanks, Thorsten!)

16-Jul-1999 (Lars Duening)  (3.2.7-dev.122)
    - (lex, prolang.y) Added inline closures ("functionals") using the
        '(: <code/expression> :)' syntax MudOS invented. As a sideeffect,
        the lexer now knows the '#line <num>' directive, and identifier
        names may start with '$'. (thanks, Righ!) (p-990326)
    - (func_spec, interpret.c, simulate) New efun query_command() returns
        the full command given by the player (thanks, Ugh!).

15-Jul-1999 (Lars Duening)  (3.2.7-dev.121)
    - (prolang.y) The first expression in a for() may define local variables
        which scope is the whole for() statement.
    - (func_spec, interpret.c) More new bitstring efuns: count_bits(),
        invert_bits().

14-Jul-1999 (Lars Duening)  (3.2.7-dev.120)
    - (func_spec, interpret.c) New bitstring efuns last_bit() and next_bit().
        (thanks, Matthew!) (f-990203-14)
    - (access_allow, comm, mudlib/ACCESS.ALLOW) Access rules can take
        portnumbers into account. (idea from Gokhan, f-981211)

13-Jul-1999 (Lars Duening)
    - (bugs/) Cleaned up the directory a big; created summary files b-summary
        and f-summary.
    - (func_spec, interpret, object, doc/efun/) New efun object_time()
        returns the creation time of the object. (idea from Daniel,
        f-990324-2)
    - (lex, prolang.y, simulate.c, exec.h) New pragmes 'no_clone' to disallow
        clones of an object, and 'no_inherit' to disallow inheriting a
        program. (thanks, Daniel!) (f-990324-0, p-990417-0)
    - (comm.c) Error ESHUTDOWN on read yields a proper message and removes
        the interactive player.
    - (func_spec, interpret.c) New bitstring efuns and_bits(), or_bits(),
        xor_bits(). (idea from Matthew, f-990203-14)

12-Jul-1999 (Lars Duening)
    - (func_spec, interpret.c) New efuns pow(), floor(), ceil() and atan2().
    - (config.h.in, configure, interpret.c) If configuration option
        DYNAMIC_COSTS is enabled (default is off), string additions are more
        expensive for long strings (this is handy against the killer-loop
        for (s=""; s += "a"; ) ).

12-Jul-1999 (Lars Duening)  (3.2.7-dev.118, 119)
    - (autoconf/configure.in, configure) gcc/cc1 2.8.1 on SunOS 5.7 falls into
        catatonia when compiling the float/branch-incompatibility test.
        Inserted a workaround.
    - (prolang.y, lex, func_spec) Scope of variables in nested local blocks
        ends with the defining block as it should. The space of such variables
        is reused for other local blocks. (f-990203-05)
    - dev.119: Small correction: function local variables (depth 2) can't
        hide function arguments (depth 1);

11-Jul-1999 (Lars Duening)  (3.2.7-dev.117)
    - (machine.h.in) Oops, forgot to update this.
    - (Makefile.in, port.h) Compile-time define NO_INLINES turns off inlining.
    - (interpret, stralloc, strfuns.c, smalloc) Straightened out the
        INLINE uses.

10-Jul-1999 (Lars Duening)  (3.2.7-dev.116)
    - (closure.c) Removed an erroneous errormessage when creating sefun
        closures with large indices (thanks, Daniel!).
    - (configuration, several files) Mappings have now an upper size limit
        of MAX_MAPPING_SIZE keys (defaults to 5000). (f-990708-1)

09-Jul-1999 (Lars Duening)  (3.2.7-dev.115)
    - (config.h.in, autoconf/configure.in, settings/default) All of
        of config.h is now configurable (and is it just me, or was
        the original value parsing really broken?).
    - (settings/) Added files for all Muds I had a config.h of. Oh, and
        the files are now scripts in themselves :-)

08-Jul-1999 (Lars Duening)  (3.2.7-dev.114)
    - (machine.h.in, port.h) port.h now knows about the supported
        (working) architectures and how to find the host-specific include
        files. HOST_INCLUDE is still recognized, but optional.
    - (machine.h.in, array.h, driver.h, port.h, interpret, simulate, random):
        Use SIZEOF_CHAR_P instead of SIZEOF_P_INT.
    - (Makefile.in) Target 'distclean' also deletes the
        config.cache/status/log files.
    - (other files) Added some documentation to the new autoconfig system.

08-Jul-1999 (Lars Duening)  (3.2.7-dev.113)
  Checked in the changes provided by Reinhard (thanks!):
    - (machine.h.in, config.h.in, configure, autoconf/) Autoconfiguration
        is now based on autoconf 2. The old configuration code is in the
        subdirectory config-old/ held as backup. Special features are:
          - rxcache and UDP port can be enabled/disabled explicitely.
          - Enabling ERQ defines a symbol ERQ_INCLUDE pointing to the
            correct include file (util/erq/erq.h resp util/xerq/erq.h).
          - All config.h options can be set using parameters to configure.
            configure --help will print the (long) list of available options.
    - (func_spec) Fixed a rare case of an erroneus inclusion of send_imp()
        UDP is disabled and thus the function f_send_imp() won't be compiled.
    - (comm.c) erq.h is included only when the driver is compiled for
        using the erq demon.

07-Jul-1999 (Lars Duening)  (3.2.7-dev.112)
    - (strfuns.c) Corrected off-by-one mistakes, and the length of the
        final string.
    - (datatypes.h, other files) Straightened the use of STRING_VOLATILE
        (purely cosmetic).

07-Jul-1999 (Lars Duening)  (3.2.7-dev.111)
    - (strfuns, efuns, simulate): Modified efun debug_info() to return
        the status information instead of printing it. Added "malloc" as
        additional second argument to the DINFO_STATUS command.
    - (interpret) Efun get_type_info() returns whether a string is shared
        or not.
    - (simulate, smalloc): Deactivated 'debugmalloc' and
        'showsmallnewmalloced' and the associated code.
    - (simulate, efuns, dumpstat, interpret): Added option DINFO_DUMP to
        debug_info() to implement the 'dumpallobj' and 'opcprof' command.
    - (interpret.c) Efuns trace() and traceprefix() are now validated
        with the master-lfun 'valid_trace()'; the master-lfun
        'query_player_level()' is thus no longer needed.
    - (efuns, simulate, object): Efun set_is_wizard() is now optional,
        and with it the object flag O_WIZARD.
    - (object, simulate, prolang, efun): Object flag O_APPROVED is gone.

06-Jul-1999 (Lars Duening)
    - (comm, simulate.c)  Undid the last change. Now it is legal again for
        the modify_command-hook to change the command_giver; this change
        stays active for the execution of the command, and the original
        commandgiver is passed to the NOTIFY_FAIL hook.
    - (simulate.c) The MODIFY_COMMAND hook is now called first, even
        before special commands like 'status' are parsed. This allows
        the hook to filter out uses of these commands.
    - (strfuns) New file holding string functions (for now).
    - (simulate, otable, rxcache, stralloc, efuns, call_out, heartbeat):
        Rewrote the status functions to use strbufs, in anticipation to
        make these special commands into real efuns.

05-Jul-1999 (Lars Duening)  (3.2.7-dev.110)
    - (comm.c) include of <stddef.h> was missing.
    - (simulate.c) After the modify-command hook was called, the commandgiver
        and current object are restored their previous setting in case the
        hook changed them. (thanks, Daniel!)

04-Jul-1999 (Lars Duening)
    - (closure.c) Corrected a nasty mistyping in compile_lvalue(). (thanks,
        Freaky!).
    - (lex.c, interpret.c) Removed two warnings.
    - (doc/efun) Removed the manpage for the long-gone efun query_host_name.

03-Jul-1999 (Lars Duening)  (3.2.7-dev.109)
    - The driver compiles again with egcs.
    - (efuns.c) Bugfix for efun terminal_colour(): terminal_colour("bla", ([
        "bla":"blu"]), 1) returned "blu" instead of "bla". (thanks, Michael!)
    - (efuns.c) The efun sscanf() used the wrong function to report argument
        errors. (thanks, Freaky!)

02-Jul-1999 (Lars Duening)
    - (hosts/be/be.h, .../Makefile, .../machine.h, other files): Adapted for
        BeOS 4.5. This involved adding numerous casts to make the now pickier
        compiler happy. But now egcs starts crashing...
    - (efuns.c) Found another shortcoming of present_clone() (and the reason
        why I didn't see errors before *blush*).

01-Jul-1999 (Lars Duening)
    - (efuns.c) Fixed two nasty bugs in efun present_clone(): make_name_sane()
        could return NULL, and the comparison was done against the wrong name.
    - (interpret.h) To be safe, macro put_number() takes the sp as argument.
    - (call_out.c) When setting current_prog for efun closures, the code
        now makes sure that the program is swapped in.

30-Jun-1999 (Lars Duening)  (3.2.7-dev.108)
    - (mud/lp-245/obj/simul_efun.c) Duh, had a complete brainfart yesterday
        when adapting present_clone() to compat mode.

29-Jun-1999 (Lars Duening)  (3.2.7-dev.107)
    - (doc/efun) Removed the files for the long-gone efuns find_living(),
        find_player(), set_living_name(), add_worth() and wizlist().
    - (doc/efun/all_environment) Corrected a typo.
    - (efuns.c) Corrected a misformed condition in efun terminal_colour().
    - (gcollect.c) If a swap-in fails, the GC raises a fatal error (instead
        of just crashing).
    - (mud/lp-245/) Added the old LP-245 mudlib, of course adapted to
        this driver.
    - (func_spec, efuns) New efun present_clone() to find objects with
        a specific blueprint (suggested by Coogan).

29-Jun-1999 (Lars Duening)  (3.2.7-dev.106)
    - (exec.h, interpret.c, call_out.c) Efun-closures are now properly
        identified, and call_outs to efun-closures set current_prog to the
        prog of the bound object. This sources still hold some DEBUG-printfs.

28-Jun-1999 (Lars Duening)  (3.2.7-dev.105)
    - (interpret.c) Added some argument checks to efun terminal_colour().
    - (func_spec, doc/efun/environment) Documented that efun environment()
        can also take a string as argument.
    - (interpret.c) 'Indexing on illegal type' no longer dumps trace (what
        for did that do that any way?).
    - (main, backend.c, object.c) TIME_TO_RESET and TIME_TO_CLEAN_UP are now
        defaults for the runtime options '--reset-time' and '--cleanup-time'.
    - (interpret.c) Reactivating a destructed didn't update the number
        of listed objects.

26-Jun-1999 (Lars Duening)
    - (main.c, interpret.c, smalloc.c) Cosmetics.

25-Jun-1999 (Lars Duening)  (3.2.7-dev.104)
    - (lotsa files) NATIVE_MODE is gone - the only real difference it made
        was the restriction of command() to the current object only, and
        that can be handled by a simul-efun.
    - (interpret.c) Oops, privilege_violation() slightly misinterpreted
        the result from the master apply.

25-Jun-1999 (Lars Duening)  (3.2.7-dev.103)
    - (lotsa files) EUIDS mode is now automatic since most of the code
        was there in any case.

        New runtime option '--[no-]strict-euids'
        which enables/disables the enforcement of euids known from the native
        mode. When enabled, the LPC macro "__STRICT_EUIDS__" is defined.
        The default setting is defined in config.h by STRICT_EUIDS; use
        of an old config.h with NATIVE_MODE defined has (for now) the
        same effect.

24-Jun-1999 (Lars Duening)  (3.2.7-dev.102)
    - (backend, efuns.c, heartbeat, interpret.c, object, simulate,
        all config.h) OLD_RESET is gone.

24-Jun-1999 (Lars Duening)  (3.2.7-dev.101)
    - (mudlib/sys/{trace.h,input_to.h,files.h,debug_info.h}: Added these
        includes with definitions for the efuns trace(), input_to(),
        file_size(), get_dir(), and debug_info().
    - (interpret, efuns, func_spec, exec.h) Finished commenting the
        interpreter.

20-Jun-1999 (Lars Duening)  (3.2.7-dev.100)
    - (interpret) to_string(object) in compat mode added a leading
        slash. program_time() freed its argument before querying it.
        And recombine_free_lists() is gone for good.
    - (interpret, func_spec,  exec.h) After a long day: more comments
        added (17155 lines done, 3150 to go). In particular,
        eval_instruction() is commented *phew* (but it's still big
        and ugly).

18-Jun-1999 (Lars Duening)  (3.2.7-dev.99)
    - (interpret, func_spec, exec.h)  Something new: more comments.
        (12558 lines done, 5800 to go).

16-Jun-1999 (Lars Duening)
    - (interpret.c) The operators +=, -=, *=, /= now accept a float left
        and an int right.
    - (interpret, efuns) Efun terminal_colour() moved out from the interpreter
        into efuns.c. And it received comments during this move.

15-Jun-1999 (Lars Duening)
    - (interpret.c) Binding an unbound lambda to two objects and destructing
        the originating object freed the lambda. (thanks, Kirnan & Michael)

14-Jun-1999 (Lars Duening)
    - (driver.h, port.h, all files commented so far) New type 'Bool' and its
        smaller sibling 'CBool' introduced.
    - (autoconf/configure.in, configure, port.h, regexp, ptrtable) Replaced
        CHARBITS by CHAR_BIT, adapted the generation of CHARBIT_MASK.
    - (datatypes.h, func_spec, exec.h, interpret) Something new: more
        comments (8700 lines done, 9000 to go). Actually I started wrapping
        the bytecode interpretation into its own types and macros, which
        may increase portability, and at least make the critical places
        easier to find.

13-Jun-1999 (Lars Duening)
    - (array.c) Efun inherit_list() just copies the program names, but
        doesn't make them shared. Since they aren't shared anyway, this
        makes the function much faster. (thanks, Michael!)
    - (object.c) If the H_RESET hook is a closure, a result < 0 will disable
        reset for this object. (thanks, Michael!)

12-Jun-1999 (Lars Duening)
    - (interpret.c, mapping.c) Both m_indices() and map()/map_mapping()
        called check_map_for_destr() twice, wasting time. (thanks, Michael!)

12-Jun-1999 (Lars Duening)  (3.2.7-dev.98)
    - (datatypes.h, func_spec, exec.h, interpret) Oh boy: more comments
        (6700 lines done, 10000 to go).

10-Jun-1999 (Lars Duening)
    - (call_out.c) Adding callouts from within a callout resulted
        in the new callouts inserted in the wrong place when the active
        callout had an odd delay (and thus a negative 'time left' entry).
        If the new call_out had a MAX_INT delay, the current callout list
        was effectively disabled. (b-990214-0)
    - (backend.c) Added Michaels improvement to the swapping algorithm
        (thanks!).

05-Jun-1999 (Lars Duening)
    - (smalloc.c) As I feared: trying to print more information about
        gc'ed objects may crash the driver *sigh*.

   Patches provided by Michael (thanks!):
    - (backend, interpret, simulate) Improved the handling of closure hooks:
        now setting a driver hook from within the hook works well, too.
    - (closure.c) symbol_variable() properly recognizes objects with
        pending program replacement.
    - (interpret.c) dump_trace() recognizes alien lfuns properly.
    - (interpret.c) Calls to alien lfun closures didn't set extern_call.
    - (interpret.c) Calls to F_UNDEF closures (closures whose object
        was destructed) generate a proper error message.
    - (swap.c) If a closure variable was changed to F_UNDEF by the garbage
        collector, the swapper now duly writes this new info into the swap file.
    - (mapping.c) During a GC, mappings didn't check for changed alien lfuns.
  Some more suggestions by Michael:
    - (interpret.c) to_object() on F_UNDEF closures returns 0.
    - (object.c) free_object() miscounted the amount of memory used by
        objects.
    - (simulate.c) Memory display in 'status' for objects and programs
        now both display '<total> (<swapped>)' (before, only the objects
        status displayed that, programs displayed '<resident> (<swapped>)' ).
    - (swap.c) If variables could not be unswapped, the swapper didn't clear
        them properly.

24-May-1999 (Lars Duening)  (3.2.7-dev.97)
    - (interpret, exec.h, heartbeat.c, comm.c, make_func.y) More comments,
        really.

22-May-1999 (Lars Duening)  (3.2.7-dev.96)
    - (config.h, interpret.c, closure.c) Corrected some typos.

22-May-1999 (Lars Duening)  (3.2.7-dev.95)
    - (interpret.c) Guess what: more comments.
    - (interpret.c, sprintf.c) to_string() and sprintf() stumbled over
        variable closures left dangling after a replace_program(). (thanks,
        Michael!)
    - (prolang.y) insert_inherited: the loop for the case '*::f' tended to
        clobber its own control variable 'ip', causing the omission of
        function calls. (thanks, Michael!)

18-May-1999 (Lars Duening)  (3.2.7-dev.94)
    - (config.h, hosts/be/config.h) Increased the default for MAX_LOCAL
        to 50.
    - (interpret.c) Even more comments.

17-May-1999 (Lars Duening)  (3.2.7-dev.93)
    - (doc/efun/filter_{mapping,indices}) Corrected a wrong phrase.
        (thanks, Zwirch!)
    - (interpret.c) Some more comments.

16-May-1999 (Lars Duening)  (3.2.7-dev.92)
    - (object, backend.c, dumpstat.c, efuns.c, interpret.c, simulate.c,
       sprintf.c, ../mudlib/sys/objectinfo.h, doc/efun/object_info):
        New object flag O_REPLACED for objects with replaced programs,
        so that clonep() stops flagging such blueprints as clones.
        (suggested by Michael)
    - (datatypes.h, interpret) More comments.
    - (simulate.c) Streamlined the namehandling in clone_object().

14-May-1999 (Lars Duening)  (3.2.7-dev.91)
    - (backend.c) Removed one 'var might be clobbered' warning.
    - (datatypes.h, interpret) More comments.
    - (object.c) When restoring a mapping of form '([:<width>])', the <width>
        is made sure to be positive. (thanks, Michael!)

13-May-1999 (Lars Duening)  (3.2.7-dev.90)
    - (datatypes.h, interpret) More comments.

12-May-1999 (Lars Duening)  (3.2.7-dev.89)
    - (interpret.c, doc/efun/...) Efun symbol_function() won't create
        closures from protected lfuns of other objects. (thanks, Michael!)
    - (func_spec, comm, interpret.c, config.h, driver.h, main)
        query_mud_port() did not accept int arguments as documented; also,
        the multiport feature is no longer optional.
    - (smalloc.c) write_lpc_trace() tries to write as much information about
        an object as possible, not just 'Doesn't exist anymore'.
    - (interpret.c) destruct() now accepts destructed objects as arguments.
        (thanks, Largo!).

11-May-1999 (Lars Duening)  (3.2.7-dev.88)
    - (object.c) Fixed some memory leaks on errors during a restore. (thanks,
        Michael!)
    - (interpret.c) Some more comments.

10-May-1999 (Lars Duening)  (3.2.7-dev.87)
    - (interpret.c) Removed a crasher in call_lambda() on closures of
        not-inherited variables. (thanks, Michael!)
    - (closure.c) Creating a symbol_variable() now protects it against
        replace_program()s. (thanks, Michael!)
    - (array.c, efuns.c, exec.h, interpret.c, prolang.y) Duplicate virtual
        inherits are no longer listed in the result of inheritlist() and
        the various statistical functions. (thanks, Michael!)

09-May-1999 (Lars Duening)  (3.2.7-dev.86)
    More patches from Michael:
    - (backend.c, interpret, gcollect.c) interpret:call_lambda() no longer
        protects closure with an extra refcount; instead old, replaced driver
        hooks are stored in an array and freed by the backend (or the
        garbage collector).
    - (backend.c) When computing a 'real soon' swapping time for objects
        with no reset, the new swap time became negative, effectively
        disabling swapping for this object.
    - (interpret.c) Improvement of efun terminal_colour(), reducing the number
        of created shared strings.
    - (simulate.c) If the loading of objects fails, the name of the object
        is printed with the error message.
    - (swap.c) If an object WILL_CLEAN_UP on swap in, the swapper doesn't
        bother to check for the function 'clean_up'.
    - (interpret.c, prolang.y) Added a couple of missing updates of
        time_of_ref.
    - (interpret.c) Fixed a crasher when using to_string() on an lfun
        closure for a swapped program.
    - (simulate.c) lookfor_object() no longer swaps in the object, instead
        the caller does it when needed. As this is rather rare, the effect
        should be reduced disk activity.
    - (ed.c, heartbeat.c) Removed two compilation warnings for printf()
        args.

04-May-1999 (Lars Duening)
    - (smalloc.c) _large_malloc() didn't compile in SMALLOC_LPC_TRACE due to
        a missing 'const' specifier. (thanks, Freaky!)

02-May-1999 (Lars Duening)  (3.2.7-dev.85)
    - (backend.c) time_of_ref is fudged only after a reset of a swapped
        object, not after a cleanup. Also, if the cleanup hook is a closure,
        the time_of_ref is updated manually to make sure that the cleanup
        won't occur in every backend loop.
    - (simulate.c) lookfor_object() sets the time_of_ref of an object if
        it had to swap it in. This is useful for blueprints for inheritance
        and cloning, which would thrash otherwise. (thanks, Michael!)
    - (lex.c) The test against recursive calls in _expand_define() crashed
        the driver if an error occured during the macro expansion and the
        error handling itself called macro expansion (e.g. through the
        _expand_define_() efun). For now, non-reentrant recursive calls
        are allowed again.

30-Apr-1999 (Lars Duening)  (3.2.7-dev.84)
    - (backend.c) If reset or cleanup cause an object to be swapped in,
        the time_of_ref is fudged so that the object will swap out again
        pretty soon, but not immediately.
    - (hosts/be/Makefile) Re-introduced cross-compiling support for x86
        on PowerPC.

29-Apr-1999 (Lars Duening)
    - (doc/efun/caller_stack_depth, HISTORY) Corrected two typos (thanks,
        Zora!).

28-Apr-1999 (Lars Duening)  (3.2.7-dev.83)
    - (backend.h, closure.c, interpret.h, efuns.c) Move error_recover_info
        definition into backend.h, adapting the other files, and added
        a missing include to efuns.c
    - (interpret, exec.h, datatypes.h) Began commenting.

27-Apr-1999 (Lars Duening)  (3.2.7-dev.82)
    - (heartbeat.c) 'status tables' could cause a division by 0.
    Integrated a patch from Michael:
    - (backend.c) process_objects() now checks if a swap was successful
        before setting did_swap (since some objects won't swap).
    - (interpret.c) Added some ASSIGN_EVAL_COST in critical efuns.
    - (interpret.c) call_lambda() did not update time_of_ref/O_RESET_STATE
        on calls. Furthermore, objects bound to (s)efun closures were not
        swapped in, which caused segfaults in dump_trace().

25-Apr-1999 (Lars Duening)  (3.2.7-dev.81)
    - (backend.c, swap.c) Swapped-out objects are again swapped in for
        reset. Skipping the call and just setting a due-time in the
        swapper resulted in too few calls to reset(), especially with
        small swap times. (thanks, Michael!)
    - (backend.c) Removed the RESET_DEBUG code sequences.
    - (interpret.c) Calls to tefuns and vefuns assign the eval costs
        first.
    - (sprintf.c) If possible, file:line of an offending sprintf() statement
        are appended to all error messages, not just to the one printed
        on stderr.
    - (etc/icon-*.ppm) The Icon for the Gamedriver.
    - (hosts/be/{Makefile, icon-*.raw, driver.r, driver.rscr) Added the
        icon to the compiled resources.
    - (heartbeat.c) Fixed a crasher which occured when a heart_beat()
        function managed to remove all remaining objects from the hb list.

19-Apr-1999 (Lars Duening)
    - (mapping.c) When adding mappings, the second summand was freed before
        the actual addition (thanks, Daniel!).
    - (doc/LPC/modifiers) added from TubMud (thanks, Fiona!).

17-Apr-1999 (Lars Duening)  (3.2.7-dev.80)
    - (doc/) Small changes, improved the docs to switch, references
        and alists (thanks, Freaky!).
    - (lex.c) Bugfix from Daniel: Variables in closure may start with '_'.
    - (closure.c) Bugfix from Daniel: #'[<] indexing corrected.
    - (interpret.c) unmkmapping() also accepts key-only mappings (thanks,
        Holger!).
    - (func_spec) Efun caller_stack() was defined to return 'int' instead
        of the correct 'object *'. (thanks, Robb!).
    - (driver.h, smalloc, main) Added some 'const' to 'char *' where
        useful.
    - (main.c, lex.c) The list of predefs copied from the commandline is
        now deallocated after the defines have been entered into the
        table. This removes a spurious 'small block freed' warning on
        garbage collections.

04-Apr-1999 (Lars Duening)  (3.2.7-dev.78-79)
    - Small changes, just cosmetics.

01-Apr-1999 (Lars Duening)  (3.2.7-dev.77)
    - Manually copied all changes since dev.76 into the Re-Release of 3.2.6.
    - (call_out.c) Undid the change that callout can call protected
        functions: this inability was intentional for security reasons.
    - (backend.c) The consistency check of the object list was still
        active. Now the code is still there, but deactivated.
    - (doc/LPC/functions, doc/efun/call_out, doc/efun/call_other) Added
        a bit documentation regarding protected functions (thanks, Macbeth!).
    - (interpret.c, doc/LPC/operators) Subtraction allows any width of
        the subtrahend.

31-Mar-1999 (Lars Duening)
    - (HISTORY, hosts/be/Makefile) Small corrections.

31-Mar-1999 (Lars Duening) -- Release 3.2.6
    - Froze 3.2.6-dev.76 for release.

31-Mar-1999 (Lars Duening)  (3.2.6-dev.75)
    - Changed the directory structure so that the sources are no longer
        in the top directory. But there's still a long way to go before
        a simple 'build' in the top directory does everything.
    - (doc/...) Integrated the 'driverdocs', previously maintained
        by Stefan Petri (thanks!).

31-Mar-1999 (Lars Duening)  (3.2.6-dev.74)
    - (doc/efun/...) Typo corrections (thanks, Coogan and Freaky!)
    - (array.c) map_array() did not check if objects in the array were
        destructed during the execution (thanks, Righ!). (b-990329-0)
    - (util/make_docs/make_docs.c) Linux-adaption was not complete
        enough.

30-Mar-1999 (Lars Duening)  (3.2.6-dev.73)
    - (lex.c) *duh* the last change tested for COMPAT, not the correct
        COMPAT_MODE define.

29-Mar-1999 (Lars Duening)  (3.2.6-dev.72)
    - (lex.c) __FILE__ and __MASTER_OBJECT__ return names without leading
        slash in compat mode.
    - (backend.c, interpret.c) Fixed some warnings.
    - (doc/efun/{sizeof, widthof, load_name}) Cosmetics.
    - (comm) Undefining ERQ_DEMON did not compile (thanks, Bardioc!).
    - (prolang.y, object.c) The __INIT function is now protected instead
        of global (thanks, Freaky!).
    - (call_out.c) Efun call_out(string,...) can now call protected functions
        as well (thanks, Freaky!).

28-Mar-1999 (Lars Duening)  (3.2.6-dev.71)
    - (object, simulate, backend.c, interpret.c, efun_defs.c, dumpstat.c
       smalloc.c) Changed the object list to a double-linked list, allowing
        destructed objects to be removed immediately. In itself not a big
        deal, but it allows future, more sorted incarnations of the object
        list.
    - (heartbeat.c,h) New module holding the heartbeat related code.
    - (backend, interpret, simulate) Adapted for using the new heartbeat
        code. Especially the backend loop now gives preference to the
        heartbeats over resets/swaps - the latter are slowed down to
        one reset/swap per cycle if there is not enough time.

26-Mar-1999 (Lars Duening)  (3.2.6-dev.70)
    - (object, simulate, backend.c, interpret.c, efun_defs.c, dumpstat.c
       smalloc.c) Changed the object list to a double-linked list, allowing
        destructed objects to be removed immediately. In itself not a big
        deal, but it allows future, more sorted incarnations of the object
        list.

26-Mar-1999 (Lars Duening)  (3.2.6-dev.69)
    - (backend.c) The logic in the computation of the average heartbeat
        stats was wired backwards.
    - (call_out.c, closure.c, comm.c, interpret.c, lex.c, regexp.c, simulate.c)
        Removed a couple of warnings when compiling under BeOS/Intel.
    - (port.c) get_current_time(): 'noted_alarms' is kept up to speed with
        'total_alarms'. (thanks, Michael!)
    - (backend, main, lex.c, interpret.c, simulate.c, func_spec, doc/...)
        After the current implementation of the free-running alarm, which
        is needed by the MAX_TIME mechanism, proved unstable on some
        platforms, the axe fell on this feature altogether. What started
        out as a nice idea was on the best way to grow into a maze of
        special cases, all ugly. Sorry, folks.

25-Mar-1999 (Lars Duening)  (3.2.6-dev.68)
    - (backend.c) Corrected a possible division-by-0 in the heart
        beat status output (thanks, Freaky!)
    - (efuns.c) Efuns copy() and deep_copy() did copy quoted arrays.
        (thanks, Michael!).
    - (simulate.c, otable.c) Warnings in printf again...
    - (doc/efun/previous_object) Clarified the difference between
        previous_object() and previous_object(0).

24-Mar-1999 (Lars Duening)  (3.2.6-dev.67)
    - (efuns.c) Efun deep_copy() leaked memory, and also has to copy
        arrays/mappings with just one ref (thanks, Michael!)
    - (backend.c) Oops, major fault in the changed efun heart_beat_info(),
        writing over array limits.
    - (func_spec, interpret.c, backend.c, config.h, doc/...) The
        hard time limit is now by default turned off (but can be
        activated on the command line). The efun get_eval_time()
        was renamed to remaining_eval_time() to avoid a clash with
        some mud's driver patches. See f-981229-11 and f-990324-3
        for further discussion.
    - (main.c, simulate.c, port.h) Fixes related to MSDOS_FS:
        Compiling with Cygwin under/for Windows didn't set the define.
        legal_path() was a bit too restrictive. Added the define
        to the list of options printed with '--options'.

24-Mar-1999 (Lars Duening)  (3.2.6-dev.66)
    - (backend) Moved the heartbeat handling into process_objects()
        as well, which also got rid of the clumsy heartbeat table
        handling. Only the efun heart_beat_info() is slow now.

24-Mar-1999 (Lars Duening)  (3.2.6-dev.65)
    - (backend, gcollect.c, interpret.c, object, otable, simulate.c)
        Modified the list of objects so that the head and the end are
        accessible through pointers. This allowed a better handling of
        resets/cleanups/swapping such that the processing can be
        aborted after ALARM_TIME and continued in a later cycle. This
        should get rid of reset/...-induced lags.
        As a result, the reset table introduced in dev.62 is no longer
        necessary, nor is the config.h constant RESET_GRANULARITY.
        backend.c still contains a sanity check in the main loop,
        just in case. (f-990323-1)
    - (otable.c) Removed another printf-related warning.
    - (main.c, simulate) The name of the master object is assured to
        be sensible (no leading '/' etc) (thanks, Freaky!).

23-Mar-1999 (Lars Duening)  (3.2.6-dev.64)
    - (comm.c, efuns.c, interpret.c, otable.c) Removed a couple of possible
        mismatches between format-strings and passed arguments.
    - (hosts/unix.h, util/*) Several small tweaks for compilation under
        Solaris 2. Still, the util/Makefiles need manual changes
        in order to build correctly *sigh*
    - (otable.c) It is now legal to call rtable_remove() with an object
        which is not in the reset table - it happens when an object
        is destructed during its own reset (thanks, Zwirch!).
    - (interpret.c) If m_allocate() runs out of memory, a NULL 'mapping'
        svalue was left on the stack -> BOOM.
    - (prolang.y, simul_efun.c) Replaced bzero() by memset().
    - (main.c) The memory-reserve options had one extra 'd' in the long
        form (thanks, Freaky!).
    - (backend.c, object.c, otable.c) Made the reset handling resistant
        against errors during the evaluation of reset().

22-Mar-1999 (Lars Duening)  (3.2.6-dev.63)
    - (backend.c, otable.c) Small bugfixes. Deactivated, but not deleted
        the DEBUG printfs.

22-Mar-1999 (Lars Duening)  (3.2.6-dev.62)
    - (config.h, backend.c, otable, interpret.c, simulate.c, swap.c)
        Implemented new, hopefully less disruptive version of the reset
        handling. To get the old handling, define OLD_RESET in config.h .
        Under the new implementation, the objects are sorted by their
        reset times (but grouped according to RESET_GRANULARITY) which
        allows easy retrieval of the due objects. Additionally, every
        backend cycle checks for due objects, but limits the number of
        calls to whatever can be done in two seconds. After all, resets
        are not supposed to be exact.
        For now, there are a number of DEBUG printfs in the modules.
        (f-990318-0)

21-Mar-1999 (Lars Duening)  (3.2.6-dev.61)
    - (ptrtable.c,h) New module holding a generalized version of the pointer
        table formerly located in object.c
    - (dumpstat.c, interpret.c, simul_efun.c, object.c) Modified to use
        the new pointer table.
    - (func_spec, efuns, doc/efun/...) New efun copy() for shallow copies,
        and deep_copy() for deep copies. (f-981229-12)

20-Mar-1999 (Lars Duening)  (3.2.6-dev.60)
    - (func_spec, interpret.c) Efun clonep() now also accepts strings.
    - (port.h, main.c, comm.c, ed.c, simulate.c) Made sure that MAXPATHLEN
        is defined and used on all hosts for file name buffers
        (thanks, Freaky!).
    - (parse_old.c, prolang.y) Removed a couple of 'unwanted assignment?'
        warnings.
    - (lex.c) Reallocations of the defbuf are traced only when '-c' was
        given on the commandline.
    - (hosts/be/Makefile) Corrected a small problem in the dependency
        generation which would lead to incomplete builds.
    - (pkg/diff) Added the diff code from Ugh and Alfe.
    - (func_spec, efuns, doc/efun/...) New efun object_info().
    - (interpret.c, doc/efun/...) Efun set_next_reset() just returns
        the time until the next reset when passed 0 as argument.

19-Mar-1999 (Lars Duening)
    - (alloca.c) Corrected some ugly formatting.
    - (func_spec, interpret.c, doc/efun/...) Nobody was really fond of
        'nameof()', so it's back to 'object_name()'. Well, it was worth
        a try.
    - (stralloc, sprintf.c, mudlib/master_skeleton.c doc/master/...)
        Renamed master apply 'object_name()' to 'printf_obj_name()' due
        to the clash with the new efun object_name().

18-Mar-1999 (Lars Duening)  (3.2.6-dev.59)
    - (comm.c, hosts/unix.h) Fixed the broken alarm() and UDP socket handling
        for Cygwin.
    - (func_spec, backend, interpret.c, lex.c, config.h, simulate.c,
       doc/efun/...)
        Added a time-based watchdog to the interpreter: its default setting
        is given by MAX_TIME in config.h, it can be specified on the cmdline
        with '--max-time', the actual value is available through the
        macro __MAX_EVAL_TIME__, the remaining time can be queried with
        the efun get_eval_time().
    - (func_spec, interpret.c) Efun notify_fail() returns 0, not void.
        (f-990203-18)
    - (backend.c) look_for_objects_to_swap(): The call granularity was
        computed from the config.h macros, not from values set on the
        command line.
    - (func_spec, simulate.c, doc/efun/...) Efun set_this_player() also
        accepts 0 as argument (and then simply clears this_player()).

17-Mar-1999 (Lars Duening)  (3.2.6-dev.58)
    - (mapping.c, otable.c, efuns.c, comm.c) Fixed a couple of warnings
        sent in by Freaky.
    - (func_spec, doc/efun/...) clonep() and blueprint() take this_object()
        as default argument (suggested by Freaky).
    - (doc/efun/{clonep, assoc, insert_alist}) Small corrections, sent
        in by Freaky.
    - (lex.c) Added __MAX_EVAL_COST__ as predefined macro (suggested
        by Chameloid).
    - (interpret.c, simulate.c) Added the file to the 'Failed to load'
        error messages (suggested by Nathan).
    - (mapping.c, doc/efun/...) Modified map() and filter() so that for
        0-width mappings the value 0 is passed as 'data' value.
    - (func_spec, interpret.c, doc/efun/...) Renamed efuns
        {filter,map}_mapping() to {filter,map}_indices(). The old names
        are still available as aliases.
    - (func_spec, interpret.c) Renamed blueprint() to load_name(),
        renamed file_name() to nameof() (the old name is still
        available as alias) and introduced program_name().

16-Mar-1999 (Lars Duening)  (3.2.6-dev.57)
    - (mudlib/master.c, wk/diff.{c,man}) Wrong lineends. Ooops.

16-Mar-1999 (Lars Duening)  (3.2.6-dev.56)
    - (mapping) Improved the implementation of efun m_rewidth().
    - (func_spec, interpret.c, mapping, doc/efun/filter) New
        efun filter() to filter mappings and arrays. (sort of f-981229-16)
    - (func_spec, mapping, doc/efun/...) Renamed m_rewidth() to
        m_reallocate() - this name comes closest.
    - (func_spec, interpret.c, doc/efun/...) Renamed mapping_contains()
        to m_contains(). The old name is available as alias.
    - (util/xerq/socket.c) Changed a wrong datasize in erq_accept(),
        this should improve handling of TCP sockets (thanks, Sieni!).
    - (array.c) Added an improvement to the handling of special
        cases in subtract_array() (thanks, Sunblood!). (p-990316)

15-Mar-1999 (Lars Duening)
    - (func_spec, mapping, doc/efun/m_rewidth) New efun m_rewidth()
        to change the width of a mapping. (f-981229-08)
    - (func_spec, mapping, interpret.c, doc/efun/map) New efun map()
        to map arrays and full-width mappings. (sort of f-981229-16)

15-Mar-1999 (Lars Duening)  (3.2.6-dev.55)
    - (func_spec, interpret.c, doc/efun/m_values) Changed efun m_values()
        to return any column of a mapping. (f-981229-07)
    - (func_spec, interpret.c, doc/efun/widthof) New efun widthof() to
        return the width of a mapping. (mentioned in f-981228-08)
    - (func_spec, interpret.c, doc/efun/m_allocate) Renamed efun
        allocate_mapping() to m_allocate().
    - (func_spec, interpret.c, doc/efun/unmkmapping) New efun unmkmapping()
        to deconstruct a mapping.

14-Mar-1999 (Lars Duening)  (3.2.6-dev.54)
    - (interpret.c, efuns.c) Efuns lower_case(), upper_case(), and
        capitalize() try to reuse the passed string if possible
        (suggested by Sunblood).
    - (interpret.c, func_spec, doc/efun/caller_stack)
        New efun caller_stack() (suggested by TubMud).

12-Mar-1999 (Lars Duening)
    - (otable) Commented and ansified.
    - (port.h, comm.c, simulate.c) __CYGWIN32__ replaced by __CYGWIN__.
        (b-990204-4)

12-Mar-1999 (Lars Duening)  (3.2.6-dev.53)
    - (object, interpret.c) Finished commenting this module.
    - (func_spec, interpret.c, efuns) New efuns abs() (thanks, Holger!),
        upper_case(), all_environment(). (f-990203-20, f-990217-1)

11-Mar-1999 (Lars Duening)  (3.2.6-dev.52)
    - (comm, lex.c) Increased the size of the buffer for the hostname in
        gethostname() from 20 to MAXHOSTNAMELEN+1 chars. The domainname
        is now determined once at startup from the hostname, removing
        the need for getdomainname() (which on some machines returned
        the NIS domain instead of the DNS domain anyway) (thanks, Freaky!).
        (p-990309-1,2).
    - (configure, autoconf/configure.in, all machine.h) Added test and
        define for <sys/param.h>. In return, the test for getdomainname
        is gone.
    - (interpret.c) F_CATCH/F_END_CATCH added the reserve to the eval_cost,
        but not the assigned_eval_cost. This could lead to amazingly
        high assigned_eval_cost afterwards. (thanks, Sunblood!)
    - (func_spec, interpret.c) efun clonep() returns just an int. The
        name of the blueprint can now be retrieved with the
        efun blueprint().
    - (HISTORY) Change the format a bit.
    - (efuns.{c,h}) Preliminary file holding all the new efuns.
    - (func_spec, efuns) New efun make_shared_string() (adapted from
        TubMud).

10-Mar-1999 (Lars Duening)  (3.2.6-dev.51)
    - (object, dumpstat.c, interpret.c, port.h, simulate.c, exec.h)
        Started commenting the object module, and adapted the other files.
    - (doc/efun/*) Improved the formatting of some files.
    - (prolang.y) Better error message if a local variable is declared
        again.
    - (mudlib/master.c) Forgot to change efun308() into set_environment().
    - (config.h) SUPPLY_PARSE_COMMAND is on again by default.

07-Mar-1999 (Lars Duening)  (3.2.6-dev.50)
    - (filestat.h) Oops, some compiler really don't like spurious ' even
        in inactive parts of the source.

07-Mar-1999 (Lars Duening)  (3.2.6-dev.49)
    - (backend.c, swap.c) Added missing #include "random.h" statements.
    - (parse.c) old_explode_string() was missing when only F_PROCESS_STRING,
        but not SUPPLY_PARSE_COMMAND was defined. Oops.
    - (filestat.h) Added #error statement in case somebody defines FILE_STAT.
    - (config.h) SUPPLY_PARSE_COMMAND is off by default.
    - (CHANGELOG) Corrected the entry for dev.46.
    - (interpret.c) m_indices() was found to lack the code for checking the
        mapping for destructed objects. Somehow it vanished from 3.2-dev.46.
    - (prolang.y) Cleared a variable-shadowing warning.
    - (closure.c, comm.c, gcollect.c, interpret, lex.c, make_func.y,
        mapping.c, object.c, prolang.y, simulate.c, swap.c)
        Added pragmas for Metrowerks compiler to handle unused
        variables and intentional assignments in conditions.
    - (hosts/be/Makefile) Now compiles on highest warning level.
    - (interpret.h, instrs.h, exec.h, make_func.y) Broke a recursive
        include loop.

06-Mar-1999 (Lars Duening)  (3.2.6-dev.48)
    - (func_spec, interpret.c, doc/efun/load_object)
        New efun load_object() to load blueprints.
    - (func_spec, interpret.c simulate, doc/efun/clone_object)
        Modified efun clone_object() to accept objects. (f-990305-1)

06-Mar-1999 (Lars Duening)  (3.2.6-dev.47)
    - (simulate.c) With logging of compilations activated, if the
        compilation of an object is aborted because an inherit is missing,
        the driver logs 'needs inherit' instead of 'done' on stderr.
    - (main.c, object, simulate) Extended the object structure with the
        field 'load_name' which gives (in !compat with leading slash)
        the filename from which the object resp. a clone's blueprint was
        compiled. This field is used by the clonep() efun.
    - (func_spec, interpret.c, doc/efun/clonep) New efun clonep() added.
        I just don't know how to handle virtual object clones with it.
        (f-990203-27, sort of)
    - (main.c, hosts/be/Makefile) Added comments regarding OPCPROF.
    - (array, interpret.c, parse.c) Since the old explode_string() is now
        static in parse.c, it was renamed to old_explode_string(). This
        allows to rename new_explode_string() in array.c to explode_string().

05-Mar-1999 (Lars Duening)  (3.2.6-dev.46)
    - (mapping, datatyps.h, interpret, array.c) Finished commenting the
        mappings module.
    - (parse, interpret.c)  F_DESCRIBE was never implemented, so the stubs
        are gone now, too.
    - (func_spec, simulate, doc/set_environment) Renamed efun308()
        to set_environment(). The old name is still available for now
        (and I think Hyp was the first to propose the new name). (f-981229)
    - (func_spec, interpret.c, doc/set_next_reset)
        New efun set_next_reset(). (adapted from Morgengrauen)

03-Mar-1999 (Lars Duening)  (3.2.6-dev.45)
    - (mapping, datatypes.h, array.c, main.c, interpret.c, object.c, swap.c)
        More comments and cleanup of the the mapping code.
    - (backend.c) No prompt is printed to interactive users if they are
        already closing down. This can happen if the current command caused
        the disconnection, but not destruction of the player object.
    - (array, interpret.c) Applied Sunbloods optimisation of
        subtract_array(), which improves the cases 'array - ({})' and
        'array - ({ x })' by avoiding copies and alist operations. (p-990303)
    - (util/Makefile, util/xerq/Makefile) Cosmetics.
    - (util/erq.c) Applied patches from TubMud, which also introduces two
        new service types 'ERQ_ACCEPT' and 'ERQ_LOOKUP'.

02-Mar-1999 (Lars Duening)  (3.2.6-dev.44)
    - (mapping, datatypes.h) More comments.
    - (util/xerq) Added Brian Gersts 'x-erq' demon (formerly 'tw-erq') as
        an alternative to Amylaar's original erq. So far it's a quick
        and dirty adaption. Thanks, Brian!
    - (main.c, simulate.c, gcollect.c) Removed the last FILE_STAT extra
        code.
    - (lotsa files): The following features are no longer optional resp.
        available: (f-981229-01)
          OLD_PREVIOUS_OBJECT_BEHAVIOUR: gone
          OLD_EXPLODE_BEHAVIOUR:         gone
          FLOATS:                        always available
          TRANSCENDENT_FUNCTIONS:        always available
          NO_XVARARGS:                   gone
          MAPPINGS:                      always available
        SUPPLY_PARSE_COMMAND is still there... for now.

01-Mar-1999 (Lars Duening)
    - (prolang.y) Undid most of the patch applied yesterday, because, as
        Sunblood and Chameloid pointed out, removing duplicate virtual
        inherits collides with p-990217 and results in sporadic losses
        of inherited functions *sigh*. However, the bugfix itself
        is ok and does stay.

28-Feb-1999 (Lars Duening)  (3.2.6-dev.43)
    - (prolang.y) Implemented the patch for the initialisation of
        virtually inherited variables (thanks, Sunblade!). (p-990227)

28-Feb-1999 (Lars Duening)  (3.2.6-dev.42)
    - (main.c) '--options' didn't print absolute swap paths correctly.
    - (dumpstat.c, object.h, interpret.c, simulate.c) The evalcosts are
        now also counted per object (in the variables ticks and gigaticks),
        and of course listed in the OBJ_DUMP and the debug_info(). (adapted
        from Morgengrauen)
    - (filestat.c, all config.h and Makefiles) Deactived the FILE_STAT
        accounting, but left the filestat.h in place for now - it might
        come in handy later.
    - (prolang.y) Variables in variable-only objects are now properly
        initialized by __INIT() (thanks, Sunblade!).

24-Feb-1999 (Lars Duening)  (3.2.6-dev.40)
    - (random) New implementation using the Mersenne Twister.

22-Feb-1999 (Lars Duening)  (3.2.6-dev.39)
    - (sprintf.c) Increased the size of the buffer for the string to be
        created from 10KBytes to 64KBytes (suggested by Woody).
    - (backend.c, swap.c) reset() is not called in objects which are swapped
        out or which haven't been touched since the last reset(). Also, if
        an object is swapped in after its due reset time, a new reset time
        is set. (adapted from Morgengrauen)
    - (prolang.y) Too big mapping aggregates generate a compile time error.
        (adapted from Morgengrauen)
    - (interpret.c) Illegal offsets in get_line_number() no longer crash
        the driver during a tracedump, but 'just' generate a diagnostic.
        (adapted from Morgengrauen)
    - (comm.c, telnet.h) Added telnet options for X Display location and
        authentification. (adapted from Morgengrauen)

18-Feb-1999 (Lars Duening)
    - (interpret.c) Bad types to [x..] ranges produce a meaningful error
        message.

17-Feb-1999 (Lars Duening)  (3.2.6-dev.38)
    - (interpret.c, prolang.y) Applied p-990217 from Sunblood (thanks!),
        which fixes b-981201 (calls to virtually inherited function lose
        track where the parents variables are) and b-981208-4 (redefinitions
        of virtually inherited functions). As a sideeffect, "*":: may now
        call the same function repeatedly if it is virtually inherited through
        different parent lines. I don't like this behaviour, but right now
        I don't grok the compiler well enough to change this. Consider it
        a bug!
    - (interpret.c) sizeof(mapping) checks the mapping for destructed
        objects first (thanks, Holger!) (b-990217-2)

16-Feb-1999 (Lars Duening)  (3.2.6-dev.37)
    - (be/Makefile) the generated executable is tagged with the proper
        version number (using setversion).
    - (interpret) sapply_int() and apply_low() take a flag argument,
        allowing to override any protection by static/protected keywords.
        This is used in apply_master_ob() to allow the master applies
        to be static; the earlier solution of setting current_object
        messed up the previous_object() relation (*doh*!), causing
        security systems to malfunction. sapply() itself is now a mere
        #define for sapply_int(). (b-981110-0)

15-Feb-1999 (Lars Duening)  (3.2.6-dev.36)
    - (INSTALL) A few small changes (thanks, Patrick!).
    - (my-rusage.h) Added an extra check for HPUX; I hope it uses the
        correct definition of timeval now for RUSAGE_TIME (thanks, Gum!).
        (b-990203-3)
    - (prolang.y) Corrected wrap-around problem when programs larger
        than 64K are compiled (thanks, Daniel!).
    - (call_out.c, interpret.c) Whenever a callout on an efun closure occurs,
        current_prog is set to NULL. Should an error occur, the dump_trace()
        will recognize this value and not try to derefence it (what caused
        the bugs p-990203-1 and b-990207 in the first place). The previous
        fix to this problem didn't quite work because it ignored that
        ob->prog might have been swapped out. However, should more places
        crop up where current_prog has to be tested for NULL, introducing
        a fake struct program for efun closures might be the better solution
        in the long run (as suggested by p-990203-1, second patch).
    - (interpret.c) Added new function push_valid_ob(object) which pushes
        the given object onto the vm stack, unless the object is destructed
        in which case the number 0 is put onto the stack. This function is
        used in various places to protect apply_master_ob() against destructed
        objects (esp. calls to privilege_violation(), heart_beat_error(),
        valid_read() and valid_write()) (thanks, Sunblood!) (b-981226-0).
    - (interpret.c) apply_master_ob() temporarily sets current_object to
        the master object, allowing the master functions to be static.

10-Feb-1999 (Lars Duening)  (3.2.6-dev.35)
    - (call_out.c) Callouts did not set up current_prog, this caused
        the tracedump to crash should an error occur in a callout to
        an efun closure (thanks, Sunblood and Logic!) (p-990203-1,
        b-990207).
    - (call_out.c) Callouts no longer confuse 'command_giver destructed
        meanwhile' with 'no command_giver to begin with' (thanks, Sissi
        and Tmm!) (b-990106-0, b-990204-0)
    - (closure.c) Made #'++/#'-- work (thanks, Zwirch!) (b-990204-3).
    - (comm.c) During logon, current_interactive is set to the
        object itself (thanks, Daniel!) (p-990203-3).
    - (comm.c) When doing I/O, no output is sent to destructed snoopers
        (thanks, Zwirch!) (b-990204-2).
    - (Makefile) Updated dependency generation for mkdepend 1.5.
    - (interpret.c) terminal_colour: Fixed a memory leak of the stack
        arguments and auxiliary strings - on Tubmud the leak was severe
        enough to make the GC last several hours (thanks, Sunblood!)
        (p-990203-0, b-990203-1)
    - (interpret.c) If adding to an array caused it to hit the upper limit,
        its memory was freed nevertheless. Subsequent accesses caused all
        sorts of interesting effects (thanks, Daniel and Zora!) (p-990203-2,
        b-990203-5).
    - (interpret.c) terminal_colour() correctly wraps strings of one less
        the wrap limit (thanks, Chameloid!) (b-990210).
    - (interpret.c) A call_lambda() on a CLOSURE_IDENTIFIER makes sure
        that the variable is swapped in (thanks, Sunblood and Matthew!)
        (b-990203-0, b-990203-6).
    - (func_spec, interpret.c) to_int(), to_object() and to_float() accept
        their target data type as argument (thanks, Zora and Zwirch!)
        (b-980922-0, f-980928-0).
    - (prolang.y) Applied a patch fixing a potential crasher (thanks, Daniel!)
        (p-990203-5).
    - (sprintf.c) Added guards against values < 1.0 to the use of log10
        when estimating the number of digits to print (thanks, Chameloid!)

12-Dec-1998 (Lars Duening)  (3.2.6-dev.34)
    - (make_func.y, Makefiles) The file efun_defs.c is written directly
        my make_func, not just dumped to stdout. The generated lang.y
        now bears a notice that the file is generated automatically.
    - (mapping) First comments added.

10-Dec-1998 (Lars Duening) -- Release 3.2.5
    - Froze 3.2.5-dev.33 for release.

09-Dec-1998 (Lars Duening)  (3.2.5-dev.32)
    - (make_func.y, func_spec) Commented and ansified.

08-Dec-1998 (Lars Duening)
    - (lex.*) Commented and ansified.
    - (comm.c) At the end of a session the driver does no longer
        send 'Closing down' to the socket.

07-Dec-1998 (Lars Duening)
    - (simulate) New function check_no_parentdirs() checks a pathname
        for parent dir specifications (e.g. '/../').
    - (sprintf) This is actually an old change, but I forgot to log
        it at that time: increased the size of an internal buffer
        used to print float numbers to prevent crashes with big floats.
        Additionally the code tries to estimate and adjust the size of
        the output before it prints the float, and tests for a buffer
        overrun and aborts the driver with a fatal() if it happens
        (b-980420).

06-Dec-1998 (Lars Duening)  (3.2.5-dev.29)
    - (port.h) When compiling with the GNU compiler, _GNU_SOURCE is
        defined.
    - (swap.c) A seek error when trying to write a (new) block to
        the swap file is no longer a fatal() error.
    - (Makefile.in, util/Makefile) A normal make in util/ no longer
        attempts to install the binaries. To do that, use the target
        'install' in util/ or 'install-utils' in the main directory.

04-Dec-1998 (Lars Duening)
    - (ed.c) Oops, had an embedded \0 character in a help text.
    - (main.c) The version number printed on --version and --options
        now distinguishes real releases and development versions.
    - (simulate.c) legal_path() uses a refined test for '..'-directory
        specifications, now being able to tell these apart from harmless
        uses like '..file' or '...' (thanks, Fiona!).

03-Dec-1998 (Lars Duening)  (3.2.5-dev.28)
    - (backend.c) f_regreplace(): reallocation-condition was 'space < 0',
        instead of 'space <= 0' which could cause memory writes just one
        byte beyond the allocated block (b-981202-2).
    - (interpret.c) dump_trace() and get_line_number() lacked the handling
        of ALIEN_LFUN_CLOSURE calls, signified by a 0-valued pc on the
        control stack. This caused runtime errors in funcalls to
        symbol_function()s to crash in the error handling.

02-Dec-1998 (Lars Duening)  (3.2.5-dev.27)
    - (lotsa files) Replaced tab characters with spaces.
    - (comm.c) Under Linux, a special handler is used to ignore SIGPIPEs,
       since the provided SIG_IGN is just a one-shot handler (thanks,
       Blackcat!).

01-Dec-1998 (Lars Duening)  (3.2.5-dev.26)
    - (main.c, ed.c, port.h) Cosmetics.
    - (simulate.c) Efun command() now returns 0 when the target object
        or the current object are destructed.
        Similar, the handling for a string H_MODIFY_COMMAND hook did
        not check if the command_giver is destructed. If the gamedriver
        was compiled with -DDEBUG, this caused a fatal error 'apply()
        on destructed object'.
    - (interpret.c) call_lambda() increments the refcount of lambda
        closures while executing their code. This is important
        for driver hook closures which may first destruct and then
        reload the master. Without the refcounting, this would delete
        the bytecode while it is executed (thanks, Sunblade!).
    - (patchlevel.h)
        Correcte the automatic generation of release dates.

30-Nov-1998 (Lars Duening)
    - (closure.c) Compensated a (propable) optimizer error for Linux/gcc.
        See C_COMPILER_BUGS for details.
    - (port.h) The replacement define for strrchr() was faulty.

27-Nov-1998 (Lars Duening)  (3.2.5-dev.25)
    - (simulate.c) One line was lost in error(), messing up the
        command_giver in a heart_beat error.
    - (interpret.c) Experimented with the TubMud patch to mark
        efun closures by clearing csp->prog. However, the driver
        interprets this value as 'bottom of cs stack' and thus
        gets confused in F_RETURN and propably other places, too.

25-Nov-1998 (Lars Duening)  (3.2.5-dev.24)
    - (comm.*) Commented and converted to standard C. Also removed
        the portal fragments - they didn't work anyway.
    - (call_out.*, dumpstat.*, ed.*, gcollect.*) Commented and converted
        to standard C. Also improved a few of the helpfiles of the
        editor.
    - (my-rusage.h, port.*, comm.*, hosts/be/be.h) Resolved some minor
        issues under BeOS/x86.
    - (main.c) Fixed a small problem in the option parsing.
    - (object) The program renumber moved in here from gcollect.

21-Nov-1998 (Lars Duening)
    - (hosts/fcrypt) Removed.
    - (comm.c) Renamed from comm1.c

20-Nov-1998 (Lars Duening)
    - (lotsa files) MSDOS support removed. Parts of the driver wouldn't
        compile under MSDOS anyway. However, the support for the MSDOS
        filesystem is still there.

19-Nov-1998 (Lars Duening)
    - (comm1.c, config.h) The ERQ send buffer size is now configurable
        in config.h, too. Also, the default size is now 1KByte for
        better throughput.
    - (lex.c, main.c) New defines __ERQ_MAX_SEND__ and __ERQ_MAX_REPLY__ if
        if compiler is defined for ERQ support.
        Both changes are taken from the x-erq distribution of Brian Gerst.
    - (driver.h) If CATCH_UDP_PORT is not defined, UDP_SEND is made
        undefined, too.

18-Nov-1998 (Lars Duening)
    - (lex.c) Compat mode drivers define __COMPAT_MODE__ (meant to
        replace COMPAT_FLAG eventually); native mode drivers define
        __NATIVE_MODE__. Similar, a driver using euids defines __EUIDS__.
    - (access_check.c) Sometimes the "Can't stat ACCESS_FILE" message
        was generated for no reason.
    - (mudlib/test_master.c) Extended the master to use normal
        add_actions().

15-Nov-1998 (Lars Duening)
    - (comm1, sent.h, simulate) Began ansification of comm1.c .
        Moved the definition of the input_to structure from sent.h
        to comm1.c
    - (Copyright, CREDITS) Some cleanup.

11-Nov-1998 (Lars Duening)
    - (smalloc.c) Ups, srealloc() must not be static when compiling
        with SBRK_OK, as it implements the realloc() function then.
    - (interpret.c, simulate.c) Added some #ifdef DEBUG...#endif
        statements where appropriate.
    - (gcollect) Variable time_last_gc was not visible when compiling
        with MALLOC_sysmalloc.

10-Nov-1998 (Lars Duening)
    - (interpret.c, my-rusage.h, port.h) A few changes to accomodate
        SunOS4.
    - (lex.c) Only regular files can be used as include files; before
        it was possible to include directories.

09-Nov-1998 (Lars Duening)
    - (lex.c) Replace the alloca()d buffers in _expand_define() with
        once-xalloc()ed ones. In DEBUG mode, recursive calls to
        _expand_define() are caught.
    - (lex.c, patchlevel.h) Non-release versions have a version number
        of the form '3.2.5-dev.16'.
    - (interpret.c) Corrected an off-by-one error in the stack handling
        of mapping_contains() (b-980922-1).

08-Nov-1998 (Lars Duening)
    - (my-alloca.h) If alloca.c is used, the system alloca files
        are not included - in most cases they define alloca() to
        something which is not covered by alloca.c, kind of spoiling
        the desired effect.
    - (lex.c) If alloca.c is used, a call to alloca(0) is made after
        each use of _expand_define(), to keep the memory usage low.
    - (hosts/be/machine.h, .../Makefile)
        alloca.c is no longer used.

04-Nov-1998 (Lars Duening)
    - (access_check.c) If the ACCESS_FILE can't be read, an error
        message is printed to stderr.
    - (comm1.c) Sorted out the BeOS blocking socket problem.

03-Nov-1998 (Lars Duening)
    - (func_spec, interpret.c, prolang.y) F_SWAP and F_BREAK_POINT
        are compiled in only when the efuns are actually defined.
        By default, they aren't.
    - (simulate.c) Removed the remaining debug outputs.
    - (closure.c) The branch rewriting code, responsible for changing
        BRANCHes into LBRANCHes when a closure grows big in size, did
        not correct 16-Bit offsets for the new target addresses of new
        code. The applied fix solves the problem for UNItopia (using <>
        as #include specifier), but might not be sufficient for all
        cases. Therefore, two DEBUG: messages remain to warn if this
        feature is used.
    - (hosts/be/*) Adapted for R4/x86.
    - (*.c) Removed most of the 'Possibly unwanted assigment' warnings.

02-Nov-1998 (Lars Duening)
    - (simulate) Corrected bugs in make_name_sane() and load_object().
        The debug outputs are still in place for now (b-981029-0).

01-Nov-1998 (Lars Duening)
    - (hosts/be/Makefile) Adapted to BeOS R4.
    - (simulate) The functions find_object() and find_object2() are
        merged into one function lookfor_object(). For the old calls
        the macros get_object() and find_object() are available
        (note the subtle shift in naming!). This reduces the number
        of calls to make_name_sane().
        The function load_object() is no longer exported.
    - (simulate) Rewrote the load_object() to use a loop for the
        iterative compilation process instead of tail recursion.
    - (patchlevel.h) Automatized the versioning to use PRCS keywords.
    - (comm1.c) After processing a received UDP packet, the evalution
        costs are cleared (thanks, Tucita!) (p-981027-0).
    - (main.c) The argument parser printed the wrong option in
        one error message (b-980925-1).
    - (config.h, hosts/*/config.h) Increased the limit for bit strings
        to 6144 Bits (using 1KB memory).
    - (interpret.c) Out-of-bounds error message for the bit efuns printed
        garbage instead of the faulty bitnumber (b-980925-0).

09-Oct-1998 (Lars Duening)
    - (array.c, backend.c) Added some checks if memory allocations
        actually succeed.

23-Sep-1998 (Lars Duening) -- Release 3.2.4
    - (simulate.c) load_object() The code cleaning up the filename did
        not check if an object with the 'sane' filename already exists.
        This lead to duplicate entries in the object table and thus
        fatal driver aborts. Furthermore, the code carelessly modified
        the string passed, causing disruptions in the shared string
        table.
    - (doc/efun/terminal_colour, doc/efun/query_mud_port) added.

22-Sep-1998 (Lars Duening)
    - (filestat.*) Oops, the one statistic necessary to detect multiple
        uses of a file in one command was missing. Corrected that.

21-Sep-1998 (Lars Duening) -- Release 3.2.3
    - (array.c) Changed order_alist() to use standard conformant pointer
        arithmetics.
    - (backend) Added the statistic 'total_player_commands'.
    - (filestat.*) Statistics module counting the number and type of
        file usages (read, write, delete, read for compilation, read
        for inclusion, read for restore_object, write for save_object).
        The statistic is enabled by defining FILE_STAT in config.h.
        The statistic is appended to the file /FILESTAT when the
        special command 'status files' is given.
    - (access_check.c, backend.c, comm1.c, dumpstat.c, main.c, gcollect.c,
       lex.c, main.c, object.c, simulate.c, various Makefiles)
         Adapted for filestat.
    - (main.c) Beautified the --options output.
    - (swap.*, main.c) New commandline option '--swap-compact' to put
         the swapper in the "compact mode". In this mode, free space in
         the swapfile is reused immediately; in contrast to the default
         mode in which the reuse is determined by low/high watermarks.

20-Sep-1998 (Lars Duening)
    - (interpret.c) F_MAPPING_CONTAINS returned destructed objects since
        it didn't check the results of get_map_lvalue() properly (thanks,
        Fiona and Zora!).
    - (backend.c) Reallocation of the heartbeat array now conforms more
        to the standard.

14-Sep-1998 (Lars Duening) -- Release 3.2.2
    - (array.c) One statement was at the wrong place in order_alist(),
        causing a malfunction in explode().
    - (closure.c) store_case_labels(): another crasher removed, this
        time two loops assumed that the variables local to their body
        keep their values between two iterations.
    - (interpret.c) As in closure.c, loop body variables are moved
        outside their loops if they are meant to be persistant.
    - (interpret.c) A misplaced cast broke sscanf().
    - (backend.*, hash.*) Beautified and commented.
    - (main.*) Marked the boolean commandline parameters as such.
         The gamedriver announces itself as 'LDMud'.
    - (patchlevel.h) Changed version number from 03.02.1@<patchlevel>
        to 3.2.<patchlevel> (note the missing leading zeroes!).
    - (CHANGELOG) renamed from CHANGELOG.OSB.
    - (HISTORY) new file for a user-oriented summary of the changes.

10-Sep-1998 (Lars Duening)
    - (alloca.c) Beautified.
    - (simulate.c) load_object: Extended the sanity checks for filenames
        a bit: multiple '/' are collapsed into just one (thanks for the
        idea, Zora!).

05-Sep-1998 (Lars Duening)
    - (main.c) Oops, small typo in options() (thanks, Woody!).
        And the short command options are now case sensitive as they
        should be.
    - (closure.c) Omission of a seemlingly harmless cast caused
        the driver to core when compiling a switch. Unfortunately, my
        simple test_master.c didn't catch this. *sigh* We need a proper
        testsuite...
    - (ed.c, interpret.c, lex.c, mapping.c, parse.c, prolang.y, sprintf.c)
        Checked for and corrected similar casts.
    - (swap.c) Re-added Macbeth's watermark handling for the reusage
        of free-space, though for now it's deactivated .
    - (*.c, *.y) Added some parentheses as suggested by gcc to make the
        code clearer.
    - (comm.*, interpret.c) Replace the define MESSAGE_FLUSH by the
        variable message_flush, keeping gcc happier.
    - (prolang.y) Bugfix from mubo@silicondream: If a program defined
        __INIT() but didn't implement it, later inheriting of this
        program crashed the driver.
    - (port.h, interpret.*, prolang.*, stralloc.*) New macro LOCAL_INLINE
        for compilers which can inline a function locally while at the
        same time offering it for external linkage.

02-Sep-1998 (Lars Duening)
    - (array.*) Commented and converted function defs to STD-C style.
    - (array.c) Small improvements to unique_array() (boy, that code
        is really old!).
    - (main.c) Some warnings about unused variables prevented.

18-Aug-1998 (Lars Duening)
    - (datatypes.h) New include file declaring all commonly used
        datatypes of the virtual machine (svalue, vector, etc).
        interpret.h keeps the interpreter related declarations only.
        This also unclutters the struct svalue/smalloc.h relationship
        a bit.

17-Aug-1998 (Lars Duening)
    - (main.c) --options prints all the compilation options, --version
        just the version. --help shortened to just list all commandline
        options, --longhelp prints an elaborate description of these.

16-Aug-1998 (Lars Duening)
    - (access_check.*) Commented, converted function defs to ansi style.
    - The old access control using the ACCESS.DENY file is gone.
    - (patchlevel.h) The GAME_VERSION define moved from config.h into here.
    - (main.*) Commented, converted function defs to ansi style.
        Rewrote the commandline argument parser. Most options are now
        available in a short and long version; --version prints all
        sorts of compilation options as well. New option --help.
    - (driver/invocation) New documentation: driver invocation.

13-Aug-1998 (Lars Duening)
    - Updated the hosts/*/config.h files.
    - (hosts/be/be.h) The host dependent init makes sure that the erq
        is not started automatically, even if the option to do so is
        set in config.h
    - (my-rusage.h) new, a wrapper for the rusage related stuff.
    - (hosts/unix.h) received all the Unix specific portability
        definitions from driver.h (this includes the cygnus win32
        environment).
      (port.h) received the remaining host dependent definitions, so that
      (driver.h) can be dedicated to provide global definitions.
    - (port.*, random.*) Commented, converted function defs to ansi style.

12-Aug-1998 (Lars Duening)
    - (driver.h) Created from the old lint.h, it defines some macros and
        includes config.h, machine.h and port.h. The system-dependent stuff
        will move into port.h eventually. All sources changed to use
        driver.h instead of lint.h.
    - (my-alloca.h) new, a wrapper for <alloca.h>.
    - (cruft/) New directory for code snippets which are no longer
        useful, but interesting enough to keep around.
    - (hosts/be/Makefile) New target 'dependall' updates the
        dependencies in Makefile, Makefile.in, and the Makefiles
        for Be, Amiga and OS/2.

11-Aug-1998 (Lars Duening)
    - Compiled the sources with gcc on a high warning level and
      removed as many warnings as possible. Added some patches
      for compiling under Win32 with Cygwin32.

09-Aug-1998 (Lars Duening)
    - 'Modularized' the sources: the exports of every .c file are
      listed in an associated .h file, and only there. The liberal
      sprinkling of 'extern' statements is gone.

10-Jul-1998 (Lars Duening)
    - Release 3.2.1@141-osb.16
    - (prolang.y) Fixed a pointer mixup which caused '"*"::' to end
        in an endless loop. Bugfix provided by Daniel von Dincklage
        (<vonDincklage@ozet.de> aka Sunblade@sd.mud.de)
    - Updated the BeOS support: small tweaks to machine.h, the Makefile
        now supports cross-compilation, a small hack in comm1.c.

04-Jul-1998 (Lars Duening)
    - (prolang.y) In case of a 'Program too large' compilation error,
        random memory was freed due to an uninitalized variable.
    - (mudlib/test_master.c) Added this minimal master for simple
        driver tests.

17-May-1998 (Lars Duening)
    - Release 3.2.1@141-osb.14
    - (interpret.c) The apply cache is initialized on driver startup, not
      statically at compilation time. This allows compilers with less
      capable preprocessors (line length limitations) to use big caches
      as well.

16-May-1998 and before (Lars Duening)
    - added rxcache.[ch]: cache for compiled regular expression patterns.
    - added support for BeOS.
    - (backend.c) Automatic garbage collections are kept at least 5 minutes
      apart. Every garbage collection is logged on stdout.
    - (backend.c) Variables are swapped independantly from program code.
    - (comm1.c, main.c) Multiple login ports may be used in parallel. The
      port numbers are given on the commandline, efun query_mud_port()
      was extended to return the appropriate port number.
    - (interpret.c) MudOS-efun terminal_colour() added by Mica.
    - (interpret.c) this_object() in destructed objects does not print a
      diagnostic anymore.
    - (lex.c) more informative diagnostics about defbuf allocations. Too
      big defbufs are deallocated again to conserve memory.
    - (main.c) reallocation of system reserves prints diagnostics.
    - (regexp.ch) NSUBEXP may take values different from 10 (OSB uses 50).
    - (swap.c) Free space is reused immediately.
    - (stralloc.ch, interpret.c) All the names of the lfuns applied by
      the driver are stored in the shared string table on startup.
      Together with some modifications to the apply cache for faster
      processing of applys on shared strings, this should make a mud
      a wee bit faster. Also added some comments in these areas (with
      no guarantee for correctness!).
    - (simulate.c) 'status tables' prints the number of cache hits both
      absolute and as percentage.