mirror of
https://github.com/ldmud/ldmud
synced 2026-08-12 14:26:05 -04:00
git-svn-id: svn://svn.bearnip.com/ldmud/3.2/trunk@2813 56160b6e-f8f8-0310-bd54-bccebfe6a2f2
1440 lines
74 KiB
Text
1440 lines
74 KiB
Text
This file lists all changes to the game driver which have a visible
|
|
impact on its behaviour both towards the mudlib as well as towards
|
|
the host system.
|
|
|
|
For a detailed list of all changes see the file CHANGELOG.
|
|
|
|
10-Jan-2010 (LDMud Team) -- 3.2.17
|
|
|
|
- Fixed Crashers:
|
|
+ Removed a crash pkg-tls: we implicitly free'd the client CA list,
|
|
which was then overwritten. (#677)
|
|
+ Fixed a crash caused by very big switch blocks. (#622)
|
|
|
|
08-Aug-2009 (LDMud Team) -- 3.2.16
|
|
|
|
- Fixed Crashers:
|
|
+ Removed a crasher when running with --check-refcounts: References
|
|
by snooping non-interactives weren't counted (Bug #492).
|
|
+ An argument mismatch error during a lfun-closure call could
|
|
crash the driver. (Bug #495).
|
|
+ Removed a possible stack overflow in restore_value (Bug #532).
|
|
+ save_object(), restore_object(), send_erq(), send_udp(),
|
|
db_conv_string(), regexplode(), regexp(), present_clone()
|
|
could crash the driver due to stack overflows, when large
|
|
string were used as arguments.
|
|
|
|
- Other Changes:
|
|
+ The mySQL configuration failed to handle less-standard standard
|
|
paths correctly.
|
|
+ The autoconfiguration of YACC was incompatible with gentoo Linux.
|
|
+ Removed certain 64-bit issues (Bug #490, #491).
|
|
+ Removed an issue with local variable initialization after an
|
|
inner block (Bug #537).
|
|
|
|
|
|
05-Oct-2007 (Lars Duening) -- Release 3.2.15
|
|
|
|
- Changed efuns:
|
|
|
|
- Corrected efuns:
|
|
|
|
- New efuns:
|
|
+ tls_refresh_certs(): Reload the certificates and certificate
|
|
revocation information.
|
|
|
|
- Master Object:
|
|
|
|
- Fixed Crashers:
|
|
|
|
- Language:
|
|
|
|
- Runtime:
|
|
|
|
- Other Changes:
|
|
+ New commandline options to handle certification revocations:
|
|
--tls-crlfile <pathname>
|
|
Use <pathname> as the filename holding your certificate revocation
|
|
lists. If relative, <pathname> is interpreted relative to
|
|
<mudlib>.
|
|
|
|
--tls-crldirectory <pathname>
|
|
Use <pathname> as the directory where your certificate revocation
|
|
lists reside. If relative, <pathname> is interpreted relative to
|
|
<mudlib>.
|
|
|
|
|
|
06-Mar-2006 (Lars Duening) -- Release 3.2.13
|
|
|
|
- Changed efuns:
|
|
+ sscanf(): The new modifier '+' requires the matching of
|
|
the characters after a field in order to consider the field
|
|
as matched.
|
|
|
|
- Corrected efuns:
|
|
|
|
- New efuns:
|
|
|
|
- Master Object:
|
|
|
|
- Fixed Crashers:
|
|
|
|
- Language:
|
|
|
|
- Runtime:
|
|
+ The tracedepth was calculated incorrectly for efun closures
|
|
and callbacks.
|
|
+ Removing an interactive as part of a fatal comm error clobbered the
|
|
current object.
|
|
+ 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.
|
|
|
|
- Other Changes:
|
|
|
|
|
|
27-Nov-2005 (Lars Duening) -- Release 3.2.12
|
|
|
|
- Changed efuns:
|
|
+ md5(): Accept number arrays as arguments as well.
|
|
+ md5(): Accept the number of iterations as optional argument.
|
|
+ function_exists(): The 'FEXISTS_ALL' result also contains
|
|
information about the function's type, flags, and number of
|
|
arguments.
|
|
+ sscanf(): Added test whether the constant characters after
|
|
a %-field also match - if not, the %-field is considered unmatched.
|
|
+ tls_check_certificate(): Return the low-level API results, and throw
|
|
an error if the connection is not secure.
|
|
|
|
- Corrected efuns:
|
|
+ call_out(), input_to(): Local references are no longer
|
|
accepted as extra arguments.
|
|
+ restore_value(): Restoring one-character operator closures
|
|
in arrays works again.
|
|
+ set_environment(): Clear the RESET_STATE flag of
|
|
of the moved object's original environment, if any.
|
|
+ to_int(): No longer accepts "x<num>" as valid sedecimal notation.
|
|
|
|
- New efuns:
|
|
|
|
- Master Object:
|
|
+ runtime_error(), heart_beat_error(): A new argument 'caught'
|
|
signals if the error is caught or not.
|
|
|
|
- Fixed Crashers:
|
|
+ An error during the fatal() processing will be treated
|
|
as a double-fatal.
|
|
+ Freeing a deeply nested value structure no longer overflows
|
|
the local stack.
|
|
|
|
- Language:
|
|
+ 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.
|
|
|
|
- Runtime:
|
|
|
|
- Other Changes:
|
|
|
|
|
|
19-Mar-2005 (Lars Duening) -- Release 3.2.11
|
|
|
|
- Changed efuns:
|
|
+ db_*(): mySQL efuns trigger a privilege violation ("mysql", "<efun
|
|
name>").
|
|
+ get_dir(): New flags GETDIR_ACCESS and GETDIR_MODES to return
|
|
the file access times and file modes.
|
|
+ input_to(): New flag INPUT_NO_TELNET to modify the INPUT_CHARMODE
|
|
behaviour.
|
|
+ input_to(): New flag INPUT_APPEND to queue input_to()s.
|
|
+ tell_object(): The efun can now take an array as second
|
|
argument, and then calls catch_msg() in the target.
|
|
+ present(): The argument form (str, n) allows for ids with embedded
|
|
numbers.
|
|
+ shutdown(): Added an argument to set the process exit code.
|
|
+ to_int(): The base prefixes '0x', '0o' and '0b' are supported.
|
|
|
|
- Corrected efuns:
|
|
+ deep_copy(): Deep-copying mappings with shared arrays as keys
|
|
could corrupt memory.
|
|
+ net_connect(): On multi-homed machines, the created socket
|
|
is bound to the hostname given at program start.
|
|
+ save_object(): Matching the documentation, the efun really removes
|
|
a trailing '.c' from the filename.
|
|
+ save_{value, object}(), restore_{value, object}(): Some operator
|
|
closures could not be saved and restored.
|
|
|
|
- New efuns:
|
|
+ tls_query_connection_state(), tls_query_connection_info(),
|
|
tls_init_connection(), tls_deinit_connection(), tls_error(),
|
|
tls_available(), tls_check_certificate():
|
|
Optional: Support for TLS connections.
|
|
|
|
- Master Object:
|
|
|
|
- Fixed Crashers:
|
|
+ A shadow executing remove_action(1, shadowee).
|
|
+ A too-large allocation (like in " "*MAX_INT) no longer crashes the
|
|
mud unless done in SYSTEM allocation mode.
|
|
+ Allocating an array enough elements to exceed the internal numeric
|
|
limits.
|
|
+ Warnings printed during the generation of a closure crashed the
|
|
driver.
|
|
+ The traceback generation was limited by the array limits, and thus
|
|
could throw an error again.
|
|
+ to_array('symbol) caused a crash.
|
|
+ An error in save_{object, value}() followed by a GC left
|
|
behind an invalid pointer.
|
|
+ Error while loading an object with a too-long filename.
|
|
+ Restoring non-existing (simul-)efun closures created illegal
|
|
closure values.
|
|
+ Specifying a fieldsize or precision beyond the numerical limits
|
|
in sprintf()/printf().
|
|
+ Indexing a 0-width mapping yielded invalid values.
|
|
|
|
- Language:
|
|
+ The macros __FLOAT_MIN__ and __FLOAT_MAX__ gave a too-small range.
|
|
+ New pragma (no_)warn_function_inconsistent to control the handling
|
|
of function redefinitions which differ in return or argument types.
|
|
+ Implemented closures explicitely referencing inherited functions
|
|
("#'super::fun").
|
|
|
|
- Runtime:
|
|
+ Closures now work correctly when used as mapping keys.
|
|
+ The tracedepth wasn't calculated correctly.
|
|
+ A 'Command too long' error now also prints the beginning of the
|
|
offending command as debugging aid.
|
|
+ Corrected a number of memory leaks in runtime errors.
|
|
+ Corrected a memory leak in MCCP.
|
|
+ An error during a call-out causes all pending call-outs for the
|
|
same user in the same cycle to be re-scheduled to the next cycle.
|
|
+ If an ERQ callback accepts an array, the numbers in the array
|
|
are all positive in the range 0..255.
|
|
+ Float variables without an initializer are now properly initialized
|
|
to float-0 instead of number-0.
|
|
+ Calls from destructed objects to other objects (including simul-efun
|
|
calls) elicit a warning.
|
|
+ The garbage collection now zeroes out closures found to be bound to
|
|
destructed objects. The old behaviour was to change them into 'undef'
|
|
closures.
|
|
|
|
- Other Changes:
|
|
|
|
|
|
13-Apr-2004 (Lars Duening) -- Release 3.2.10
|
|
|
|
- Changed efuns:
|
|
+ debug_info(): Removed the DID_MEM_UNUSED value from the DINFO_DATA:
|
|
DID_MEMORY result.
|
|
+ debug_info(): Added the DID_ST_MB_ values to the DINFO_DATA:
|
|
DID_STATUS result.
|
|
+ debug_info(): The DINFO_DATA:"objects" dump also lists the object
|
|
creation times.
|
|
+ debug_info(): Added DID_ST_BOOT_TIME to the DINFO_DATA:DID_STATUS
|
|
result.
|
|
+ debug_info(): Added a third argument to DINFO_OBJLIST to return
|
|
multiple objects.
|
|
+ remove_action(): It is now possible to remove all actions
|
|
an object defines.
|
|
+ save_object(), save_value(): The format of the saved data can
|
|
be specified with an function argument.
|
|
+ set_connection_charset(), set_combine_charset(): Passing 0 as
|
|
argument re-establishes the default charset.
|
|
+ sprintf(), printf(): Modifier '#' for '%O'/'%Q' prints the values
|
|
in a compact format.
|
|
+ sprintf(), printf(): Format specifier '%b' prints a number
|
|
in binary notation.
|
|
+ wizlist_info(): The evalcost statistic is now split into 'ticks'
|
|
and 'gigaticks', and a second non-decaying evalcost statistic
|
|
has been added.
|
|
|
|
- Corrected efuns:
|
|
+ find_call_out(): No longer throws an error when passed an unbound
|
|
lambda to look for.
|
|
+ m_add(): Fixed a memory leak when existing entries were overwritten.
|
|
+ remove_input_to(): The proper noecho state is restored after
|
|
removing a pending input handler.
|
|
+ restore_object(): The function leaked memory when restoring from
|
|
a MALLOCed string.
|
|
+ to_array(): When converting a string, the characters are treated
|
|
as unsigned.
|
|
|
|
- New efuns:
|
|
+ enable_telnet(): Enable or disable telnet for an interactive
|
|
object.
|
|
+ get_combine_charset(), get_connection_charset(): Query the
|
|
combine resp. connection charset.
|
|
+ get_max_commands(): Query the allowed command rate of an
|
|
interactive object.
|
|
+ master(): Return the current master object.
|
|
+ m_entry(): Return all values for mapping entry at once.
|
|
+ net_connect(): Open a TCP connection.
|
|
+ rmember(): Search arrays and strings from the end.
|
|
+ set_max_commands(): Set the allowed command rate of an
|
|
interactive object.
|
|
+ strrstr(): Search a string within a string backwards.
|
|
+ variable_exists(): Check the existance of a named variable.
|
|
+ variable_list(): Return all variable names of an object.
|
|
|
|
- Master Object:
|
|
|
|
- Fixed Crashers:
|
|
+ Using 'break' or 'continue' in large programs caused bytecode
|
|
corruption.
|
|
+ Function calls by address and global variable accesses are no
|
|
longer possible after set_this_object().
|
|
+ Overflowing the value stack during a secure_apply() could
|
|
crash the driver in the error recovery.
|
|
+ walk_mapping(): If the callback object was destructed
|
|
before the first call, the efun crashed in the error handling.
|
|
+ Swapping of volatile strings could crash the driver.
|
|
+ H_COMMAND specifying an lfun by name which doesn't exist
|
|
in the interactive object.
|
|
+ Using function_exists() or variable_exists() on a destructed
|
|
object.
|
|
+ Editor: 'Z' given at the end of a file followed by two 'd'
|
|
corrupted the internal text storage, which sometimes
|
|
caused crashes.
|
|
|
|
- Language:
|
|
+ catch(; nolog) is now an official feature.
|
|
+ New modifier catch(; publish).
|
|
+ Constrained the switch() grammar so that only blocks are
|
|
suitable as bodies.
|
|
+ Operator '&' can intersect mappings with other mappings and arrays.
|
|
+ Macro __MAX_MALLOC__ is defined to the internal upper limit for
|
|
total memory usage.
|
|
+ Macro __MSDOS_FS__ is defined on systems using the MS-DOS
|
|
filesystem conventions.
|
|
+ Preprocessor symbol __FILENAME_SPACES__ is defined if the driver is
|
|
instructed to allow spaces in filenames.
|
|
+ A cast of a value to its own type, or a cast not resulting in a
|
|
conversion operation generates a warning. The pragma
|
|
no_warn_empty_casts can turn this warning off.
|
|
+ The strong_types/strict_types pragmas now persist beyond the
|
|
end of an include file (as does every other pragma).
|
|
+ call_other()s on arrays of objects is now configurable; if enabled,
|
|
the macro __LPC_ARRAY_CALLS__ is defined.
|
|
+ <mapping> &= <mapping>, <mapping> &= <vector> implemented.
|
|
+ Bugfix: Characters with the 8th bit set are now treated as positive
|
|
when entered as literal character constants.
|
|
+ Bugfix: Illegal case ranges like '100..50' now generate
|
|
an error message.
|
|
|
|
- Runtime:
|
|
+ Mapping are now compacted (apart from a GC) only, if a certain
|
|
amount of time has elapsed since the last addition/removal
|
|
of a key, and if either more than half of the condensed entries
|
|
have been deleted, or if the number of hashed entries exceeds
|
|
the number of (non-deleted) condensed entries.
|
|
+ A heart-beat error now longer aborts the heartbeat cycle.
|
|
+ The operators -=, *= and /= can now operate on <int> x <float>,
|
|
yielding a <float> result.
|
|
+ Allowed longer program names in backtraces.
|
|
+ If the H_RESET/H_CREATE_* hooks are defined by name, static
|
|
functions are found as well.
|
|
+ Bugfix: Subtracting arrays of closures from each other now actually
|
|
identifies identical closures.
|
|
+ Bugfix: The smalloc allocator now re-uses free 'large' memory for
|
|
small block chunks instead of always allocating them from the
|
|
system.
|
|
|
|
- Other Changes:
|
|
+ Editor: Consecutive 'z' or 'Z' commands no longer repeat
|
|
the previous current line.
|
|
+ Editor: Faulty commands 'quit'/'Quit' are caught before
|
|
the text buffer is cleared.
|
|
+ Configuration option '--enable-malloc-sbrk-trace' to enable
|
|
a log of all system memory requests including the stats of
|
|
the memory allocation request causing it. The intention is
|
|
to help debugging muds with high system memory usage.
|
|
+ Configuration option '--with-optimize' to set the optimization
|
|
level in the generated Makefiles.
|
|
+ New commandline option '--filename-spaces'/'--no-filename-spaces'
|
|
to allow or disallow space characters in filenames (default is to
|
|
disallow them).
|
|
|
|
|
|
02-Feb-2003 (Lars Duening) -- Release 3.2.9
|
|
|
|
- Changed efuns:
|
|
+ add_action(): New flag AA_IMM_ARGS implements the sane NOSPACE
|
|
handling.
|
|
+ allocate(): Accepts an optional initialisation value and can
|
|
create multi-dimensional arrays.
|
|
+ ceil(), floor(): Also accept integer argument values.
|
|
+ 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, the amount of
|
|
memory allocated and available, and the amount of memory
|
|
unused (where applicable).
|
|
Argument (DINFO_DATA, DID_STATUS) also returns the number
|
|
of destructed objects and the total number of heartbeat calls.
|
|
Single values of (DINFO_DATA) can be returned instead of the
|
|
whole array.
|
|
Argument (DINFO_DUMP, "destructed") creates a dump
|
|
of all destructed objects, by default in <mudlib>/DEST_OBJ_DUMP.
|
|
+ debug_message(): New second argument determines where to
|
|
log the message, and if to prepend a timestamp.
|
|
+ deep_copy(): If DYNAMIC_COST is active, the evaluation cost
|
|
depends on size and nesting depth of copied arrays, structs
|
|
and mappings.
|
|
+ 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.
|
|
+ garbage_collection(): An optional filename argument specifies
|
|
the filename for the next and only the next GC.
|
|
+ get_dir(): New flag GETDIR_PATH to return the full pathnames.
|
|
+ get_type_info(): now returns the bound object for efun,
|
|
simul-efun and operator closures as well.
|
|
+ inherit_list(): the inherited objects can be returned in a
|
|
tree reflecting the inheritance structure. Virtual inherits
|
|
can be returned tagged as such.
|
|
+ input_to(): New option INPUT_PROMPT to specify a prompt for this
|
|
input_to.
|
|
+ lambda(): Simul efuns with extended varargs weren't compiled
|
|
correctly.
|
|
+ load_name(), object_name(), program_name(): 0 is now accepted
|
|
as argument, the efuns returns 0 in that case.
|
|
+ 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.
|
|
+ printf(), sprintf(): If an explicite pad string is defined, even
|
|
if it is space, the efuns won't remove white space before a line
|
|
end.
|
|
+ printf(), sprintf(): Printing numbers with leading zeroes and a
|
|
sign character printed the sign in the wrong place.
|
|
+ printf(), sprintf(): When printing closures with %O, the program name
|
|
for inherited lfun closures is printed as well.
|
|
+ printf(), sprintf(): New format specifier 'Q' act like 'O', but quotes
|
|
special characters in strings.
|
|
+ printf(), sprintf(): New format modifier '$' implements flush
|
|
formatting for strings and columns of strings.
|
|
+ printf(), sprintf(): In justified column 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.
|
|
+ query_udp_port(), send_udp(): Renamed from query_imp_port() and
|
|
send_imp().
|
|
+ query_verb(): Added an optional flag argument to return the
|
|
verb as given in the add_action() statement.
|
|
+ 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.
|
|
+ regreplace(): Pattern which could match on the
|
|
empty string matched once too often at string end.
|
|
+ replace_program(): Argument can be omitted if only one inherit
|
|
exists.
|
|
+ replace_program(): If the object alread has closures bound, the
|
|
efun will issue a debug_message() and fail, instead of raising
|
|
a full runtime error.
|
|
+ replace_program(): If the replacement program has virtually
|
|
inherited variables, it must be the first inherited program.
|
|
+ restore_{object,value}(), save_{object,value}(): Non-lambda
|
|
closures, symbols and quoted arrays can now be saved and restored.
|
|
This required a new savefile format, though.
|
|
+ sin(), cos(), tan(), atan(), atan2(), log(), exp(), sqrt(), pow():
|
|
Integers are accepted as arguments, too.
|
|
+ sizeof(): Now also returns the length of strings.
|
|
+ terminal_colour(): Colour keys can now be mapped using a closure.
|
|
The pattern "%%^^" is recognized as second notation for literal
|
|
"%^" besides "%^%^".
|
|
+ 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.
|
|
+ add_verb(), add_xverb(), efun308(), file_name(), map_array(),
|
|
filter_array(), filter_mapping(), map_mapping(), m_sizeof(),
|
|
send_imp(), set_auto_include_string():
|
|
Available only if driver is compiled with support for
|
|
deprecated efuns.
|
|
|
|
- Corrected efuns:
|
|
+ and_bits(), or_bits(), xor_bits(): The bits 5, 11, 17,... were
|
|
mishandled.
|
|
+ call_out(): In release 3.2.8 lvalues were not allowed as arguments -
|
|
now they are again.
|
|
+ call_out_info(): Did not return the target object for closure
|
|
call outs.
|
|
+ call_resolved(): Now accepts a destructed object as second parameter
|
|
as it should.
|
|
+ copy_file(), rename(): Just return a non-0 value on errors, but
|
|
don't throw a runtime error.
|
|
+ deep_copy(): Didn't handle quoted arrays properly.
|
|
+ filter(), map(): When used on multi-value mappings, the driver did
|
|
not recognize when the called closure kept a reference to the
|
|
array with the values, overwriting the values in the next
|
|
iteration.
|
|
+ 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.
|
|
+ map() and other efuns taking callbacks arguments: The pattern
|
|
'function, object, extra' was parsed such that 'object' became
|
|
part of the 'extra' arguments.
|
|
+ notify_fail(): When used by an object which is not an
|
|
undestructed command_giver, this efun no longer leaks memory.
|
|
+ object_info(): The returned OIB_NAME now starts with a '/' in plain
|
|
mode.
|
|
+ printf(), sprintf(): The formatter "%^" will print "%^", for
|
|
compatibility with terminal_colour().
|
|
+ printf(), sprintf(): Column-formatting a string with one
|
|
newline printed one newline too few if the formatstring didn't
|
|
end immediately.
|
|
+ printf(), sprintf(): A format instruction '%#=s' is now rejected.
|
|
+ printf(), sprintf(): Max length of a result is now 128 KByte.
|
|
+ printf(), sprintf(): One-line columns ending with a newline now
|
|
behave like multi-line columns and delay adding the newline
|
|
until the end of the line and only if no other columns are
|
|
pending.
|
|
+ printf(), sprintf(): The formatter %O/%Q stumbled over really large
|
|
arrays and mappings (this was actually a potential crasher).
|
|
+ sscanf(): the format '%s%d' failed to parse 'ab1cd' correctly.
|
|
+ to_string(): Can handle operator closures now.
|
|
+ unquote(): Unquoting symbols no longer adds a quote level.
|
|
|
|
- New efuns:
|
|
+ blueprint(): Return the blueprint object.
|
|
+ copy_bits(): To copy ranges of bitstrings.
|
|
+ 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.
|
|
+ gmtime(), localtime(): Return the time broken up into its
|
|
constituents.
|
|
+ find_input_to(): Find a pending input_to.
|
|
+ include_list(): Return the files included in a program file.
|
|
+ input_to_info(): Return information about all pending input_to's
|
|
for a player.
|
|
+ m_add(): To add a new entry to a mapping and assign all values
|
|
in one go.
|
|
+ md5(): Compute the MD5 message digest for a string.
|
|
+ min(), max(): To select the minimum resp. maximum among a bunch
|
|
of numbers or strings.
|
|
+ remove_input_to(): Remove a pending input_to.
|
|
+ sgn(): Return the sign of a numeric argument.
|
|
+ unquote(): Remove a quote from a quoted array or symbol.
|
|
+ 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.
|
|
+ notify_shutdown(): Is now called too when the driver crashes.
|
|
In that case it is passed a string denoting the type of crash.
|
|
+ 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.
|
|
+ Adding a mapping to itself with '+='.
|
|
+ The MAX_MALLOCED limit check was faulty, sometimes allowing
|
|
the driver to clobber memory.
|
|
+ Tracing active when the control flow changes the current player
|
|
to a non-interactive object.
|
|
+ Mapping lookups would under rare circumstances return a subtly
|
|
invalid result, causing random memory reads and clobbered
|
|
memory. This bug has been in the driver since before
|
|
3.2.1@136 (the oldest version I could find).
|
|
+ Allowing adding an action between two objects with no environment.
|
|
+ "stack overflow" runtime errors freed svalues twice.
|
|
+ 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.
|
|
+ Formatting sprintf("%#9999999999999@s", ({ "bla" }) * 2) clobbered
|
|
its internal precision information on the first line, and thus
|
|
crashed on the second.
|
|
+ Remove a couple crashers when handling numbers at the numerical
|
|
limits.
|
|
+ Using set_this_object() before the simul-efun object was loaded.
|
|
+ Updating the simul-efun object could crash the driver when the
|
|
update changed the signature of sefuns which had already been
|
|
used by objects: executing the calls after the update could
|
|
mess up the interpreter stack or cause it to execute garbage
|
|
bytecode.
|
|
+ Too long error messages overwrote the stack.
|
|
+ When players were already destructed in notify_shutdown(),
|
|
the following remove_player() was passed the destructed objects.
|
|
+ If call_other() was implemented by a sefun which required
|
|
call_other() to be called itself, the compiler generated
|
|
invalid bytecode.
|
|
+ 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.
|
|
+ Calling a self-destructing closure from limited().
|
|
+ Runtime errors in a catch occasionally crashed in the traceback
|
|
collection.
|
|
+ LPC tracing with lambda closures or call_resolved().
|
|
|
|
- Language:
|
|
+ New operators '>>>' and '>>>=' for logical right shifts.
|
|
+ New operators '&&=' and '||=' for logical assignments.
|
|
+ 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.
|
|
+ New LPC define __WIZLIST__ specifies from where the driver read the
|
|
initial wizlist information.
|
|
+ New LPC defines __INT_MAX__ and __INT_MIN__ give the integer number
|
|
limits.
|
|
+ New LPC defines __FLOAT_MAX__ and __FLOAT_MIN__ give the float number
|
|
limits.
|
|
+ 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.
|
|
+ Identifier names can use the extended alpha characters from the
|
|
ISO 8859-1 alphabet.
|
|
+ Experimental: The 'default' statement allows to set a default
|
|
visibility for variables and functions. It is meant to make
|
|
the re-engineering of existing code easier.
|
|
+ It is possible to specify multiple pragmas in one '#pragma'
|
|
directive, separated by comma.
|
|
+ Additions, subtractions and multiplications now check for
|
|
numeric overflows.
|
|
+ The wildcarded supercall "*":: no longer throws an
|
|
error if none of the inherited objects defines the called function.
|
|
+ In a for() statement, variables may now be declared without
|
|
initialisation (e.g. 'for (int i; ...)').
|
|
+ Definitions of local variables can appear anywhere in a block. The
|
|
variables are defined from the point of definition onward.
|
|
+ If a value of the wrong type is passed to switch(), the driver
|
|
no longer throws a runtime error, but instead jumpgs to
|
|
the default case.
|
|
+ If pragma 'pedantic' is in effect, the compiler warns about
|
|
calls to undefined functions even if typechecking is off.
|
|
+ The notation ([:<expr>]) can be used to create empty mappings
|
|
of the given width.
|
|
+ Duplicate inherits of a program on the toplevel raise a warning,
|
|
resp. an error if pragma 'pedantic' is in effect.
|
|
+ New preprocessor macros __CATCH_EVAL_COST__ and
|
|
__MASTER_EVAL_COST__ for the corresponding evalcost
|
|
limits.
|
|
+ If the driver uses the default debug.log file, its (mudlib)
|
|
name is available in the predefined macro __DEBUG_LOG__.
|
|
+ Pragma warn_deprecated causes the compiler to print a warning
|
|
when a deprecated efun is used.
|
|
+ Lfun closures can now explicitely name inherited lfuns (#'inh::fun).
|
|
+ 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.
|
|
+ Bugfix: It is now possible to use symbols in inline closures, ie.
|
|
"(: 'a :)".
|
|
+ Bugfix: 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.
|
|
+ Bugfix: When defining a function of the same name as an inherited
|
|
private function, the latter is no longer redefined.
|
|
+ Bugfix: Multi-dimensional mapping indices in macro calls are no
|
|
longer confused with multiple macro arguments.
|
|
+ Bugfix: Prototypes could modify the definition of inherited
|
|
functions in strange ways.
|
|
+ Bugfix: Termination of a macro definition with End-of-file in
|
|
an include file confused the lexer.
|
|
+ Bugfix: Inherited private functions no longer hide (simul-)efuns.
|
|
+ Bugfix: Inheriting two private functions with the same name caused
|
|
the compiler to cross-define the second to the first. Invisible
|
|
to the user, this messed up any use by __INIT and other local
|
|
calls.
|
|
+ Bugfix: The '::' operator did not recognize the separate namespaces
|
|
of variables and functions: void foo(string id) { ::id(id); }
|
|
lead to a syntax error.
|
|
+ Bugfix: Using auto-includes no longer generate wrong line numbers
|
|
in error messages.
|
|
+ Bugfix: "*"::foo() checks just the directly inherited programs.
|
|
|
|
- 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.
|
|
+ New optional driver hook H_SEND_NOTIFY_FAIL to send a notify fail
|
|
message to the proper receiver.
|
|
+ For the first 255 simul efuns, it is now permissible to catch
|
|
reference parameters in a varargs parameter. However, the only
|
|
permitted use is to pass them flat in a function call (using
|
|
apply())!
|
|
+ The protocols MCP, MSP and MXP can now be negotiated through
|
|
the H_TELNET_NEG hook.
|
|
+ New optional driver hook H_AUTO_INCLUDE to set a string or
|
|
closure for auto-include information.
|
|
+ Errors while loading objects now include the inheritance chain.
|
|
+ 'Too long evaluation' errors during a compilation (caused by too many
|
|
master calls) are considered compilation errors.
|
|
+ Signal USR2 forces the driver to reopen the host.debug.log file.
|
|
+ On systems with pthread support, the driver may be compiled to
|
|
use background threads to send the data to the network, thus
|
|
avoiding EWOULDBLOCK problems.
|
|
+ External master calls (like for ERQ messages) get the same eval-cost
|
|
benefits during error handling as normal call-others.
|
|
+ Lfun closures left danging by a replace_program() are now converted
|
|
into alien-lfun closures, so that the error handler has a chance
|
|
to determine the originating object.
|
|
+ Bugfix: When logging on players, the initial prompt wasn't printed.
|
|
+ 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: Most reference loops as created by for example
|
|
'b = 0 || &a; b = 0 || &a;' are detected.
|
|
+ Bugfix: When destructing an object, references through closures
|
|
are removed from the local variables as well.
|
|
+ Bugfix: Removing or destructing a shadow now properly
|
|
removes all associated actions.
|
|
+ Bugfix: The tracing checks weren't done against the current
|
|
interactive as documented, but instead against the current
|
|
commandgiver.
|
|
+ Bugfix: The automatic mapping compaction did not remove destructed
|
|
objects and closures.
|
|
+ Bugfix: If H_INCLUDE_DIRS was set to an array of directory names,
|
|
the names couldn't have leading '/'.
|
|
+ Bugfix: Before calling reset() or clean_up() from the backend, the
|
|
previous_object is cleared.
|
|
|
|
- Other Changes:
|
|
+ Renamed the driver executable to 'ldmud'.
|
|
+ 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, and pass
|
|
simple arguments to the erq.
|
|
+ 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.
|
|
+ New driver options '--wizlist-file <filename>' and
|
|
'--no-wizlist-file' to control from where the driver reads the
|
|
initial wizlist information.
|
|
+ New driver option '--args <filename>' reads the commandline
|
|
arguments from a textfile. These argument files can be nested.
|
|
+ New driver option '--random-seed <num>' sets the seed value
|
|
for the random number generator for debugging purposes.
|
|
If not given, the driver chooses a seed value on its own.
|
|
+ New driver option '--hostname <name>' to specify the hostname,
|
|
overriding the value returned by the system.
|
|
+ New driver option '--hostaddr <addr>' to specify the hosts address,
|
|
overriding the value returned by the system. In particular
|
|
this address will be used to open the driver ports under.
|
|
+ Removed a couple of fatal race-conditions in the xerq.
|
|
+ New configuration option 'trace-code' enables the bytecode
|
|
tracing.
|
|
+ New configuration option 'use-deprecated' allows
|
|
to disable obsolete and deprecated efuns. If enabled, the macro
|
|
__DEPRECATED__ is defined.
|
|
+ New configuration options 'use-set-is-wizard', 'use-set-light'
|
|
and 'use-process-string' to configure the corresponding optional
|
|
efuns.
|
|
+ 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.
|
|
+ The special command "malloc" is now under the control of the
|
|
IS_WIZARD flag, too.
|
|
+ The erq/xerq commandline argument '--execdir <dir>' allows the
|
|
to override the default ERQ_DIR specification for the directory
|
|
with the callable executables.
|
|
+ New editor command 'T' to perform Tab <-> Whitespace conversion.
|
|
+ Builtin command 'dumpallobj' now also creates a dump of all
|
|
destructed objects in the file <mudlib>/DEST_OBJ_DUMP.
|
|
+ Character conversions are now done with regards to the locale
|
|
selected by the LANG environment variable.
|
|
+ The xerq now sends an ERQ_OK message when a queued write
|
|
is finally completed.
|
|
|
|
|
|
20-Aug-2000 (Lars Duening) -- Release 3.2.8
|
|
|
|
- Changed efuns:
|
|
+ add_action(): Implemented the 'abbreviated verb' feature associated
|
|
with negative flag values.
|
|
+ apply(): Just returns the first argument if it is not a closure.
|
|
+ clonep(): Accepts arguments of all types.
|
|
+ command_stack(): Also returns which objects did the notify_fail()s.
|
|
+ debug_info(): DINFO_MEMORY also prints the datasize of an object.
|
|
+ debug_info(): New request DINFO_DATA.
|
|
+ debug_info(): DINFO_MALLOC also returns the size of the wasted
|
|
memory (where available).
|
|
+ inherit_list(): in non-COMPAT mode, the returned program names
|
|
start with a '/'.
|
|
+ input_to(): input_to()s can now be stacked, and also accept
|
|
closures for the function (this is not yet a real stacked
|
|
input handling, though).
|
|
+ load_name(): also accepts strings as object designators.
|
|
+ map(): can now map an array through a mapping.
|
|
+ object_info(): OINFO_MEMORY also returns the datasize of an object.
|
|
+ present(): present(object) returns the object found, not its
|
|
environment.
|
|
+ printf(): prints to NPCs are sent to catch_tell().
|
|
+ (s)printf(): object names printed in plain mode with %O now
|
|
start with a leading "/".
|
|
+ (s)printf(): fields are now always padded to their full size,
|
|
even if no more data is following in the format string.
|
|
+ query_notify_fail(): A flag allows to query which object set
|
|
the current error message.
|
|
+ restore_object(): Preliminary: optionally restore the object
|
|
variables from a string.
|
|
+ save_object(): Preliminary: optionally return the saved object
|
|
variables in a string.
|
|
+ set_connection_charset(): Now also accepts a string as charset
|
|
specificator.
|
|
+ sort_array(): Now accepts extra arguments to pass to the sorting
|
|
function.
|
|
+ terminal_colour(): Straightened the key recognition, and added
|
|
a wrapping-only mode.
|
|
+ to_string(): Now also accepts lambda closures and returns a string
|
|
suitable for debugging purposes.
|
|
|
|
- Corrected efuns:
|
|
+ get_type_info(): The object a lambda closure is bound to is now
|
|
returned properly.
|
|
+ limited(): When calling closures with limited eval ticks, the
|
|
efun didn't make the full amount of ticks available.
|
|
+ terminal_colour(): When removing spaces due to wrapping, the
|
|
efun sometimes falsely reported a "partial string too long".
|
|
+ random(): distributes the random numbers more evenly, especially
|
|
over small ranges.
|
|
+ regexp(), regexplode(), regreplace(): Errors in the regular
|
|
expression are raised as normal errors, and no longer printed
|
|
to the user.
|
|
+ sprintf(): Is now reentrant.
|
|
+ strstr(): When given negative starting offsets, the efun no
|
|
longer returns negative results.
|
|
+ transpose_array(): Can now handle variable sized sub-arrays.
|
|
+ typeof(): Now accepts literal references.
|
|
+ unique_array(): When applied on an empty array, it no longer
|
|
raises an assertion.
|
|
|
|
- New efuns:
|
|
+ clones(): find and return the clones of an object.
|
|
+ copy_file(): copies a file.
|
|
+ save_value(): encodes a value into a string.
|
|
+ restore_value(): decodes a value from a string generated by
|
|
save_value().
|
|
+ set_combine_charset(): Define characters to combine into strings
|
|
when received in charmode.
|
|
|
|
- Master Object:
|
|
+ valid_read(), valid_write(): new function code "copy_file" to cater
|
|
for the new efun.
|
|
+ valid_write(): the old function code "do_rename" (used twice) was
|
|
replaced by "rename_from" and "rename_to".
|
|
+ log_error(): New argument "warn" determines if the message
|
|
passed to the lfun is an error or just a warning.
|
|
+ New include_file(): generates the full pathname of a filename
|
|
given in an #include directive.
|
|
+ New inherit_file(): generates the full pathname of a filename
|
|
given in an inherit directive.
|
|
|
|
- Fixed Crashers:
|
|
+ Unaligned pointer access in efun functionlist(), caused
|
|
by unaligned function stand-ins.
|
|
+ Multiplication of an array of allocated strings with an integer.
|
|
+ Replacing a prompt-closure from within the closure.
|
|
+ Comparison "#'f == other_type" (also !=).
|
|
+ It is no longer possible to pass destructed objects to
|
|
input_to() handlers.
|
|
+ When apply() was called with an array as last argument, it didn't
|
|
check the array elements for destructed objects.
|
|
+ When creating lambda closures with more than 254 constants, the
|
|
compiler stored the number of values at the wrong place,
|
|
clobbering one of the constants.
|
|
+ Evalstack overflows caused by intermediate results went
|
|
unnoticed.
|
|
+ Calling functions with more than 255 arguments triggered
|
|
a sanity check.
|
|
+ Replacing a notify-fail closure while it is executed.
|
|
+ The default handling of telnet negotiations (answering DONT/WONT)
|
|
for unsupported options like NAWS if no hooks are specified,
|
|
leaked LPC stack entries, eventually overwriting memory.
|
|
+ The lambda block ({ #'return }) was compiled incorrectly,
|
|
causing a 'Bad stack at F_RETURN' at the end of the lambda
|
|
closure latest.
|
|
+ Efun write_file() running out of fds outside of a compilation
|
|
no longer tries to raise a compilation error.
|
|
+ A failing include statement at the end of the internal lex buffer
|
|
no longer causes the driver to lex invalid data, sometimes
|
|
crashing while doing so.
|
|
|
|
- Language:
|
|
+ The preincrement/-decrement operators can now be applied
|
|
to wide mappings ('++m[x,y]').
|
|
+ If an object is inherited virtually multiple times,
|
|
a wildcarded super call ("*::") calls it only once.
|
|
+ The ->() operator also accepts the following forms:
|
|
+ x->y() where y is the name of a local variable
|
|
+ x->"y"() where "y" is a constant string
|
|
+ x->(y)() where y is an expression returning a string.
|
|
+ New loop-construct: foreach().
|
|
+ call_others (ie. ->()) can be applied on arrays of objects, the
|
|
single call results are collected in one result array.
|
|
+ <int> += <type> now works for <type> being string and float as well.
|
|
+ The operator "&" (and "&=") can now be used to intersect strings.
|
|
+ The operator "-" (and "-=") can now be used to remove characters
|
|
from a string.
|
|
+ <mapping1> -= <mapping2> now works for <mapping2> of any width,
|
|
like the normal subtraction already does.
|
|
+ Indexing [..x] and [..<x] are allowed as short form of [0..x]
|
|
and [0..<x].
|
|
+ When enabled, the modifier 'nosave' replaces the modifier 'static'
|
|
for variables - the latter is still recognized, but its use
|
|
is deprecated. Similar, 'nosave' should be used instead
|
|
of 'static' as inheritance modifier.
|
|
+ New pragma "weak_types" to turn off type checking.
|
|
+ New pragmas "pedantic" and "sloppy" turn on resp. off the
|
|
treatment of certain warnings as errors.
|
|
+ Inherited functions are looked up using a breadth search.
|
|
+ Local variables can be initialized in their definition, for example:
|
|
int i = 3;
|
|
int j = 3*i, k;
|
|
+ New preprocessor macros __DIR__ and __PATH__() to retrieve the
|
|
path of the currently compiled file.
|
|
+ '(void)' is now accepted as empty function argument list.
|
|
+ Failure to pass enough arguments to a non-vararg simul_efun
|
|
generates a warning (error in pedantic mode).
|
|
+ Redefinition of a function now checks the types of the arguments and
|
|
of the return type for consistency. Same for the
|
|
consistency between a function and a preceeding prototype. If a
|
|
difference is detected, a warning (error in pedantic mode for
|
|
arguments) is issued.
|
|
+ Preprocessor statements #else and #endif no longer accept uncommented
|
|
text after the keyword. In pedantic mode, an error is raised,
|
|
otherwise a warning is generated.
|
|
+ Preprocessor statement #define requires a definition after the
|
|
keyword.
|
|
+ New predefined macro __RESET_TIME__ and __CLEANUP_TIME__
|
|
to return the default reset and cleanup interval time.
|
|
+ Bugfix: Newlines in literal strings in inline closures are now
|
|
rejected.
|
|
+ Bugfix: #'parse_command wasn't implemented.
|
|
+ Bugfix: The expressions &(expr4[x]) and &(expr4[<x]) could
|
|
generate invalid code (causing a "(lvalue) Indexing on illegal
|
|
type" error) in extreme circumstances.
|
|
+ Bugfix: Compiler typechecks for "int * string" yielded "int"
|
|
instead of "string" (the generated code was correct).
|
|
+ Bugfix: objects with "nomask" functions can be inherited virtually
|
|
multiple times.
|
|
+ Bugfix: "*"::foo() failed if the last inherited object checked did
|
|
not contain the function - even if it has been found in other
|
|
objects.
|
|
+ Bugfix: ::foo() didn't find the topmost definition when
|
|
confronted with virtual inherits.
|
|
+ Bugfix: In the expression '++<ident>' the opcode for '++' was
|
|
overwritten if the <ident> required a 2-Byte index internally.
|
|
Same for '--'.
|
|
+ Bugfix: The preprocessor properly ignores a '//'-comment in
|
|
the argument list for a function macro.
|
|
+ Bugfix: copy()ing or subtracting mappings did not remove destructed
|
|
elements first.
|
|
|
|
- Runtime:
|
|
+ If the driver is compiled for IPv6 support, the macro '__IPV6__'
|
|
is defined in LPC compiles.
|
|
+ Simul-efuns can now take "varargs" arguments, like
|
|
in "foo(varargs mixed arg)".
|
|
+ A simul-efun "call_other()" finally catches ->() calls as well.
|
|
+ New pragma "no_shadow" to disallow shadows on a program.
|
|
|
|
- Other Changes:
|
|
+ The standard erq now supports the socket requests (actually it
|
|
does so for some time now, it just hasn't been published).
|
|
+ Where supported, the erq supports lookup of IPv6 addresses.
|
|
+ When compiled with DEBUG and CHECK_STRINGS, the commandline option
|
|
"--check-strings" checks the consistency of the shared string
|
|
table with every backend cycle.
|
|
+ When compiled with DEBUG, the commandline option "--check-state"
|
|
controls the simplistic state checks of the virtual machine
|
|
in the backend loop.
|
|
+ The driver can be compiled with bison as well as with byacc.
|
|
+ New editor command 'M' to strip ^Ms from lineends.
|
|
+ The commandline argument "--max-small-malloc" and the corresponding
|
|
configuration parameter are gone.
|
|
|
|
|
|
19-Aug-1999 (Lars Duening) -- Release 3.2.7
|
|
|
|
- Changed efuns:
|
|
+ command():
|
|
+ native-mode restriction to the current object
|
|
is gone since there is no native mode anymore.
|
|
+ commands are now stacked, meaning that after a
|
|
command finishes, the previous this_player(), verb, etc,
|
|
are restored.
|
|
+ debug_info():
|
|
+ debug_info(DINFO_STATUS): now returns the status information
|
|
instead of printing it. debug_info(DINFO_STATUS, "malloc")
|
|
returns the malloc information usually connected with the
|
|
'malloc' command.
|
|
+ debug_info(DINFO_DUMP): allows to dump object information
|
|
and (if compiled) opcode usage information into a file.
|
|
+ destruct(): accepts an already destructed object as argument.
|
|
+ get_type_info(): returns for strings whether they are shared
|
|
or not.
|
|
+ inherit_list(), debug_info(), object_info(): duplicate virtual
|
|
inherits are no longer listed.
|
|
+ notify_fail(): calls to notify_fail() only affect the current
|
|
command. Also, NPCs can see 'their' notify_fail messages.
|
|
+ object_info(): OINFO_BASIC result 'OIB_APPROVED' is gone.
|
|
+ replace_program(): no longer flags objects as 'clones', but
|
|
instead uses the new flag 'O_REPLACED'.
|
|
+ set_light(): is optional (though by default active)
|
|
+ sprintf(), printf(): if an error occurs, the filename and line
|
|
are included in all error messages, not just the one printed
|
|
to stderr.
|
|
+ symbol_function(): can't make closures from protected lfuns of
|
|
other objects anymore.
|
|
+ trace(), traceprefix() are validated with the master-lfun
|
|
valid_trace().
|
|
|
|
- Corrected efuns:
|
|
+ caller_stack(): is now declared to return 'object *' as it
|
|
indeed does.
|
|
+ query_mud_port(): now accepts 'int' arguments as documented.
|
|
+ restore_object(): protected against negative '([:<width>])'
|
|
specifications.
|
|
+ (s)printf(): prints variable closures properly even if the
|
|
variable vanished in a program replacement.
|
|
+ symbol_variable(): recognizes objects with pending program
|
|
replacements.
|
|
+ terminal_colour(): when wrapping is active, keywords were
|
|
replaced even when no '%^' was present. Not any more.
|
|
+ to_object(): returns 0 for closures bound to a destructed
|
|
object.
|
|
+ to_string(): converts variable closures properly even if the
|
|
variable vanished in a program replacement.
|
|
+ to_string(): in compat mode, object names are no longer prepended
|
|
with a slash.
|
|
+ unmkmapping(): now handles key-only mappings as it should.
|
|
|
|
- New efuns:
|
|
+ atan2(): alternative way to calculate the inverse tangens.
|
|
+ ceil(): rounds a float up to the nearest whole number.
|
|
+ floor(): rounds a float down to the nearest whole number.
|
|
+ pow(): raises a float to the power of another float.
|
|
|
|
+ and_bits(): binary-ands two bitstrings.
|
|
+ or_bits(): binary-ors two bitstrings.
|
|
+ xor_bits(): binary-xors two bitstrings.
|
|
+ invert_bits(): negates a bitstring.
|
|
+ next_bit(): finds the next set (cleared) bit in a bitstring.
|
|
+ last_bit(): returns the last set bit in a bitstring.
|
|
+ count_bits(): count the number of bits in a bitstring.
|
|
|
|
+ (preliminary) command_stack(): returns the current command stack.
|
|
+ command_stack_depth(): returns the depth of the command stack.
|
|
+ (preliminary) execute_command(): low-level access to the
|
|
command parser.
|
|
+ query_command(): returns the full command seen by the parser.
|
|
+ query_notify_fail(): returns the current notify-fail setting.
|
|
|
|
+ object_time(): return the time an object was created.
|
|
+ (preliminary) present_clone(): find objects with a specific
|
|
blueprint in a given environment.
|
|
+ trim(): trim a certain character from a string.
|
|
|
|
+ (preliminary) limited(): executes a closure with changed runtime
|
|
limits
|
|
+ query_limits(): queries the current/default runtime limits
|
|
+ (preliminary) set_limits(): sets new default runtime limits.
|
|
|
|
- Master Object:
|
|
+ valid_write(): New call_funs 'objdump' and 'opcdump', passed
|
|
when attempting to dump the object and opcode information
|
|
into a file. This applies to the special commands 'dumpallobj'
|
|
and 'opcdump' as well as for the debug_info() uses.
|
|
+ query_player_level(): obsolete and gone.
|
|
+ valid_trace(): New lfun to validate uses of trace() and
|
|
traceprefix() (query_player_level() did this before).
|
|
|
|
- Fixed Crashers:
|
|
+ A heart_beat() removing all remaining objects on the hb list.
|
|
+ An error during a (s)efun bound to a swapped out object could
|
|
crash the dump_trace.
|
|
+ An error during macro expansion crashed the driver if the error
|
|
handling itself required macro expansion again.
|
|
+ to_string() on a lfun of a swapped program.
|
|
+ call_lambda() on not-inherited variable closures.
|
|
+ replace_program() on a program of which one variable is referenced
|
|
by a symbol_variable().
|
|
+ Swap in of a closure variable which was invalidated during
|
|
a garbage collection.
|
|
+ Failure to swap in an object during a garbage collection.
|
|
+ Binding an unbound lambda to two objects and destructing
|
|
the originating object freed the lambda.
|
|
|
|
- Language:
|
|
+ '+=' now allows to add an int onto a float (before only floats
|
|
were allowed). Similar for '-=', '*=' and '/='.
|
|
+ '*'/'*=' may multiply strings or arrays with positive numbers. The
|
|
result is the string/array <number>times repeated.
|
|
+ Scope of variables defined in nested local blocks ends with the
|
|
defining local block. The limit MAX_LOCAL applies only to the
|
|
variables which are in scope at the same time. Variables in
|
|
inner scopes can hide variables in outer scopes. Unchanged is that
|
|
local variables are initialised to 0 when their scope is
|
|
(re)entered.
|
|
+ The pragmas 'no_local_scopes' and 'local_scopes' turn the local
|
|
scoping of variables off resp. back on.
|
|
+ in 'for(<init>, <init>, ..., <init>; ...)' each <init> can either
|
|
be a normal expression, or a definition of a local variable
|
|
with assignment, e.g. 'int i = <expr>'. The scope of such
|
|
variables is the whole for() statement.
|
|
+ added inline closures as alternative to lfun closures: instead
|
|
of
|
|
int foo(int arg ) { return arg * 2; }
|
|
map_array(arr, #'foo);
|
|
you can write
|
|
map_array(arr, (: return $1 * 2; :) );
|
|
or just
|
|
map_array(arr, (: $1 * 2 :) );
|
|
The syntax is modelled after MudOS functionals.
|
|
+ Support for alien-lfun closures was incomplete.
|
|
+ New pragma 'no_clone': disallows clones of a program.
|
|
+ New pragma 'no_inherit': disallows inheriting a program.
|
|
+ Bugfix: Variables in closures may start with '_'.
|
|
+ Bugfix: *::f() did not call all inherited functions (and others
|
|
multiple times).
|
|
+ Bugfix: '#[<] indexing corrected.
|
|
|
|
- Runtime:
|
|
+ If hook H_RESET is a closure, and the closure returns a negative
|
|
value, the object will not be reset again, as
|
|
if set_next_reset(-1) had been used.
|
|
+ New optional driver hook H_COMMAND allows to replace the driver
|
|
command parsing with your own. When used, the H_MODIFY_COMMAND
|
|
and H_NOTIFY_FAIL hooks are ignored.
|
|
+ The H_MODIFY_COMMAND hooks may now change the commandgiver. The
|
|
change remains active during the execution of the command, and
|
|
the original commandgiver is passed to the NOTIFY_FAIL hook.
|
|
+ Mappings have an upper limit of MAX_MAPPING_SIZE keys (default
|
|
is 5000).
|
|
+ Special commands 'dumpallobj' and 'opcdump' are verified through
|
|
master->valid_write().
|
|
+ Driver can be compiled for DYNAMIC_COSTS, causing increased
|
|
eval-costs for computationally expensive operations. For
|
|
now, this applies only to string additions with an additional
|
|
cost of strlen(result)/1000 .
|
|
|
|
- Other Changes:
|
|
+ Tweaks to the timing of swapping, cleanup() and reset() to
|
|
achieve a smoother operation.
|
|
+ On loading errors, the name of the affected object is printed
|
|
in the error message.
|
|
+ The multiport feature is no longer optional.
|
|
+ Corrections to the manpages of clone_object, clonep, filter_mapping,
|
|
filter_indices.
|
|
+ Added the include files mudlib/sys/{trace.h,input_to.h,files.h,
|
|
debug_info.h} with definitions for the efuns trace(), input_to(),
|
|
file_size(), get_dir(), and debug_info().
|
|
+ NATIVE_MODE is gone.
|
|
+ Euids are now a standard feature (the LPC macro __EUIDS__ stays
|
|
defined, though).
|
|
+ Use of euids (loading or cloning other objects requires a non-zero
|
|
euid) can be enforced with the commandline option
|
|
'--strict-euids'. If defined, the LPC macro '__STRICT_EUIDS__'
|
|
is defined.
|
|
If your mud ran in NATIVE_MODE, this is the option you'll want
|
|
to use.
|
|
+ The commandline options '--reset-time' and '--cleanup-time' specify
|
|
the cleanup and reset times. The old config.h symbols
|
|
TIME_TO_RESET and TIME_TO_CLEAN_UP just give the default values.
|
|
+ The commandline options '--max-array' and '--max-mapping' can set
|
|
the max limits for arrays and mappings. For both, a setting of 0
|
|
disables the limit checks.
|
|
+ The commandline options '--max-bytes' and '--max-file' can set
|
|
the max IO limits for file reads and writes.
|
|
+ Efun closures are printed with full name in error tracebacks.
|
|
+ The ACCESS.ALLOW file can specify portnumbers.
|
|
+ Special command 'status malloc' is now identical to 'malloc'.
|
|
+ Special commands 'debugmalloc' and 'showsmallnewmalloced' are
|
|
deactivated.
|
|
+ Bugfix: Reset of swapped objects did not work properly.
|
|
+ Bugfix: Errors during the execution of closures no longer leak
|
|
memory.
|
|
+ Bugfix: Switching driver hooks from within themselves no longer
|
|
leaks memory.
|
|
+ Bugfix: New callouts added from within a callout with odd delay
|
|
resulted in the new callouts called at the wrong time. If the
|
|
new callout had a MAX_INT delay, the existing callout list
|
|
was effectively disabled.
|
|
|
|
|
|
|
|
01-Apr-1999 (Lars Duening) -- Release 3.2.6
|
|
- Changed efuns:
|
|
+ allocate_mapping() renamed to m_allocate(). The old name
|
|
is still available as alias.
|
|
+ clone_object() accepts objects as templates.
|
|
+ efun308() renamed to set_environment(). The old name is
|
|
still available as alias.
|
|
+ file_name() renamed to object_name(). The old name is still
|
|
available as alias.
|
|
+ filter_mapping() renamed to filter_indices(). The old name
|
|
is still available as alias.
|
|
+ mapping_contains() renamed to m_contains(). The old name is
|
|
still available as alias.
|
|
+ map_mapping() renamed to map_indices(). The old name
|
|
is still available as alias.
|
|
+ mapping_contains() renamed to m_contains(). The old name is
|
|
+ m_values() can return any column of a mapping.
|
|
+ notify_fail() returns 0.
|
|
+ set_this_player() accepts 0 as argument.
|
|
+ to_int(), to_object() and to_float() accept their result
|
|
type as argument.
|
|
|
|
- Corrected efuns:
|
|
+ call_out(): if the command_giver destructs before the callout
|
|
is activated, this_player() is made sure to be 0.
|
|
+ map_array() stumbled when objects in the array in question
|
|
were destructed during the operation.
|
|
+ sizeof(mapping) no longer counts destructed objects in
|
|
the mapping to the size.
|
|
+ sprintf() of float values < 1.0 no longer causes a SING error.
|
|
+ terminal_colour() correctly wraps strings with a length one less
|
|
than the wrap limit.
|
|
+ this_interactive(): during login it points to the login object.
|
|
|
|
- New efuns:
|
|
+ abs(): return the absolute value of the argument.
|
|
+ all_environment(): return all environments of an object.
|
|
+ caller_stack(): return the call stack.
|
|
+ clonep(): test if an object is a clone.
|
|
+ copy(): produce a shallow copy of the argument.
|
|
+ deep_copy(): produce a shallow copy of the argument.
|
|
+ filter(): filter an array or fill-width mapping.
|
|
+ load_name(): returns the filename of an objects blueprint.
|
|
+ load_object(): loads an object.
|
|
+ make_shared_string(): enters a string into the shared string table.
|
|
+ map(): map an array or full-width mapping.
|
|
+ m_reallocate(): changes the width of a mapping.
|
|
+ object_info(): returns internal information about an object.
|
|
+ program_name(): returns the name of an objects program.
|
|
+ set_next_reset(): set the time of the next reset.
|
|
+ unmkmapping(): deconstruct a mapping to arrays.
|
|
+ upper_case(): make a string all upper case.
|
|
+ widthof(): return the width of a mapping.
|
|
|
|
- Master Object:
|
|
+ All functions can be static.
|
|
+ Functions like privilege_violation() or heart_beat_error(), but
|
|
also valid_read() and valid_write() no longer receive destructed
|
|
objects as arguments.
|
|
+ Apply 'object_name()' renamed to 'printf_obj_name()'.
|
|
|
|
- Compiler:
|
|
+ New predefined macro __MAX_EVAL_COST__ expands to the evaluation
|
|
cost limit.
|
|
+ Bugfix: __DOMAIN_NAME__ on some machines returned the NIS, not the
|
|
DNS domain.
|
|
+ Bugfix: __MASTER_OBJECT__ could be set to a non-canonic name.
|
|
+ Bugfix: __FILE__ and __MASTER_OBJECT__ returned names with leading
|
|
'/' in compat mode.
|
|
+ Bugfix: (virtual) inheritance of variable-only objects with
|
|
variable initialisation doesn't crash the driver anymore.
|
|
+ Bugfix: #'++/#'-- in closures work.
|
|
|
|
- Fixed Crashers:
|
|
+ Errors in a callout to an efun closure.
|
|
+ Adding arrays up to and over the upper limit.
|
|
+ Destruction of non-interactive snoopers.
|
|
+ funcall()/apply() on a swapped variable.
|
|
|
|
- Other Changes:
|
|
+ The old behaviour of explode() and previous_object() is no longer
|
|
available. Floats, transcendent functions, mappings and extended
|
|
varargs are now permanent features of the driver.
|
|
+ Re-implemented the handling of heartbeats, resets, cleanups and
|
|
swapping in order to avoid caused lags. This also makes
|
|
the config parameter RESET_GRANULARITY unnecessary.
|
|
+ If used, the __INIT() function is protected instead of global, and
|
|
can't be called from outside the objects anymore (it shouldn't be
|
|
callable at all anyway).
|
|
+ When subtracting mappings from each other, the subtrahend may
|
|
be of any width, but only its keys count.
|
|
+ The 'status tables' command has an additional entry 'Object status'.
|
|
+ Bugfix: fixed an eval cost leak in catch().
|
|
+ Bugfix: fixed memory leak in terminal_colour().
|
|
+ Bugfix: if a command disconnects, but not quits a player, the prompt
|
|
is no longer printed (before it ended up on stdout, cluttering
|
|
the logfiles).
|
|
|
|
|
|
10-Dec-1998 (Lars Duening) -- Release 3.2.5
|
|
- Collapsing of '/' in object names also used for inherits.
|
|
- Default limit for bitstrings is 6144 bits.
|
|
- The efuns break_point() and swap() are disabled by default.
|
|
- Pre-release versions have an extended version number of
|
|
the form '3.2.5-dev.16'.
|
|
- 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__.
|
|
- New defines __ERQ_MAX_SEND__ and __ERQ_MAX_REPLY__ when the
|
|
driver supports the ERQ. The values are the max sizes of
|
|
the send and receive buffers.
|
|
- MSDOS support removed (the MSDOS filesystem however is still
|
|
supported).
|
|
- It is now possible to use '..' in filenames as long as it
|
|
doesn't has the 'parent directory' meaning (that means, 'foo..bar'
|
|
is ok, bug 'foo/../bar' is not).
|
|
- When a connection is closed, the driver no longer sends
|
|
'Closing down' as last text.
|
|
- Bugfix: branches in bigger lambda() closures use the correct
|
|
branch offsets. I am not completely sure if the bugfix is
|
|
correct, so I left in two 'DEBUG:' diagnostics with information
|
|
needed to debug the code further if necessary.
|
|
- Bugfix: the commandline parser printed a faulty error message
|
|
if a required value was missing.
|
|
- Bugfix: mapping_contains() freed the wrong values, clobbering
|
|
passed mapping literals.
|
|
- Bugfix: After an UDP packet was processed, the evaluation costs
|
|
are restored.
|
|
- Bugfix: The LPC compiler now accepts only regular files for includes.
|
|
- Bugfix: If a npc was destructed between to command() calls, and
|
|
the H_MODIFY_COMMAND hook was set to a string, the driver called
|
|
the named modify-command function on the destructed npc.
|
|
- Bugfix: During the execution of a closure, an extra refcount is
|
|
added to protect it from destruction while it is executed. This
|
|
is primarily a safety measure for the driver hooks which only
|
|
have 1 refcount and are thus very sensitive against master object
|
|
updates.
|
|
- Bugfix: Under some OS like Linux, the normal SIG_IGN handler is
|
|
just one-shot. To reliably ignore signals (ie SIGPIPE), a homemade
|
|
handler is used.
|
|
- Bugfix: regreplace("acc", "a*", "yy",1) trashed memory.
|
|
- Bugfix: runtime errors in an alien-lfun-closure (as created by
|
|
symbol_function() calls) no longer crash the driver during the
|
|
error handling.
|
|
- Bugfix: sprintf() on big floats or in long fields no longer causes
|
|
a buffer overrun (and should it happen nevertheless, a proper
|
|
fatal() is generated).
|
|
|
|
|
|
24-Sep-1998 (Lars Duening) -- Release 3.2.4
|
|
- Bugfix for the collapsing of '/' in object names.
|
|
|
|
21-Sep-1998 (Lars Duening) -- Release 3.2.3
|
|
- Bugfix: mapping_contains() no longer returns destructed objects.
|
|
- New special command 'status files' to append file usage statistics
|
|
from within the mud to the file /FILESTAT.
|
|
- New commandline option:
|
|
--swap-compact: reuse free space in the swapfile immediately.
|
|
Giving this option results in smaller, but also more fragmented
|
|
swapfiles, and the swap performance may degrade.
|
|
|
|
14-Sep-1998 (Lars Duening) -- Release 3.2.2
|
|
- Version number pattern changed from 03.02.1@<patchlevel>
|
|
to 3.2.<patchlevel>. This affects all uses of the __VERSION__
|
|
lpc predefine.
|
|
- Objects may be loaded/inherited with filenames containing two or
|
|
more consecutive '/'es, these are collapsed into just one.
|
|
However, it is not possible to find objects using the wrong
|
|
names.
|
|
- The dreaded __INIT() bug is fixed.
|
|
- New commandline options:
|
|
--options : prints all options used in compiling the driver
|
|
--version : prints the game driver version
|
|
--help : prints a short help of the commandline options
|
|
--longhelp: prints an elaborate description of the commandline
|
|
options
|
|
- The commandline option handling was renovated, most options now
|
|
exist in a short and long form. This caused slight changes in
|
|
name and syntax for well-known options (.e.g '--gcollect_out_fd<file>'
|
|
is now '--gcollect-out-fd <file>'). Please see doc/driver/invocation
|
|
for further information.
|
|
|
|
10-Jul-1998 (Lars Duening) -- Release 3.2.1@141-osb.16
|
|
- Bugfix for the "*":: problem.
|
|
- Added a minimal master for simple driver tests.
|
|
|
|
17-May-1998 (Lars Duening) -- Release 3.2.1@141-osb.14 and before
|
|
- Small speedup for regexps through usage of a cache. Also increased
|
|
the complexity limit for regexps.
|
|
- Added support for BeOS.
|
|
- Automatic garbage collections are kept at least 5 minutes
|
|
apart. Every garbage collection is logged on stdout.
|
|
- Variables are swapped independantly from program code.
|
|
- 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.
|
|
- MudOS-efun terminal_colour() added by Mica.
|
|
- this_object() in destructed objects does not print a
|
|
diagnostic anymore.
|
|
- 'status tables' prints the number of cache hits both
|
|
absolute and as percentage.
|