Bugs
----

o  'Y'ank in doesn't toggle show_only_unread_groups setting
   ('y'ank in all groups, 'Y'ank active file, only subscribed groups
    are shown but show_only_unread_groups isn't set to true so the next
    time you like to toggle between subscribed/all groups you have to
    press 'y' several time till it takes effect).

o  referene based filters won't work with long (> 500 chars)
   References: lines

o  help screen should show the actual key mapping, not the default

o  thread_articles=0 lacks score for read arts if show_score=ON and
   kill_level>=1

o  batch mode has several bugs
   - -Z and giving a cmd-line group ends up in a loop
     (filters each group several times)
   - -S/-R seem to be broken again
   [Urs Janssen <urs@tin.org>]

o  --with-ncurses --enable-curses has several display problems:
    - if use_color is set:
      - '^G' (pgp-check article output is garbled)

o  libuu code doesn't start viewer
   include basic library source in tin for uudecoding
   (http://www.informatik.uni-frankfurt.de/~fp/uudeview/)
   [Urs Janssen <urs@tin.org>]

o  '-s' cmd-line switch implicitly changes 'savedir' in tinrc
   [Urs Janssen <urs@tin.org>]
   Is -s supposed to affect all save operations? What about attributes?
   Might get away with simply setting glob_attributes->savedir
   [Jason Faultless <jason@radar.tele2.co.uk>]

o  commas in real-name might cause problems in mail-replys
   -> rewrite To: before mailing to old-style notation user@dom.in (real-name)

o  fix tinrc-update from old (tin1.2pl2) versions (sometime causes crashes)
   [Urs Janssen <urs@tin.org>]

o  fix check_upgrade() (config.c)
   - check if TINRC_VERSION is 'older' (mismatch and not newer) as in the
     config file, give a warning and the possibility to quit without saving
     config file
   - check if TINRC_VERSION is 'newer' (already done) and give a warning
   - use a 'config option' in tinrc for version number instead of
     'hardcoded' strings
   [Urs Janssen <urs@tin.org>]

o  add version number to other config-files (i.e. attributes, filter,
   tin.defaults) and do the same checks as for TINRC_VERSION/tinrc
   [Urs Janssen <urs@tin.org>]

o  sender-patch
   If reverse-lookup for Sender: 'fails' put it in the 'real name' part of the
   Sender:-line nobody@akk.uni-karlsruhe.de (RFC 1413 reverse-lookup not
   verified)
   If user ads Sender:-line rename it to X-Unverifiable-Sender and
   ad a Sender:-line
   [Urs Janssen <urs@tin.org>]

o  'K' is still a bit inconsistent
   - in the group and thread menu it marks current item read & jumps to the
     next unread item.
   - in the article pager (page.c) it marks the whole current thread as read
     and jumps to the next unread article.
     'c'/'C' already does this better.
     ('K' would be useless with the group/thread behaviour as the fact we're
      in the art => it is already read. IMHO we should ditch 'K' in the pager
      and rebind the existing 'k' to 'K'. 'k' is supposed to be a global Up key)

o  'C' in the pager doesn't match the manpage when no unread arts remain
   in the group. In this case it is the manpage which is inconsistent.

o  Changes to int/bool tinrc variables in the Option Menu don't propogate
   back to the attributes, not even groups with global attributes.
   This is because the Option-Menu in {group,page}.c doesn't reread the
   attributes, whereas select.c does. It might be better to fix the problem
   properly in config.c by flashing changes to all affected groups.

o  if no INEWSDIR is given INEWSDIR is set to NEWSLIBDIR which is not always
   true (Linux) ... search $NEWSLIBDIR, /usr/bin/,... in that case.

o  if posting with external inews fails fall-back to built_in_inews would be
   good if running in nntp-mode
   [Done. But the read_news_via_nntp && !read_saved_news is unclear. Why can't
    you post or must use external inews if you read_saved_news?]

o  use_builtin_inews=ON should be renamed to
   inews_prog and hold the (path, ) name and agruments
   of the inews programm to be called. if set to --internal
   (or something like that) tins built in inews is used.

o  remove built in path of external commands (metamail, ispell, ...)
   [for metamail/ispell $METAMAIL/$ISPELL could be used to override
    systempath and progname]

o  overview file cacheing code is over-complex and broken in places
   - if cache-dir is removed during the session it's not recreated

o  full_page_scroll=OFF is not implemented in config.c (option 'M'enu)

Pager Problems
--------------
o  '^H' (backspace) in article is handled as a physical \b in pager,
   shouldn't it be expanded into into "^H" (simple hack in
   expand_ctrl_chars() if so)?

