TODO's before rele:
# TODO check compile fc4/fc5
	-> virtusers:
		misc/old-nowork-virtuser.db
# TODO: thing for idle if it's just chime messages
# ^E<del> (\0177) still prints the err message

--

TODO localhost-only port binding cmdline option

TODO eventually, maybe: jetlag for non-integer amount of hours

user preference for prompt character (instead of compiled-in)
	The way we made cmd-char a user pref was to have an unlikely high-bit
	char which is replaced when a user sees it, so we can still broadcast.
	Similar to \201, \202 for timestamps, \177, etc.

making a macro with a /path/that/contains/altcmd/char,
	it thinks it's a command - fix heursitstics to not cmd it
	when it has a / that isn't in first pos (except //)
	-> recheck this, might be fixed (macroAppendLine())

how about !alarm public <time> allowed; currently just !alarm <time> public

user::loadPrefs can be called from state SETUP_CONN or GET_LINE (authlocal)

reflow mode sometimes puts blank lines where they weren't
ex : paste this in reflow mode
http://www.aliaswavefront.com/en/Tmpl/Maya/html/index.jhtml?page=/
            en/Community/Special/maya_ple/index.jhtml&style=normal

     FORUM: It's now Fri Mar 29 02:22:27 2002
    dschin: display bug: the ^U doesn't show in the buffer after doing ^Q
    jeremy: hmm, k
    dschin: but when you hit enter, it does show properly
    jeremy: k
            i think that one can wait :)
    dschin: minor, just confusing. "did i hit ctrl-q yet?"
            yeah


Macro causing crash ?

     FORUM: away: at 19:13:
      AWAY:  rjhawkin: bing
     FORUM: rjhawkin has returned at 19:13.
  rjhawkin: hmm I need to fix that macro

    jeremy> Connection closed by foreign host.
Sun Mar  7 19:15:34 EST 2004



remove ratelimit when sending only to self?
	( in user::ManagedChangedInputBuffer, remove call to checkMaxLinesBrake
	if sending just to self )

dschin to jeremy: got it
                  its not abusable though, ithink, so its okay probably
       to dschin: heh
     from dschin: prefix a line with a space or two, then fill the rest of
                  the line up with a character with no spaces
    dschin: l
jeremy to dschin: ohh
     from dschin: when it gets to the end, it dumps the blankness and
    jeremy: //////////////////////////////////////////////////////////////////
dschin to jeremy: rejustifies the thingy
    jeremy:
            cut
            e
    dschin: dfasdf
jeremy to dschin: inereting
    dschin:
            7777777777777777777777777777777777777777777777777777777777777kkkkk
    jeremy:
            :)
     FORUM: It's now Mon Oct 22 14:31:49 2001

allow admin to change topic at any time?

allow admin to dynamically change topic expire time / cmd line option?

find where we're missing something that sets user_fd=-1 but doesn't log em out
	(state remains STATE_GET_LINE; see misc/slotsproblem)

Re-add a switch to let non-users be automatically logged on as guests
	-> does guest auto-accept do this close enough?

Cursor key handling?  We could recognize the start of an ESC sequence, since
	we already recognize ESC ESC, by adding something to
	user::ManageInputNewChar that checks whether we have
	substate_tracks_dblchar && (state_d_char == (char) 27 )) and the new
	key isn't 27; but if we're handling anything besides esc + 1 character,
	new substate-like things will be needed.  Also must make sure we break
	handling if there's more than a few seconds between ESC and the new ch.
	(user::lastping should track last keypress time, if it isn't already
	set by the time they call ManageInputNewChar)

TODO: c_timer public display always lists 'em as being in the server's timezone

		  \201 (ascii 129) = HH:MM
                  \202 (ascii 130) = DD MMM HH:MM
                  this should make it easy to get jetlag into slf ;)

(20010731)
moninj (8:52:53 PM): hey matt... if someone's on the west coast and the server's on the east coast, is their jetlag +3 or -3?
MaTTeD (8:53:14 PM): Their jetlag is -3  since it is time minus 3 hours
moninj (8:53:45 PM): cool, thx
MaTTeD (8:53:49 PM): :)



