changes-3.2.9

driver
17-June-2001 (Lars Duening) -- upcoming Release 3.2.9

    - Changed efuns:
       + allocate(): Accepts an optional initialisation value and can
           create multi-dimensional arrays.
       + clones(): If the driver is compiled with DYNAMIC_COSTS, the cost
           is proportional to the number of objects in the game.
       + ctime(): Accepts the output of new efun utime() as well.
       + debug_info(): New argument DINFO_TRACE to return the current
            or the last error call stack.
            Argument (DINFO_DATA, DID_MEMORY) also returns the number
            and size of permanent and clib allocations (where
            applicable).
            Argument (DINFO_DATA, DID_STATUS) also returns
            the total number of heartbeat calls.
            Single values of (DINFO_DATA) can be returned instead of the
            whole array.
       + debug_message(): New second argument determines where to
            log the message, and if to prepend a timestamp.
       + exec(): If this_interactive() points to one of the involved
            objects, it is switched over as well, like this_player().
       + filter(), map(), sort_array(), walk_mapping(): Protected lvalues
            (e.g. &(i[0])) are not allowed as callback parameters.
       + lambda(): Simul efuns with extended varargs weren't compiled
            correctly.
       + object_info(): OINFO_MEMORY also returns the program flags
           NO_INHERIT, NO_SHADOW and NO_CLONE, and gives a better account
           of the memory used for strings and variables.
           Single values can be returned instead of the whole array.
       + printf(), sprintf(): A leading zero in the field size will now print
           only leading zeros and not interfere with the pad string option.
       + query_udp_port(), send_udp(): Renamed from query_imp_port() and
           send_imp().
       + regexp functions: more compatible with 8-bit characters.
       + regexp functions: New metacharacters '+' allows to specifiy 'at
           least one match'.
       + regreplace(): Accepts a closure to produce the replacement string
           instead of just a constant string.
       + sin(), cos(), tan(), atan(), atan2(), log(), exp(), sqrt(), pow():
           Integers are accepted as arguments, too.
       + terminal_colour(): Colour keys can now be mapped using a closure.
       + add_verb(), add_xverb(), efun308(), file_name(), map_array(),
         filter_array(), filter_mapping(), map_mapping(), m_sizeof(),
         send_imp():
           Available only if driver is compiled with support for
           deprecated efuns.

    - Corrected efuns:
       + call_out(): In release 3.2.8 lvalues were not allowed as arguments -
           now they are again.
       + call_resolved(): Now accepts a destructed object as second parameter
           as it should.
       + functionlist(): The filter flags didn't really work.
       + input_to(): The option IGNORE_BANG didn't work. In charmode, !-escapes
           after the first received data are now recognized. 
       + object_info(): The returned OIB_NAME now starts with a '/' in plain
           mode.
       + printf(), sprintf(): The formatter "%^" will print "%^", for
           compatibility with terminal_colour().
       + sscanf(): the format '%s%d' failed to parse 'ab1cd' correctly.

    - New efuns:
       + db_affected_rows(), db_conv_string(), db_close(), db_connect(),
         db_exec(), db_fetch(), db_handles(), db_coldefs(), db_insert_id(),
         db_error():
           Optional: mySQL support.
       + md5_encrypt(): Compute the MD5 message digest for a string.
       + min(), max(): To select the minimum resp. maximum among a bunch
           of numbers or strings.
       + sgn(): Return the sign of a numeric argument.
       + utime(): Return the current time in microsecond resolution.

    - Master Object:
       + receive_udp(): Renamed from receive_imp().
       + privilege_violation(): Privilege "send_udp" replaced "send_imp".
       + valid_trace(): New second argument to receives the argument
           passed to the efun.
       + runtime_error(): Receives an extra argument to distinguish between
           normal runtime errors, and those occuring during a heartbeat.
       + include_file(), H_INCLUDE_DIRS: The pathnames can now start
           with leading slashes.
       + If a master is forced to reload via SIGUSR1, all inherited objects
           (if any) are reloaded as well.
       + Bugfix: slow_shut_down() was not called with previous_object(),
           this_player() and this_interactive() being 0.
       + Bugfix: When reactivating a destructed master, the lfuns
           inaugurate_master() and reactivate_destructed_master() are found
           even when static.

    - Fixed Crashers:
       + Catching errors with catch() did not work reliably when the
           driver was compiled with gcc.
       + Unlucky combinations of heart_beat() definitions or declarations
           (e.g. private and public inheritance in this order) crashed
           the driver when the heart_beat() was called.
       + When creating long value save strings, the driver crashed on
           corrupted memory.
       + If the object for a prompt-closure is destructed, the driver
           could crash under extremely unlucky circumstances.
       + #define'ing the name of an inline closure was not detected.
       + Assignments of computed strings sometimes crashed the driver.
       + Pre-increment or -decrement on an undefined variable, where
           the result was used in a typechecked context.

    - Language:
       + New operators '>>>' and '>>>=' for logical right shifts.
       + New LPC define __LDMUD__ to identify this driver branch.
       + New LPC defines __VERSION_MAJOR__, __VERSION_MINOR__,
         __VERSION_MICRO__, __VERSION_PATCH__ expand to the various parts
         of the driver version.
       + Numbers can also be specified as binary patterns with the '0b'
           prefix, and as octals with the '0o' prefix.
       + Floating point numbers can now also be specified in the
           exponential notation, e.g. '3.14E-5'.
       + Character escape sequences can now specify the character code
           directly in decimal ('\[1-9]...'), octal ('\0o...'), sedecimal
           ('\x...' and '\0x...') and binary ('\0b...').
       + The operators '++' and '--' can now be used on floats, too.
       + Closures bound to destructed objects are now treated uniformly
           like destructed objects and are replaced by 0s where required.
       + Lfun and variable closures can now be compared with '==' and '!=',
           and are treated correctly in alist and array operations.
       + Inline closures inherit the visibility of their defining function.
       + Experimental: Extended the construct catch() with the keyword
           'nolog', which suppresses logging the caught error in the logfiles.
           It is meant for objects like wizard tools.
       + It is no longer possible to prematurely end an inline closure
           function by inserting a free '}'.
       + Global functions are no longer hidden by local variables.
       + It is now possible to cast to '(mixed)'.
       + If operands of different types are given to '?:', the result
           will have the type 'mixed'.
       + Integers and floats can now be compared against each other.
       + Bugfix: Adding mappings of different width throws an error, unless
           one of the mappings if empty.
       + Bugfix: Right shift by 32 or more bits was computed incorrectly.
       + Bugfix: The type tracking of multiplications can returns the right
           type when seeing 'mixed' operands.
       + Bugfix: All <op>= assignment can now operate on indexed strings
           on the left hand side.
       + Bugfix: Additions of floats to 0 yielded the wrong type.
       + Bugfix: For closely consecutive switch case ranges (e.g. 'case
           -2..-1: case 1..2:') the compiler generated faulty lookup
           tables.
       + Bugfix: Improved the typetracking for operator '&' when used with
           mixed variables.
       + Bugfix: A cast of an expression to its own type now longer inserts
           a conversion operation.
       + Bugfix: Global variables can no longer be redefined in the same
           scope.

    - Runtime:
       + New runtime limit LIMIT_CALLOUTS (commandline option
           '--max-callouts') for the maximum number of callouts at one time.
       + Attempts to set a single string character to 0 now raise
           a runtime error.
       + The internal alarm timing is monitored and restarted in case the
           alarm gets lost (happens often on Cygwin).
       + Normal runtime errors are no longer reported on the console.
       + Bugfix: IPv6 name lookup works again, and also with both xerq and erq.
       + Bugfix: The driver now longer gets a confused when a client like
           TinyFugue refuses to use CHARMODE.
       + Bugfix: On mapping addition or element assignment, invalid keys (like
           destructed objects) were still counted against the allowed mapping
           size.
       + Bugfix: Simple reference loops as created by
           'b = 0 || &a; b = 0 || &a;' are detected.
       + Bugfix: When destructing an object, references through closures
           are removed from the local variables as well.

    - Other Changes:
       + New driver option '--pidfile <filename>' to write the pid of the
          driver process into a file.
       + New driver option '--erq <filename>' to choose a different name
          for the ERQ executable (default is 'erq'). The option can also
          be used to specify the full pathname of the executable.
       + The driver mode (plain or compat) can be selected with a commandline
           option ('--no-compat' resp. '--compat').
       + New driver options '--min-malloced' and '--min-small-malloced' to
           specify the size of the initial block allocations.
       + Removed a couple of fatal race-conditions in the xerq.
       + New configuration option 'use-deprecated' allows
           to disable obsolete and deprecated efuns. If enabled, the macro
           __DEPRECATED__ is defined.
       + The UDP port is now a standard feature. The option has been renamed
           from 'catch_udp_port' to just 'udp_port'.
       + Swapping is now a standard feature, though it still can be
           disabled by specifying swapping times of 0.
       + The ERQ_EXECUTE command now recognizes quoted arguments.