o  word highlighting shouldn't be enabled in signatures, as '*'
   and '_' characters may be used for ASCII art (e.g. '___').
   [Vincent Lefevre <vlefevre@ens-lyon.fr>]
   There is a hack to not collapse spaces in sigs, is more needed ?
   [<jason@radar.tele2.co.uk>]

o  word-highlighting should be rewritten to use regexp, i.e.:
   (?:^|\s)/[^\s/]+/(?:\s|$)      for /slashes/
   (?:^|\s)\*[^\s*]+\*(?:\s|$)    for *stars*
   (?:^|\s)_[^\s_]+_(?:\s|$)      for _underscores_

Posting Problems
----------------
o  what should be done with 8bit chars References/Message-ID:-headers?
   (for Message-ID: refusing the article should be ok, but in
   References? mime-encode it? strip it? send it out raw?)

o  repost ('x') ignores ~/.tin/headers & ~/.tin/attributes - bug or
   feature?!

o  forged cancelling via Supersedes:/Also-Control:/Control:-header is possible
   if it is supplied by hand (builtin_inews)

o  when last articles in a newsgroup were cancelled, it shows that there are
   new articles in that group, even if entered that group in a session before

o  mailers other than sendmail (f.e. elm) and use_mailreader_i=OFF may lead
   to 'duplicated'-headers and multiple signatures

o  with --enable-forgery reposting of an thread reposts only the first
   article ('x' 't' 'r' <group> 'p')

o  when enabling the 'cc/bcc on every message that is sent', and
   then mailing a message to myself, tin will print the message
   "Mailing to ... gary gary".  a nice touch would be if tin
   checks the mail_to line, and doesn't add the user's name
   twice.  yes, sendmail removes the duplicate ... but it'd
   be better if tin caught this case first.

New features
------------
o  key to toggle article-sorting preferences on the fly
   (like 'u' for threading)

o  add mail/news-URLs to 'U'RL-viewer (page.c:process_url())

o  add Content-Description evaluation for the part-overview in the
   pager

o  default_mailer_format should be extended to be able to
   give the interactive mailer the full article including all
   headers (usefull for mutt -H). we could differ between
   %f (just body, headers must be given with %S, %T, ...)
   and %F (headers included in the body, usefull for sendmail -t <
   "%F" etc.pp.)

o  add 'autoview' (spawn external viewer) 'autohide' (don't even show info
   about that part) for different content-types

o  Better integrate saving of MIME/non-MIME articles when not using libuu
   [Jason Faultless <jason@radar.tele2.co.uk>]

o  allow multiple keys/action in keymap file, i.e.:
         PostPost        p y
   [Urs Janssen <urs@tin.org>]

o  check if servers high mark is lower as the one in users newsrc, if so
   issue a warning and allow the luser to reset the highmark in the newsrc
   to the servers 'l'ow or the servers 'h'igh mark or 'i'gnore it.

o  check if the articles Subject/From in the pager matches the one on the
   overview file (if available) - if not issue a warning that the servers
   overviews seem to be broken. trust the headers, not overviews.

o  check if server supports HEADERS, if so use
   HEADERS - Subject From Date Message-ID References Lines Newsgroups
   instead of OVER or XOVER

o  make hide_uu a 3 way toggle for the attributes file (not tinrc).
      0 = don't hide uu-parts
      1 = hide full uu-parts incl. begin/end
      2 = hide uu-lines (might have many false positives)

o  join keep_posted_articles & keep_posted_articles_file into one option
   posted_articles_file=/path/to/file - don't keep arts if
   posted_articles_file is unset
   [Urs Janssen <urs@tin.org>]

o  allow =%G expansion in strfpath()
   [Urs Janssen <urs@tin.org>]
   Is there still a need for this ? '=' is documented to do this
   [jason@radar.tele2.co.uk]

o  add new threading method: thread by reference, but split threads on
   subject change
   [Urs Janssen <urs@tin.org>]