WORKING ON NOW
------------------------------
for macros:
	To shoot for for this devel "release":

	- share macros by all logins of a user,
	  though that would be pretty easy to add since
	  we don't yet load them in from disk... fun issues for later
	  (manually updated prefs file while logged in, then log in
	   again, anyone?)
	  This needs more careful attention; when someone logs out,
	  we need to either free it, or not free it, depending on if
	  they're still logged in at another slot.

before public release:
	need to check statedata, statedat2, and free
	their contents if setting to ss_non_admin
		(resetFieldsToDiscon) (does that call setAdmSubstate??)

 	==>	look for TODO TODO TODO and 20001006

	-- look for STATE STATE STATE too...

	util: datediff isn't used; fix its bug or get it out of the src

	linkedlist: need a delete
		llist_remove_after ; returns the data the link pointed to
			or NULL if none
		be sure not to flummux up the list head cell
		-- done, now make sure this code is totally correct

	esc should cancel changing it

	for virtusers: docs: say somewhere that 'edit user' makes its changes
	to field contents IMMEDIATELY.

	docs: do we mention somewhere what chars are stripped out?

paras suggestion: flag for !showaway to not show auto-idle-awayed people

make sure we compile and run both with and without every ALLOW_ in prefs.h

"rot10" should be "rot5", no? (docs and src)

stick "ADMIN: " lines into log for admin actions... and document this

docs need updating; compare public side to slf195/docs

bug: maybe not parsing listen list correctly on save/load prefs?

bug: two admins adding a user by same name at same time crashes it
	(are there other situations where adding an existing user does so?)
	-> this may just have been due to the no-fill-w-nulls bug fixed 20010730

** right now, u->substate stores stuff; check to see where it's storing
	a pointer to the static structs of passwd-db-inc; these are
	not multi-admin-user-at-once safe.

bug: %who list for a guest waiting to be accepted shows wrong time

change all [r]index to str[r]chr -- it's POSIX, [r]index is just BSD
[ although it compiles on solaris 2.6/2.7... ]

put (c) 2002 somewhere

ftp://ftp.rfc-editor.org/in-notes/rfc1073.txt  -- telnet window size option
http://www.faqs.org/rfcs/rfc1091.html -- telnet term send

check and do not allow del a virt while they're logged in, or kick them?

NEED TO FINISH CMDLINE !admin !!! right now it just dumps you into interactive.


 FORUM: public timer which was set for 13:24.        (bug)
	(dsiplaying when displaying all timers) -- is this still here?

customizations: change cmd char on cmd line

-- set it so the running user (getuid) is an admin if they're 'valid' (>=100?)
	-> done, PUT THIS IN DOCS.   (SLF_MIN_REAL_USERID)

when a virtuser gets deleted, need to del their pref file too

idea: have logprintf specify a level, just like kern log OR just like slf
msgdesctypes, so we can leave debugging stuff in :)

timer messages sometime called timers, somtimes alarms

[document] a more flexible way to specify all files' location = use -d
	---- files: ----
	banners/ dir -- got it
	virtusersdb.* -- done EXCEPT need to add  .dir,.pag (got .db)
	slforum-<username> prefs -- done
	issue.banner -- done
	lockout-users  -- done
	wtmp log -- defaults to WTMPLOG, falls back to
		slfhomedir/slforum-wtmp-%d, (%d=port).

slf_safe_fopen should allow symlinks but only in non-world-write dirs

those checks for 'well-formed usernames' need to be put into virtuser code

carefully test all admin substate transitions, all possible lines

document the slf_virtuser_* functions

