This file contains a list of things to be done to or questions to be answered
regarding the NUTS code. The items may not be listed in any particular order.

----------

There is a problem with the telnet negotiation re: ECHO.

Review which signals should be ignored.

The expire_messages() function doesn't deal with the possibility of lack of
disk space while copying the messages to the temporary file.

Add code to process a -HUP signal. The result should be to run a lot of the
initialization code of the talker and re-read and process the init_data file.
Users who are currently on the talker should not be disturbed in any way
unless the room they were in no longer exists.

-----

Eliminate need for find_num_in_area() by updating count automatically when a
user logs on and as they move from room to room?

Add keepalive to socket after accept has occured.
    if (keepalive &&
        setsockopt(0, SOL_SOCKET, SO_KEEPALIVE, &on, sizeof (on)) < 0) {
        syslog(LOG_WARNING, "setsockopt (SO_KEEPALIVE): %m");
    }

After determining connected host, next thing done by telnetd is to determine
the terminal type. This involves telnet negotiation. After this is complete
we can send out the motd.


Update the docs/UserdataFile.txt file.

How to handle negotiation of screen size vs. data stored in user data file?

Fix handling of turning on and off character mode echo? This has to be done
from time to time independant of whether the user has requested echo.

Be able to .cbuff shout buffers, etc. (Only wiz and up can do this?)

The .examine code isn't doing an inexact name match. This is due to the call
to find_userdata() in get_userdata(). Is this behaviour ok?

If user site is banned, user_quit() is called right away which will probably
cause problems when telnet support is enabled.

There may be some places where user_quit() might be called when telnet support
is enabled. Will this be a problem for the telnet code? May be ok if the user
to be quit is not the current one but need to make sure that nextnode is set
correctly if user being quit is being pointed to by the next node.
Delete_user() which is called by user_quit() fixes nextnode as needed.
Done?

Fix extra error checking when updating or reading values for idle_ time values.
Done?


*** Ideas for dealing with new users on a port:

Show user the port rules and have them approve them during first log in.

Create a new room type of NEW_USER for new users only. New users would be
placed in this room when they connect. Regular users would be taken to the
first room that is not marked as a new_user room. New users would be shown a
new_user file which must be read completely before they are allowed to leave
this room? What restrictions would be placed on new users?

A new user can only .go to new_user rooms. The c_look() routine won't show
a new users other room types.

A new user becomes a regular user by reading all the required files, setting
a profile, a caste (set in their profile in the case of the Gor port), and a
description.

Send a wiz tell message when a new user arrives.


*** Birddog features which need to be added:

Add ability to review logons.

The .examine should show site name AND IP address.

Add Birddog's AUTO_ARREST feature.

Add the .mtell, and .quote features. The .mtell feature also needs an
addition of '.rev mtells'. Requires modifications to the .set command
to add 'mtell add <user>' and 'mtell remove <user>'.


*** For distribution package:

Keep it up to date with the major changes in the development version.


*** These are major things to be done for my 3.0 version:

Test paging of output from .areas, and .search.
Once the .who <port> feature is altered to query the other port to create
the file with the information in it, list_users() should be updated to use
the page_user_output() routine.
Done?

Fix DNS lookup bug in NUTS. Seems to be ok if lookup is done in a subroutine.
This probably requires a complete review of the socket handling code.
Done?

Adding/modifying areas can cause a crash of the talker??
Done??

Add checks on boot up to see that areas were named for the entrance and
the jail as a minimum. Also check that the entrance is set to 'fixed'.

Double check error handling when adding a room on the fly.

If a rooms message board is not searchable, prevent users from reading it
remotely or even if they are in the same room (unless they are a magical
user).

Show status in .examine as in "Status: Away from Keyboard (AFK)"

In nightly maintenance, rotate out old log files?

When a magical user joins someone in a room not connected to where the
magical user is located it says the magical user walks in instead of
appearing in a flash of light.

Change format of userdata files to something similar to init_data. Then we
can allow a user to set their own login/logout and area enter/exit messages.

Allow login/logout and area enter/exit messages to be customized for each
port. (ie. add new options in init_data)

Add ability to show helpfiles for .help rules, .help talkers, .help staff.

Add confirmation of .r, .s, and .a in edit mode.

How can a wiz make a non-wiz invisible? Make it a compile time option as
to whether non-magical users can be made invisible or not? User needs to
be of a higher level than the user to be made invisible.

Change the .entpro command to just .profile since it can now edit an
existing profile?

Review the list_users() function. At the very least, add extra comments
to explain what it is doing.