o  detect pcre version and add compatibility macros for old versions
   (interface has changed twice and might do so again)
   (leafnode comes with a (suboptimal) check)
   [Urs Janssen <urs@tin.org>]

o  add 'make unproto'

o  add IPv6 support
   (add protocol independent wrappers which use IPv6 (functions)
    whenever possible).
   there are two small problems with the minimalistic IPv6 support which is
   currently in tin: when getaddrinfo() is used to get the name/ip of the
   newsserver it always uses DNS (gethostbyname()/gethostbyaddr() checked
   /etc/hosts first) and getaddrinfo() seems to have a (huge) delay in some
   cases.

o  add shortcut(s) to repeat last command (i.e. search again)

o  add unicode/UTF-8/UTF-7 support
   (see <http://www.cl.cam.ac.uk/~mgk25/unicode.html> and
    <http://clisp.cons.org/~haible/>)

o  add cmd-line/tinrc-switch to fetch only headers of unread articles;
   in that case, make 'r' reading the rest of the articles
   [-G is a start]
   allow setting a per group limit via attributes

o  Add a trunc() function or something similar for shortening long strings
   like a group name to a fixed length ending in ... (like center_line does)
   for embedding into status messages.
   Maybe somehow merge with sized_message(), then you can use
   message(txt, trunc(group, 20)) etc.
   we now could use snprintf() to do that.

o  check if server supports 'LIST MOTD' (i.e. INN >= 2.0) and display
   it on startup.

o  if using "-n" commandline switch you can't subscribe to newsgroups not
   present in your newsrc - a simple check against the server
   [i.e. GROUP $newsgroup] would help - and if the server understands
    LIST NEWSGROUPS pattern or XGTITLE pattern we could also fetch the
    description without loosing "-n" speed improvements; if the server
    understands LIST ACTIVE pattern we could also get group attribute
    (moderated, etc.)]