!admin list still isn't done very well, need to write that
	[ can use prevstate, since STATE_GET_LINE doesn't use that ]

need to add an admin function for the lockout users file admin, eventually

When "esc" is hit from admin menus, should set to the prev admin menu.

(for cmdline opts: and make a note in the docs that, like most unix utils,
you'll need ./-dirname if your dirname actually starts with dash)



CRITICAL BUGS
------------------------------

If there were any, you probably wouldn't be reading this, we'd be fixing them.



ANNOYING BUGS
------------------------------

hack due to laziness hsould be removed:
    if (ret == 1) {
      // user hit return; thus, time for substate transition
      uWrite("\r\n");  // retain it on screen
      setAdmSubstate (behav->nextstate);
    }
	(near end of HandleAdminLine)

when sending a line out, we check for and double IAC.
	BUT the way it's currently done, it's also doubled in the room log!
	Do we need to fix that?

for c_emote: !me isn't listed in brief all-commands list if topics enabled

for commands.html: link up the command names up there

^D^D doesn't work from inside admin states; doesn't check for *buffer==\004

need good docs on what ManageInputBuffer, Handle???, Manage?ChangedInputBuffer,
and ManageInputNewChar are, and their interactions
write docs on "what waits for keys, what happens when you press a key"

!printwho format also needs to be normalized in general.

***** must rewrite docs before public release to include new features *****
	and when doing so, include details:
	on when idle time is kept and not [incl. the new trueidle pref]
	and when buffer's cleared and when not (whisper-to'd one leaves)
	and alt cmd char
	and autoaway
	(see changelog from 1.9.5-develx for more)

Can't remove a specific thing from listen or ban lists, need to reset 'em and
add everything else :P



DEFINITE GOOD IDEAS -- Most of these will make it into 2.0.
------------------------------

no max # dice, just don't print details except if somtehing goes wrong
	(currently there exc. for sw rpg)

add a state for when printed "Bad login" (for wait)
	look for 981005.1025

- user-visible ideas:

cmdline flag to turn off authlocal's auto-authenticate if desired

for 2.0.0, i want a global config file.  With a really simple syntax.
The current commandline syntax is irregular and annoying to parse.

allow !timer to have public before _or_ after time argument


When a command that allows multiple arguments (ex. !beep) is given multiple
users for one argument, duplicate usernames should be removed. (ex. to prevent
the annoyance of !beep jeremy jeremy jeremy jeremy jeremy -> 5 beeps)

When receiving a message sent to many, it should say to many:, not to you:

For 2.0: Newly done (20000503) impl. of a message with both hintbits and
	ignoreflags is backwards: it sets hintbit first, and then checks
	ignorebits, but it should check ignorebits first and then only set
	the hintbit if they saw the message. (i.e., wasn't ignored.)

tcp_wrappers support?  or is PAM close enough?

     death: NEW FEATURE REQUEST
    jeremy: k :)
     death: when in %to mode
            %beep sends a beep to the person in question
    jeremy: good idea :)
     FORUM: It's now Fri Jun  9 11:53:48 200

can we fiddle w/ local telnet echo?  would get rid of perceived lag...

smart tab-completion of {} parameters (for set, [un]ignore)

should eat the keyboard esc sequences ~[A etc instead of displaying them

on startup, look for open entries in wtmp, close them, in case
slforum crashed... cmdline option for this?  (We don't crash nearly so
often as to care anymore...)

matted: add banners to standard dist.

log things to syslog (    syslog(LOG_INFO, "user %s logged in", user); )

port to BSD or other unices


- devel ideas:

When compiling with PAM support, shouldn't need -lcrypt
	[actually we still use it for virtusers... hmm.]

yegads, there's a big nest of Send/broadCast/uWrite/etc, both for system
and user messages... any way to clean all that up?

make listenListMatch more efficient (no strdup-and-strstr)? and make sure
	it's only called when necessary.

are there any other .cc files that could be made .c ?  This saved 39%
(19k bytes) in the .o file for slforum.cc->slforumutil.c

need message format standards written out, so bots/gui clients can work
(or, alternately, have a !set wrapcli that puts it in a more parse-friendly
 format...)

API: some getters start with Get and some with get; fix? :)

parsed cmd arg struct should have a "type" field, so you can have optional
arguments of different types (string or integer, for example; this would allow
us to put "public" as either the first or second argument of !alarm).

     from matted: the global size, USERAWAYSIZ should be called
                  something like LINEWIDTH since I am using it for the
                  new stuff I am coding, simply bc it gives the correct
                  line length