Need to think more about who is allowed on to a full or closed port.
What user level is required or allowed in these cases. Particularly
in the case of a closed port. Should a closed port allow logins of a
certain level only if no one is logged in?

Add check for successful write of userdata file in save_userdata(). Display
an error message to the user and log error if one occurs.

Make a common function to create a temporary filename and show a
message to the user (and log event) if name couldn't be created.

Update time of auto logout warning when auto logout time is reduced.
Document this behaviour and that of changing default users level which
can turn on no new users flag which doesn't get reset if default user
level reset.

Record the times a user logged on and off in review buffer?

Split the command in to .examine (for the profile information) and .info
for all the long winded additional information like Birddog did? When
examining oneself, show the time user logged in and how long they have
been logged in this time.

*** Birddog is in love with buffy ***
Level: USER
Last logged out: Thu Jul 23 00:19:49 1998
Which was: 18 hours, 18 minutes ago

.info casey

*** Casey - a new user ***
Level: USER
Last logged in from: localhost (127.0.0.1)
Currently logged in from: localhost (127.0.0.1)
Total login time: 23 minutes
Location: hall
Set info: Screen has 80 columns and 25 rows; Bold is off; Word wrap is on
          Prompt is off; Paging is on; CharacterModeEcho is on
Listening to: Talk=YES; Shouts=YES; Tells=YES; Echos=YES; Logons=YES; Beeps=YES
              MTells=YES; Atmos=YES; System=YES


The special friends stuff is currently only checked at boot time. This
could be made part of the daily checks (like the expiring of old messages).

Add .list command (a la Birddog). Lists .ignores, new bans, and all bans.

Add a .sutell (sort of like .wiztell)


*** These are the things that are likely to be done soon:

If a magical user is invisible, they should get the normal messages when
entering or leaving to/from a connected room except it should say Someone.

Allow wiz to enter a private room if there is no one in it? When they
leave the room should not be set back to public.

Add the ability to make substitutions within a line in edit mode?

Add ability to kill a user idling at the door.

Add some more #define statements for some of the other numeric values.

Look for another way to do a .who <port> to provide more up-to-date info
than exists when it just read a file saved when users log in/out.

Modify login level showing so that only users of a certain level and up/down
see the user level of magical users when magical users log in.

Should regular users be able to see that a given user is under arrest if the
arrested user is not logged in?

Should user being arrested/unarrested see the message everyone else sees or
another variation on that message?

Verify buffer usage and reading of files. Make sure long descriptions can't
result in a user changing user level.

Need to come up with a clearer rule stating when mess[] buffer can be used
by subroutines. (The variable mess can not be passed between subroutines?)

While a user is on-line, keep track of all users they name in .ignore_user
commands (in a linked list?). When a user logs in, these lists can be used
to (re)set the ignore flags. Another use of the linked list routines?

Choose a character that can be used to abbreviate shouts. Use ! for .shouts
and then something else for shout emotes? This would mess people up for
some time. Other character to consider is # for .semotes abbreviation (or @
which is beside the ! character).

Add a .set gender option?

----------

These are the things that will be done later (if at all):

Show rules to a new user once it is known they are a new user. Show an
additional message to a new user after completion of them logging in?
This should be configurable.

Improve portability of the code by using autoconf.

Multi-thread the code to improve performance for certain commands that
can take a while to run such as commands dealing with deleting messages
from a file.

System wide messages across ports.

Add ability to check for banned user names when a new user is logging in.

Add ability to force the talker to reset its state to what is specified in
the init_data file without having to shutdown and restart the talker?

Change format of userdata files to be similar to the init_data file?

Should a user still be allowed to be invisible while under arrest?

Should the .who output include the user doing the .who?

Should user be notified when user being ignored logs out?

Add the ability to limit the powers of a Wiz and SU to particular ports by
using a list of numbers beside the user level to indicate which ports the
user has Wiz priveleges. No list means Wiz/SU priveleges on all ports.

Be able to do a search for users with a given site for those people who get
arrested and then come back as someone else. Instead of .find user mskitty
do a .find site 122.23.244.22

Add support for colour.

Add a section to the init_data file which would allow control over the user
level required to access various commands. This could then be changed on 
the fly. Would this be of any use or just a waste of time to code it?

Record the start and end time of the checks run at midnight?

Eliminate need for timeline() function (or at least simplify it if it no
longer needs to return full time of day string).

Change name of bold option to highlight?

Review what message types are MSG_SYSTEM versus being MSG_FORCED. This is
needed for messages stating you can't do something.

Change check for existence of files using access() instead of via fopen().
Done?

