BUGS:
-----
- multiple window problems in general...
  - NO DCC GET FINISHED WITH MULTIPLE WINDOWS?!@#?
  - output goes to wrong windows
  - status_chanop etc doesn't work properly?
  - report from luqin:
    - <luqin> pato [07:49]
    - <luqin> ninja bug report
    - <luqin> (ruumis) luqin: after switching windows several times
      (each window on a
    - <luqin>  different network) it stopped displaying the output
      from /who and /whois 
- log level not set on some output
- slow dcc file transfers
- documentation needs a ton of work
- problem with switching servers while connection is pending (non
  blocking)
- SUPPRESS_SERVER_MOTD variable changes after connecting to server?
- information to be cached shows up on screen when we get kicked off
  the channel
  - if remove channel is called before the channel is synced,
    we must put the channel in some memory to ignore the cached
    information that is still coming in.. and when its all synced up,
    remove that memory
- signoff is now after RAW_IRC on due to laziness...
  - move it back... list of channels they were on passed in..
- channels are not reconnected when you connect from a K: line ?
  - also when ping timeout disconnection..
- getting kicked removes the channel before output is displayed so the
  kick message does not go to the bound window..
  - this is due to the NINCACHE code.. 
  - perhaps there is a better way to handle the RAW_IRC hook..
    - possibly pass a quiet flag to the parse routines that would
      suppress any hooks or output within them..
    - possibly have parse_into_cache_pre and _post for things that
      need to happen before/after RAW_IRC
- sometimes MIRC colors continue on the next line when they should not
  - behavior changes w/underline and bold off.. (mainly underline)
- ansi colors do not span multiple lines...
  - must parse out fg/bg/etc in order to get this to work..
- saving stuff with } in it will stop the line at the }
  - solution: quote stuff on save..
- ninja -d has problems with /set eight off..
- /wind create is completely hosed
  - doesn't work after first use
    - core dump in add_to_screen() on second use..
  - odd problems w/xterm_path != "xterm"
  - Eterm does not work with /wind create
- ninja is unreliable with width < 80
  - input prompt ansi is wrong when CO == 79
- comstud ircd doesn't allow +ov X X
- anti-idle doesn't work on comstud... to reset idle time on comstud:
  - msg a channel that exists and will let you msg it..
  - msg a person that is not yourself
    - FIX: join a random channel at start and msg it when anti-idle is
      on..
      - this will not allow anti idle and lag counter to be combined..
      - make sure to change random channel mode to: +instkl random 1
      - ignore all lines containing the random channel name (in
        parse_server: BEFORE CACHE)
      - BLAH THIS WON'T WORK AS COMSTUD IRCD REQUIRES > 1 USER ON A
        CHANNEL FOR IDLE TIME RESET!
      - HARDCODE A CHANNEL FOR THIS PURPOSE: #ninja-anti-idle
- extended cache problems:
  - stuff shows when on multiple servers..
  - WHO <string> command will return more than just the NICK that
    matches the <string>
    - possibly unset the SYNC_WHO instead of using server.who_nicks
  - net-join can cause a flood off...

- nick tabs order is strange sometimes..
  - someting to do with ^U type stuff messes it up..
    - perhaps make ^U reset the ordering?

- window/channel/server problem
  - /wind create (in screen)
  - /wind server blah
  - /join some channels
  - /wind delete
  - /wind new serv blah
    - somewhere in this process the channel list's next field gets set
      to some whack stuff

- multiple clients ran by the same user on the same host...
  - friends list, etc..
    - must rehash other clients if changing stuff...
  - history...
    - perhaps create a sepereate history file for each PID
      - this doesn't carry over to new processes...
        - perhaps a lock file with pids..
  - away...
    - appends so partially ok.. although you could accidentally delete
      it..
      - perhaps create a .lock file containing the pids with it open..
- default server gets added to the list even if its in the save file
  already...