api: should have a sendSys method w/ optional typeflags, not just send
	w/ certain params.  Also, we curr. have room::BroadCast and
	room::Announce, this is not proper.  In fact, yegads, there's a big
	nest of Send/broadCast/uWrite/etc, both for system and user messages...
	any way to clean all that up?

make buffer a separate class?  this would keep it simpler to tell if it's
a command being typed, which would make the tab-completion stuff easier

separate a user from their login (buffer, away message, state, etc)
	this would make it easier to tell when two logins are the same user



POTENTIAL GOOD IDEAS
---------------------

idle time based on last public thing _or_ last thing said privately (jon)
       from jon: like right now my idle time for gartog would be whatever my
                 idle time currently is since I have said nothing publicly
                 but if you were to look at idle times, mine would 0 because
                 I am talking to you
                 true lurk
 
change chime from something %ignore'd to a per-user pref that sets the
ignoreflag for you, making c_[un]ignore's help message simpler; we should
probably do something similar with audible beeps.

aliases (short names) for usernames and groups of users;
	alias "public" and "all" for completeness' sake

aliases for commands

hilight in bold requested usernames (mike)

%flag?
      mike: what we need for chat is some sort of flag.
     death: yeah? say more
      mike: like if I were to type %flag AOE 30 min
            it would be like away, only id be there until I typed %unflag
      adep: niftyosity.
      mike: and if anybody wanted to join me, they'd type: %flag mike
            and we'd both say AOE 30 min

multi-line %away?

phoenix to jeremy: feature on capsichat: <> System messages are
                   suppressed for users idle for more than 1hr.
     FORUM: It's now Mon Jul 26 14:36:51 1999

when someone is logged in multiple times, and leaves, perhaps indicate they're
still logged in, and how idle?

have it autocomplete usernames (as in, type them FOR the user)
	have this be turn-off-able

  rjhawkin: damn
            my command char is / thats why I want to have the command char
            ignored after the first 3 or 4 chars, or have that option setable
 


%stayaway <message>
keeps u in away mode even though u continue to talk and stays that way until the
%back command is issued
	-paras




POTENTIAL FEATURES
------------------------------
macro key bindings?
      iman: I wonder if it would be possible to implement key binding to the 
            chat server ???
    jeremy: ehh?
            details
            :-)
   gharial: like bind a key to enter"%to (name)"?
      iman: eg bind ctrl+b %away ill be right back"
    jeremy: ah.  Well....
   gharial: that would be client side, I think
    jeremy: it can be, but...
            windows telnet client is a targeted client
            and it can't do that.
   gharial: easier,anyway
      iman: actually he's right
    jeremy: so:
            for version 2, I'll add that.
      iman: mhhh
    jeremy: Right now I'm finishing up v1.6, and its port to solaris.
   gharial: your could keep a list of commands in a notepad or text window 
            and copy/paste as you neeed
    jeremy: yeah.  There'll be a %bind command soon.
      iman: what about an rc file that executes on startup??
    jeremy: <nod> that too
   gharial: and I think you can use applescript to bind phrases or commands 
    jeremy: that will come in v2.0
   gharial: to a hotkey
   SLFORUM: It's now Sat May 22 16:11:12 1999

more on macros:
     paras: can u make ^1 a function
    jeremy: wich does..
            oh, that
     paras: oct 11th
    keough: hmm 'possibilities' is not a word in ms words dictionary
    jeremy: in what lang?
            wait
     paras: a smiliey ofcourse
    jeremy: raising something to 1st power?
            ah
    keough: eng
    jeremy: smiley.
     paras: yes
            ^1 == smiliey, ^2 == frown, ^3 == tounge smiliey
    jeremy: sounds like macros to me
            slforum v2.0.
     FORUM: It's now Fri Sep 17 13:00:27 1999
     paras: when its only a keystroka away
            instead of having to open notepad, finding it, and copying it...
            i can invision macro wars
    jeremy: heh
            but they can only be 1 line long
     paras: oh
            then its not so bad
    jeremy: <nod>