o  item_by_item_etiquette_warnings [compile-time?]
   (i.e. enable x-posts without f'up warning, disable long-sig warning)

o  Menu/tinrc/attributes entry for TeX2ISO_Conversion=ON/OFF
   [toggle via '"']

o  Rather than cc/bcc, I'd like to see tin simply append the
   message to a mail folder, whose name is given by a setting
   in the (M)enu command, possibly overridden by the current
   setting of "record" environment variable. The folder would
   have to be locked using a convention that will hold off
   the various Unix mailer programs (see mbox(5)).

o  MIME-pgp support according to RFC2015 - (should be easy now)

o  pgp-6 support

o  add RFC1468/1922 support

o  add counter to post-processing commands (processing file x of y)
   (Is post-processing really that slow? [Jason Faultless
   <jason@radar.tele2.co.uk>] no but if you post-process more than a
   handfull of files it would be usefull [Urs Janssen <urs@tin.org>])

o  add feature Cc:

o  add feature show_new_newsgroups_since

o  Additions to the thread menu :
     'M' (option menu)
     'D' (cancel article)
     'E' (edit filter)
     'r' (reply to) /* not 'R' cause it conflicts with mail_bugreport */
     ''  r ought to be toggle show all/show only unread
     'f' (post a followup)
     keys to goto previous/next thread

o  Add to the 'M'enu:
     DEFAULT_MAILER

o  Add to the POST_INFO-level:
     '?','/' search
     'h' help-screen

o  Add a commandline switch that prints out all values of cpp-symbols etc.

o  Reorganize tinrc into related sections for easier editing
   e.g., Display, Posting etc.

o  A system-wide tinrc configuration file, the $HOME/.tin/tinrc need only
   store the differences from this.
   A key code to reset to the system defaults
   Maybe a file which could be used to force settings (eg inews & mailer)
   (tin.defaults [--with-defaults-dir] is a start)

o  - think about removing global attributes files (TIN_LIBDIR/attributes)
   - move global files (TIN_LIBDIR/tinrc, TIN_LIBDIR/attributes) to
     TIN_DEFAULTS_DIR

o  attributes (still) needs some work, some entrys aren't really usefull
   on a per group basis (i.e. printer) but others would (i.e. Reply-To)
   once we have a 'attributes-menu' we could remove most of the
   global 'attributes' set in tinrc and move them to a scope=*
   in attibutes (i.e. From)
   [Urs Janssen <urs@tin.org>]

o  (g)oto group is case sensitive
   also newsgroup names in the command-line are case sensitive
   better would be: check if they exist and if not ask if you would like to
   convert newsgroup name to lowercase
	[son_of_1036]
	NOTE: Possibly newsgroup names  should  have  been
	case-insensitive, but all existing software treats
	them as case-sensitive.   (RFC  977  [rrr]  claims
	that they are case-insensitive in NNTP, but exist-
	ing implementations are believed to ignore  this.)
	The simplest solution is just to ban use of upper-
	case letters, since no widespread  newsgroup  name
	uses  them  anyway; this avoids any possibility of
	confusion.

o  when From: only contains "First-name Last-name" tin strips the space
   misc.c:parse_from() ??

o  Bounce duplicate Message-ID's when the headers are read. This will
   make the threading code happier too.
   Make iReadNovFile more forgiving of errors. If the article # is okay,
   then there is no reason to completely hide the article
   [Jason Faultless <jason@radar.tele2.co.uk>]

o  Merge the selection code with the range code. Having two similar methods
   of picking articles with similar goals is wasteful.
   [Jason Faultless <jason@radar.tele2.co.uk>]

o  add check for zlib and option to write/read gziped local overviews
   zlib might also be be used for post-processing.

Posting enhancements
----------------------
o  sort Followup-To:/Newsgroups: after stripping doubled newsgroups and
   before checking if they are identical, if so, strip Followup-To: and
   use unsorted but stripped Newsgroups:-line only
   ulBuildArgv() would be good for this

o  if Newsgroups:-line has groups in it which are not present in the users
   active file ask the user if he wants to strip these groups from the
   newsgroups-line (N/y)
   do the same for Followup-to:

o  bring up a warning on a long Newsgroups: (>=5) line and
   force the user to confirm every single group he wants to post (or
   redirect followups to) in. (N/y)
   rewrite NGLIMIT handling (post.c) ulBuildArgv() would replace a lot of
   the current code
   (not just truncate Newsgroups:-line after the NGLIMITth newsgroup -
    or if we do so - give an extra warning to the user and give the the
    chance to reedit the Newsgroups:-line)

o  bring up a warning when trying to f'up into a binary group
   (use a regexp to detect binary groups i.e.:
   (\.binae?r|de\.alt\.dateien\.))
   (Warning, sending a followup to a binary group is undesired, post it
   anyway? N/y)
   [Urs Janssen <urs@tin.org>]

o  posting to a binary group should warn if no followup is set to another
   group/poster (you have not set a target for a possible discussion on your
   post, would you like to go on anyway? N/y)
   [Urs Janssen <urs@tin.org>]

o  when posting to a group containing uppercase-letters: bring up a
   warning: "Newsgroup-names should be all lowercase, correct it? (Y/n)"

o  Enhance -w to take newsgroup name as argument and use vGrpGetArtInfo()
   to allow posting to groups other than those in newsrc.

Filtering enhancements
----------------------
o  add Message-ID param to quick_filter_select_posted_art() and
   update_posted_info_file() so we could log the Message-ID in the
   filter and posting history file if we know it (see inews.c:submit_inews(),
   and post.c).
   [Urs Janssen <urs@tin.org>]

o  add used filter-type to filter-file or filter-rule or use different
   filter files for wildmat/regexp

o  add command: mark all articles older/newer than <date> as read
   (useful when subscribing to a new group with high-traffic...)

o  fix kill/hot mechanism so that it is possible to match articles on
   arbitrary headers

o  don't strip "Re: " out of the subject before applying the filter on it

o  cleanup xref-filter (xref_score is no longer needed with score).

o  allow any given amount of days in default_filter_days not only
   {1, 2, 4} * 28 days

o  allow expiring filter entrys n-days after the last time they matched

Internal Changes
----------------
o  join some keys, i.e PostponeYes, PostponeNo -> PromptYes, PromptNo;
   GroupPost, PagePost, SelectPost -> Post
   [Urs Janssen <urs@tin.org>]

o  what type is base[] ?
   There is a lot of confusion internally over how it is used
   compare setup_hard_base() with find_base() etc..
   [Jason Faultless <jason@radar.tele2.co.uk>]

o  see if strip_line() can be universally replaced with str_trim()

o  check where PRODUCT should be used instead of tin_progname and/or "tin"
   [Urs Janssen <urs@tin.org>]

o  kick Hungarian notation
   [Urs Janssen <urs@tin.org>]

o  use XGTITLE (if available) if -n cmd-line flag is present
   (see open.c)
   [Urs Janssen <urs@tin.org>]

o  close potential security holes:
   - change all system()/popen() calls to fork() and exec() calls
   - check where we should use snprintf() instead of sprintf()
   - check where we should use vsnprintf() instead of vsprintf()
   - check where we should use strncat() instead of strcat()
   - check where we should use strncpy() instead of strcpy()
   - check possible races with chmod()/access()/link()/rename()/stat()/
                               unlink()/chdir()/fopen()/fstat()/open()/
                               opendir()/t_open()/tmpfile()
   - check getenv() results before using it
   [Urs Janssen <urs@tin.org> - its4 <http://www.rstcorp.com/its4> can
    locate potential security holes]

o  compile-time option: generate own MSGIDs on host with a proper FQDN
   (EVIL_INSIDE)
   add a _-_ to the local part of the MSGID on a subject-change; keep
   MSGIDs of own articles in ~/.tin/posted to be able to detect f'ups to
   own postings

o  add to autoconf:
   - determine which network libraries are needed
   - eradicate platform/compiler ifdefs

o  clean up architecture independent files, rename several defines,
   remove useless doubled defines

o  split tin.h/proto.h for better dependencies in make

o  check where int/long/... should be replaced by size_t, uid_t, mode_t,
   off_t, ...
   [Urs Janssen <urs@tin.org>]

o  add check for sizeof char, short, int, long, ...
   make sure that the code works even with 'uncommon' values
   (i.e. char = 1 byte with 32 bit)

o  join Makefile and makefile (not entirely possible)
   update makefile[.in]

o  cleanup (=rewrite) inews.c/header.c/thread.c

o  cleanup main.c/init_selfinfo()
   ('strace -e trace=file tin' and you know what I mean)

o  is art->inthread really needed, surely art->thread contains enough
   information
   [Jason Faultless <jason@radar.tele2.co.uk>]

o  check where tin_done() or giveup() should be called instead of using
   exit()

o  check where STRCPY() should be used

o  check code with lclint (http://www.sds.lcs.mit.edu/lclint/),
   ccmalloc (http://iseran.ira.uka.de/~armin/ccmalloc/) and MSS
   (http://hem1.passagen.se/blizzar/mss/)

o  rewrite the tag code so that arts[].tagged becomes index in arts[]
   of next tagged article. num_of_tagged_arts becomes index of first
   tagged art. Traversing tagged arts becomes much easier & faster.
   [Jason Faultless <jason@radar.tele2.co.uk>]

o  do real overview.fmt parsing - not only looking for Xref:full
   [Urs Janssen <urs@tin.org>]

o  strip Xref:-header if saving news in batch mode (-S)?
   [Urs Janssen <urs@tin.org>]

o  When reading local spool, assign the filehandle of the on-spool
   article directly to artinfo->raw. There is no need to take a local
   copy.
   [Jason Faultless <jason@radar.tele2.co.uk>]

o  what is with NEW_HASH_METHOD in list.c?

Docs/online help
----------------
o  document keymap feature

o  man page always needs work
   'U', 'V' in pager need documenting

o  error message when tin -uv and using xover is misleading

o  tin.defaults could use more documentation on manpage

Not yet classified
------------------
o  should the postponed file be in MH-format if tin is running in MH-mode?
   if so we need to extend fetch_postponed_article()

o  reusing postponed articles trash '\n' betwwen postponed arts

o  check if fetch_postponed_article is MH seperator "safe"

o  --disable-inverse-video seems to be ignored - do we still need it?

o  tin in batchmode dumps core if getting a SIGINT, useful?

o  what is with conflicting tinrc settings? should we disallow those, or leave
   it to the user to realise that i.e. strip_blanks=ON && inverse_okay=ON
   looks ugly?

o  what is with DEBUG_NEWSRC_FIXME (not DEBUG_NEWSRC) in newsrc.c?

o  shows up cross-postings multiple times even if read once before getting
   a resync/reread active/newsrc-file

o  numbering of Hot articles is wrong after (post)processing them
   (6T 0A 0K -5H R)

o  think about group numbering in "only unread" display mode
   (using different numbers in show all/show only unread leads to some
    problems, f.e. group moving)