- DCC RAW blocks on connections (from $listen())
- dcc raw output is not redirected (/redir)..
- endless loop of some kind when scrolling backwards?
  - something to do with extra long lines?  really not sure.. :(
- operview is broked somehow..
  - does weird things to windows..
- typing in escape characters still seems to have some issues
  - particularly when you first type it.. very strange hehe
- saving server usermodes saves strange things like -ckwf etc..
- /recon doesn't behave correctly when using multiple servers...


FEATURE SUGGESTIONS:
--------------------
- perhaps $eftime() for elapsed time in decimal style 5.43hrs etc
- /all command family (op, k, me, bk, fbk, fk, b, mode, unb, dop,
  more?) for multiple server connections
- perhaps asynchronous DNS
- /mdop now deops closest people first
- added formatting for output of lots of stuff
  - possibly a string table..
  - @STUFF@ replace stuff?
    - %X is better...
* move all parsing that results in caching before on raw_irc
  - partially completed..
- smart tab completion... 
  - defaults to tab msg
  - will complete commands if input line is '/' or '/X' but not when
    '/x '
- modularize channel command argument checking
* backport ircII help files and add ninja extension information
  - partially completed..
- re-write/optimize color/text attribute code
  - 8 foreground colors (30-37)
  - bold (or high intensity) (1, 0)
  - underline (4)
  - inverse (switch fg/bg)
  - 8 background colors (40-47)
  - flashing OR bold background (5, 25)
- DCC_OVERWRITE etc options
- NDCC ehancements:
  - target list for places to offer automatically
  - implement auto-offering
  - implement slots
- status extensions
  - dcc speeds
  - # dcc's open
- integrate ninja's /save with ircII's /save
* socks support ehancements
  - non-blocking?
    - done!
  - ask for password if password required?
* re-write enemy list and friends list stuff
  - partially done
  - /rehash command to purge/load friends/enemies/ckeys
  - allow removal of friends/enemies by #
    - possibly for masks and channels too...
    - its a pain in the ass to type out
      *!*dsngjdg@*.akjndsfdg.dfgkjfdkjf.com even to cut and paste
      sucks ;)
      - removing hosts by number is done..
      
- external dcc proccess option

- check into algorithm for adding a channel to the channel list
- attempt to accelerate channel cache stuff
  - indexes for the linked lists
  - possibly use hash tables or something
  - must investigate the traversal speeds for adding channels/nicks..
    - nicks are added according to ther nickname.. [A-Za-z] ordering

- fix up status_users
  - create sub-status's for:
    - # of users, # ops, # opers, # voice
  - allow the status_users var to hold any combination of the above
- cache count data in the channel structure (helps for big channels)
- create /wic for showing all cached data about a person
- some how increase security of auto-op, etc..
  - possibly require encrypted comms
  - possible dcc chat password transmission
  - possibly require password for auto-op
- netsplit/join detection
- move whois stuff (for internal things like notify) into nincache.c
- put the possesive ACTION's back in..
- create a seperate on for /sc instead of using NAMES_LIST
- server groups!!
  - efnet, ircnet, dalnet, undernet for starters!
  - allow creation of new groups
  - modify server stuff to allow group specification

- loading .gz files does not work and no error is printed..

- dcc send is unfortuantely case-insestive now... I think its time
  to switch to glob.
  - it is case sensitive again as of 1.5.5 (glob would still be nice)

- pasting toggle bind...
  - default F3
  - swaps cmdchar to/from !
  - turns off/on tab key binds..
    - script for this is available.
- http/1.1 proxy support...
  - CONNECT irc.foobar.com:6667 HTTP/1.1
- command to clear the tab key list??




FIXED/DONE:
-----------
- ndcc is broked
  - /ndcc offer input stuff doesn't work right (description in
    particular)
- uhh.. some weird mode bugs.. (i think, this is pretty vague)
- perhaps opens dcc file before successfully connecting. 
- how_many() can hang client
- /load doesn't like tildes?
- nickname changes never show up?
- look for calls to ninja_date and ninja_ctime on the same line (they
  use the same static buffer now via ninja_strftime)
- channel mode +k sometimes there for no reason?
- /reconnect doesn't re-cache channel or hide stuff requested upon
  join
- endless loop in ON handling?
  - was only in my script, due to lack of checking for wincols() vs. X
    (as in old ninja) and whether or not we had either..
- optimize things by not looking up cached information multiple times..
  - is_on_channel_by_ptr()