requested NT port:
	(It's now Mon Jun  5 21:40:29 2000          )

     karp: Ah.  Question:  Could you get this chat program to run on NT?
    jeremy: was on NJ shore.
      karp: That's cool.
    jeremy: _this_ one... well, 2 things that will be done by v2.
            - virtual users
            - NT support
            so..by end of summer, most definitely.
            for now.. it probably would be able to run on NT if someone
      karp: Because we'd be interested in liscensing it from you and offering
    jeremy: bothered to compile it...
      karp: it as a service to our clients.  But it has to run on NT.
    jeremy: *nod*
            using NT usernames/pws?
            or just guest logins?
      karp: Hmm...
            Well, what I was thinking was that we could put on our servers,m
      karp: and throw a telnet link on the pages we design, and companies
      karp: would be able to use it as a discussion forum.
    jeremy: sounds cool...
      karp: Would that work?
    jeremy: well, we could tell it to autoaccept guests, or figure a way to
            let anyone use any username or somethin'
            or, NT login/pw's.
            what sounds reasonable?
      karp: Well, if they wanted to keep it as a private forum, we would have
            to make up un/pw listes...
            Or have it autoaccept guests, and make it a public forum.
    jeremy: either of those sounds doable... :)
      karp: Well, something to think about anyway... If you could get it to
            use NT logins/pw, you could market it and sell it for companies
            to use on their intranets.
    jeremy: <nod> i can take a look at it this weekend
            and get back to ya.
      karp: Thank you.
    jeremy: :)


/tmp/.root/openssl-0.9.5a/crypto/des/fcrypt.c    

    jeremy: heh
            if only we could do !kick *
            ooh, or !kick . for current guest
            (most recently mentioned)
    jeremy: hmm, and then we could have !to .
    FORUM: It's now Sat Nov 13 10:36:43 1999


Subject: idle time

though the idle time should not change when you whisper for everyone, it
should change when you whisper to a particular person.  ie, mark whisper's
to me 2 seconds ago and it says he's been 45 days idle.

paras

 


an interactive arena for settling disputes?
      mike: make %arena
            so we can settle differences
            :)
            and everybody can watch
            :)
  courtney: and throw popcorn!
            And those little reeses thingies!
  rjhawkin: and pnk lemonade
  courtney: LOL.
      mike: set it up so the numpad is the attack or block
      adep: pink lemonade?
  courtney: I'm not sitting in front of you now.
      mike: 7,4,1 blocks
            high, medium, low
            no wait
  rjhawkin: give your children mental blocks for christmas
  courtney: hehe
      mike: no...yeah
      adep: :(
    jeremy: yeah..no?
  rjhawkin: ut no?
      mike: then 8,5,2 are jump stand crouch
            9,6,3 are attack high med low
     death: umm guys I'll be programming a mud
      adep: what ever happened to the classic side-scrollers?
      mike: and depending on your hieght
    jeremy: duke nukem 2!
  rjhawkin:  an 0 is for suicide




    matted: heh - I wonder what my "truespod" time is... the non-idle time
    jeremy: hmmm.
            patch.submit() ?
            for a while i've wnted to write a %who <username> for
            details
            that could be displayed there
    matted: that would be cool.
    jeremy: but we don't calculate it yet :)
            any tips?
    matted: Well, you could put it in with that thing that checks every one
            minute for stuff
    jeremy: k
   demaria: Hey where is that test?
    jeremy: link 105
    matted: if someone is idle < 5 mins, give them another minute of true
            time
    jeremy: k
            cool. :)
            if i get bored at work, it'll go in
     FORUM: The time is now 8:00.
    jeremy: but i still need to fix the bug related to line wrapping
            since we added macros and ctrl chars.
    matted: Cool - oh - and if someone is idle >5 mins - you have to subtract
            5 mins.
    jeremy: good idea... who came up with that?
    matted: oops, idle = 5 mins
     FORUM: It's now Fri Dec 15 08:01:00 2000


8-bit telnet: "toggle options"  rfc856 is telnet binary

telnet option NAWS is for window size.

misc/telnet-options-how-to
