Wish list for MudOS 1.0

  • public variables accessible via -> (e.g. x->y++ where x is an object and y a public variable in that object. We should probably make allow for read-only access as well as read-write) (Whiplash)

  • support for new LPC data type "float" (in printf too?) (Jacques?)

  • support indexed strings as lvalues (e.g. str[i] = 'x') (Wing)

  • fix inheritance so that if you have an object c that inherits objects a and b (in that order), and a, b, and c all have a function with the same name, then when that function is called from inside b, it should call the one in c and not the one in a. (this may be a problem in find_inherited()) (?)

  • make ~username work in #include statements e.g. #include "~truilkan/include/config.h" (Shadowhawk)

  • make a version of call_other that accepts an array as the argument list. it should copy the array into a temp variable and then pop the array from the stack. it should then push each element of the array onto the stack as a separate parameter. it should then call the normal call_other.

  • fix sprintf() to do more intelligent things when types don't match e.g. printf("%s", 24) should convert 24 to a string like write("number: " + 24 + "\n") would do.

  • add another version of __INIT that doesn't get used for anything by the driver itself (so that wizzes can safely use it for initializing objects without having to worry about if inheriting objects call ::create() or not)

  • enhance the swapfile code so that slots get reused.

  • the process_io() loop should be redone to be driven by nb and the file descriptor mask instead of polling each fd. Also when initializing the read mask we should count the number of bits set and pass that number in. This allow great select performance. (Cynosure)

  • add a struct data type. This will require some fairly tricky yacc hacking. This will constitute adding user-definable types. However the actual internal implementation of the struct could be an LPC array. References of the form s.field could be translated into an access to an appropriate array element at compile time.

  • remove wizardp() and enable_wizard() from driver and split into functions that allow error messages and unrestricted ed (which are the only two current uses of enable_wizard (other than mudlib uses).

  • fix driver not to lock player up when ^C is received (Telnet DO TIMING)

  • replace the goto label crap with while (1) loops (if possible)

  • fix it so that dested objects which have been used as indices to a mapping don't waste memory (only is wasted until map is freed)

  • consider adding an unshadow efun so that a shadow can be removed and reused (without recloning)

  • disallow new logins during a shutdown

  • make it so that 'z' in ed uses getenv("LINES") to see how much to list

  • introduce some mechanism for explicit type conversion (not just casting)

  • seems to be a bug when using += on an empty array..
    messages = ({});
    messages += ({msg}); 
    doesn't do what is expected (it prefixes a 0 element to the array

  • make possible for object to say it doesn't want to be swapped out

  • add enum to LPC (and maybe typedef)

  • put a struct in interactive for recording info on player terminal characteristics (lines, cols, etc). add an efun for setting those values.

  • implement auto line wrap.

  • implement support for linking muds (metamud) -- possible that jacques's comm.c mods will be useful for this.

  • add another version of __INIT that doesn't get used for anything by the driver itself (so that wizzes can safely use it)

  • consider putting "ls" back into the GD

  • fix sscanf using %*s so that it reports the correct number of items matched

  • make the compile handle #include correctly with respect to line numbers in error reports

  • check out the object loading code in Amylaar's driver (up to 2x faster than lars apparently -- according to Buddha).

  • maybe change driver so that clean_up also checks for zombied objects (objects that aren't referenced by another object (ref count = 0) and have no pending call_outs and don't have an init() function can be nuked.

  • identify objects internally with filename and timestamp so we can do the persistent mud. modify find_object and restore_object. cause save_object to save a value for variables of type object.

  • stat probably shouldn't be a synonym for get_dir. It should be restricted for operations on a single file (like in UNIX(tm)).

  • add a new remote object type that looks like this when written out: (). This would let object variables be saved and restored with save_object and restore_object. All efuns taking objects as arguments would need to be modified to allow these new remote objects. When an efun is called on a remote object it calls remote_call(string efun_name, mixed *arguments) in master.c. master.c is then responsible for initiating communication with the remote mud in order to have the remote mud apply the efun on the object in question (with the specified arguments). master.c should compute an integer key value which is returned to the calling efun which in turn is returned to the LPC object (caller). Calling delayedp(key) should return TRUE. This lets the caller know that it will later receive a callback from master specifying the key value together with the actual return value of the remote efun as returned by the remote mud. (note only a wrapper needs to be in master.c, the actual remote call_other daemon could be anywhere). Note: since save_object and restore_object functions are used to encode variables sent in MUD mode of the socket efuns, objects will automatically be converted to the "remote" (<...>) form before being passed to the remote efun. --Truilkan (1992/09/20)

  • write a routine to copy a compiled object to disk in such a way that it can be read back in

  • driver compiles fine (albeit with a few extra warnings) with -ansi option of gcc 2.2 on except for the usage of fileno() in file.c (which is not an ANSI C function).