- create some sort of list to keep track of multiple who_hack_nicks
  for hiding our /who on join
- check_friend_join doesn't work because the user is not in the
  channel cache yet... we need to add them with whatever information
  we have before we call this..
- redirect never turns off?
  - dma_strcpy() was returning w/o doing anything if str == null
- /wind chan w/non-channel argument can cause a non-existan channel to
  be added to the channel list
- my_strlen[i,c,ic] etc doesn't handle ansi color as it should...
  - continued w/ansi lines are broken..
  - lines containing ansi colors are cut off prematurely
- mirc colors go too far
  - this was re-introduced by ircII-4.4 MIRC handling..
  - and fixed in ircII-current
- add similar switches to /user as /who (for -name, -nick, etc)
  - trigger ON WHO from /user as in /who
- tab key messes with yank buffer??
  - yank some stuff, hit tab and then past from yanked..
- friend_sync doesn't work until channel is cached
  - this is okay as the channel will almost always be cached before
    you get opped (definitely NAMES will be cached, almost always WHO)
  - it should also check for bans against protected hostmasks
    - it now does this.
- race condition with nick change can cause lag counter to never be
  reset...
  - possibly save last nick and check when we receive no such
    nick/chan to see if its the last nick..
    - if so we must reset server in_ping.. (and optionally call lag
      check again)
  - fixed by reseting/resending lag check stuff when changing nick if
    in ping
- IP mask for friends list is insecure
  - it will match a.b.c.domain.tld
  - possibly make non-alpha containing host masks only match non-alpha
    containing hosts (eg ips)
- re-implement LAG_LIMIT_VAR somewhere other than execute_timer()
- make it so ESCAPE character shows as REV[REV in input line whenever
  it comes after end of the input prompt..
- client tries to reconnect right away when starting up (None of the
  servers are connected...)
- NDCC send requests shows SENDING and REQUEST RECEIVED but in the
  wrong order..
  - take the REQUEST RECEIVED away..
- operview toggling twice causes core dump..
  - apparently only when not connected to a server..
- scrollback is messed up?
  - something is weird... Your host is... then a bunch of missing
    stuff, then some public output
  - does not happen on FEAR but does on WEB1/WEB2
  - was default lastlog level missing "CRAP".. not a problem
- dcc send says its sending something when it couldn't becuz of errno
  reported error..
- loading c0l0r.nirc causes segfault in meta1-9 binding..
- friends list loading was broken.
  - fixed.. was simple fix but i re-wrote some if it to make it a bit
    cleaner.. added comments..
- protection goes a bit overboard with extra +o 's etc
- asking for password sometimes re-connects to the wrong server??
  perhaps only with multiple windows?
  - fixed.. wrong string was bing used..
- MSGS ignore doesn't work?!
  - it works fine.. just not for *!*@*
  - <user>@<host> and <nick> ignorance both work..
- DCC finish message w/o DCC connection?!
  - fixed, non-blocking only problem..
- friends list not stripping cr/lf from incoming lines..
  - stripped 'em and checked for nothing left..
- DCC listing sometimes wraps...
  - fixed.
- scandir() calls do not compile cleanly...
  - make test case for different casting BSD/SYSV
- IPv6 support does not allow SOCKS proxy connections even with IPv4
  servers..
  - make it allow SOCKS if we are using IPv4 server..
- on names from /sc is inaccurate when there are > BIG_BUFFER_SIZE
  total bytes sent to it...
  - break the dynamic string at BIG_BUFFER_SIZE-128 or something
  - increased do_hook buffer size by a factor of 4  :(
- irc.prison.net nickname_in_use() loop..
  - /server some server
  - /nick nickname in use on prison.net
  - /server prison
  - boom in loop..
- weird.. my history and my display/lastlog buffers got mixed
  somehow.. i am lost..
- no protection for people banning your friends?
  - fixed.
- move /grep stuff to a lower level.. perhaps screen output?
  - not for channels bud!
  - that would be ON WINDOW anyway
- nasty bug in strip_ansi() that could cause lockups: "^[)"
  - can't reproduce.. hmm
    - was only when it was called (meaning away logging &&
      strip_log_ansi == on)
