This file lists all changes made to the game driver in all gory detail. See the file HISTORY for a user-oriented summary of all the changes. 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 '[..]' caused the compiler to overwrite memory (most of the time the compiled program) because the attributes of weren't promoted up by the . - (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 '[..-]' caused the compiler to overwrite memory (most of the time the compiled program) because the attributes of weren't promoted up by the '-' (reported by Mammi). - (prolang.y) In the expression '++' the opcode for '++' was overwritten if the required a 2-Byte index. (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 '. 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) -= now works for 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=' 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 [ 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 [.. if 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 for ssize_t. - (settings/tubmud) Corrected some settings from "=" to the correct "with_=". (thanks, Christian!) - (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 (). (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 '++[,]'. (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[_t (which are shortcuts for the old 'struct 's); mainly used to decouple the header files. - (other files) Adapted to use the _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 '--

.*' 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_() 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_(), deref_() and free_(). 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 '(: :)' syntax MudOS invented. As a sideeffect, the lexer now knows the '#line ' 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 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 ' ()' (before, only the objects status displayed that, programs displayed ' ()' ). - (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 '([:])', the 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 . 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@ to 3.2. (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 . - (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 ( 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.