Use #define values instead of just 1 and 0 as arguments to functions like
get_user_num() to make it easier to know how these functions are being called.

Change command dispatching to use a pointer to the function to be called
as part of the CMD_INFO structure. Would this eliminate the need for the
Cmd_Codes enum?

Split the source code into several smaller files to make it easier to work on.

Split some blocks of code in to smaller blocks with calls to subroutines.

Create one function to go through a file and add/delete a line. This function
would be used by the .bansite/.unbansite commands and other commands that
need to modify a file in a similar fashion.

Add a .status command to quickly show a user what the state of the .set stuff
is plus which messages they are listening to and which ones they are ignoring?

Add the ability for Wiz/SU to turn off the identification of who does an echo?
Call the command .monitor??

Prevent use of user password that is the reverse of the user name? 

Only allow a SU to see in which room an invisible user is located?

Prevent smail when user is ignoring another user. Keep .ignore in place while
user doing ignore stays logged in.

Be able to use modules with the code to support commands and other features
that can vary from port to port. This could also allow for games, scripting
and all sorts of other possibilities.

----- cut here -----
Here's a few of the commands I would like to suggest:

bring - brings a user to Wiz or SU [might be a fun command for users]

users - lists all users in files

examine - something that shows a bit of info the user can fill out such
             as m/f, email address, etc if they chose to add it to their
             profile.  

How about a silent kill?

A few of those commands I mentioned should not be available to the Wiz'.

Fantasia.

----- cut here -----
This is just .smail I have received with comments on the code. This stuff
may or may not ever be done.

(Mar  4 12:21) From Vern: with cols 80 and rows 100, I CAN see all my smail,
BUT, it does not print "PRESS RETURN OR Q" after the 100th row. However it
does expect me to press return or q.  the set wrap command seems to only
activate the set cols command, it DOESN'T word wrap! I have a valid reason
for setting them to maximum.... for the rows: I don't like to "press return
or q" all the time. I prefer to get everything at once and then scroll back
locally on my terminal. for the columns: this is probably more important to
me. I quite often want to copy and paste, for many reasons. If you have put
return chars at the end of each line, this messes up my copy and paste - it
splits a long line into a number of 80 char ones...  

(Nov 20 17:59) From Chrissy: would it be hard to have wiz's have the ability
to overwrite the last line or two of a DUnce's profile ? to identify who
dunced them for wiz who don't have access to syslogs ?

(Feb  7 07:17) From Marvin: PLEASE, get a command to summon wizards to a port
when they aren't on that port.  We've had some major problems down here.

(Feb 21 08:54) From Lugarou: One request: and ability to see who's visited in
the past few hrs (just login names please!)

(Mar  5 11:30) From Darknight: Hi... I was wondering.. Have you thought about
coding a notification list? ie: You have a list of friends If they're on when
you arrive.. Or when thay Log on/off you are told.... It's a great tool..
I've used it on other servers. Like to hear your comments. Ideally it should
work regardless of what port a friend logs on to.
Usage:
   .friend - shows friends online.
   .friend add Dysc - adds Dysc to friend list.
   .friend remove Dysc - removes Dysc from friend list.
   .friend list - shows you your friend list.
   .friend ignore - toggles if you're listening to friendly logins


(Mar  9 03:31) From Patroon: can we write in "macros" where people can have a
set of 10 preset thingys called "macros"??

(Mar 31 04:54) From Lugarou: Would it be possible to add an .unwrite or .wipe
to clear something just posted by the user on a board in the talker?

(Apr 12 19:04) From Patroon: I understand you are working on an .ig user
command... one aspect... if it could stay witht he person who puts it on...
so no matter how oftent he ignored user logs on and off it remains in effect
with the person who put in on in the first place... well, if it were that
way that would be way cool. What happens is that if it goes away as soon as
the ignored person logs off then that becomes a tool of harassment to log
on and off.

(Apr 26 19:13) From Birddog: do we need talker-linkage or clones?

(Apr 30 00:49) From Subtlety: coding suggestion: ".ignore <user> tells" ...
ignores tells from a particular user (but not necessarily open channel
stuff ... which could be ".ignore <user> all" .. etc)

From Aztec: Add the ability to "hide" from others meaning your name doesn't
get listed when someone does a .f l user (for example).

Make a separate input area for use by the users. See lostsouls.org 3000 for
an example of its use.

(Oct 28) From Barbarian: where do you suggest a code change? specificaly the .read command to put a new line between messages and possibly BOLD the author's name?

Rhummi on Lintilla would like to be able to have commands that can be unique
to certain ports.

