This is the DONE file for the CD version of the 3.0 Gamedriver CD.01.54 JnA: Modified the following efuns to accept an integer argument to allow composite statements without runtime errors: m_sizeof, m_delete, m_indexes, m_values, break_string, mkmapping JnA: Added file_time(string filename), which gives the last time a file was modified. JnA: Added object_time(object ob), which gives the creation time of an object. JnA: Added Germano Caronnis' library routines. Including extensions to getrusage. JnA: Added patches and features from Lars' up to 3.1.2: It is now possible to initialize non-local variables. If such initialization is used, then a function __INIT() will automatically be defined, which can be called. __INIT() is automatically called when the object is created for the first time, as well as when it is cloned. The __INIT() function will also call __INIT() of all inherited files, if there are any. Strict types are enforced. Example: object created_me = this_player(); The variables are initalized and __INIT is called in the same order as variables are declared respectively inherit statements are encountered. Fixed a bug in the initialization code, which did become a recursive function call. The statment catch(exec(...)) could crash the game. 3.1.1 Fixed a severe bug, where this_player() returned non-zero value when the object was destructed. The basic idea is that it should never be possible to refer to a destructed object. 'nomask' functions and variables wasn't checked for correctly. 'private' functions were fixed, so that they can no be called through call_other(). This is a short summary of how special types are handled: 'static' variables: Will not be saved at save_object(), nor modified at restore_object(). 'static' functions can not be called through call_other(). 'static' inheritance will make all inherited definitions 'static'. 'private' variables and functions: Can not be accessed by a sub class inheriting their definitions. Functions can not be called through call_other(). 'private' inheritance will make all variables and functions 'private'. 'nomask' functions and variables can not be redefined by a sub class. 'nomask' inheritance will make all inherited definitions 'nomask'. 'public' variables and functions can be redefined by a sub class, even if they have been inherited 'private'ly. 'public' inheritance will make all inherited definitions 'public'. The type 'protected' is reserved, but does not mean anything currently. 3.1.2 JnA: Added an extended capability to Germanos binary dump routines. It is now possible to have a 'shadow dirstructure' with compiled objects dumped to disk. This is controlled with a #define BINARIES "path/" in config.h Files that have the #pragma save_binary are stored as binary files, this speeds up preloading somewhat :-) The compiler is slightly picky about spaces after pragma directives JnA: Added patches from Lars' up to 3.1.3: All variables were accidently considered to be nomask. The statement 'static int a = 1;' no longer generates an error message about non-matching types because of the 'static' type. 3.1.3 JnA: Fixed osem byte order bugs for ip-addresses. RW: Added Reith's new sprintf.c that *should* be able to handle mappings. Modified mkmapping to take lists of both indexes and values or just one of them. Modified m_delete and += for mappings to work like arrays. JnA: Added Germano Caronnis patches to binary load/save handling included files too. The binary is now invalidated if any included file is later than the binary. JnA: Added a couple of commands to the debug() efun: index, malloc, status, status tables, mudstatus, functionlist JnA: Added Linus Tolkes fix for function searches. JnA: Implemented a 'smalltalk-like' dynamic late binding for call_other(). The last function index found for each call_other is stored in the stack code each time a call_other is made. This is possible to turn on and off with #define CACHE_CALL_OTHER CD.01.55 JnA: If switch statements with string case labels are used, the program can not be saved as a binary. The binary save flag is automatically turned off in this case. This is a bug... switch / case ought to be rewritten, completely. JnA: The following efuns have been removed and made into sub-commands for the debug efun: rusage, top_ten_cpu, object_cpu, swap, version, wizlist, trace, traceprefix, call_out_info, inherit_list, query_load_average, shutdown JnA: The functions of a program can now be put in a mapping which is associated with the program. This makes the function search into a hashed search instedad of a linear search, which is faster... This is done with a subcommand to debug(): debug("function_map", 1, object); It is recommended that at least /secure/master.c uses this as that object is called from the GD a lot and therefore can't use the CACHE_CALL_OTHER functionality. JnA: A new efun update_actions() has been added. It updates an objects exported actions in all 'nearby' living objects. This behaviour could be partially simulated using move_object() before but now it will also work for objects without environments, ie rooms. JnA: Fixed a bug in binary load when included files where checked, correct error codes are now returned. This was only relevant for the binaries package which uses library.c in a slightly different fashion than the blib package. JnA: Changed the 'top_ten_cpu' subcommand of debug() so that it gives programs instead of objects. It is possible that both will needed in the future but the 'program' information is currently more valuable. JnA: Fixed a bug in remove_interactive that would dump the game if the interactive player was in ed and needed the ed buffer saved. JnA: Fixed a small bug in parse.c that would dump the game if %p was used at the end of the parsed text. JnA: If USE_ENCOUNTER_NOT_INIT is defined and the living object has no encounter() function then init() is called in the old way. JnA: Fixed in destruct_object() so that the master_ob can be destructed and reloaded. JnA: Added new efun readable_string() that filters out all nonprintable characters from a string. JnA: Rewrote subtract_array and intersect_array using mappings. JnA: Introduced tmpalloc() for temporary memory allocation. Memory that can be freed each turn around the backend() loop. The motivation for this is memory lost due to errors occuring. JnA: Access checks in comm1.c deleted. This is done in the mudlib. JnA: Fixed so that an LPC error in epilog() in master does not dump the game. There was no error recovery context at that call. JnA: Previous object should always be set in call_other(). This was not always the case. JnA: get_mud_name() is now called in /secure/master to get the name of the mud. This name is then defined in all compilations of LPC files. JnA: Functionality for sending and receiving UDP packages added. The #define CATCH_UDP_PORT decides if this is active, see config.h JnA: The global cache is now optional. There is a GLOBAL_CACHE define in config.h. The define should be the size of the cache. CD.01.58 (920817-) JnA: Applied patches from Thorsten Lockert (Plugh@Genesis). Fixes were in comm1.c, mudstat.c and lint.h call_out.c array.c for compiling under Ultrix. JnA: Fixed the recompile check of the master object so that it actually aborts the destruction of the old if the new is buggy. JnA: Added a check in process_value for destructed object. JnA: Fixed a subtle bug in explode() that would create an array with one element less than needed if a consecutive multiple same-char delimiter were used. The bug was caused by the check to see if the exploded string was terminated by a delimiter. This is in the above case not certain even if the last chars are identical to the delimiter. Example: explode("fooooooo", "oo") JnA: catch should not be able to catch 'eval cost too big'. We allow the actual catch but we see to it that a new error happens directly after. JnA: parse_command should now handle combinations with %s better. %p also works better. JnA: Fixed so that /secure/simul_efun.c can be updated. The same checks as for the master object is done in simulate.c::destruct_object() JnA: Fixed a bug when creator_file is called in master from give_uid_to_object(). Enclosed it in an error recovery. Before objects could be left without uids which is fatal. JnA: Changed explode()'s behaviour when the string contains only n number of delimiters. It now returns an empty array. Before it returned 0. JnA: Fixed break_string() so that when a single string, the indent string is added. It was not before. JnA: Added a subfunction 'get_eval_cost' to the debug() efun. JH: Added debugmalloc. You can now compile with debugmalloc as malloc function, If you call debug with 'debug malloc' as parameter the entire memory will be crossreferenced to find memory leaks JH: Patched smalloc, so that snippets of large blocks aren't turned into smallblocks. Thanks to Dworkin for the patch. JnA: Changed function header organization to use one hash table per program block. JnA: Compressed size of function headers from 16 to 12 bytes. JH: Patched lex.c to concatenate string constants. CD.01.59 (921201-) JnA: Stored the linenumber information used in runtimerrors in the swapfile thereby saving a lot of memory. Also added the pid to the swap file name, making multiple drivers running on the same mudlib dir not use the same swapfile. JnA: Call 'linkdead_player' in master when linkdeath occurs, i.e. when the interactive structure is removed due to fault in transmission. Is there a faster way of detecting linkdeath? JnA: Profiling of functions in LPC programs. When PROFILE_FUNS is defined in config.h information on how many times a function is called and how much time is spent in it is stored in the (struct function). The debug("getprofile", ob) gives an array of all functions in the object and their current number of calls / time spent. JnA: print_mudstatus now also prints processtime not just actual time. JnA: Ensure that neither simul_efun nor master is swapped. JnA: Measure the average response time for commands by players. The debug("get_avg_response") gives the average time between entry of the 'select' in comm1.c The actual average response time ought to be half of this. JH: Installed working debug("get_variables") JH: Added type information to runtime error printouts. JH: Fixed bug in enable_commands(0). Commandgiver was set to 0 at bad times. CD.01.60 (921213-) JH: Applied Amylaars speed patches to hash.c